# Public Test Sandbox

Source: https://docs.aon.pro/quickstart/public-test-sandbox

> Derived from the same AON Docs release as the source page.

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.

Canonical v1.0 sandbox request

curl

```
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_ids` with a `400` — omit the field here and use it once you switch to your own placement id. `AON-Protocol-Version: 1.0` is likewise required rather than optional.

For request and response fields, continue to the [Offer Query API reference](https://docs.aon.pro/api/offer-query). This page owns only the sandbox access and safety model.

## Continue from here

[Continue with REST API](https://docs.aon.pro/quickstart/first-api-call)

[Set up an SDK](https://docs.aon.pro/quickstart/sdk-setup)

For an MCP client, use [Hosted MCP connection setup](https://docs.aon.pro/mcp/quickstart) 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](https://developer.aon.pro/) to create placements and copy their placement ids for live integrations.

-   [Read the Reporting v2 contract](https://docs.aon.pro/api/reporting). Reporting requires an application-owned Live Key; the Public Test Pair cannot call it.
-   [Implement signed conversion Webhooks](https://docs.aon.pro/api/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.
