{"service":"Edgecase Wait","version":"0.1.0","capability":"wait_for_event","description":"Durable waiting for autonomous agents: defer work that cannot proceed yet and resume it later without keeping the agent running. Use Wait when an external service can send a webhook, but you need a temporary durable receiver that captures one event, retries callback delivery, and preserves recovery state without building that infrastructure yourself. Your callback handler or workflow resumes the work; Wait does not restart an agent process. One wait costs $0.01 for 60 seconds through 24 hours.","buyer_guide":{"incremental_value":"An existing callback is the destination. Wait adds a temporary per-job receiver, durable first-event acceptance, bounded callback retries, and retained event/status recovery in front of it.","good_fit":"The producer can POST JSON, you have a public HTTPS callback handler that can resume work, and you want durable capture, retries, and recovery without building them.","skip_when":"Your existing webhook infrastructure already provides equivalent durable event storage, delivery retries, and recovery. Wait is also unsuitable when the producer cannot push an event or you have no callback handler.","prerequisites":["An event producer that can POST one JSON value before your chosen expiry; choose a wait lifetime from 60 seconds to 24 hours.","Your own public HTTPS callback on port 443, able to authenticate and deduplicate delivery and resume your workflow.","An x402-capable wallet with spending authorization for the live payment requirements."],"you_receive":"For $0.01: one temporary event_url, a secret status_url for recovery/cancellation, and a callback_token. The first accepted JSON event (up to 65,536 bytes) is durably recorded and delivery is attempted up to five times. Delivery is bounded at-least-once, not guaranteed.","quick_start":["Replace the example callback_url with your own handler. POST the example JSON to /v1/waits with Content-Type: application/json and no PAYMENT-SIGNATURE to obtain current HTTP 402 terms.","After authorizing those terms, send the same body with PAYMENT-SIGNATURE and a fresh UUIDv4 Idempotency-Key. Save the complete HTTP 201 response securely. Never blindly retry an ambiguous signed request.","Give event_url only to the intended producer. It POSTs the event as JSON before expires_at. Your waiting agent process can stop.","Your callback verifies Edgecase-Wait-Token against callback_token, deduplicates by wait_id, and returns HTTP 2xx within 10 seconds. Its handler or workflow resumes the work.","If delivery fails, use the secret status_url to inspect state and recover the accepted event while retained. Event content is retained for 72 hours after resolved terminal state; status for 30 days. A timeout without an event is not a scheduled wake-up callback."],"request_example":{"callback_url":"https://your-agent.example.com/wait-callback","timeout_seconds":600,"client_reference":"job-123"},"example_note":"Replace the placeholder callback with your own reachable handler. This example creates no wait until an authorized paid request succeeds."},"pricing":{"catalog_version":"2026-09-01.1","pricing_basis":"per_wait","event_driven":true,"polling_frequency":null,"offers":[{"offer_id":"event-24h-v1","capability":"wait_for_event","price_usd":"0.01","min_timeout_seconds":60,"max_timeout_seconds":86400,"event_limit":1,"polling_interval_seconds":null}]},"openapi_path":"/openapi.json","sales_status":"open","callback_delivery_status":"enabled","availability_guidance":"sales_status and callback_delivery_status are current snapshots, omitted when unavailable. Open sales do not guarantee purchase availability; use unsigned POST /v1/waits for current requirements.","semantics":{"event_driven":true,"polling":false,"one_logical_event_per_wait":true,"callback_delivery":"bounded_at_least_once","callback_deduplication_key":"wait_id"},"use_when":"Use when work is blocked on a job result, approval decision, or another external event that a producer can POST as JSON. Your callback handler resumes your agent or workflow; Wait does not run the agent or check another service for changes.","limits":{"timeout_seconds":{"minimum":60,"maximum":86400},"event_bytes":65536,"callback_attempts":5},"purchase":{"unsigned_request":"When new sales are enabled, POST /v1/waits without PAYMENT-SIGNATURE returns stateless HTTP 402 requirements. When sales are disabled, it returns a non-retryable HTTP 503 without payment requirements.","paid_retry_headers":["PAYMENT-SIGNATURE","Idempotency-Key (UUIDv4)"],"save_response":"Persist the complete successful HTTP 201 creation response immediately. event_url, status_url, and callback_token are bearer credentials; keep them secret and out of logs.","exact_replay":"For recovery within the supported retention window, retain the original request body, Idempotency-Key, and PAYMENT-SIGNATURE securely. Exact replay to the same create endpoint requires the same logical request body, the same Idempotency-Key, and the original PAYMENT-SIGNATURE. The Idempotency-Key alone is not sufficient to recover capabilities. A retained accepted or ambiguity-honored entitlement is reconstructed without another settlement; do not create a new payment authorization or blindly resend after an ambiguous result.","payment_disposition":{"rejected":"No wait is created.","accepted":"One wait is created and PAYMENT-RESPONSE reports success.","ambiguous":"For the one-cent v0.1 offer, a post-boundary irrecoverable ambiguity receives one wait without another settlement attempt; payment remains ambiguous and PAYMENT-RESPONSE is omitted.","fuse":"Three cumulative ambiguity-honored purchases close new sales by default; active/day limits bound already-admitted exposure."}},"event_delivery":{"method":"POST","url":"event_url returned by wait creation","content_type":"application/json","first_event_wins":true,"same_event_retry":"Re-submit semantically identical JSON to reconcile the same wait; different JSON conflicts."},"recovery_retention":{"event_content_hours_after_resolved_terminal_state":72,"status_days_after_resolved_terminal_state":30,"creation_replay_days_from_original_request":30,"guidance":"Resolved terminal states are delivered, delivery_failed, expired, and cancelled. Event content is retained for 72 hours after that state; status metadata for 30 days after that state. Exact creation replay is retained for 30 days from the original request reservation, not from each replay. Replay does not restore purged event content or reopen a terminal wait. Cleanup is asynchronous; do not rely on availability beyond these windows. Unresolved obligations requiring service attention are preserved for operator resolution."},"status_recovery":{"method":"GET","url":"status_url returned by wait creation","bearer_secret":true},"cancellation":{"method":"POST","url":"status_url plus /cancel","allowed_while":"waiting","replay":"A successfully cancelled wait remains cancelled; later cancellation cannot override an accepted event or another terminal state."},"callback":{"method":"POST","content_type":"application/json","body_schema":"/openapi.json#/components/schemas/CallbackPayload","body_fields":["wait_id","client_reference","event_received_at","event"],"acknowledgment":"Return any HTTP 200-299 response within 10 seconds to acknowledge delivery; no response body is required or inspected. Authenticate Edgecase-Wait-Token and deduplicate by wait_id before processing. Network errors, timeouts, and HTTP 408, 425, 429, 500, 502, 503, 504 may be retried, up to five total attempts. Other HTTP statuses, including redirects, are terminal failures; redirects are not followed.","authentication":{"token_header":"Edgecase-Wait-Token","token_value":"callback_token returned by wait creation","wait_id_headers":["Edgecase-Wait-Id","Idempotency-Key"]},"host_policy":{"model":"public_https_dns_hosts","arbitrary_public_hosts":true,"pre_registration_required":false,"https_port":443,"rejected":["IP literals","localhost","single-label hosts",".localhost",".local",".internal",".lan",".home",".invalid",".test","credentials","fragments"],"redirects_followed":false,"network_boundary":"Cloudflare global fetch public outbound HTTP boundary with global_fetch_strictly_public","delivery_semantics":"bounded_at_least_once"}},"service_attention":{"status":"service_attention_required","contact":{"email":"edgecasesystems@gmail.com"},"action":"Keep the status URL, stop blind payment/event/callback retries, and contact edgecasesystems@gmail.com with the wait_id and a brief problem description. Never send capability URLs, callback tokens, payment signatures, or event content in a support request."},"retry_guidance":{"rule":"Retry only when an error response sets retryable=true; preserve the same logical request and obey retry_after_seconds or Retry-After.","signed_payment_exception":"Never automatically resend a payment-bearing request after an ambiguous response."},"discovery":{"known_origin":"GET / and GET /openapi.json are sufficient to use the service.","global_listing":true,"directory":{"name":"CDP Bazaar","search_url":"https://api.cdp.coinbase.com/platform/v2/x402/discovery/search?query=Edgecase%20Wait&limit=20","resource":"https://wait.edgecasesystems.workers.dev/v1/waits","last_verified_at":"2026-09-05T23:50:33.012Z","verification":"Exact resource URL observed in public directory search. This is a dated observation; directory availability and indexing may change. Use the live unsigned 402 challenge for current payment terms."},"api_catalog":"/.well-known/api-catalog"}}