Overview
The sandbox lets you exercise your integration without running real asset processing or consuming processing credits. It is not a separate host or base URL. You select the sandbox by using a sandbox API key: the same base URL and the same paths behave as a sandbox when the request is authenticated with ansk_test_ key.
Sandbox keys unlock two capabilities:
- A
simulationDelaySecondsquery parameter on submission creation, to control timing. - A
POST /api/integrations/sandbox/events/fireendpoint, to dispatch synthetic webhook events to your subscriptions without real processing.
Using a sandbox key
Use yoursk_test_ key against the normal base URL and the normal endpoints.
sk_live_) key calls the same endpoints but cannot use the sandbox-only features described below.
Simulating processing time
Add thesimulationDelaySeconds query parameter to a submission-create request to delay when the submission reaches a terminal state. This is useful for exercising your polling and webhook-handling logic.
- The parameter is camelCase:
simulationDelaySeconds. - Accepted range is 0 to 30 seconds. Default is 0.
- It works only with a sandbox key. Sending it on a live key returns a 400.
Firing synthetic webhook events
To test your webhook handler end to end, fire a synthetic event for an existing submission’s assets. The endpoint dispatches the event to every matching subscription in your workspace, exactly as a real processing event would, but without running any processing.POST /api/integrations/sandbox/events/fire
Request body (camelCase):| Field | Required | Notes |
|---|---|---|
eventType | Yes | One of asset.processing.completed or asset.processing.failed |
submissionId | Yes | A submission that exists in your workspace |
errorMessage | No | Optional message, used with asset.processing.failed |
dispatched is the number of subscriptions notified across all of the submission’s assets.
This endpoint is sandbox-only. Behaviour by condition:
| Condition | Result |
|---|---|
| Sandbox key, submission in workspace | 200 with dispatched count |
| Live key | 403 |
submissionId not found in your workspace | 404 |
| Malformed request body | 422 |
Testing the failure path
To verify your handler reacts correctly to failures, subscribe a webhook, create a submission, then fire anasset.processing.failed event and confirm your endpoint received it. This replaces any approach that inspects mocked inline results — the sandbox does not return mocked processing output.
type of asset.processing.failed, with a snake_case data object containing asset_id, submission_id, workspace_id, status of "failed", and error_message.
Key differences from production
| Aspect | Sandbox (sk_test_ key) | Production (sk_live_ key) |
|---|---|---|
| Selection | API key prefix sk_test_ | API key prefix sk_live_ |
| Base URL and paths | Same as production | Same as sandbox |
| Processing | None when using the fire endpoint; no real credits consumed | Real processing |
| Webhook events | Can be fired synthetically via /sandbox/events/fire | Emitted by real processing |
| Timing control | simulationDelaySeconds (0–30) on submission create | Not available |
Best practices
Troubleshooting
Webhook not delivered
- Ensure your endpoint is publicly reachable and returns 200
- Confirm the subscription’s
eventTypesincludes the event you fired - Check that
dispatchedwas at least 1 in the fire response - Review delivery history via the subscription’s deliveries endpoint
simulationDelaySeconds rejected
- The parameter is camelCase:
simulationDelaySeconds - The value must be between 0 and 30
- A 400 means it was sent on a live key — use a sandbox (
sk_test_) key
Fire endpoint returns 403 or 404
- 403 means you used a live key; sandbox events require a
sk_test_key - 404 means the
submissionIddoes not exist in your workspace
Ready for production?
Switch to your live (sk_live_) key against the same endpoints. Create or manage keys in the control plane, or contact support at https://support.mediamagic.app.