Skip to content

Depot subscription reconciliation

Registers the reconciliation routes.

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

GET /api/v1/billing/subscription-reconciliation

Section titled “GET /api/v1/billing/subscription-reconciliation”

GETpsa:readmsp facemspIdempotent

Source: [object Object]

listReconciliations lists the monthly reconciliations, newest month first (items are on the detail read).

NameInTypeRequiredDescription
connectorquerystringNo
StatusBodyDescription
200application/json, array of ReconciliationViewSuccess.
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.
409application/problem+json, ProblemDetailsThe request conflicts with the current state of the record.
412application/problem+json, ProblemDetailsSomeone else changed this since you opened it. Reload and try again.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsThis Depot has no practice database yet.

200 response body

FieldTypeDescription
[].billIdstring or null
[].closedAtstring or null
[].connectorIdrequiredstring
[].connectorNamerequiredstring
[].flaggedCountrequiredinteger
[].itemCountrequiredinteger
[].itemsrequiredarray of ReconciliationItemView
[].items[].billedCentsinteger or null

int64.

[].items[].billedQtystring or null
[].items[].clientIdstring or null
[].items[].clientNamestring or null
[].items[].directorySeatCountinteger or null
[].items[].flagsrequiredarray of string
[].items[].priceSourcestring or null
[].items[].productNamestring or null
[].items[].publicIdrequiredstring
[].items[].resolutionrequiredstring
[].items[].rmmSeatCountinteger or null
[].items[].subscriptionIdstring or null
[].items[].trueUpInvoiceIdstring or null
[].items[].trueUpInvoiceNumberstring or null
[].items[].unitCostCentsinteger or null

int64.

[].items[].unitPriceCentsinteger or null

int64.

[].items[].vendorCostCentsrequiredinteger

int64.

[].items[].vendorQtyrequiredstring
[].monthrequiredstring
[].publicIdrequiredstring
[].rowVersionrequiredinteger

int64.

[].runAtrequiredstring
[].staterequiredstring
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/billing/subscription-reconciliation?connector=<connector>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/billing/subscription-reconciliation/{id}

Section titled “GET /api/v1/billing/subscription-reconciliation/{id}”

GETpsa:readmsp facemspIdempotent

Source: [object Object]

getReconciliation reads one month’s reconciliation with its items.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, ReconciliationViewSuccess.
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.
409application/problem+json, ProblemDetailsThe request conflicts with the current state of the record.
412application/problem+json, ProblemDetailsSomeone else changed this since you opened it. Reload and try again.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsThis Depot has no practice database yet.

200 response body

FieldTypeDescription
billIdstring or null
closedAtstring or null
connectorIdrequiredstring
connectorNamerequiredstring
flaggedCountrequiredinteger
itemCountrequiredinteger
itemsrequiredarray of ReconciliationItemView
items[].billedCentsinteger or null

int64.

items[].billedQtystring or null
items[].clientIdstring or null
items[].clientNamestring or null
items[].directorySeatCountinteger or null
items[].flagsrequiredarray of string
items[].priceSourcestring or null
items[].productNamestring or null
items[].publicIdrequiredstring
items[].resolutionrequiredstring
items[].rmmSeatCountinteger or null
items[].subscriptionIdstring or null
items[].trueUpInvoiceIdstring or null
items[].trueUpInvoiceNumberstring or null
items[].unitCostCentsinteger or null

int64.

items[].unitPriceCentsinteger or null

int64.

items[].vendorCostCentsrequiredinteger

int64.

items[].vendorQtyrequiredstring
monthrequiredstring
publicIdrequiredstring
rowVersionrequiredinteger

int64.

runAtrequiredstring
staterequiredstring
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/billing/subscription-reconciliation/<id>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/billing/subscription-reconciliation/{id}/close

Section titled “POST /api/v1/billing/subscription-reconciliation/{id}/close”

POSTpsa:writemsp facemspIdempotent

Source: [object Object]

closeReconciliation closes the month: no re-run, no further resolutions.

NameInTypeRequiredDescription
idpathstringYesA uuid.
StatusBodyDescription
200application/json, ReconciliationViewSuccess.
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:write.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThe request conflicts with the current state of the record.
412application/problem+json, ProblemDetailsSomeone else changed this since you opened it. Reload and try again.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsThis Depot has no practice database yet.

200 response body

FieldTypeDescription
billIdstring or null
closedAtstring or null
connectorIdrequiredstring
connectorNamerequiredstring
flaggedCountrequiredinteger
itemCountrequiredinteger
itemsrequiredarray of ReconciliationItemView
items[].billedCentsinteger or null

