{
  "title": "Ghaem Gold API",
  "revision": "51ce12b9664f",
  "apis": [
    {
      "app": "assets",
      "title": "Assets API",
      "version": "1.0.0",
      "operations": 3,
      "tags": [
        "Assets"
      ],
      "extensions": [
        "x-review-queue",
        "x-invariant-recheck"
      ],
      "error": null
    },
    {
      "app": "audit",
      "title": "Audit Log API",
      "version": "1.0.0",
      "operations": 4,
      "tags": [
        "Audit Log",
        "Audit Integrity"
      ],
      "extensions": [
        "x-hash-chain"
      ],
      "error": null
    },
    {
      "app": "audit-admin",
      "title": "Admin Audit Log API",
      "version": "1.0.0",
      "operations": 1,
      "tags": [
        "Admin Audit Export"
      ],
      "extensions": [
        "x-export-controls"
      ],
      "error": null
    },
    {
      "app": "auth",
      "title": "Authentication API",
      "version": "1.0.0",
      "operations": 6,
      "tags": [
        "Sessions",
        "Account"
      ],
      "extensions": [
        "x-token-specifications",
        "x-lockout-specifications",
        "x-rate-limits"
      ],
      "error": null
    },
    {
      "app": "bank-accounts",
      "title": "Bank Accounts API",
      "version": "1.0.0",
      "operations": 9,
      "tags": [
        "Banks",
        "Party Bank Accounts",
        "Bank Accounts"
      ],
      "extensions": [
        "x-identifier-handling",
        "x-payment-snapshot-independence"
      ],
      "error": null
    },
    {
      "app": "bank-accounts-admin",
      "title": "Admin Bank Accounts API",
      "version": "1.0.0",
      "operations": 3,
      "tags": [
        "Admin Bank Account Matching Flags"
      ],
      "extensions": [
        "x-matching-flag-scope"
      ],
      "error": null
    },
    {
      "app": "files",
      "title": "Files API",
      "version": "1.0.0",
      "operations": 2,
      "tags": [
        "File Retrieval",
        "Local Object Storage"
      ],
      "extensions": [
        "x-signed-url-model"
      ],
      "error": null
    },
    {
      "app": "financial-records",
      "title": "Financial Records API",
      "version": "1.0.0",
      "operations": 4,
      "tags": [
        "Financial Records",
        "Orphans"
      ],
      "extensions": [
        "x-serialization",
        "x-orphan-policy"
      ],
      "error": null
    },
    {
      "app": "health",
      "title": "Health and Metrics API",
      "version": "1.0.0",
      "operations": 3,
      "tags": [
        "Health",
        "Metrics"
      ],
      "extensions": [
        "x-probe-semantics"
      ],
      "error": null
    },
    {
      "app": "ingestion",
      "title": "Ingestion API",
      "version": "1.0.0",
      "operations": 7,
      "tags": [
        "Sync Runs",
        "Raw Records",
        "Quarantine"
      ],
      "extensions": [
        "x-quarantine-actions",
        "x-ingestion-concurrency"
      ],
      "error": null
    },
    {
      "app": "ingestion-admin",
      "title": "Admin Ingestion API",
      "version": "1.0.0",
      "operations": 3,
      "tags": [
        "Admin Quarantine Resolution",
        "Admin Reprocessing"
      ],
      "extensions": [
        "x-quarantine-actions",
        "x-replay-safety"
      ],
      "error": null
    },
    {
      "app": "matching",
      "title": "Matching API",
      "version": "1.0.0",
      "operations": 15,
      "tags": [
        "Matching Board",
        "Matching Runs",
        "Matching Allocations",
        "Matching Export"
      ],
      "extensions": [
        "x-matching-invariants",
        "x-lock-semantics"
      ],
      "error": null
    },
    {
      "app": "matching-admin",
      "title": "Admin Matching API",
      "version": "1.0.0",
      "operations": 4,
      "tags": [
        "Admin Matching Locks",
        "Admin Matching Issuance",
        "Admin Matching Settings"
      ],
      "extensions": [
        "x-issuance-idempotency",
        "x-lock-semantics"
      ],
      "error": null
    },
    {
      "app": "operators-admin",
      "title": "Admin Operators API",
      "version": "1.0.0",
      "operations": 8,
      "tags": [
        "Admin Operators"
      ],
      "extensions": [
        "x-account-lockouts"
      ],
      "error": null
    },
    {
      "app": "parties",
      "title": "Parties API",
      "version": "1.0.0",
      "operations": 8,
      "tags": [
        "Parties",
        "Party Phones"
      ],
      "extensions": [
        "x-field-ownership"
      ],
      "error": null
    },
    {
      "app": "parties-admin",
      "title": "Admin Parties API",
      "version": "1.0.0",
      "operations": 2,
      "tags": [
        "Admin Party Matching Exclusion"
      ],
      "extensions": [
        "x-exclusion-scope"
      ],
      "error": null
    },
    {
      "app": "party-groups",
      "title": "Party Groups API",
      "version": "1.0.0",
      "operations": 5,
      "tags": [
        "Party Groups"
      ],
      "extensions": [
        "x-vendor-owned-fields"
      ],
      "error": null
    },
    {
      "app": "payments",
      "title": "Payments API",
      "version": "1.0.0",
      "operations": 13,
      "tags": [
        "Payments",
        "Payment Transitions",
        "Payment Receipts",
        "Payment Operations"
      ],
      "extensions": [
        "x-payment-state-machine",
        "x-receipt-pipeline"
      ],
      "error": null
    },
    {
      "app": "rbac-admin",
      "title": "Admin Roles and Permissions API",
      "version": "1.0.0",
      "operations": 7,
      "tags": [
        "Admin Panel Roles",
        "Admin Permissions"
      ],
      "extensions": [
        "x-role-immutability"
      ],
      "error": null
    }
  ],
  "operations": [
    {
      "id": "listAssets",
      "app": "assets",
      "method": "GET",
      "path": "/api/v1/assets",
      "summary": "List assets, pending-review ones first.",
      "tags": [
        "Assets"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedAssets",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "658f86f0c653"
    },
    {
      "id": "getAsset",
      "app": "assets",
      "method": "GET",
      "path": "/api/v1/assets/{id}",
      "summary": "Retrieve one asset.",
      "tags": [
        "Assets"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "AssetEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b182491038c5"
    },
    {
      "id": "updateAsset",
      "app": "assets",
      "method": "PATCH",
      "path": "/api/v1/assets/{id}",
      "summary": "Name or reclassify an asset.",
      "tags": [
        "Assets"
      ],
      "auth": "bearer",
      "request": "UpdateAssetRequest",
      "responses": {
        "200": "AssetUpdateEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "80e402880b13"
    },
    {
      "id": "listAuditLogs",
      "app": "audit",
      "method": "GET",
      "path": "/api/v1/audit-logs",
      "summary": "List audit log entries, newest first.",
      "tags": [
        "Audit Log"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "CursorPaginatedAuditLogs",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "00be0f6c1024"
    },
    {
      "id": "listAuditActions",
      "app": "audit",
      "method": "GET",
      "path": "/api/v1/audit-logs/actions",
      "summary": "List the catalog of recordable actions.",
      "tags": [
        "Audit Log"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "AuditActionCatalogEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "14362b525291"
    },
    {
      "id": "verifyAuditChain",
      "app": "audit",
      "method": "GET",
      "path": "/api/v1/audit-logs/verify-chain",
      "summary": "Verify the audit log's hash chain.",
      "tags": [
        "Audit Integrity"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "VerifyChainEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "dee875bdbeb4"
    },
    {
      "id": "getAuditLog",
      "app": "audit",
      "method": "GET",
      "path": "/api/v1/audit-logs/{id}",
      "summary": "Retrieve one audit log entry.",
      "tags": [
        "Audit Log"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "AuditLogEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b562b7fd26bb"
    },
    {
      "id": "adminExportAuditLogs",
      "app": "audit-admin",
      "method": "GET",
      "path": "/api/v1/audit-logs/export",
      "summary": "Export matching audit log entries.",
      "tags": [
        "Admin Audit Export"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "AuditExportEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "dd30a9885f5b"
    },
    {
      "id": "login",
      "app": "auth",
      "method": "POST",
      "path": "/api/v1/auth/login",
      "summary": "Sign in and obtain an access/refresh token pair.",
      "tags": [
        "Sessions"
      ],
      "auth": "public",
      "request": "LoginRequest",
      "responses": {
        "200": "SessionEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "14931e909023"
    },
    {
      "id": "refreshSession",
      "app": "auth",
      "method": "POST",
      "path": "/api/v1/auth/refresh",
      "summary": "Rotate a refresh token for a new token pair.",
      "tags": [
        "Sessions"
      ],
      "auth": "public",
      "request": "RefreshRequest",
      "responses": {
        "200": "SessionEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "423": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "416fef5e0b5f"
    },
    {
      "id": "logout",
      "app": "auth",
      "method": "POST",
      "path": "/api/v1/auth/logout",
      "summary": "End the current session, or every session this operator holds.",
      "tags": [
        "Sessions"
      ],
      "auth": "bearer",
      "request": "LogoutRequest",
      "responses": {
        "200": "LogoutEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0f2ea281578e"
    },
    {
      "id": "getCurrentOperator",
      "app": "auth",
      "method": "GET",
      "path": "/api/v1/auth/me",
      "summary": "Read the signed-in operator and their effective permissions.",
      "tags": [
        "Account"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OperatorIdentityEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "2691fe11166b"
    },
    {
      "id": "changePassword",
      "app": "auth",
      "method": "POST",
      "path": "/api/v1/auth/change-password",
      "summary": "Change your own password.",
      "tags": [
        "Account"
      ],
      "auth": "bearer",
      "request": "ChangePasswordRequest",
      "responses": {
        "200": "ChangePasswordEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "03f14d3e266e"
    },
    {
      "id": "reauthenticate",
      "app": "auth",
      "method": "POST",
      "path": "/api/v1/auth/reauth",
      "summary": "Re-enter your password to unlock dangerous actions for five minutes.",
      "tags": [
        "Account"
      ],
      "auth": "bearer",
      "request": "ReauthRequest",
      "responses": {
        "200": "ReauthEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "378464eb83f5"
    },
    {
      "id": "listBanks",
      "app": "bank-accounts",
      "method": "GET",
      "path": "/api/v1/banks",
      "summary": "List the bank catalog.",
      "tags": [
        "Banks"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "7beb01c3c4fe"
    },
    {
      "id": "listPartyBankAccounts",
      "app": "bank-accounts",
      "method": "GET",
      "path": "/api/v1/parties/{partyId}/bank-accounts",
      "summary": "List a party's bank accounts.",
      "tags": [
        "Party Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "57b88411b707"
    },
    {
      "id": "createPartyBankAccount",
      "app": "bank-accounts",
      "method": "POST",
      "path": "/api/v1/parties/{partyId}/bank-accounts",
      "summary": "Add a bank account to a party.",
      "tags": [
        "Party Bank Accounts"
      ],
      "auth": "bearer",
      "request": "CreateBankAccountRequest",
      "responses": {
        "201": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0f61318b5ab3"
    },
    {
      "id": "getBankAccount",
      "app": "bank-accounts",
      "method": "GET",
      "path": "/api/v1/bank-accounts/{id}",
      "summary": "Retrieve one bank account.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "1d761fd2d9a3"
    },
    {
      "id": "deleteBankAccount",
      "app": "bank-accounts",
      "method": "DELETE",
      "path": "/api/v1/bank-accounts/{id}",
      "summary": "Soft-delete a bank account.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountDeletedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "593bfbdd844c"
    },
    {
      "id": "updateBankAccount",
      "app": "bank-accounts",
      "method": "PATCH",
      "path": "/api/v1/bank-accounts/{id}",
      "summary": "Edit a bank account's identifiers or details.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": "UpdateBankAccountRequest",
      "responses": {
        "200": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "56bdd322264f"
    },
    {
      "id": "restoreBankAccount",
      "app": "bank-accounts",
      "method": "POST",
      "path": "/api/v1/bank-accounts/{id}/restore",
      "summary": "Restore a soft-deleted bank account.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "8e208de93195"
    },
    {
      "id": "setDefaultBankAccount",
      "app": "bank-accounts",
      "method": "POST",
      "path": "/api/v1/bank-accounts/{id}/set-default",
      "summary": "Nominate an account as the party's default destination.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "557507e506d9"
    },
    {
      "id": "revealBankAccountIban",
      "app": "bank-accounts",
      "method": "GET",
      "path": "/api/v1/bank-accounts/{id}/reveal-iban",
      "summary": "Reveal an account's full IBAN.",
      "tags": [
        "Bank Accounts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "IbanRevealEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "87e606f96cf5"
    },
    {
      "id": "adminExcludeBankAccountFromMatching",
      "app": "bank-accounts-admin",
      "method": "POST",
      "path": "/api/v1/bank-accounts/{id}/matching-exclusion",
      "summary": "Exclude a bank account from settlement matching.",
      "tags": [
        "Admin Bank Account Matching Flags"
      ],
      "auth": "bearer",
      "request": "SetMatchingExclusionRequest",
      "responses": {
        "200": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "5e21af815ce2"
    },
    {
      "id": "adminRemoveBankAccountMatchingExclusion",
      "app": "bank-accounts-admin",
      "method": "DELETE",
      "path": "/api/v1/bank-accounts/{id}/matching-exclusion",
      "summary": "Return a bank account to settlement matching.",
      "tags": [
        "Admin Bank Account Matching Flags"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BankAccountEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "219bf5d73da9"
    },
    {
      "id": "adminSetBankAccountCompanyFlag",
      "app": "bank-accounts-admin",
      "method": "POST",
      "path": "/api/v1/bank-accounts/{id}/company-flag",
      "summary": "Mark or unmark a bank account as a company account.",
      "tags": [
        "Admin Bank Account Matching Flags"
      ],
      "auth": "bearer",
      "request": "SetCompanyFlagRequest",
      "responses": {
        "200": "BankAccountEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "6d7a69f6a834"
    },
    {
      "id": "getFileThumbnailUrl",
      "app": "files",
      "method": "GET",
      "path": "/api/v1/files/{id}/thumb",
      "summary": "Get a short-lived signed URL for a receipt's thumbnail.",
      "tags": [
        "File Retrieval"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "SignedUrlEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "c39c33797881"
    },
    {
      "id": "getLocalObject",
      "app": "files",
      "method": "GET",
      "path": "/api/v1/files/local-object",
      "summary": "Serve a stored object against a signed URL.",
      "tags": [
        "Local Object Storage"
      ],
      "auth": "public",
      "request": null,
      "responses": {
        "200": "string",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "261f466285cf"
    },
    {
      "id": "listFinancialRecords",
      "app": "financial-records",
      "method": "GET",
      "path": "/api/v1/financial-records",
      "summary": "List the current book of counterparty balances.",
      "tags": [
        "Financial Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedFinancialRecords",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "dfe5c4f946f8"
    },
    {
      "id": "getOrphanReport",
      "app": "financial-records",
      "method": "GET",
      "path": "/api/v1/financial-records/orphans",
      "summary": "Report balances that have no party record.",
      "tags": [
        "Orphans"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OrphanReportEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a6160f5f2e50"
    },
    {
      "id": "getFinancialRecord",
      "app": "financial-records",
      "method": "GET",
      "path": "/api/v1/financial-records/{externalCode}",
      "summary": "Retrieve one financial record by its accounting code.",
      "tags": [
        "Financial Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "FinancialRecordDetailEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "8397a92ef322"
    },
    {
      "id": "listFinancialRecordHistory",
      "app": "financial-records",
      "method": "GET",
      "path": "/api/v1/financial-records/{externalCode}/history",
      "summary": "List one code's snapshot history with per-asset deltas.",
      "tags": [
        "Financial Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedFinancialRecordHistory",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "28886d26abe6"
    },
    {
      "id": "getLiveness",
      "app": "health",
      "method": "GET",
      "path": "/api/v1/health/live",
      "summary": "Report that the process is alive.",
      "tags": [
        "Health"
      ],
      "auth": "public",
      "request": null,
      "responses": {
        "200": "LivenessEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a2c2250858db"
    },
    {
      "id": "getReadiness",
      "app": "health",
      "method": "GET",
      "path": "/api/v1/health/ready",
      "summary": "Report whether every dependency is reachable.",
      "tags": [
        "Health"
      ],
      "auth": "public",
      "request": null,
      "responses": {
        "200": "ReadinessEnvelope",
        "500": "ErrorEnvelope",
        "503": "ErrorEnvelope"
      },
      "hash": "7f818ff5d918"
    },
    {
      "id": "getMetrics",
      "app": "health",
      "method": "GET",
      "path": "/metrics",
      "summary": "Expose Prometheus metrics.",
      "tags": [
        "Metrics"
      ],
      "auth": "public",
      "request": null,
      "responses": {
        "200": "string",
        "500": "ErrorEnvelope"
      },
      "hash": "a0b16fd19326"
    },
    {
      "id": "listSyncRuns",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/runs",
      "summary": "List synchronisation runs.",
      "tags": [
        "Sync Runs"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedSyncRuns",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "2e0ce97a251d"
    },
    {
      "id": "triggerSyncRun",
      "app": "ingestion",
      "method": "POST",
      "path": "/api/v1/sync/runs",
      "summary": "Trigger a synchronisation run for one entity.",
      "tags": [
        "Sync Runs"
      ],
      "auth": "bearer",
      "request": "TriggerSyncRunRequest",
      "responses": {
        "202": "SyncRunEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope",
        "503": "ErrorEnvelope"
      },
      "hash": "67be9d279302"
    },
    {
      "id": "listRawRecords",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/raw-records",
      "summary": "List raw external records.",
      "tags": [
        "Raw Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedRawRecords",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a7285fb8287b"
    },
    {
      "id": "getRawRecord",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/raw-records/{id}",
      "summary": "Retrieve one raw external record.",
      "tags": [
        "Raw Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "RawRecordEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b4d787289466"
    },
    {
      "id": "listQuarantine",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/quarantine",
      "summary": "List quarantined records.",
      "tags": [
        "Quarantine"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedQuarantine",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "edab29d9dabb"
    },
    {
      "id": "getQuarantineEntry",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/quarantine/{id}",
      "summary": "Retrieve one quarantined record.",
      "tags": [
        "Quarantine"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "QuarantineEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "41512878c92b"
    },
    {
      "id": "getReplayStatus",
      "app": "ingestion",
      "method": "GET",
      "path": "/api/v1/sync/replay/{jobId}",
      "summary": "Poll a bulk replay job's progress.",
      "tags": [
        "Raw Records"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "ReplayStatusEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a8968aeb2233"
    },
    {
      "id": "adminResolveQuarantine",
      "app": "ingestion-admin",
      "method": "POST",
      "path": "/api/v1/sync/quarantine/{id}/resolve",
      "summary": "Resolve a quarantined record.",
      "tags": [
        "Admin Quarantine Resolution"
      ],
      "auth": "bearer",
      "request": "ResolveQuarantineRequest",
      "responses": {
        "200": "ResolveQuarantineEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a740e3b032cd"
    },
    {
      "id": "adminReprocessRawRecord",
      "app": "ingestion-admin",
      "method": "POST",
      "path": "/api/v1/sync/raw-records/{id}/reprocess",
      "summary": "Reprocess one raw record through the current transformer.",
      "tags": [
        "Admin Reprocessing"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "ReprocessEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b77fbdd79bb7"
    },
    {
      "id": "adminStartReplay",
      "app": "ingestion-admin",
      "method": "POST",
      "path": "/api/v1/sync/replay",
      "summary": "Bulk-replay stored raw records through the current transformer.",
      "tags": [
        "Admin Reprocessing"
      ],
      "auth": "bearer",
      "request": "StartReplayRequest",
      "responses": {
        "202": "ReplayEnqueuedEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "974439632c81"
    },
    {
      "id": "getMatchingBoard",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/board",
      "summary": "Retrieve the live matching board.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BoardEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "d10edfb185e4"
    },
    {
      "id": "getMatchingBoardStats",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/board/stats",
      "summary": "Retrieve the board's KPI header.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "BoardStatsEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "01333fddbf9f"
    },
    {
      "id": "getMatchingPool",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/pool",
      "summary": "List unallocated debtors and creditors with no box.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PoolEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a4e1ce52db35"
    },
    {
      "id": "exportMatchingBoard",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/export",
      "summary": "Export the matching board as CSV or XLSX.",
      "tags": [
        "Matching Export"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "string",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "09d80c2358bb"
    },
    {
      "id": "recomputeMatchingBoard",
      "app": "matching",
      "method": "POST",
      "path": "/api/v1/matching/recompute",
      "summary": "Queue a global rebuild of the matching board.",
      "tags": [
        "Matching Runs"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "202": "RecomputeQueuedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "9227d1c8cebd"
    },
    {
      "id": "listMatchingRuns",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/runs",
      "summary": "List matching runs.",
      "tags": [
        "Matching Runs"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedMatchingRuns",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "7553fcb94f8a"
    },
    {
      "id": "getMatchingRun",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/runs/{id}",
      "summary": "Retrieve one matching run.",
      "tags": [
        "Matching Runs"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "MatchingRunEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "fb1c732f7df0"
    },
    {
      "id": "getMatchingGroup",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/groups/{id}",
      "summary": "Retrieve one matching box in full.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "GroupEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0e359333ccbb"
    },
    {
      "id": "listMatchingCandidates",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/groups/{id}/candidates",
      "summary": "List debtors that could be allocated to this box.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedCandidates",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "64c05e9dfc78"
    },
    {
      "id": "recomputeMatchingGroup",
      "app": "matching",
      "method": "POST",
      "path": "/api/v1/matching/groups/{id}/recompute",
      "summary": "Rebuild one matching box synchronously.",
      "tags": [
        "Matching Runs"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "GroupRecomputeEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a855a87dc4f5"
    },
    {
      "id": "createMatchingAllocation",
      "app": "matching",
      "method": "POST",
      "path": "/api/v1/matching/allocations",
      "summary": "Allocate a debtor to a target by hand.",
      "tags": [
        "Matching Allocations"
      ],
      "auth": "bearer",
      "request": "CreateAllocationRequest",
      "responses": {
        "201": "AllocationMutationEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "422": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "8f73ee4602dd"
    },
    {
      "id": "deleteMatchingAllocation",
      "app": "matching",
      "method": "DELETE",
      "path": "/api/v1/matching/allocations/{id}",
      "summary": "Remove an allocation.",
      "tags": [
        "Matching Allocations"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "AllocationDeletionEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "11e4e5314315"
    },
    {
      "id": "updateMatchingAllocation",
      "app": "matching",
      "method": "PATCH",
      "path": "/api/v1/matching/allocations/{id}",
      "summary": "Change an allocation's amount.",
      "tags": [
        "Matching Allocations"
      ],
      "auth": "bearer",
      "request": "UpdateAllocationAmountRequest",
      "responses": {
        "200": "AllocationMutationEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "422": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "e63e52b2b576"
    },
    {
      "id": "moveMatchingAllocation",
      "app": "matching",
      "method": "POST",
      "path": "/api/v1/matching/allocations/{id}/move",
      "summary": "Move a debtor from one box to another.",
      "tags": [
        "Matching Allocations"
      ],
      "auth": "bearer",
      "request": "MoveAllocationRequest",
      "responses": {
        "200": "AllocationMoveEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "422": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "48c89b6bf329"
    },
    {
      "id": "getMatchingSettings",
      "app": "matching",
      "method": "GET",
      "path": "/api/v1/matching/settings",
      "summary": "Read the live matching settings.",
      "tags": [
        "Matching Board"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "MatchingSettingsEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "9ee1e1eaa05f"
    },
    {
      "id": "adminLockMatchingGroup",
      "app": "matching-admin",
      "method": "POST",
      "path": "/api/v1/matching/groups/{id}/lock",
      "summary": "Freeze a matching box.",
      "tags": [
        "Admin Matching Locks"
      ],
      "auth": "bearer",
      "request": "LockGroupRequest",
      "responses": {
        "200": "GroupEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "a512417d96e2"
    },
    {
      "id": "adminUnlockMatchingGroup",
      "app": "matching-admin",
      "method": "POST",
      "path": "/api/v1/matching/groups/{id}/unlock",
      "summary": "Release a frozen matching box.",
      "tags": [
        "Admin Matching Locks"
      ],
      "auth": "bearer",
      "request": "UnlockGroupRequest",
      "responses": {
        "200": "GroupEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "8376e2eadd1d"
    },
    {
      "id": "adminIssueMatchingPayments",
      "app": "matching-admin",
      "method": "POST",
      "path": "/api/v1/matching/groups/{id}/issue-payments",
      "summary": "Issue payment orders from a frozen matching box.",
      "tags": [
        "Admin Matching Issuance"
      ],
      "auth": "bearer",
      "request": "IssuePaymentsRequest",
      "responses": {
        "200": "IssuePaymentsEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "fd43670cf544"
    },
    {
      "id": "adminUpdateMatchingSettings",
      "app": "matching-admin",
      "method": "PATCH",
      "path": "/api/v1/matching/settings",
      "summary": "Change the matching engine's parameters.",
      "tags": [
        "Admin Matching Settings"
      ],
      "auth": "bearer",
      "request": "UpdateMatchingSettingsRequest",
      "responses": {
        "200": "UpdateMatchingSettingsEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "41a1244f3935"
    },
    {
      "id": "adminListOperators",
      "app": "operators-admin",
      "method": "GET",
      "path": "/api/v1/operators",
      "summary": "List panel operators.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedOperators",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "c1f20c744c8e"
    },
    {
      "id": "adminCreateOperator",
      "app": "operators-admin",
      "method": "POST",
      "path": "/api/v1/operators",
      "summary": "Create a panel operator.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": "CreateOperatorRequest",
      "responses": {
        "201": "OperatorWithTemporaryPasswordEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0a65b0f967ed"
    },
    {
      "id": "adminGetOperator",
      "app": "operators-admin",
      "method": "GET",
      "path": "/api/v1/operators/{id}",
      "summary": "Retrieve one panel operator.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OperatorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "bd61946d3b27"
    },
    {
      "id": "adminDeleteOperator",
      "app": "operators-admin",
      "method": "DELETE",
      "path": "/api/v1/operators/{id}",
      "summary": "Soft-delete an operator.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OperatorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "02800977f4fc"
    },
    {
      "id": "adminUpdateOperator",
      "app": "operators-admin",
      "method": "PATCH",
      "path": "/api/v1/operators/{id}",
      "summary": "Update an operator's display name, email or role.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": "UpdateOperatorRequest",
      "responses": {
        "200": "OperatorEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "ca132aff3a03"
    },
    {
      "id": "adminSuspendOperator",
      "app": "operators-admin",
      "method": "POST",
      "path": "/api/v1/operators/{id}/suspend",
      "summary": "Suspend an operator and end their sessions immediately.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OperatorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "3e2836b2f7b6"
    },
    {
      "id": "adminActivateOperator",
      "app": "operators-admin",
      "method": "POST",
      "path": "/api/v1/operators/{id}/activate",
      "summary": "Reactivate a suspended operator and clear their lockout.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "OperatorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "23027195094d"
    },
    {
      "id": "adminResetOperatorPassword",
      "app": "operators-admin",
      "method": "POST",
      "path": "/api/v1/operators/{id}/reset-password",
      "summary": "Reset an operator's password and end their sessions.",
      "tags": [
        "Admin Operators"
      ],
      "auth": "bearer",
      "request": "ResetOperatorPasswordRequest",
      "responses": {
        "200": "OperatorWithTemporaryPasswordEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "2fc7316dfb79"
    },
    {
      "id": "listParties",
      "app": "parties",
      "method": "GET",
      "path": "/api/v1/parties",
      "summary": "List and search parties.",
      "tags": [
        "Parties"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedParties",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "66395138e959"
    },
    {
      "id": "getParty",
      "app": "parties",
      "method": "GET",
      "path": "/api/v1/parties/{id}",
      "summary": "Retrieve one party with its financial and contact context.",
      "tags": [
        "Parties"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyDetailEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "fe6a18ff9779"
    },
    {
      "id": "updateParty",
      "app": "parties",
      "method": "PATCH",
      "path": "/api/v1/parties/{id}",
      "summary": "Edit a party's locally owned fields.",
      "tags": [
        "Parties"
      ],
      "auth": "bearer",
      "request": "UpdatePartyRequest",
      "responses": {
        "200": "PartyUpdateEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "11018954e421"
    },
    {
      "id": "listPartyPhones",
      "app": "parties",
      "method": "GET",
      "path": "/api/v1/parties/{id}/phones",
      "summary": "List a party's contact numbers.",
      "tags": [
        "Party Phones"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyPhoneListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "75a2c54dfc70"
    },
    {
      "id": "createPartyPhone",
      "app": "parties",
      "method": "POST",
      "path": "/api/v1/parties/{id}/phones",
      "summary": "Add a contact number to a party.",
      "tags": [
        "Party Phones"
      ],
      "auth": "bearer",
      "request": "CreatePartyPhoneRequest",
      "responses": {
        "201": "PartyPhoneEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "ac1b538706b3"
    },
    {
      "id": "deletePartyPhone",
      "app": "parties",
      "method": "DELETE",
      "path": "/api/v1/parties/{id}/phones/{phoneId}",
      "summary": "Remove a contact number.",
      "tags": [
        "Party Phones"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PhoneDeletedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "4a5aedc79ea5"
    },
    {
      "id": "updatePartyPhone",
      "app": "parties",
      "method": "PATCH",
      "path": "/api/v1/parties/{id}/phones/{phoneId}",
      "summary": "Edit a contact number.",
      "tags": [
        "Party Phones"
      ],
      "auth": "bearer",
      "request": "UpdatePartyPhoneRequest",
      "responses": {
        "200": "PartyPhoneEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "959ae6d9bfea"
    },
    {
      "id": "setPrimaryPartyPhone",
      "app": "parties",
      "method": "POST",
      "path": "/api/v1/parties/{id}/phones/{phoneId}/set-primary",
      "summary": "Nominate a contact number as the party's primary.",
      "tags": [
        "Party Phones"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyPhoneEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "949e42882914"
    },
    {
      "id": "adminExcludePartyFromMatching",
      "app": "parties-admin",
      "method": "POST",
      "path": "/api/v1/parties/{id}/matching-exclusion",
      "summary": "Exclude a party from settlement matching.",
      "tags": [
        "Admin Party Matching Exclusion"
      ],
      "auth": "bearer",
      "request": "SetPartyMatchingExclusionRequest",
      "responses": {
        "200": "PartyDetailEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0be91435edbd"
    },
    {
      "id": "adminRemovePartyMatchingExclusion",
      "app": "parties-admin",
      "method": "DELETE",
      "path": "/api/v1/parties/{id}/matching-exclusion",
      "summary": "Return a party to settlement matching.",
      "tags": [
        "Admin Party Matching Exclusion"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyDetailEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "e9c853a7f1db"
    },
    {
      "id": "listPartyGroups",
      "app": "party-groups",
      "method": "GET",
      "path": "/api/v1/party-groups",
      "summary": "List party groups, unconfirmed ones first.",
      "tags": [
        "Party Groups"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedPartyGroups",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b453cd80d8e8"
    },
    {
      "id": "createPartyGroup",
      "app": "party-groups",
      "method": "POST",
      "path": "/api/v1/party-groups",
      "summary": "Register a party group manually.",
      "tags": [
        "Party Groups"
      ],
      "auth": "bearer",
      "request": "CreatePartyGroupRequest",
      "responses": {
        "201": "PartyGroupEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "c7efed32a8d9"
    },
    {
      "id": "getPartyGroup",
      "app": "party-groups",
      "method": "GET",
      "path": "/api/v1/party-groups/{id}",
      "summary": "Retrieve one party group.",
      "tags": [
        "Party Groups"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyGroupEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b4ba6bdce998"
    },
    {
      "id": "deletePartyGroup",
      "app": "party-groups",
      "method": "DELETE",
      "path": "/api/v1/party-groups/{id}",
      "summary": "Delete an empty party group.",
      "tags": [
        "Party Groups"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PartyGroupDeletedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "d3c17cef971b"
    },
    {
      "id": "updatePartyGroup",
      "app": "party-groups",
      "method": "PATCH",
      "path": "/api/v1/party-groups/{id}",
      "summary": "Name and confirm a party group.",
      "tags": [
        "Party Groups"
      ],
      "auth": "bearer",
      "request": "UpdatePartyGroupRequest",
      "responses": {
        "200": "PartyGroupEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0c1209300613"
    },
    {
      "id": "listPayments",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments",
      "summary": "List payment orders with filters.",
      "tags": [
        "Payments"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaginatedPayments",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "d81959f71ddd"
    },
    {
      "id": "createPayment",
      "app": "payments",
      "method": "POST",
      "path": "/api/v1/payments",
      "summary": "Create a payment order.",
      "tags": [
        "Payments"
      ],
      "auth": "bearer",
      "request": "CreatePaymentRequest",
      "responses": {
        "201": "PaymentEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "48594843b1ff"
    },
    {
      "id": "getPaymentsSummary",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/summary",
      "summary": "Aggregate payment counts and sums for the dashboard.",
      "tags": [
        "Payment Operations"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaymentsSummaryEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "45ed2b6da5db"
    },
    {
      "id": "getPaymentHygieneReport",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/hygiene",
      "summary": "Run the receipt hygiene sweep and report its findings.",
      "tags": [
        "Payment Operations"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "HygieneReportEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0d83b25ab261"
    },
    {
      "id": "exportPayments",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/export",
      "summary": "Export the matching payment orders as CSV or XLSX.",
      "tags": [
        "Payment Operations"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "string",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "51bbd62dc1a1"
    },
    {
      "id": "getPayment",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/{id}",
      "summary": "Retrieve one payment order.",
      "tags": [
        "Payments"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaymentEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "911be1ead581"
    },
    {
      "id": "deletePayment",
      "app": "payments",
      "method": "DELETE",
      "path": "/api/v1/payments/{id}",
      "summary": "Soft-delete a payment order.",
      "tags": [
        "Payments"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaymentDeletedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "e79feda49158"
    },
    {
      "id": "updatePayment",
      "app": "payments",
      "method": "PATCH",
      "path": "/api/v1/payments/{id}",
      "summary": "Edit a draft or issued payment order.",
      "tags": [
        "Payments"
      ],
      "auth": "bearer",
      "request": "UpdatePaymentRequest",
      "responses": {
        "200": "PaymentEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "7e1f5f45972e"
    },
    {
      "id": "listPaymentTransitions",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/{id}/transitions",
      "summary": "List a payment's status history.",
      "tags": [
        "Payment Transitions"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaymentTransitionListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "8b5575125c1f"
    },
    {
      "id": "transitionPayment",
      "app": "payments",
      "method": "POST",
      "path": "/api/v1/payments/{id}/transitions",
      "summary": "Move a payment to another status.",
      "tags": [
        "Payment Transitions"
      ],
      "auth": "bearer",
      "request": "TransitionPaymentRequest",
      "responses": {
        "200": "PaymentEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "0eef720ecf1a"
    },
    {
      "id": "getPaymentReceiptUrl",
      "app": "payments",
      "method": "GET",
      "path": "/api/v1/payments/{id}/receipt",
      "summary": "Get a short-lived signed URL for a payment's receipt.",
      "tags": [
        "Payment Receipts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "ReceiptUrlEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "b1106a49a761"
    },
    {
      "id": "uploadPaymentReceipt",
      "app": "payments",
      "method": "POST",
      "path": "/api/v1/payments/{id}/receipt",
      "summary": "Upload or replace a payment's receipt.",
      "tags": [
        "Payment Receipts"
      ],
      "auth": "bearer",
      "request": "object",
      "responses": {
        "200": "PaymentEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "413": "ErrorEnvelope",
        "415": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "08cec3c79062"
    },
    {
      "id": "deletePaymentReceipt",
      "app": "payments",
      "method": "DELETE",
      "path": "/api/v1/payments/{id}/receipt",
      "summary": "Detach a payment's receipt.",
      "tags": [
        "Payment Receipts"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PaymentEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "f7b15bf8980e"
    },
    {
      "id": "adminListPanelRoles",
      "app": "rbac-admin",
      "method": "GET",
      "path": "/api/v1/panel-roles",
      "summary": "List panel roles with their grants and operator counts.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PanelRoleListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "25496e73e0ee"
    },
    {
      "id": "adminCreatePanelRole",
      "app": "rbac-admin",
      "method": "POST",
      "path": "/api/v1/panel-roles",
      "summary": "Create an empty panel role.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": "CreatePanelRoleRequest",
      "responses": {
        "201": "PanelRoleEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "32826fa278e1"
    },
    {
      "id": "adminGetPanelRole",
      "app": "rbac-admin",
      "method": "GET",
      "path": "/api/v1/panel-roles/{id}",
      "summary": "Retrieve one panel role.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PanelRoleEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "c01812e3b130"
    },
    {
      "id": "adminDeletePanelRole",
      "app": "rbac-admin",
      "method": "DELETE",
      "path": "/api/v1/panel-roles/{id}",
      "summary": "Delete a panel role.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "RoleDeletedEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "5a0bcee246b5"
    },
    {
      "id": "adminUpdatePanelRole",
      "app": "rbac-admin",
      "method": "PATCH",
      "path": "/api/v1/panel-roles/{id}",
      "summary": "Rename or re-describe a panel role.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": "UpdatePanelRoleRequest",
      "responses": {
        "200": "PanelRoleEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "29a6dda489b1"
    },
    {
      "id": "adminSetPanelRolePermissions",
      "app": "rbac-admin",
      "method": "PUT",
      "path": "/api/v1/panel-roles/{id}/permissions",
      "summary": "Replace a role's entire permission set.",
      "tags": [
        "Admin Panel Roles"
      ],
      "auth": "bearer",
      "request": "SetRolePermissionsRequest",
      "responses": {
        "200": "PanelRoleEnvelope",
        "400": "ErrorEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "404": "ErrorEnvelope",
        "409": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "cf1fe9c52eea"
    },
    {
      "id": "adminListPermissions",
      "app": "rbac-admin",
      "method": "GET",
      "path": "/api/v1/permissions",
      "summary": "List the permission catalog, grouped.",
      "tags": [
        "Admin Permissions"
      ],
      "auth": "bearer",
      "request": null,
      "responses": {
        "200": "PermissionGroupListEnvelope",
        "401": "ErrorEnvelope",
        "403": "ErrorEnvelope",
        "429": "ErrorEnvelope",
        "500": "ErrorEnvelope"
      },
      "hash": "6749f8305a45"
    }
  ]
}