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/
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 · exampleprj_exampleProject identifier.
Responses
-
200Project provider availability-
data·object· requiredEvery 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 inunavailableModes; every other entry carriesavailable, plusreasonnaming 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. Custodymodesincludemanagedonly in a Sandbox project whose deployment holds the provider's credentials;byokruns on the organization's own credentials and is the only mode a Production project can use.-
projectId·string· required -
environment·string· required · one ofsandbox,production -
providers·object[]· requiredOne of:
-
family: "custody"
-
family·string· required · alwayscustody -
provider·string· required · one oflocal,fireblocks,privy,coinbase_cdp,para,turnkey,dfns,ibm_haven,anchorage,utila -
modes·string[]· required · each one ofmanaged,byok -
unavailableModes·object[]· required-
mode·string· required · one ofmanaged,byok -
reason·string· required · one ofcustody_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· requiredResponse metadata.
-
requestId·string· required · min length 1 · examplereq_exampleRequest identifier for tracing.
-
timestamp·string· required · formatdate-time· example2025-01-01T00:00:00.000ZISO 8601 timestamp.
-
-
-
401Unauthorized-
error·object· requiredStandard error payload.
-
code·string· requiredMachine-readable error code.
-
message·string· requiredHuman-readable error message.
-
details·objectOptional error details for debugging.
*·any
-
-
meta·object-
requestId·string· min length 1 · examplereq_exampleRequest identifier for tracing.
-
-
-
403Forbidden. Requires theprojects.readaction: an API key must hold it (a module'smanageorexecutealso covers itsread), and a signed-in member's organization role must include it. Without it the error is INSUFFICIENT_PERMISSIONS anderror.details.actionnames the action. Any other 403 names its own reason.Same fields as
401. -
404Not FoundSame fields as
401. -
500Internal Server ErrorSame 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.