A valid request URL is required to generate request examples{
"environment": "live",
"providers": [
{
"provider": "stripe",
"connected": true,
"adapter_available": true,
"capabilities": {
"scheduled_plan_change": true,
"proration": true,
"cancel_at_period_end": true,
"hosted_portal": true,
"tax_calculation": true,
"resume_subscription": true,
"list_invoices": true,
"list_catalogue": true,
"publish_catalogue": true,
"manage_coupons": true,
"pause_subscription": true,
"discount_subscription": true,
"refund_payment": true
},
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"status_detail": "<string>",
"provider_account_id": "<string>",
"publishable_key": "<string>",
"webhook_secret_set": true,
"webhook_url": "<string>",
"last_verified_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"billing_providers_available": true
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}List payment providers
Requires billing:read. The payment gateways this environment can charge through — the gateway you sell your product through, not what UserKit charges you.
One entry per provider the product speaks of, connected or not: the screen is a list of what is possible. connected says a row exists; status says whether it works, and the two are different questions — a connection that exists and is unhealthy is not the same as no connection.
Every status that is not connected names a different repair. That is what it is for: collapsing them into one “broken” ends with a screen telling you to re-paste a credential that is perfect.
status | what it means | the repair |
|---|---|---|
pending | the keys are stored and the provider has not been asked | run the health check |
connected | the last check succeeded | none |
invalid_credentials | the gateway refused the keys | rotate them |
mode_mismatch | live-mode keys on a test environment, or the reverse | paste the other key, not a new one |
account_not_ready | the keys work and the account cannot take money: a sign-up never finished, payouts restricted, an account closed | in the gateway’s own dashboard — nothing about the keys will fix it |
status_detail carries the gateway’s own sentence, for a person to read. The status says which repair; the detail says why. Never parse it.
Neither secret is ever returned. The secret key is write-only by design, and webhook_secret_set is the one thing this answers about the webhook secret: whether an endpoint has been registered at the provider.
capabilities reports what the gateway can do beyond the minimum every gateway can do, so a screen stops offering an act that would be refused. It is absent when the server has no adapter loaded, because an empty object would read as a claim about the provider rather than about the deployment.
A valid request URL is required to generate request examples{
"environment": "live",
"providers": [
{
"provider": "stripe",
"connected": true,
"adapter_available": true,
"capabilities": {
"scheduled_plan_change": true,
"proration": true,
"cancel_at_period_end": true,
"hosted_portal": true,
"tax_calculation": true,
"resume_subscription": true,
"list_invoices": true,
"list_catalogue": true,
"publish_catalogue": true,
"manage_coupons": true,
"pause_subscription": true,
"discount_subscription": true,
"refund_payment": true
},
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "pending",
"status_detail": "<string>",
"provider_account_id": "<string>",
"publishable_key": "<string>",
"webhook_secret_set": true,
"webhook_url": "<string>",
"last_verified_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"billing_providers_available": true
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}{
"error": {
"code": "forbidden",
"message": "your role does not allow this action"
}
}Authorizations
A staff session token, uk_st_…. Minted by sign-up, sign-in or the two-factor exchange. Only a 401 means it is spent; not_a_member (403) is about the organization named in X-Organization-Id and leaves the token good for the others.
Headers
The organization the caller is acting on — the org_… code that appears in the panel URL. It identifies; the membership JOIN is what authorizes, so a forged code reads nothing: the answer is not_a_member (403), which does not mean the session is over. Absent, the session's default organization answers, or — if that membership was revoked while the session was open — any other one the caller still holds.
Path Parameters
The environment's id.