Skip to content

Depot payments

Registers the MSP payment routes on the PSA mux.

This page is generated from the Depot route table. Every operation carries the permission it needs and the anchor an agent can link to.

GETpsa:readmsp facemspIdempotent

Source: [object Object]

getAutopay returns a client’s active authorization (or null) and its history, with the frozen consent text each one agreed to.

NameInTypeRequiredDescription
cidpathstringYesA uuid.
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/clients/<cid>/autopay' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/clients/{cid}/autopay/reauthorize-request

Section titled “POST /api/v1/clients/{cid}/autopay/reauthorize-request”

POSTpsa:invoicemsp facemsp

Source: [object Object]

reauthorizeRequest emails the client’s billing contact a link to set up (or re-enter) autopay.

NameInTypeRequiredDescription
cidpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
savedPaymentMethodPublicIdrequiredstring
StatusBodyDescription
202application/json, objectAccepted.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:invoice.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/clients/<cid>/autopay/reauthorize-request' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"savedPaymentMethodPublicId": "string"
}'

POSTpsa:invoicemsp facemsp

Source: [object Object]

revokeAutopay stops a client’s autopay from the console.

NameInTypeRequiredDescription
cidpathstringYesA uuid.
StatusBodyDescription
200application/json, AutopayViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:invoice.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
authorizedAtrequiredstring (date-time)
authorizedByNamerequiredstring
authorizedViarequiredstring
consentTextrequiredstring
consentVersionrequiredstring
providerConfigPublicIdrequiredstring
publicIdrequiredstring
retainUntilstring (date-time) or null
revokedAtstring (date-time) or null
revokedViarequiredstring
savedPaymentMethodPublicIdrequiredstring
statusrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/clients/<cid>/autopay/revoke' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

listMethods lists a client’s saved payment methods.

NameInTypeRequiredDescription
cidpathstringYesA uuid.
StatusBodyDescription
200application/json, PagedResultSavedMethodViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of SavedMethodView
items[].bankNamerequiredstring
items[].brandrequiredstring
items[].createdAtrequiredstring (date-time)
items[].expMonthrequiredinteger
items[].expYearrequiredinteger
items[].fundingrequiredstring
items[].labelrequiredstring
items[].last4requiredstring
items[].providerConfigPublicIdrequiredstring
items[].publicIdrequiredstring
items[].statusrequiredstring
items[].typerequiredstring
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/clients/<cid>/payment-methods' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

DELETE /api/v1/clients/{cid}/payment-methods/{id}

Section titled “DELETE /api/v1/clients/{cid}/payment-methods/{id}”

DELETEpsa:invoicemsp facemspIdempotent

Source: [object Object]

deleteMethod removes a saved method: detached at the processor, revoked here, and any autopay on it stopped.

NameInTypeRequiredDescription
cidpathstringYesA uuid.
idpathstringYesA uuid.
StatusBodyDescription
204NoneSuccess, with no body.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:invoice.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/v1/clients/<cid>/payment-methods/<id>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

getProfile returns a client’s provider override and where its payments go.

NameInTypeRequiredDescription
cidpathstringYesA uuid.
StatusBodyDescription
200application/json, PaymentProfileViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
clientPublicIdrequiredstring
effectiveProviderPublicIdstring or null
providerConfigPublicIdstring or null
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/clients/<cid>/payment-profile' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PUTpsa:paymentsmsp facemspIdempotent

Source: [object Object]

putProfile sets or clears (null) a client’s provider override.

NameInTypeRequiredDescription
cidpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
providerConfigPublicIdstring or null
StatusBodyDescription
200application/json, PaymentProfileViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
clientPublicIdrequiredstring
effectiveProviderPublicIdstring or null
providerConfigPublicIdstring or null
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X PUT 'https://depot.example.com/api/v1/clients/<cid>/payment-profile' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"providerConfigPublicId": "string"
}'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

listAttempts lists an invoice’s online payment attempts, newest first.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, PagedResultAttemptViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of AttemptView
items[].amountCentsrequiredinteger

int64.

items[].attemptNorequiredinteger
items[].chargedCentsrequiredinteger

int64.

