SendPromptly instruments the gap between payment delivery and app-side fulfillment. Your application signals when it accepted a payment-backed business event, then signals whether the business effect succeeded or failed. SendPromptly opens an incident when the outcome is missing or failed.
Base URL
| |
Core endpoints
| |
Required headers
Authorization: Bearer sk_{project_key}Idempotency-Key: <unique-key>Content-Type: application/jsonAccept: application/json
Use a project API key created in the dashboard. Keep separate keys for separate deployments or operating modes.
Receipt contract
| Field | Type | Required | Notes |
|---|---|---|---|
provider | string | Yes | stripe or shopify. |
stripe_event_id | string | Stripe only | The Stripe event identifier, e.g. evt_.... |
provider_event_id | string | Shopify / preferred | Canonical event ID. Preferred for all new integrations. |
event_type | string | Yes | e.g. checkout.session.completed, invoice.paid, orders/paid. |
effect_type | string | Yes | e.g. access_unlock, credit_grant. |
internal_reference | string | Yes | Your user, account, workspace, or order reference. |
occurred_at | datetime | Yes | ISO 8601 timestamp for the source event. |
shopify_shop_domain | string | Shopify only | e.g. mystore.myshopify.com. |
timeout_minutes | integer | No | Override the default missing-result timeout for this event. |
Result contract
| Field | Type | Required | Notes |
|---|---|---|---|
stripe_event_id | string | One identifier required | Match the original receipt event. |
provider_event_id | string | One identifier required | Preferred canonical identifier. |
event_id | string | One identifier required | Internal event ID returned by SendPromptly. |
status | string | Yes | success or failed. |
error_code | string | No | Short machine-readable failure label. |
error_message | string | No | Human-readable failure detail. |
replay_id | string | No | Include when reporting a reprocess attempt. |
Idempotency and retries
SendPromptly requires an Idempotency-Key on both endpoints. Use a deterministic key for each business action so network retries remain safe and do not create duplicate incidents or result attempts.
SendPromptly deduplicates on (project_id, provider, provider_event_id) — duplicate payment webhooks never create duplicate incidents.
Monitoring lifecycle
- Your webhook handler verifies the incoming signature.
- Your app durably accepts the work and calls
POST /api/v1/receipt. - Your app applies the business effect and then calls
POST /api/v1/result. - If
resultfails or never arrives before the timeout, SendPromptly opens an incident. - An operator can trigger Reprocess, which sends a signed callback to your repair endpoint.
Quick request examples
Stripe:
| |
Shopify:
| |