Shared objects

Object shapes referenced by name across several endpoints, shown exactly as they appear on the wire.

Updated 05 Aug 20264 min read

Endpoint pages reference these shapes by name. nullable(T) is the wrapper described under payload conventions: { "String": "…", "Valid": true }, and likewise for Time and Int64, where "Valid": false means no value is present.

#User

The caller's account and memberships. Returned by sign-in and by GET /api/v1/get-user-info.

json
{
  "UUID": 4021,
  "Email": "operator@example.com",
  "FirstName": { "String": "Ada", "Valid": true },
  "Surname": { "String": "Okafor", "Valid": true },
  "LastLogin": { "Time": "2026-08-03T09:14:22Z", "Valid": true },
  "PhoneNumber": { "String": "+441632960431", "Valid": true },
  "DefaultOrg": 118,
  "DefaultWorkspace": 342,
  "OrganisationsInfo": {
    "Organisations": [
      {
        "OrgID": 118,
        "OrgName": "Northgate Treasury",
        "Workspaces": {
          "Workspaces": [
            {
              "WorkspaceInfo": {
                "uid": 342,
                "name": "Treasury Operations",
                "description": "Live issuance and settlement",
                "net": "mainnet"
              },
              "Role": {
                "RoleId": 77,
                "Name": "Approver",
                "Description": "Reviews and signs pending movements",
                "Perm": [
                  { "UID": 6, "RuleName": "PAYMENT_APPROVE" },
                  { "UID": 8, "RuleName": "VIEW_BALANCES" }
                ]
              }
            }
          ]
        }
      }
    ]
  }
}

#Key

A registered signing key. Public data only.

json
{
  "ID": "key_01HZX4M8QT",
  "UserID": "4021",
  "KeyType": "hd_xpub",
  "Status": "active",
  "PubKeyHex": { "String": "02c6047f9441ed7d…", "Valid": true },
  "Xpub": { "String": "zpub6rFR7y4Q2AijBEqTUquhVz…", "Valid": true },
  "MasterFingerprint": { "String": "7f3a1c4d", "Valid": true },
  "DerivationBasePath": { "String": "m/84'/0'/0'", "Valid": true },
  "Label": { "String": "Treasury signing key", "Valid": true },
  "Net": "mainnet",
  "CreatedAt": "2026-06-11T14:02:51Z",
  "UpdatedAt": "2026-06-11T14:02:51Z"
}

Status is active or revoked. A member holds one active key per network.

#Vault

A multi-signature vault with its limits and signer set.

json
{
  "id": "vault_01HZXB2K7P",
  "user_id": "4021",
  "workspace_id": "342",
  "name": "Issuance vault",
  "network": "mainnet",
  "m": 2,
  "n": 3,
  "script_type": "p2wsh",
  "witness_script_hex": "5221024f8e…53ae",
  "address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
  "created_at": "2026-06-14T10:22:03Z",
  "updated_at": "2026-07-28T16:41:19Z",
  "detailed_vault_limits": {
    "Limit": "250000.00",
    "CyclePeriod": "M",
    "CycleDay": 1,
    "Used": "18400.50",
    "Unused": "231599.50",
    "NextReset": "2026-09-01T00:00:00Z"
  },
  "signers": [
    { "key_index": 0, "first_name": { "String": "Ada", "Valid": true }, "surname": { "String": "Okafor", "Valid": true } },
    { "key_index": 1, "first_name": { "String": "Ben", "Valid": true }, "surname": { "String": "Iversen", "Valid": true } },
    { "key_index": 2, "first_name": { "String": "Chi", "Valid": true }, "surname": { "String": "Nakamura", "Valid": true } }
  ]
}

A limit_error string appears instead of detailed_vault_limits when the policy service could not be reached.

#Contract

A token record. status follows the deployment lifecycle documented in the status reference.