items[].clientPublicIdrequiredstring
items[].completedAtstring (date-time) or null
items[].createdAtrequiredstring (date-time)
items[].currencyCoderequiredstring
items[].customerMessagerequiredstring
items[].declineCoderequiredstring
items[].declineKindrequiredstring
items[].excessCentsrequiredinteger

int64.

items[].fundingrequiredstring
items[].invoicePublicIdrequiredstring
items[].methodTyperequiredstring
items[].nextRetryAtstring (date-time) or null
items[].paymentPublicIdrequiredstring
items[].providerConfigPublicIdrequiredstring
items[].publicIdrequiredstring
items[].sourcerequiredstring
items[].staffMessagerequiredstring
items[].statusrequiredstring
items[].surchargeBasisPointsrequiredinteger
items[].surchargeCentsrequiredinteger

int64.

pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/invoices/<id>/attempts' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpsa:invoicemsp facemsp

Source: [object Object]

chargeInvoice charges a client’s saved method for the invoice balance.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
savedPaymentMethodPublicIdrequiredstring
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:invoice.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/invoices/<id>/charge' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"savedPaymentMethodPublicId": "string"
}'

POSTpsa:invoicemsp facemsp

Source: [object Object]

sendPayLink revokes the invoice’s earlier pay links and emails the invoice with a fresh one.

The link exists only in that email.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
torequiredstring
StatusBodyDescription
202application/json, objectAccepted.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:invoice.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/invoices/<id>/pay-link' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"to": "string"
}'

GETpsa:paymentsmsp facemspIdempotent

Source: [object Object]

listEvents pages the stored processor webhook events, newest first.

NameInTypeRequiredDescription
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
providerConfigPublicIdquerystringNo
statequerystringNo
StatusBodyDescription
200application/json, PagedResultWebhookEventViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of WebhookEventView
items[].attemptsrequiredinteger
items[].eventIdrequiredstring
items[].lastErrorrequiredstring
items[].objectRefrequiredstring
items[].processedAtstring (date-time) or null
items[].providerConfigPublicIdrequiredstring
items[].receivedAtrequiredstring (date-time)
items[].staterequiredstring
items[].typerequiredstring
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-events?page=0&pageSize=0&providerConfigPublicId=<providerConfigPublicId>&state=<state>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

listProviders lists the practice’s payment providers, secrets masked.

StatusBodyDescription
200application/json, PagedResultPaymentProviderViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
itemsrequiredarray of PaymentProviderView
items[].achEnabledrequiredboolean
items[].capabilitiesCapabilitiesView
items[].capabilities.achrequiredboolean
items[].capabilities.cardrequiredboolean
items[].capabilities.fundingBeforeChargerequiredboolean
items[].capabilities.hostedFieldsrequiredboolean
items[].capabilities.oauthrequiredboolean
items[].capabilities.saqrequiredstring
items[].capabilities.savedMethodsrequiredboolean
items[].cardEnabledrequiredboolean
items[].cardRiskAcknowledgedAtstring (date-time) or null
items[].createdAtrequiredstring (date-time)
items[].credentialsHintrequiredobject
items[].drainingSincestring (date-time) or null
items[].environmentrequiredstring
items[].externalBaseUrlrequiredstring
items[].hasCredentialsrequiredboolean
items[].hasWebhookSecretrequiredboolean
items[].isPrimaryrequiredboolean
items[].kindrequiredstring
items[].labelrequiredstring
items[].oauthExpiresAtstring (date-time) or null
items[].publicConfigrequiredany

Arbitrary JSON.

items[].publicIdrequiredstring
items[].retiredAtstring (date-time) or null
items[].statusrequiredstring
items[].updatedAtrequiredstring (date-time)
items[].webhookUrlrequiredstring
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-providers' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpsa:paymentsmsp facemsp

Source: [object Object]

createProvider connects a payment provider.

The first one becomes primary.

Required, sent as application/json.

FieldTypeDescription
achEnabledboolean or null
cardEnabledboolean or null
cardRiskAcknowledgedboolean or null
credentialsany

Arbitrary JSON.

disconnectboolean or null
environmentrequiredstring
externalBaseUrlstring or null
kindrequiredstring
labelstring or null
publicConfigany

