Get project provider availability

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.

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

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.

Requires an API key with the projects.read action.

Path parameters

  • projectId · string · required · min length 1 · example prj_example

    Project identifier.

Responses

  • 200 Project provider availability

    • 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 · string · required · one of sandbox, production

      • providers · object[] · required

        One of:

        • family: "custody"

          • family · string · required · always custody

          • provider · string · required · one of local, fireblocks, privy, coinbase_cdp, para, turnkey, dfns, ibm_haven, anchorage, utila

          • modes · string[] · required · each one of managed, byok

          • unavailableModes · object[] · required

            • mode · string · required · one of managed, byok

            • reason · string · required · one of custody_provider_not_in_release_channel, custody_mode_not_allowed, provider_not_entitled, provider_not_in_release_channel, provider_not_offered, provider_not_configured

    • meta · object · required

      Response metadata.

      • requestId · string · required · min length 1 · example req_example

        Request identifier for tracing.

      • timestamp · string · required · format date-time · example 2025-01-01T00:00:00.000Z

        ISO 8601 timestamp.

  • 401 Unauthorized

    • error · object · required

      Standard error payload.

      • code · string · required

        Machine-readable error code.

      • message · string · required

        Human-readable error message.

      • details · object

        Optional error details for debugging.

        • * · any
    • meta · object

      • requestId · string · min length 1 · example req_example

        Request identifier for tracing.

  • 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.

    Same fields as 401.

  • 404 Not Found

    Same fields as 401.

  • 500 Internal Server Error

    Same fields as 401.

Example request

curl 'https://api.solana.com/v1/projects/prj_example/provider-availability' \
  -H "Authorization: Bearer $SDP_API_KEY"

Example responses

{
  "data": {
    "projectId": "prj_example",
    "environment": "production",
    "providers": [
      {
        "family": "custody",
        "provider": "privy",
        "modes": [
          "byok"
        ],
        "unavailableModes": [
          {
            "mode": "managed",
            "reason": "custody_mode_not_allowed"
          }
        ]
      },
      {
        "family": "custody",
        "provider": "fireblocks",
        "modes": [],
        "unavailableModes": [
          {
            "mode": "managed",
            "reason": "custody_mode_not_allowed"
          },
          {
            "mode": "byok",
            "reason": "custody_provider_not_in_release_channel"
          }
        ]
      }
    ]
  },
  "meta": {
    "requestId": "req_example",
    "timestamp": "2025-01-01T00:00:00.000Z"
  }
}

Error responses use the standard error shape.

Is this page helpful?