Skip to content

Create an advanced request

Use the advanced endpoint when the request definition is easier to express as structured JSON.

HTTP
POST https://api.stormedo.com/requests
Content-Type: application/json
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.
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.

Bash
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"
}
}'
  • 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 returned as [REDACTED] by read APIs. Request history omits delivery bodies. Schedule detail is different: it returns the configured JSON body. See the destination request contract for reserved headers and URL restrictions.

Omitting body sends no body. Explicit body: null sends the JSON bytes null. Queue names are labels; they do not provide FIFO ordering, rate limits, or a concurrency limit.

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.

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.
500, 502, or 503 Acceptance may be unknown. Retry the same input with the original idempotency key; see submission recovery.