---
title: "Get project provider availability"
method: GET
path: "/v1/projects/{projectId}/provider-availability"
tags: ["Projects"]
---

# Get project provider availability

`GET /v1/projects/{projectId}/provider-availability`

## Request

- Base URL: `http://localhost:8787`
- URL: `http://localhost:8787/v1/projects/{projectId}/provider-availability`
- Auth: HTTP bearer

Lists every provider this deployment's release channel publishes, with whether this project can use it, counting the deployment's provider credentials for the project's environment. The same rule gates every provider entry point, so a provider reported unavailable is refused there with 403, or 503 when the deployment does not hold its credentials. A project outside the caller's organization, or another project for a project-bound API key, returns 404.

## Path parameters

- `projectId` string, required: Project identifier.

## Response `200`

Project provider availability

- object: Standard success response envelope.
  - `data` object, required: Every provider this deployment's release channel publishes, with whether this project can use it; a provider the channel leaves out is omitted, matching this document. Custody entries list the custody modes the project can set the provider up in (empty when none) in `modes`, and each refused mode with the first failed check in `unavailableModes`; every other entry carries `available`, plus `reason` naming the first failed check when unavailable. A provider is available only when the deployment's release channel includes it, SDP currently offers it, the organization is entitled to it, and the deployment holds its credentials for the project's environment; the release channel offers the same providers to Sandbox and Production projects. Custody `modes` include `managed` only in a Sandbox project whose deployment holds the provider's credentials; `byok` runs on the organization's own credentials and is the only mode a Production project can use.
    - `projectId` string, required
    - `environment` 'sandbox' | 'production', required
    - `providers` object[], required
      - `family` 'custody', required
      - `provider` 'local' | 'fireblocks' | 'privy' | 'coinbase_cdp' | 'para' | 'turnkey' | 'dfns' | 'ibm_haven' | 'anchorage' | 'utila', required
      - `modes` string[], required
      - `unavailableModes` object[], required
        - `mode` 'managed' | 'byok', required
        - `reason` 'custody_provider_not_in_release_channel' | 'custody_mode_not_allowed' | 'provider_not_entitled' | 'provider_not_in_release_channel' | 'provider_not_offered' | 'provider_not_configured', required
  - `meta` object, required: Response metadata.
    - `requestId` string, required: Request identifier for tracing.
    - `timestamp` string, date-time, required: ISO 8601 timestamp.

## Other responses

- `401`: Error
- `403`: Forbidden. Requires the `projects.read` action: an API key must hold it (a module's `manage` or `execute` also covers its `read`), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS and `error.details.action` names the action. Any other 403 names its own reason.
- `404`: Error
- `500`: Error

## Changes

- **2026-11-02** `9f0b1d561064`: 4 warning
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `401`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `403`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `404`
  - added the new `CUSTODY_POLICY_REFUSED` enum value to the `error/code` response property for the response status `500`
- **2026-10-30** `f4a0135eca08`: 24 warning
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `401`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `403`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `404`
  - added the new `RPC_UNAVAILABLE` enum value to the `error/code` response property for the response status `500`
  - …20 more
- **2026-10-29** `5286e28ddfef`: 1 info
  - removed `subschema #2` from the `data/providers/items/` response property `oneOf` list for the response status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/solana/apis/solana-developer-platform-api/changes/v1/projects/:projectId/provider-availability/get.md)

---

[API](https://skmtc.dev/solana/apis/solana-developer-platform-api.md) - [All operations](https://skmtc.dev/solana/apis/solana-developer-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/solana/apis/solana-developer-platform-api/revisions/47682f5c382e?raw)