int64.

items[].billedQtystring or null
items[].clientIdstring or null
items[].clientNamestring or null
items[].directorySeatCountinteger or null
items[].flagsrequiredarray of string
items[].priceSourcestring or null
items[].productNamestring or null
items[].publicIdrequiredstring
items[].resolutionrequiredstring
items[].rmmSeatCountinteger or null
items[].subscriptionIdstring or null
items[].trueUpInvoiceIdstring or null
items[].trueUpInvoiceNumberstring or null
items[].unitCostCentsinteger or null

int64.

items[].unitPriceCentsinteger or null

int64.

items[].vendorCostCentsrequiredinteger

int64.

items[].vendorQtyrequiredstring
monthrequiredstring
publicIdrequiredstring
rowVersionrequiredinteger

int64.

runAtrequiredstring
staterequiredstring
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 POST 'https://depot.example.com/api/v1/billing/subscription-reconciliation/<id>/close' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/billing/subscription-reconciliation/items/{id}/resolve

Section titled “POST /api/v1/billing/subscription-reconciliation/items/{id}/resolve”

POSTpsa:invoicemsp facemspIdempotent

Source: [object Object]

resolveReconciliationItem resolves one flagged item: ignored, or trued_up, which raises a draft invoice for the client covering the seats the vendor billed and the client was not billed for (priced at the agreement line, or at cost when the subscription drives no line).

NameInTypeRequiredDescription
idpathstringYesA uuid.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, ReconciliationItemViewSuccess.
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.
409application/problem+json, ProblemDetailsThe request conflicts with the current state of the record.
412application/problem+json, ProblemDetailsSomeone else changed this since you opened it. Reload and try again.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsThis Depot has no practice database yet.

200 response body

FieldTypeDescription
billedCentsinteger or null

int64.

billedQtystring or null
clientIdstring or null
clientNamestring or null
directorySeatCountinteger or null
flagsrequiredarray of string
priceSourcestring or null
productNamestring or null
publicIdrequiredstring
resolutionrequiredstring
rmmSeatCountinteger or null
subscriptionIdstring or null
trueUpInvoiceIdstring or null
trueUpInvoiceNumberstring or null
unitCostCentsinteger or null

int64.

unitPriceCentsinteger or null

int64.

vendorCostCentsrequiredinteger

int64.

vendorQtyrequiredstring
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 POST 'https://depot.example.com/api/v1/billing/subscription-reconciliation/items/<id>/resolve' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '"string"'

POST /api/v1/billing/subscription-reconciliation/run

Section titled “POST /api/v1/billing/subscription-reconciliation/run”

POSTpsa:writemsp facemspIdempotent

Source: [object Object]

runReconciliation reconciles one connection’s month now (“2026-10” or “2026-10-01”).

A re-run keeps resolved items; a closed month is 409 reconciliationClosed.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, ReconciliationViewSuccess.
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:write.
404application/problem+json, ProblemDetailsNo resource matches.
409application/problem+json, ProblemDetailsThe request conflicts with the current state of the record.
412application/problem+json, ProblemDetailsSomeone else changed this since you opened it. Reload and try again.
500application/problem+json, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsThis Depot has no practice database yet.

200 response body

FieldTypeDescription
billIdstring or null
closedAtstring or null
connectorIdrequiredstring
connectorNamerequiredstring
flaggedCountrequiredinteger
itemCountrequiredinteger
itemsrequiredarray of ReconciliationItemView
items[].billedCentsinteger or null

int64.

items[].billedQtystring or null
items[].clientIdstring or null
items[].clientNamestring or null
items[].directorySeatCountinteger or null
items[].flagsrequiredarray of string
items[].priceSourcestring or null
items[].productNamestring or null
items[].publicIdrequiredstring
items[].resolutionrequiredstring
items[].rmmSeatCountinteger or null
items[].subscriptionIdstring or null
items[].trueUpInvoiceIdstring or null
items[].trueUpInvoiceNumberstring or null
items[].unitCostCentsinteger or null

int64.

items[].unitPriceCentsinteger or null

int64.

items[].vendorCostCentsrequiredinteger

int64.

items[].vendorQtyrequiredstring
monthrequiredstring
publicIdrequiredstring
rowVersionrequiredinteger

int64.

runAtrequiredstring
staterequiredstring
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 POST 'https://depot.example.com/api/v1/billing/subscription-reconciliation/run' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '"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.