> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get storefront capabilities

> Inspect source-level capability diagnostics for a storefront

`GET /api/v2/buyer/storefronts/{storefrontId}/capabilities`

Returns source-level diagnostic rows for active sources behind a storefront the buyer can see. External AdCP sales-agent sources are capability-checkable and include cached-or-refreshed capability details. Managed ad-server-backed sources are included with `probeable: false` and `probeStatus: "not_applicable"`; do not treat those rows as unreachable agents.

Capability lookups use the platform's normal cache and refresh policy. A `probeStatus: "reachable"` row means capabilities are currently available for execution and diagnostics — this includes both live HTTP-probed capabilities and in-process synthesized capabilities for official adapter and ESA storefronts. It is not a guarantee that this request opened a fresh network connection to the agent.

For direct AdCP capability responses, custom Storefront metadata now uses
`ext.scope3.storefront`. The deprecated `extensions.scope3.storefront` alias is
temporarily dual-emitted for AdCP 3.0 and 3.1 compatibility; new integrations
should read `ext`.

## Request

```bash curl theme={null}
curl https://api.apostra.com/api/v2/buyer/storefronts/42/capabilities \
  -H "Authorization: Bearer $SCOPE3_API_KEY"
```

## Parameters

| Field | In | Type | Required | Notes |
| - | - | - | - | - |
| `storefrontId` | path | integer | Yes | Storefront ID to inspect |

## Response

```json theme={null}
{
  "storefrontId": 42,
  "agents": [
    {
      "sourceId": "src_main",
      "sourceName": "Premium CTV Direct",
      "executionType": "AGENT",
      "agentName": "Premium CTV Sales Agent",
      "requiresCredentials": true,
      "probeable": true,
      "probeStatus": "reachable",
      "message": null,
      "capabilities": {
        "version": "3.1.0",
        "tools": ["get_products", "create_media_buy"],
        "protocols": ["mcp"],
        "sandboxSupported": true,
        "synthetic": false
      }
    },
    {
      "sourceId": "managed-ad-server",
      "sourceName": "Managed ad server",
      "executionType": "MANAGED_SALES_AGENT",
      "agentName": null,
      "requiresCredentials": null,
      "probeable": false,
      "probeStatus": "not_applicable",
      "message": "Managed ad-server-backed source; not probed via AdCP capabilities.",
      "capabilities": null
    }
  ]
}
```

| Field | Type | Notes |
| - | - | - |
| `storefrontId` | integer | Storefront ID that was inspected |
| `agents` | array | Active source rows behind the storefront. The field name is retained for compatibility |
| `agents[].sourceId` | string | Source identifier within the storefront |
| `agents[].sourceName` | string \| null | Source display name |
| `agents[].executionType` | string | Source execution type |
| `agents[].agentName` | string \| null | External sales-agent name when one exists |
| `agents[].requiresCredentials` | boolean \| null | Whether buyer-provided credentials are required for this external AdCP source. `null` when not applicable or unavailable |
| `agents[].probeable` | boolean | Whether this row is an external AdCP sales agent that this capability diagnostic can check |
| `agents[].probeStatus` | string | `reachable`, `unreachable`, `not_applicable`, or `unavailable`. `reachable` means capabilities are available (including synthesized capabilities for adapter and ESA storefronts), possibly from cache |
| `agents[].message` | string \| null | Explanation when the row is not probeable |
| `agents[].capabilities` | object \| null | Capability summary for external AdCP sources; `null` for managed sources or failed capability lookups |
| `agents[].capabilities.requireOperatorAuth` | boolean | Capability-payload copy of the external source credential requirement when a capability payload is available. Prefer top-level `requiresCredentials` for credential workflow decisions |

## Errors

* `401 UNAUTHORIZED` — missing or invalid bearer token.
* `404 NOT_FOUND` — the storefront does not exist or is not visible to the caller.

See [Errors](/v2/reference/errors) for the full error contract.

## Related

<CardGroup cols={2}>
  <Card title="Get storefront" href="/v2/buyer/storefronts/tasks/get-storefront" icon="magnifying-glass">
    Rolled-up connection state
  </Card>

  <Card title="List storefronts" href="/v2/buyer/storefronts/tasks/list-storefronts" icon="list">
    Paginated summaries
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.