Public Test Sandbox
Run a real Protocol v1.0 Offer Query immediately. Registration, application review, and an application-owned key are not prerequisites. The sandbox uses one shared canonical pair, returns fixed test data, and never activates or creates an Application identity.
Shared and non-billable
Everyone uses this one zero-wait public pair. Sandbox activity is shared test data: it is not attributed to your application and cannot appear as your live business data.
Shared key and placement
This is one fixed public pair for everyone, everywhere. You do not need to register or wait for an issued key before running the example, and the values never change per caller or per deployment.
| Value | Use this exact public constant |
|---|---|
| API origin | https://api.aon.pro |
| Public Test Key | aon_test_publicSandboxKey01 |
| Placement | plc_public_test_sandbox |
Make a v1.0 Query
The public key is the authoritative test signal, and the request must use the
paired sandbox placement. The AON-Protocol-Version: 1.0 header is
required: a request without it, or with any other version, receives a
stable UNSUPPORTED_PROTOCOL_VERSION error instead of offers. No other
header or request flag is needed.
curl -sS -X POST "https://api.aon.pro/v1/offers/query" \
-H "Authorization: Bearer aon_test_publicSandboxKey01" \
-H "Content-Type: application/json" \
-H "AON-Protocol-Version: 1.0" \
-H "X-AON-Placement-Id: plc_public_test_sandbox" \
-d '{
"intent": {
"content": [{"type":"input_text","text":"Find productivity tools"}],
"provenance": "user_expressed"
},
"context": {}
}'Query-only credential
A missing or different placement fails closed. This key cannot call MCP, Reporting, feedback, watch, or any other API-key route, and it cannot fall through to live inventory.
What the sandbox returns
The response uses the normal v1.0 Query envelope and sets
extra.is_test=true. Fixed CPA, CPS, and Hybrid samples keep response
handling repeatable.
- No external inventory requests: fixed samples only; no remote catalog calls are made on your behalf.
- No database identity: the shared key and placement are route constants, not Application, API-key, or placement rows created for the caller.
- No business write: no conversion, callback, Settlement, payout, Webhook outbox entry, notification, or export is ever created from sandbox traffic.
- Shared, non-attribution activity: sandbox traffic does not verify your dashboard, attribution, or application-owned tracking.
- No category filtering: category validation needs live catalog data, so
the sandbox rejects
constraints.category_idswith a400— omit the field here and use it once you switch to your own placement id.AON-Protocol-Version: 1.0is likewise required rather than optional.
For request and response fields, continue to the Offer Query API reference. This page owns only the sandbox access and safety model.
Continue from here
For an MCP client, use Hosted MCP connection setup with your own placement id, or search anonymously with no placement (no key, no earnings); an API key is only needed for the write tools. The Sandbox does not establish MCP access.
When an existing account is enabled, use the Developer Portal to create placements and copy their placement ids for live integrations.
- Read the Reporting v2 contract. Reporting requires an application-owned Live Key; the Public Test Pair cannot call it.
- Implement signed conversion Webhooks. The Public Test Pair never enters the conversion, callback, Settlement, or outbox chain.
Moving to live access
For live traffic, drop the public test key and send
your own placement id (from Developer Portal) in the X-AON-Placement-Id
header.
Sandbox completion boundary
The fixed shared v1.0 Query is complete when its response contains
extra.is_test=true. That is a non-attributed, non-billable contract and query
verification only, not a live application integration or production completion.