json
{
  "contract_uid": 512,
  "vault_id": "vault_01HZXB2K7P",
  "contract_id": "9f2c8b1d4a…41a",
  "symbol": "NGT",
  "icon": "https://cdn.example.com/tokens/ngt.svg",
  "decimals": 2,
  "total_supply": "500000000",
  "max_supply": "1000000000",
  "status": "CONFIRMED",
  "bytecode_hash": "b7f1e2c9…9ac",
  "network": "mainnet",
  "deploy_psbt_id": "psbt_01HZXC9F4R",
  "whitelist_enabled": true,
  "signers": [
    { "key_id": "key_01HZX4M8QT", "is_signed": true, "user_id": "4021" },
    { "key_id": "key_01HZX52NRB", "is_signed": true, "user_id": "4088" }
  ]
}

status is one of PENDING, BROADCASTING, CONFIRMED, or FAILED. contract_id, bytecode_hash, network, and deploy_psbt_id are null until the deployment is built and broadcast.

#TokenBalance

One token holding in a vault.

json
{
  "contract_uid": 512,
  "contract_address": "9f2c8b1d4a…41a",
  "name": "Northgate Token",
  "balance": "12750000",
  "decimals": 2,
  "icon": "https://cdn.example.com/tokens/ngt.svg",
  "owned": true,
  "total_supply": "500000000",
  "max_supply": "1000000000"
}

owned is true when this vault owns the token contract, which is what allows it to mint and burn. balance, total_supply, and max_supply are raw units.

#AuditLogEntry

One audit log row.

json
{
  "event_uid": "evt_01HZXG7T2M",
  "org_uid": "118",
  "workspace_uid": "342",
  "timestamp": "2026-08-03T11:47:09Z",
  "category": "SIGNING",
  "action": "SIGNATURE_SUBMITTED",
  "description": "Signature recorded for proposal psbt_01HZXC9F4R (2 of 3)",
  "user_uuid": 4088,
  "role_uid": "77",
  "trace_id": "3f9a1b7c8d2e4f60",
  "prev_hash": "Yj8xQ1pLc0dGN2h2…",
  "event_hash": "T3JvYml0U1FSTGF1…",
  "user_name": "Ben Iversen"
}

prev_hash and event_hash are base64. They chain entries together so that a removed or altered row is detectable.

#MoonPayTransaction

One Bitcoin purchase, as reported by MoonPay.

json
{
  "id": "d1f4c8a2-6b3e-4c17-9f52-0a7b8e6d4c31",
  "status": "completed",
  "created_at": "2026-08-01T08:12:44Z",
  "updated_at": "2026-08-01T08:31:02Z",
  "base_currency_amount": 5000,
  "base_currency_code": "gbp",
  "quote_currency_amount": 0.0812,
  "quote_currency_code": "btc",
  "fee_amount": 74.5,
  "extra_fee_amount": 0,
  "network_fee_amount": 3.2,
  "are_fees_included": true,
  "wallet_address": "bc1qm34lsc65zpw79lxes69zkqmk6ee3ewf0j77s3h",
  "crypto_transaction_id": "4a7d2e9f1b…c83",
  "failure_reason": null,
  "external_transaction_id": "4021"
}

status is one of waitingPayment, pending, waitingAuthorization, completed, or failed. crypto_transaction_id is the Bitcoin transaction id, set once the coins are sent.

#OnboardingRequest

A stored organisation request.

json
{
  "uid": 91,
  "requester_uuid": 4021,
  "requester_email": "operator@example.com",
  "first_name": "Ada",
  "last_name": "Okafor",
  "work_email": "ada.okafor@northgate.example",
  "messaging_platform": "telegram",
  "messaging_handle": "@ada_okafor",
  "monthly_volume": "1m_to_10m",
  "referral_source": "conference",
  "referral_source_detail": { "String": "", "Valid": false },
  "org_name": "Northgate Treasury",
  "workspace_name": "Treasury Operations",
  "status": "pending",
  "review_note": { "String": "", "Valid": false },
  "approved_by_email": { "String": "", "Valid": false },
  "approved_at": { "Time": "0001-01-01T00:00:00Z", "Valid": false },
  "was_created": false,
  "created_org_uid": { "Int64": 0, "Valid": false },
  "submitted_at": "2026-07-30T13:05:27Z",
  "updated_at": "2026-07-30T13:05:27Z"
}
Was this page helpful?