Dashboard

Aggregated home-screen summary: balance, today's metrics, the 7-day chart, and recent payments in a single call.

Custodial balance

POSThttps://api.gobtcpay.com/public/api/v1.2/merchant/custodial/get-balance

Custodial merchants only, a non-custodial merchant gets an error rather than zeroes. Returns the merchant's money as three non-overlapping levels in satoshi, so every satoshi is counted exactly once: inTransitSats (paid by the buyer, not yet credited to the platform Treasury, gross), pendingPayoutSats (credited but not yet paid out, net of the platform fee, and including amounts held by a blocked payout), and availableSats (on the merchant's own Uphold account and free to dispose of: the balance Uphold reports as available, minus reservedSats). reservedSats covers withdrawals the merchant has started that Uphold has not debited yet, and is 0 until withdrawals exist. balanceAsOf is the unix second the figures are current as of. balanceStale is true when the Uphold balance could not be refreshed: availableSats is then the last value seen and must not be shown as current, it is never replaced by a figure computed from our own data. upholdAccountReady is false while the merchant's Uphold account has not been created yet, which is why availableSats is 0. payoutBlocked is present only while something holds the payout back, carrying a machine-readable reason and a message for the merchant.

Authorization: merchantAuth

Responses

idstringrequired
Example:3fa85f64-5717-4562-b3fc-2c963f66afa6
resultobjectrequired
POST /merchant/custodial/get-balance
cURL
curl -X POST "$BASE_URL/merchant/custodial/get-balance" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
200 Successful response
JSON
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "result": {
    "$case": "success",
    "success": {
      "inTransitSats": "string",
      "pendingPayoutSats": "string",
      "availableSats": "string",
      "reservedSats": "string",
      "balanceAsOf": 1718012345,
      "balanceStale": true,
      "upholdAccountReady": true,
      "payoutBlocked": {
        "reason": "uphold_account_missing",
        "message": "string"
      }
    }
  }
}

Custodial capabilities

POSThttps://api.gobtcpay.com/public/api/v1.2/merchant/custodial/capabilities

Custodial merchants only, a non-custodial merchant gets an error rather than an empty list. Returns what Uphold currently allows the merchant's account to do, taken from the stored snapshot: the call never queries Uphold itself. Each entry of capabilities carries Uphold's code and name, whether it is enabled, the requirements still missing (a non-empty list means the capability does not pass even when enabled is true), the restrictions in force, and required, whether the platform needs it for the merchant to operate. checkedAt is the unix second of the last successful check, null when none ever succeeded; capabilities is then empty because the state is unknown, not because nothing is required. stale is true when the last refresh attempt failed, with the reason in lastError, the state shown is the last good one and may be out of date, which on its own does not block anything. actionsBlocked says whether the merchant's actions (creating payments, sending the payout) are being refused, and blockingCodes lists the required capabilities that do not pass. Requirement and restriction codes are free-form strings: Uphold introduces new ones without notice, so show a code you do not recognize as it is.

Authorization: merchantAuth

Responses

idstringrequired
Example:3fa85f64-5717-4562-b3fc-2c963f66afa6
resultobjectrequired
POST /merchant/custodial/capabilities
cURL
curl -X POST "$BASE_URL/merchant/custodial/capabilities" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
200 Successful response
JSON
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "result": {
    "$case": "success",
    "success": {
      "checkedAt": 1718012345,
      "stale": true,
      "lastError": "string",
      "actionsBlocked": true,
      "blockingCodes": [
        "string"
      ],
      "capabilities": [
        {
          "code": "string",
          "name": "Satoshi Coffee",
          "enabled": true,
          "requirements": [
            "string"
          ],
          "restrictions": [
            "string"
          ],
          "required": true
        }
      ]
    }
  }
}

Dashboard summary

POSThttps://api.gobtcpay.com/public/api/v1.2/merchant/dashboard/summary

Returns everything the home screen needs in one call: BTC / fiat balance, today's volume and transaction metrics (with day-over-day deltas), the 7-day chart7d, and the most recent payments.

Authorization: merchantAuth

Responses

idstringrequired
Example:3fa85f64-5717-4562-b3fc-2c963f66afa6
resultobjectrequired
POST /merchant/dashboard/summary
cURL
curl -X POST "$BASE_URL/merchant/dashboard/summary" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN"
200 Successful response
JSON
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "result": {
    "$case": "success",
    "success": {
      "businessName": "string",
      "balanceBtc": 50000,
      "balanceUsd": 50000,
      "btcUsdRate": 0,
      "today": {
        "volumeBtc": 0,
        "volumeUsd": 0,
        "txCount": 0,
        "deltaVolumePct": 0,
        "deltaTxCount": 0,
        "pendingBtc": 0,
        "pendingUsd": 0
      },
      "chart7d": [
        {
          "day": "string",
          "vol": 0,
          "count": 0
        }
      ],
      "recent": [
        {
          "time": "string",
          "amountBtc": 10,
          "amountUsd": 10,
          "status": [
            "initiated"
          ],
          "ref": "string",
          "paymentId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
          "expiredAt": 1718012345
        }
      ]
    }
  }
}