Arbitrary JSON.

webhookSecretstring or null
StatusBodyDescription
201application/json, PaymentProviderViewCreated.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

201 response body

FieldTypeDescription
achEnabledrequiredboolean
capabilitiesCapabilitiesView
capabilities.achrequiredboolean
capabilities.cardrequiredboolean
capabilities.fundingBeforeChargerequiredboolean
capabilities.hostedFieldsrequiredboolean
capabilities.oauthrequiredboolean
capabilities.saqrequiredstring
capabilities.savedMethodsrequiredboolean
cardEnabledrequiredboolean
cardRiskAcknowledgedAtstring (date-time) or null
createdAtrequiredstring (date-time)
credentialsHintrequiredobject
drainingSincestring (date-time) or null
environmentrequiredstring
externalBaseUrlrequiredstring
hasCredentialsrequiredboolean
hasWebhookSecretrequiredboolean
isPrimaryrequiredboolean
kindrequiredstring
labelrequiredstring
oauthExpiresAtstring (date-time) or null
publicConfigrequiredany

Arbitrary JSON.

publicIdrequiredstring
retiredAtstring (date-time) or null
statusrequiredstring
updatedAtrequiredstring (date-time)
webhookUrlrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payment-providers' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"achEnabled": false,
"cardEnabled": false,
"cardRiskAcknowledged": false,
"credentials": "string",
"disconnect": false,
"environment": "string",
"externalBaseUrl": "string",
"kind": "string",
"label": "string",
"publicConfig": "string",
"webhookSecret": "string"
}'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

getProvider returns one payment provider, secrets masked.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, PaymentProviderViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
achEnabledrequiredboolean
capabilitiesCapabilitiesView
capabilities.achrequiredboolean
capabilities.cardrequiredboolean
capabilities.fundingBeforeChargerequiredboolean
capabilities.hostedFieldsrequiredboolean
capabilities.oauthrequiredboolean
capabilities.saqrequiredstring
capabilities.savedMethodsrequiredboolean
cardEnabledrequiredboolean
cardRiskAcknowledgedAtstring (date-time) or null
createdAtrequiredstring (date-time)
credentialsHintrequiredobject
drainingSincestring (date-time) or null
environmentrequiredstring
externalBaseUrlrequiredstring
hasCredentialsrequiredboolean
hasWebhookSecretrequiredboolean
isPrimaryrequiredboolean
kindrequiredstring
labelrequiredstring
oauthExpiresAtstring (date-time) or null
publicConfigrequiredany

Arbitrary JSON.

publicIdrequiredstring
retiredAtstring (date-time) or null
statusrequiredstring
updatedAtrequiredstring (date-time)
webhookUrlrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-providers/<id>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PATCHpsa:paymentsmsp facemsp

Source: [object Object]

patchProvider changes a provider’s label, keys, methods or settings.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
achEnabledboolean or null
cardEnabledboolean or null
cardRiskAcknowledgedboolean or null
credentialsany

Arbitrary JSON.

disconnectboolean or null
environmentrequiredstring
externalBaseUrlstring or null
kindrequiredstring
labelstring or null
publicConfigany

Arbitrary JSON.

webhookSecretstring or null
StatusBodyDescription
200application/json, PaymentProviderViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
achEnabledrequiredboolean
capabilitiesCapabilitiesView
capabilities.achrequiredboolean
capabilities.cardrequiredboolean
capabilities.fundingBeforeChargerequiredboolean
capabilities.hostedFieldsrequiredboolean
capabilities.oauthrequiredboolean
capabilities.saqrequiredstring
capabilities.savedMethodsrequiredboolean
cardEnabledrequiredboolean
cardRiskAcknowledgedAtstring (date-time) or null
createdAtrequiredstring (date-time)
credentialsHintrequiredobject
drainingSincestring (date-time) or null
environmentrequiredstring
externalBaseUrlrequiredstring
hasCredentialsrequiredboolean
hasWebhookSecretrequiredboolean
isPrimaryrequiredboolean
kindrequiredstring
labelrequiredstring
oauthExpiresAtstring (date-time) or null
publicConfigrequiredany

Arbitrary JSON.

