Send a request
Use the quick send endpoint when the body should be forwarded without transformation and the request needs only query-string delivery controls.
POST https://api.stormedo.com/sendHeaders
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Authorization: Bearer <token> |
Yes | Project API key used to authenticate with Stormedo. It is never forwarded. |
Content-Type |
No | Forwarded unchanged to the destination. Maximum 255 bytes. |
Idempotency-Key |
No | Stable project-scoped key containing 1 to 255 bytes. Retained for 24 hours. |
X-Forward-<name> |
No | Sends <name> to the destination. For example, X-Forward-Authorization becomes Authorization. |
Stormedo accepts up to 64 destination headers with at most 32 KiB of combined names and values. The reserved destination headers cannot be supplied.
Query parameters
Section titled “Query parameters”| Parameter | Required | Default | Description |
|---|---|---|---|
url |
Yes | None | Public HTTPS destination, up to 2048 bytes. Credentials and fragments are not allowed. |
method |
No | POST |
Destination method: GET, POST, PUT, PATCH, or DELETE. |
retry |
No | 0 |
Additional retries after the first attempt, from 0 through 19. |
delay |
No | Immediate | Relative delay from 1s through 30d. Use an integer followed by s, m, h, or d. |
deliver_at |
No | Immediate | RFC 3339 delivery time within 30 days of the current time. Cannot be combined with delay. |
timeout |
No | 50s |
Per-attempt timeout from 1s through 5m. Whole seconds and minutes are accepted. |
queue |
No | default |
Queue label containing 1 to 64 letters, numbers, dots, hyphens, or underscores. |
retry=3 allows four total attempts: the first attempt and up to three retries.
A deliver_at timestamp up to 30 days in the past starts delivery immediately. Encode the entire destination URL when it contains a query string, so its & and + characters are not interpreted as Stormedo query parameters. For example, https://example.com/hook?a=1&b=2 becomes url=https%3A%2F%2Fexample.com%2Fhook%3Fa%3D1%26b%3D2.
Request body
Section titled “Request body”The complete incoming body is forwarded as exact bytes and may contain up to 256 KiB. Stormedo does not parse or re-serialize it. To submit a file without curl stripping line breaks, use --data-binary @payload.json instead of --data @payload.json:
curl --request POST \ 'https://api.stormedo.com/send?url=https://api.stormedo.com/ping&retry=3' \ --header "Authorization: Bearer $STORMEDO_TOKEN" \ --header 'Idempotency-Key: file-payload-001' \ --header 'Content-Type: application/json' \ --data-binary @payload.jsonCreate payload.json first. Keep the file bytes unchanged when retrying with this key. Queue names are labels and provide no FIFO, pause, rate, or concurrency controls.
Example
Section titled “Example”curl --request POST \ 'https://api.stormedo.com/send?url=https://your-app.example/webhooks/orders&retry=3&timeout=45s' \ --header "Authorization: Bearer $STORMEDO_TOKEN" \ --header 'Content-Type: application/json' \ --header 'X-Forward-Authorization: Bearer destination-token' \ --data '{"type":"order.created","order_id":"ord_123"}'The destination receives the JSON body, Content-Type, and destination Authorization header. It does not receive the Stormedo project API key.
Response
Section titled “Response”Stormedo returns 202 Accepted after durable handoff:
{ "success": true, "data": { "id": "req_33uZSQsVaf8aZjDuzkuAq", "project_id": "prj_2Z5mQe7cB9kP4sV8xH1nD", "replayed_from_request_id": null, "status": "queued", "scheduled_at": null, "created_at": "2026-08-28T10:15:30Z" }, "error": null, "meta": null, "request_id": "95c07a5c-3d44-4b89-84a6-c5a71313bff2"}Delayed requests initially use status: "scheduled" and include an absolute scheduled_at value. A 202 response confirms acceptance, not destination completion.
Errors
Section titled “Errors”| Status | When it occurs |
|---|---|
401 |
The project API key is missing or invalid. |
409 |
The idempotency key was already used with different request input. |
413 |
The HTTP body exceeds 256 KiB. |
422 |
The destination, method, timing, timeout, headers, queue, or key is invalid. |
429 |
The workspace monthly request allowance has been reached. |
500, 502, or 503 |
Acceptance may be unknown. Retry the same input with the original idempotency key; see submission recovery. |
Continue with Read requests to retrieve request state and completed attempts.