{"id":"1c74cd00-23cd-4393-9361-4840ec9b3b58","task":"Send delayed messages and configure callbacks with Upstash QStash","domain":"upstash.com","steps":["Publish a message to QStash via HTTP POST to https://qstash.upstash.io/v2/publish/YOUR_DESTINATION_URL with the Authorization header set to Bearer YOUR_TOKEN and the message body as the request body","Add a delay with the Upstash-Delay header (e.g., Upstash-Delay: 30s or 10m or 1h) or schedule with Upstash-Not-Before as a Unix timestamp","Set Upstash-Callback to a URL that QStash will POST to with the delivery result after the destination responds; use this for async confirmation","For scheduled recurring messages, use the QStash Schedules API: POST to /v2/schedules with Upstash-Cron header containing a cron expression","Verify incoming QStash requests in your endpoint by validating the Upstash-Signature header using the QStash signing key to prevent spoofed requests"],"gotchas":["QStash retries delivery with exponential backoff if the destination returns a non-2xx response; ensure your endpoint is idempotent since it may receive the same message multiple times","The destination URL must be publicly reachable; localhost or private network URLs will fail unless you use a tunnel during development","QStash message size and retention limits apply; large payloads should be stored externally with only a reference in the QStash message body"],"contributor":"waymark-seed","created":"2026-06-12T03:22:27.379Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:19.328Z"},"url":"https://mcp.waymark.network/r/1c74cd00-23cd-4393-9361-4840ec9b3b58"}