publicIdrequiredstring
retiredAtstring (date-time) or null
statusrequiredstring
updatedAtrequiredstring (date-time)
webhookUrlrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X PATCH 'https://depot.example.com/api/v1/psa/payment-providers/<id>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"achEnabled": false,
"cardEnabled": false,
"cardRiskAcknowledged": false,
"credentials": "string",
"disconnect": false,
"environment": "string",
"externalBaseUrl": "string",
"kind": "string",
"label": "string",
"publicConfig": "string",
"webhookSecret": "string"
}'

DELETEpsa:paymentsmsp facemspIdempotent

Source: [object Object]

deleteProvider wipes a RETIRED provider’s credentials.

Refunds on its old payments are then impossible through Depot.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
204NoneSuccess, with no body.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/v1/psa/payment-providers/<id>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/psa/payment-providers/{id}/cutover

Section titled “GET /api/v1/psa/payment-providers/{id}/cutover”

GETpsa:readmsp facemspIdempotent

Source: [object Object]

cutover lists the clients still paying through a provider.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-providers/<id>/cutover' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/psa/payment-providers/{id}/make-primary

Section titled “POST /api/v1/psa/payment-providers/{id}/make-primary”

POSTpsa:paymentsmsp facemsp

Source: [object Object]

makePrimary makes a provider the one new payments use; the old primary starts draining.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, PaymentProviderViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
achEnabledrequiredboolean
capabilitiesCapabilitiesView
capabilities.achrequiredboolean
capabilities.cardrequiredboolean
capabilities.fundingBeforeChargerequiredboolean
capabilities.hostedFieldsrequiredboolean
capabilities.oauthrequiredboolean
capabilities.saqrequiredstring
capabilities.savedMethodsrequiredboolean
cardEnabledrequiredboolean
cardRiskAcknowledgedAtstring (date-time) or null
createdAtrequiredstring (date-time)
credentialsHintrequiredobject
drainingSincestring (date-time) or null
environmentrequiredstring
externalBaseUrlrequiredstring
hasCredentialsrequiredboolean
hasWebhookSecretrequiredboolean
isPrimaryrequiredboolean
kindrequiredstring
labelrequiredstring
oauthExpiresAtstring (date-time) or null
publicConfigrequiredany

Arbitrary JSON.

publicIdrequiredstring
retiredAtstring (date-time) or null
statusrequiredstring
updatedAtrequiredstring (date-time)
webhookUrlrequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payment-providers/<id>/make-primary' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/psa/payment-providers/{id}/oauth/start

Section titled “GET /api/v1/psa/payment-providers/{id}/oauth/start”

GETpsa:paymentsmsp facemspIdempotentNot fully resolved

What this page does not know
  • response

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

oauthStart redirects to the processor’s consent screen for providers that connect by OAuth (QuickBooks Payments).

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-providers/<id>/oauth/start' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/psa/payment-providers/{id}/retire

Section titled “POST /api/v1/psa/payment-providers/{id}/retire”

POSTpsa:paymentsmsp facemsp

Source: [object Object]

retireProvider stops a provider.

With active saved methods it answers 409 provider_in_use unless force, which retires them and emails the clients.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
forcerequiredboolean
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payment-providers/<id>/retire' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"force": false
}'

POST /api/v1/psa/payment-providers/{id}/test

Section titled “POST /api/v1/psa/payment-providers/{id}/test”

POSTpsa:paymentsmsp facemsp

Source: [object Object]

testProvider makes one cheap authenticated call with the stored keys.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payment-providers/<id>/test' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/psa/payment-providers/oauth/callback

Section titled “GET /api/v1/psa/payment-providers/oauth/callback”

GETpsa:paymentsmsp facemspIdempotentNot fully resolved

What this page does not know
  • response

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

oauthCallback stores the tokens the processor’s consent screen returned and sends the operator back to the provider settings page.

NameInTypeRequiredDescription
codequerystringNo
realmIdquerystringNo
statequerystringNo
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
400application/problem+json, ProblemDetailsThis sign-in link is not valid or has expired. Start again from Settings.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-providers/oauth/callback?code=<code>&realmId=<realmId>&state=<state>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

