Create an advanced request
Use the advanced endpoint when the request definition is easier to express as structured JSON.
POST https://api.stormedo.com/requestsContent-Type: application/jsonHeaders
Section titled “Headers”| Header | Required | Description |
|---|---|---|
Authorization: Bearer <token> |
Yes | Project API key. It is never sent to the destination. |
Idempotency-Key |
No | Stable project-scoped key containing 1 to 255 bytes. Retained for 24 hours. |
JSON body
Section titled “JSON body”| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url |
string | Yes | None | Public HTTPS destination, up to 2048 bytes. |
method |
string | No | POST |
GET, POST, PUT, PATCH, or DELETE. |
headers |
object | No | {} |
Destination headers sent directly without an X-Forward- prefix. |
body |
any JSON value | No | No body | Serialized as JSON and delivered with Content-Type: application/json. |
delay |
string | No | Immediate | Relative delay from 1s through 30d. Use an integer followed by s, m, h, or d. |
deliver_at |
RFC 3339 string | No | Immediate | Absolute time within 30 days of the current time. Cannot be combined with delay. |
timeout |
string | No | 50s |
Per-attempt timeout from 1s through 5m, using whole seconds or minutes. |
retry.max_attempts |
integer | No | 3 |
Total attempts including the first, from 1 through 20. |
retry.backoff |
string | No | exponential |
Currently only exponential is accepted. |
queue |
string | No | default |
Queue label containing 1 to 64 allowed characters. |
metadata |
object | No | {} |
String values stored for inspection and never forwarded. |
Unknown fields are rejected.
A valid deliver_at timestamp that is already in the past starts delivery immediately.
Example
Section titled “Example”curl --request POST \ 'https://api.stormedo.com/requests' \ --header "Authorization: Bearer $STORMEDO_TOKEN" \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: order-123-created' \ --data '{ "url": "https://your-app.example/webhooks/orders", "method": "POST", "headers": { "Authorization": "Bearer destination-token" }, "body": { "type": "order.created", "order_id": "ord_123" }, "retry": { "max_attempts": 4, "backoff": "exponential" }, "timeout": "45s", "metadata": { "order_id": "ord_123" } }'Limits
Section titled “Limits”- The serialized destination body may contain up to 256 KiB.
- The complete structured API request may contain up to 512 KiB.
- Destination headers are limited to 64 entries and 32 KiB combined.
- Metadata is limited to 32 entries, 64-byte keys, 1024-byte values, and 16 KiB combined.
- Metadata keys and queue names accept letters, numbers, dots, hyphens, and underscores.
Destination header values are stored securely and returned as [REDACTED] by read APIs. Request bodies are never returned by the API.
Response
Section titled “Response”The endpoint returns the same 202 Accepted object as quick send. retry.max_attempts counts total attempts, unlike the quick-send retry query parameter, which counts additional retries.
Errors
Section titled “Errors”| Status | When it occurs |
|---|---|
401 |
The project API key is missing or invalid. |
409 |
The idempotency key was reused with different input. |
413 |
The complete structured API request exceeds 512 KiB. |
422 |
A field, destination header, timing value, body, or metadata entry is invalid. |
429 |
The workspace monthly request allowance has been reached. |
502 or 503 |
Stormedo could not durably accept the request. |