getSettings returns the practice’s payment settings.

StatusBodyDescription
200application/json, PaymentSettingsViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
autopayMaxAttemptsrequiredinteger
autopayNoticeDaysrequiredinteger
autopayRetryDaysrequiredarray of integer
cardExpiryNoticeDaysrequiredinteger
cardSurchargeBasisPointsrequiredinteger
cardSurchargeEnabledrequiredboolean
payLinkValidDaysAfterDuerequiredinteger
reauthReminderEveryDaysrequiredinteger
surchargeAttestedAtstring (date-time) or null
surchargeAttestedByUserPublicIdrequiredstring
updatedAtrequiredstring (date-time)
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payment-settings' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PUTpsa:paymentsmsp facemspIdempotent

Source: [object Object]

putSettings replaces the payment settings.

Turning the card surcharge on needs attestSurcharge.

Required, sent as application/json.

FieldTypeDescription
attestSurchargerequiredboolean
autopayMaxAttemptsrequiredinteger
autopayNoticeDaysrequiredinteger
autopayRetryDaysrequiredarray of integer
cardExpiryNoticeDaysrequiredinteger
cardSurchargeBasisPointsrequiredinteger
cardSurchargeEnabledrequiredboolean
payLinkValidDaysAfterDuerequiredinteger
reauthReminderEveryDaysrequiredinteger
surchargeAttestedAtstring (date-time) or null
surchargeAttestedByUserPublicIdrequiredstring
updatedAtrequiredstring (date-time)
StatusBodyDescription
200application/json, PaymentSettingsViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.

200 response body

FieldTypeDescription
autopayMaxAttemptsrequiredinteger
autopayNoticeDaysrequiredinteger
autopayRetryDaysrequiredarray of integer
cardExpiryNoticeDaysrequiredinteger
cardSurchargeBasisPointsrequiredinteger
cardSurchargeEnabledrequiredboolean
payLinkValidDaysAfterDuerequiredinteger
reauthReminderEveryDaysrequiredinteger
surchargeAttestedAtstring (date-time) or null
surchargeAttestedByUserPublicIdrequiredstring
updatedAtrequiredstring (date-time)
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X PUT 'https://depot.example.com/api/v1/psa/payment-settings' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"attestSurcharge": false,
"autopayMaxAttempts": 0,
"autopayNoticeDays": 0,
"autopayRetryDays": [
0
],
"cardExpiryNoticeDays": 0,
"cardSurchargeBasisPoints": 0,
"cardSurchargeEnabled": false,
"payLinkValidDaysAfterDue": 0,
"reauthReminderEveryDays": 0,
"surchargeAttestedAt": "2026-01-01T00:00:00Z",
"surchargeAttestedByUserPublicId": "string",
"updatedAt": "2026-01-01T00:00:00Z"
}'

GETpsa:readmsp facemspIdempotent

Source: [object Object]

listRefunds lists the refunds of one online payment.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/psa/payments/<id>/refunds' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpsa:refundmsp facemsp

Source: [object Object]

createRefund refunds part or all of an online payment through its own processor, optionally issuing a credit note for the principal.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
amountCentsrequiredinteger

int64.

excessRefundCentsrequiredinteger

int64.

issueCreditNoterequiredboolean
reasonrequiredstring
surchargeRefundCentsrequiredinteger

int64.

StatusBodyDescription
201application/json, objectCreated.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:refund.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payments/<id>/refunds' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"amountCents": 0,
"excessRefundCents": 0,
"issueCreditNote": false,
"reason": "string",
"surchargeRefundCents": 0
}'

POST /api/v1/psa/payments/attempts/{id}/resolve

Section titled “POST /api/v1/psa/payments/attempts/{id}/resolve”

POSTpsa:paymentsmsp facemsp

Source: [object Object]

resolveAttempt settles an attempt stuck in “outcome unknown” (a processor with no charge search) on the operator’s word, after asking the processor once more.

A definite processor answer wins: 409 resolved_by_processor with the attempt as applied.

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
noterequiredstring
outcomerequiredstring
StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold psa:payments.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsClient payments are not available on this server.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/psa/payments/attempts/<id>/resolve' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"outcome": "string"
}'

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.