<!-- x-generated: Generated by the Hyperscale artifact pipeline; do not edit by hand -->

# Hyperscale Integration Pack

## Header
- Composition: accounts+activity+deposits+identity+internal_transfers+payouts+verification
- Capability slice: accounts+activity+deposits+identity+internal_transfers+payouts+verification
- Scope class: composition
- Capabilities: accounts, activity, deposits, identity, internal_transfers, payouts, verification
- Auth: api_key via HYPERSCALE_API_KEY
- Idempotency: mutations require idempotency keys; replay returns the terminal result
- Error envelope: HyperscaleError
- Pagination: list operations page with `limit` (default 50, max 100) and an opaque `cursor`; when more results exist the response carries `nextCursor`. pass it back as `cursor` until it is absent

## Operations
### account_balance_retrieve

- Name: account.balance.retrieve
- Summary: Retrieve an account balance
- Route: GET /v1/accounts/{accountId}/balance
- Idempotency: not_required
- Request fields: body=none; path=accountId; query=productId
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### account_close

- Name: account.close
- Summary: Close an account
- Route: POST /v1/accounts/{accountId}/close
- Idempotency: required
- Request fields: body=reason; path=accountId; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### account_create

- Name: account.create
- Summary: Create an account
- Route: POST /v1/accounts
- Idempotency: required
- Request fields: body=owner, productId, role, currency, balanceCapMinor, metadata; path=none; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### account_freeze

- Name: account.freeze
- Summary: Freeze an account
- Route: POST /v1/accounts/{accountId}/freeze
- Idempotency: required
- Request fields: body=reason, reasonClass; path=accountId; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### account_list

- Name: account.list
- Summary: List Accounts
- Route: GET /v1/accounts
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, role, status
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### account_retrieve

- Name: account.retrieve
- Summary: Retrieve an Account
- Route: GET /v1/accounts/{accountId}
- Idempotency: not_required
- Request fields: body=none; path=accountId; query=productId
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### account_statement_export

- Name: account.statement.export
- Summary: Export a monthly account statement
- Route: GET /v1/accounts/{accountId}/statements/{period}/export
- Idempotency: not_required
- Request fields: body=none; path=accountId, period; query=productId
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### account_statement_retrieve

- Name: account.statement.retrieve
- Summary: Retrieve a monthly account statement
- Route: GET /v1/accounts/{accountId}/statements/{period}
- Idempotency: not_required
- Request fields: body=none; path=accountId, period; query=productId
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### account_unfreeze

- Name: account.unfreeze
- Summary: Unfreeze an account
- Route: POST /v1/accounts/{accountId}/unfreeze
- Idempotency: required
- Request fields: body=reason; path=accountId; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### activity_list

- Name: activity.list
- Summary: List tenant activity
- Route: GET /v1/activity
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, operation, status, resourceKind, resourceId, createdFrom, createdTo, limit, cursor
- Scopes: audit:read, operation:read, receipt:read, usage:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### audit_event_list

- Name: audit_event.list
- Summary: List Audit events
- Route: GET /v1/audit-events
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo
- Scopes: audit:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### audit_event_retrieve

- Name: audit_event.retrieve
- Summary: Retrieve an Audit event
- Route: GET /v1/audit-events/{auditEventId}
- Idempotency: not_required
- Request fields: body=none; path=auditEventId; query=productId
- Scopes: audit:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### beneficiary_create

- Name: beneficiary.create
- Summary: Create a beneficiary
- Route: POST /v1/beneficiaries
- Idempotency: required
- Request fields: body=beneficiaryId, name, accountAddress, metadata; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### beneficiary_list

- Name: beneficiary.list
- Summary: List Beneficiaries
- Route: GET /v1/beneficiaries
- Idempotency: not_required
- Request fields: body=none; path=none; query=limit, cursor, query, createdFrom, createdTo, status
- Scopes: beneficiary:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### beneficiary_retrieve

- Name: beneficiary.retrieve
- Summary: Retrieve a Beneficiary
- Route: GET /v1/beneficiaries/{beneficiaryId}
- Idempotency: not_required
- Request fields: body=none; path=beneficiaryId; query=none
- Scopes: beneficiary:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### beneficiary_verify

- Name: beneficiary.verify
- Summary: Verify a beneficiary
- Route: POST /v1/beneficiary-verifications
- Idempotency: required
- Request fields: body=iban, beneficiaryName; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: external_provider
- Receipt expected: true
- Hints profile: HP1

Provider obligations:
```json
[
  {
    "kind": "beneficiary_verification",
    "required": true,
    "providerField": "provider",
    "providerReferenceField": "providerReference",
    "resourceIdPath": "beneficiaryVerificationId",
    "resourceKind": "beneficiary_verification",
    "description": "The Confirmation-of-Payee match grade must enter as an External Confirmation carrying the sponsor-bank provider reference that owns the verification fact.",
    "inBandClearance": true
  }
]
```

### collection_list

- Name: collection.list
- Summary: List Collections
- Route: GET /v1/collections
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo
- Scopes: collection:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### collection_pay_in_cancel

- Name: collection.pay_in.cancel
- Summary: Cancel a reserved collection pay-in
- Route: POST /v1/collections/{collectionId}/cancel
- Idempotency: required
- Request fields: body=transferId, reason; path=collectionId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### collection_pay_in_capture

- Name: collection.pay_in.capture
- Summary: Capture a reserved collection pay-in
- Route: POST /v1/collections/{collectionId}/capture
- Idempotency: required
- Request fields: body=transferId, capturedAt; path=collectionId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: external_provider
- Receipt expected: true
- Hints profile: HP2

Provider obligations:
```json
[
  {
    "kind": "collection_capture",
    "required": true,
    "providerField": "provider",
    "providerReferenceField": "providerReference",
    "resourceIdPath": "collectionId",
    "resourceKind": "collection",
    "description": "The engine-selected payment processor must return a distinct capture acknowledgement, which is durably bound to this exact capture before ledger settlement is dispatched.",
    "providerEgress": true
  }
]
```

### collection_pay_in_reserve

- Name: collection.pay_in.reserve
- Summary: Reserve a collection pay-in
- Route: POST /v1/collections/reserve
- Idempotency: required
- Request fields: body=collectionId, transferId, sourceAccountId, destinationAccountId, amount, currency; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: external_provider
- Receipt expected: true
- Hints profile: HP2

Provider obligations:
```json
[
  {
    "kind": "collection_reserve",
    "required": true,
    "providerField": "provider",
    "providerReferenceField": "providerReference",
    "resourceIdPath": "collectionId",
    "resourceKind": "collection",
    "description": "The operation cannot succeed until its engine-selected payment processor authorization is recorded with exact request and resource proof.",
    "providerEgress": true
  }
]
```

### collection_retrieve

- Name: collection.retrieve
- Summary: Retrieve a Collection
- Route: GET /v1/collections/{collectionId}
- Idempotency: not_required
- Request fields: body=none; path=collectionId; query=productId
- Scopes: collection:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### consent_list

- Name: consent.list
- Summary: List Consents
- Route: GET /v1/consents
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: consent:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### consent_retrieve

- Name: consent.retrieve
- Summary: Retrieve a Consent
- Route: GET /v1/consents/{consentId}
- Idempotency: not_required
- Request fields: body=none; path=consentId; query=productId
- Scopes: consent:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### consent_revoke

- Name: consent.revoke
- Summary: Revoke provider data consent
- Route: POST /v1/consents/{consentId}/revoke
- Idempotency: required
- Request fields: body=productId, reason; path=consentId; query=none
- Scopes: consent:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_access_close

- Name: customer_access.close
- Summary: Close customer access
- Route: POST /v1/customer-access/{customerAccessId}/close
- Idempotency: required
- Request fields: body=reason; path=customerAccessId; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_access_list

- Name: customer_access.list
- Summary: List Customer accesses
- Route: GET /v1/customer-access
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### customer_access_reactivate

- Name: customer_access.reactivate
- Summary: Reactivate customer access
- Route: POST /v1/customer-access/{customerAccessId}/reactivate
- Idempotency: required
- Request fields: body=reason; path=customerAccessId; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_access_retrieve

- Name: customer_access.retrieve
- Summary: Retrieve a Customer access
- Route: GET /v1/customer-access/{customerAccessId}
- Idempotency: not_required
- Request fields: body=none; path=customerAccessId; query=productId
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### customer_access_suspend

- Name: customer_access.suspend
- Summary: Suspend customer access
- Route: POST /v1/customer-access/{customerAccessId}/suspend
- Idempotency: required
- Request fields: body=reason; path=customerAccessId; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_create

- Name: customer.create
- Summary: Create a customer
- Route: POST /v1/customers
- Idempotency: required
- Request fields: body=productId, entity; path=none; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP4
- Provider obligations: none

### customer_list

- Name: customer.list
- Summary: List Customers
- Route: GET /v1/customers
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: customer:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### customer_login

- Name: customer.login
- Summary: Log in an end customer to a product
- Route: POST /v1/customer-identity/login
- Idempotency: required
- Request fields: body=productId, email, password; path=none; query=none
- Scopes: none
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP5
- Provider obligations: none

### customer_logout

- Name: customer.logout
- Summary: Log out the current end-customer session
- Route: POST /v1/customer-identity/logout
- Idempotency: required
- Request fields: body=none; path=none; query=none
- Scopes: none
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_retrieve

- Name: customer.retrieve
- Summary: Retrieve a Customer
- Route: GET /v1/customers/{customerId}
- Idempotency: not_required
- Request fields: body=none; path=customerId; query=productId
- Scopes: customer:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### customer_session_revoke

- Name: customer.session.revoke
- Summary: Revoke one of the calling end customer's sessions
- Route: POST /v1/customer-identity/sessions/{customerSessionId}/revoke
- Idempotency: required
- Request fields: body=none; path=customerSessionId; query=none
- Scopes: none
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### customer_signup

- Name: customer.signup
- Summary: Sign up an end customer for a product
- Route: POST /v1/customer-identity/signup
- Idempotency: required
- Request fields: body=productId, email, password, displayName, country, termsAccepted; path=none; query=none
- Scopes: none
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP5
- Provider obligations: none

### deposit_list

- Name: deposit.list
- Summary: List Deposits
- Route: GET /v1/deposits
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: deposit:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### deposit_retrieve

- Name: deposit.retrieve
- Summary: Retrieve a Deposit
- Route: GET /v1/deposits/{depositId}
- Idempotency: not_required
- Request fields: body=none; path=depositId; query=productId
- Scopes: deposit:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### event_retrieve

- Name: event.retrieve
- Summary: Retrieve an event
- Route: GET /v1/events/{eventId}
- Idempotency: not_required
- Request fields: body=none; path=eventId; query=none
- Scopes: event:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### expected_payment_cancel

- Name: expected_payment.cancel
- Summary: Cancel an expected payment
- Route: POST /v1/expected-payments/{expectedPaymentId}/cancel
- Idempotency: required
- Request fields: body=reason; path=expectedPaymentId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### expected_payment_create

- Name: expected_payment.create
- Summary: Create an expected payment
- Route: POST /v1/expected-payments
- Idempotency: required
- Request fields: body=expectedPaymentId, productId, accountId, financialAddressId, amountMin, amountMax, currency, windowStart, windowEnd, reference, metadata; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### expected_payment_list

- Name: expected_payment.list
- Summary: List Expected payments
- Route: GET /v1/expected-payments
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### expected_payment_retrieve

- Name: expected_payment.retrieve
- Summary: Retrieve an Expected payment
- Route: GET /v1/expected-payments/{expectedPaymentId}
- Idempotency: not_required
- Request fields: body=none; path=expectedPaymentId; query=productId
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### financial_address_create

- Name: financial_address.create
- Summary: Create a financial address
- Route: POST /v1/financial-addresses
- Idempotency: required
- Request fields: body=financialAddressId, accountId, productId, purpose, metadata; path=none; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### financial_address_disable

- Name: financial_address.disable
- Summary: Disable a financial address
- Route: POST /v1/financial-addresses/{financialAddressId}/disable
- Idempotency: required
- Request fields: body=reason; path=financialAddressId; query=none
- Scopes: account:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### financial_address_list

- Name: financial_address.list
- Summary: List Financial addresses
- Route: GET /v1/financial-addresses
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### financial_address_retrieve

- Name: financial_address.retrieve
- Summary: Retrieve a Financial address
- Route: GET /v1/financial-addresses/{financialAddressId}
- Idempotency: not_required
- Request fields: body=none; path=financialAddressId; query=productId
- Scopes: account:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### internal_transfer_adjust

- Name: internal_transfer.adjust
- Summary: Adjust a posted transfer
- Route: POST /v1/internal-transfers/{originalTransferId}/adjust
- Idempotency: required
- Request fields: body=transferId, amount, currency, reason; path=originalTransferId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### internal_transfer_create

- Name: internal_transfer.create
- Summary: Create an internal transfer
- Route: POST /v1/internal-transfers
- Idempotency: required
- Request fields: body=transferId, sourceAccountId, destinationAccountId, productId, amount, currency, memo, metadata; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### internal_transfer_list

- Name: internal_transfer.list
- Summary: List Internal Transfers
- Route: GET /v1/internal-transfers
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: internal_transfer:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### internal_transfer_post

- Name: internal_transfer.post
- Summary: Post a reserved transfer
- Route: POST /v1/internal-transfers/{transferId}/post
- Idempotency: required
- Request fields: body=amount, currency, postMode; path=transferId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### internal_transfer_reserve

- Name: internal_transfer.reserve
- Summary: Reserve an internal transfer
- Route: POST /v1/internal-transfers/reserve
- Idempotency: required
- Request fields: body=transferId, sourceAccountId, destinationAccountId, amount, currency, productId, memo, metadata, expiresAt; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### internal_transfer_retrieve

- Name: internal_transfer.retrieve
- Summary: Retrieve an Internal Transfer
- Route: GET /v1/internal-transfers/{transferId}
- Idempotency: not_required
- Request fields: body=none; path=transferId; query=productId
- Scopes: internal_transfer:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### internal_transfer_reverse

- Name: internal_transfer.reverse
- Summary: Reverse a posted transfer in full
- Route: POST /v1/internal-transfers/{originalTransferId}/reverse
- Idempotency: required
- Request fields: body=transferId, reason; path=originalTransferId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### internal_transfer_void

- Name: internal_transfer.void
- Summary: Void a reserved transfer
- Route: POST /v1/internal-transfers/{transferId}/void
- Idempotency: required
- Request fields: body=reason; path=transferId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### operation_list

- Name: operation.list
- Summary: List Operations
- Route: GET /v1/operations
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: operation:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### operation_retrieve

- Name: operation.retrieve
- Summary: Retrieve an Operation
- Route: GET /v1/operations/{operationId}
- Idempotency: not_required
- Request fields: body=none; path=operationId; query=productId
- Scopes: operation:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### payout_create

- Name: payout.create
- Summary: Create a payout
- Route: POST /v1/payouts
- Idempotency: required
- Request fields: body=payoutId, sourceAccountId, beneficiaryId, amount, currency, speed, metadata; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### payout_list

- Name: payout.list
- Summary: List Payouts
- Route: GET /v1/payouts
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo, status
- Scopes: payout:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### payout_retrieve

- Name: payout.retrieve
- Summary: Retrieve a Payout
- Route: GET /v1/payouts/{payoutId}
- Idempotency: not_required
- Request fields: body=none; path=payoutId; query=productId
- Scopes: payout:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### receipt_list

- Name: receipt.list
- Summary: List Receipts
- Route: GET /v1/receipts
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo
- Scopes: receipt:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### receipt_retrieve

- Name: receipt.retrieve
- Summary: Retrieve a Receipt
- Route: GET /v1/receipts/{receiptId}
- Idempotency: not_required
- Request fields: body=none; path=receiptId; query=productId
- Scopes: receipt:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### sandbox_account_fund

- Name: sandbox.account.fund
- Summary: Fund a sandbox account
- Route: POST /v1/sandbox/account-funding
- Idempotency: required
- Request fields: body=transferId, destinationAccountId, amount, currency; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: money_movement
- Receipt expected: true
- Hints profile: HP3
- Provider obligations: none

### sandbox_bank_credit_request

- Name: sandbox_bank_credit.request
- Summary: Queue a sandbox bank credit
- Route: POST /v1/sandbox-bank-credits
- Idempotency: required
- Request fields: body=financialAddressId, amount, currency, remittanceReference, counterparty, occurredAt; path=none; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### sandbox_beneficiary_accept

- Name: sandbox.beneficiary.accept
- Summary: Accept and activate a sandbox beneficiary at the sponsor bank
- Route: POST /v1/sandbox/beneficiaries/{beneficiaryId}/accept
- Idempotency: required
- Request fields: body=none; path=beneficiaryId; query=none
- Scopes: transfer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### sandbox_customer_access_activate

- Name: sandbox.customer_access.activate
- Summary: Activate sandbox customer access
- Route: POST /v1/sandbox/customer-access/{customerAccessId}/activate
- Idempotency: required
- Request fields: body=none; path=customerAccessId; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### sandbox_customer_onboard

- Name: sandbox.customer.onboard
- Summary: Create a sandbox customer with cleared KYC
- Route: POST /v1/sandbox/customer-onboarding
- Idempotency: required
- Request fields: body=productId, displayName; path=none; query=none
- Scopes: customer:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: external_provider
- Receipt expected: true
- Hints profile: HP1

Provider obligations:
```json
[
  {
    "kind": "kyc_verification_check",
    "required": true,
    "providerField": "provider",
    "providerReferenceField": "providerReference",
    "resourceIdPath": "profileId",
    "resourceKind": "entity_kyc_profile",
    "description": "The simulated eKYC verdict must enter as an External Confirmation carrying the verification provider reference that owns the identity fact, exactly as it does on the session-plane verification start.",
    "inBandClearance": true
  }
]
```

### sandbox_platform_fire

- Name: sandbox.platform.fire
- Summary: Fire a platform-owned journey step in sandbox
- Route: POST /v1/sandbox/platform/fire
- Idempotency: required
- Request fields: body=operation, input; path=none; query=none
- Scopes: none
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP6
- Provider obligations: none

### subject_create

- Name: subject.create
- Summary: Create a subject
- Route: POST /v1/subjects
- Idempotency: required
- Request fields: body=subjectId, productId, kind, kindVersion, attributes, declaredValue, metadata; path=none; query=none
- Scopes: product:write
- MCP reachable: false (REST/OpenAPI/SDK-only; drive through the Product API)
- Risk: mutation
- Receipt expected: true
- Hints profile: HP4
- Provider obligations: none

### subject_kind_list

- Name: subject_kind.list
- Summary: List registered subject kinds
- Route: GET /v1/subject-kinds
- Idempotency: not_required
- Request fields: body=none; path=none; query=limit, cursor
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### subject_list

- Name: subject.list
- Summary: List Subjects
- Route: GET /v1/subjects
- Idempotency: not_required
- Request fields: body=none; path=none; query=productId, limit, cursor, query, createdFrom, createdTo
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

### subject_retrieve

- Name: subject.retrieve
- Summary: Retrieve a Subject
- Route: GET /v1/subjects/{subjectId}
- Idempotency: not_required
- Request fields: body=none; path=subjectId; query=productId
- Scopes: product:read
- MCP reachable: true (MCP tool)
- Risk: read
- Receipt expected: false
- Hints profile: HP7
- Provider obligations: none

## MCP tool hints profiles

Every operation names one of these 7 MCP tool hints profiles on its "Hints profile" line. Each profile is one McpToolHints value shared by every operation that names it. It carries the risk axes and the refusal and escalation notes derived from them; what is specific to an operation is its summary.

### HP1

- Risk: external_provider
- Flags: readOnly=false, mutation=true, destructive=true, moneyMovement=false, externalProvider=true, confirmationRequired=true, receiptExpected=true, idempotent=true
- Escalation notes: Escalate ambiguous, irreversible, or scope-expanding requests to modify, suspend, or close existing resources.; Escalate missing, rejected, or conflicting External Confirmation.
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.; Refuse to modify, suspend, disable, or close existing resource state without explicit user confirmation and valid operation input.; Refuse to claim external completion without matching External Confirmation.

### HP2

- Risk: external_provider
- Flags: readOnly=false, mutation=true, destructive=true, moneyMovement=true, externalProvider=true, confirmationRequired=true, receiptExpected=true, idempotent=true
- Escalation notes: Escalate ambiguous money movement, reversal, correction, or payout requests.; Escalate missing, rejected, or conflicting External Confirmation.
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.; Refuse to move money without explicit user confirmation and valid operation input.; Refuse to claim external completion without matching External Confirmation.

### HP3

- Risk: money_movement
- Flags: readOnly=false, mutation=true, destructive=true, moneyMovement=true, externalProvider=false, confirmationRequired=true, receiptExpected=true, idempotent=true
- Escalation notes: Escalate ambiguous money movement, reversal, correction, or payout requests.
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.; Refuse to move money without explicit user confirmation and valid operation input.

### HP4

- Risk: mutation
- Flags: readOnly=false, mutation=true, destructive=false, moneyMovement=false, externalProvider=false, confirmationRequired=false, receiptExpected=true, idempotent=true
- Escalation notes: none
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.

### HP5

- Risk: mutation
- Flags: readOnly=false, mutation=true, destructive=false, moneyMovement=false, externalProvider=false, confirmationRequired=false, receiptExpected=true, idempotent=true
- Escalation notes: none
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.; Never echo, log, or persist the returned secret/key; deliver it to the operator through the product surface.

### HP6

- Risk: mutation
- Flags: readOnly=false, mutation=true, destructive=true, moneyMovement=false, externalProvider=false, confirmationRequired=true, receiptExpected=true, idempotent=true
- Escalation notes: Escalate ambiguous, irreversible, or scope-expanding requests to modify, suspend, or close existing resources.
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.; Refuse to modify, suspend, disable, or close existing resource state without explicit user confirmation and valid operation input.

### HP7

- Risk: read
- Flags: readOnly=true, mutation=false, destructive=false, moneyMovement=false, externalProvider=false, confirmationRequired=false, receiptExpected=false, idempotent=true
- Escalation notes: none
- Refusal notes: Refuse to fabricate tenant, account, provider, receipt, or trust facts.

## MCP Reachability

36 of 72 public Product API operations in this slice are reachable on the tenant MCP surface as MCP tools. MCP tools can include reads and model-safe mutations. The rest are REST/OpenAPI/SDK-only, including credential-returning actions excluded from MCP for model safety. An agent must drive them through the Product API. Instruments not listed are fully MCP-reachable.

- account: 2/6 MCP-reachable; REST/OpenAPI/SDK-only: account.close, account.create, account.freeze, account.unfreeze
- beneficiary: 2/4 MCP-reachable; REST/OpenAPI/SDK-only: beneficiary.create, beneficiary.verify
- collection.pay_in: 0/3 MCP-reachable; REST/OpenAPI/SDK-only: collection.pay_in.cancel, collection.pay_in.capture, collection.pay_in.reserve
- consent: 2/3 MCP-reachable; REST/OpenAPI/SDK-only: consent.revoke
- customer: 2/6 MCP-reachable; REST/OpenAPI/SDK-only: customer.create, customer.login, customer.logout, customer.signup
- customer.session: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: customer.session.revoke
- customer_access: 2/5 MCP-reachable; REST/OpenAPI/SDK-only: customer_access.close, customer_access.reactivate, customer_access.suspend
- expected_payment: 2/4 MCP-reachable; REST/OpenAPI/SDK-only: expected_payment.cancel, expected_payment.create
- financial_address: 2/4 MCP-reachable; REST/OpenAPI/SDK-only: financial_address.create, financial_address.disable
- internal_transfer: 2/8 MCP-reachable; REST/OpenAPI/SDK-only: internal_transfer.adjust, internal_transfer.create, internal_transfer.post, internal_transfer.reserve, internal_transfer.reverse, internal_transfer.void
- payout: 2/3 MCP-reachable; REST/OpenAPI/SDK-only: payout.create
- sandbox.account: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox.account.fund
- sandbox.beneficiary: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox.beneficiary.accept
- sandbox.customer: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox.customer.onboard
- sandbox.customer_access: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox.customer_access.activate
- sandbox.platform: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox.platform.fire
- sandbox_bank_credit: 0/1 MCP-reachable; REST/OpenAPI/SDK-only: sandbox_bank_credit.request
- subject: 2/3 MCP-reachable; REST/OpenAPI/SDK-only: subject.create

## Recipes
### unfunded_escrow_canceled

- Title: Cancel an unfunded escrow

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- buyer_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- buyer_customer.customerId
   - Request fields: currency, owner, role
7. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
8. listing_create (listing_create)
   - Actor: product
   - Bindings: sellerAccountId <- seller.accountId, subject <- subject.subjectId
   - Request fields: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
9. listing_publish (listing_publish)
   - Actor: product
   - Bindings: listingId <- listing.listingId
   - Request fields: listingId
10. escrow_order_create (escrow_order_create)
   - Actor: product
   - Bindings: buyerAccountId <- buyer.accountId, listingId <- listing.listingId, subject <- subject.subjectId
   - Request fields: buyerAccountId, fundBy, listingId, memo, productId, subject
11. escrow_order_cancel (escrow_order_cancel)
   - Actor: product
   - Bindings: escrowOrderId <- escrow.escrowOrderId
   - Request fields: escrowOrderId

### withdraw_draft_listing

- Title: Withdraw a draft listing

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
5. listing_create (listing_create)
   - Actor: product
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- subject.subjectId
   - Request fields: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
6. listing_withdraw (listing_withdraw)
   - Actor: product
   - Bindings: listingId <- listing.listingId
   - Request fields: listingId

### cancel_unfunded_order

- Title: Cancel an unfunded order

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
6. listing_create (listing_create)
   - Actor: product
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- subject.subjectId
   - Request fields: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
7. listing_publish (listing_publish)
   - Actor: product
   - Bindings: listingId <- listing.listingId
   - Request fields: listingId
8. escrow_order_create (escrow_order_create)
   - Actor: product
   - Bindings: buyerAccountId <- buyer_account.accountId, listingId <- listing.listingId, subject <- subject.subjectId
   - Request fields: buyerAccountId, fundBy, listingId, memo, productId, subject
9. order_create (order_create)
   - Actor: product
   - Bindings: escrowOrderId <- escrow.escrowOrderId, listingId <- listing.listingId, subject <- subject.subjectId
   - Request fields: confirmBy, escrowOrderId, listingId, memo, productId, subject
10. order_cancel (order_cancel)
   - Actor: product
   - Bindings: orderId <- order.orderId
   - Request fields: orderId

### withdraw_policy_quote

- Title: Withdraw a policy quote

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
6. policy_create (policy_create)
   - Actor: product
   - Bindings: insurerAccountId <- insurer_account.accountId, policyholderAccountId <- holder_account.accountId, subject <- subject.subjectId
   - Request fields: coverageLimit, currency, expiresAt, insurerAccountId, perilSchedule, policyholderAccountId, premiumAmount, productId, startsAt, subject, termsSummary
7. policy_withdraw (policy_withdraw)
   - Actor: product
   - Bindings: policyId <- policy.policyId
   - Request fields: policyId

### claim_denied

- Title: Assess and deny a claim

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- holder_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- holder_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- holder.accountId
   - Request fields: amount, currency, destinationAccountId
5. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
6. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- insurer_customer.customerAccessId
   - Request fields: customerAccessId
7. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- insurer_customer.customerId
   - Request fields: currency, owner, role
8. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
9. policy_create (policy_create)
   - Actor: product
   - Bindings: insurerAccountId <- insurer.accountId, policyholderAccountId <- holder.accountId, subject <- subject.subjectId
   - Request fields: coverageLimit, currency, expiresAt, insurerAccountId, perilSchedule, policyholderAccountId, premiumAmount, productId, startsAt, subject, termsSummary
10. policy_bind (policy_bind)
   - Actor: product
   - Bindings: policyId <- policy.policyId
   - Request fields: policyId
11. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires policy.activate in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.policyId <- policy.policyId
   - Request fields: input, operation
12. claim_create (claim_create)
   - Actor: product
   - Bindings: claimantAccountId <- holder.accountId, insurerAccountId <- insurer.accountId, policyId <- policy.policyId, subject <- subject.subjectId
   - Request fields: claimAmount, claimantAccountId, currency, evidenceSummary, insurerAccountId, occurredAt, peril, policyId, productId, subject
13. claim_assess (claim_assess)
   - Actor: product
   - Bindings: claimId <- claim.claimId
   - Request fields: claimId
14. claim_deny (claim_deny)
   - Actor: product
   - Bindings: claimId <- claim.claimId
   - Request fields: claimId

### unfunded_deposit_canceled

- Title: Cancel an unfunded deposit

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- holder_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- holder_customer.customerId
   - Request fields: currency, owner, role
7. deposit_hold_create (deposit_hold_create)
   - Actor: product
   - Bindings: holderAccountId <- holder.accountId, payerAccountId <- payer.accountId
   - Request fields: amount, currency, expiresAt, holderAccountId, memo, payerAccountId, productId
8. deposit_hold_cancel (deposit_hold_cancel)
   - Actor: product
   - Bindings: depositHoldId <- hold.depositHoldId
   - Request fields: depositHoldId

### cardholder_lifecycle

- Title: Activate and close a cardholder

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. cardholder_create (cardholder_create)
   - Actor: product
   - Bindings: customerId <- customer.customerId
   - Request fields: customerId, displayName, email, phoneNumber, productId
4. cardholder_activate (cardholder_activate)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId
5. cardholder_close (cardholder_close)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId

### card_lifecycle

- Title: Issue and cancel a card

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. cardholder_create (cardholder_create)
   - Actor: product
   - Bindings: customerId <- customer.customerId
   - Request fields: customerId, displayName, email, phoneNumber, productId
5. cardholder_activate (cardholder_activate)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId
6. card_create (card_create)
   - Actor: product
   - Bindings: accountId <- account.accountId, cardholderId <- cardholder.cardholderId
   - Request fields: accountId, cardholderId, currency, label, productId, spendControls
7. card_activate (card_activate)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
8. card_freeze (card_freeze)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
9. card_unfreeze (card_unfreeze)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
10. card_cancel (card_cancel)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId

### declined_authorization

- Title: Decline a card authorization

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- merchant_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- merchant_customer.customerId
   - Request fields: currency, owner, role
7. cardholder_create (cardholder_create)
   - Actor: product
   - Bindings: customerId <- customer.customerId
   - Request fields: customerId, displayName, email, phoneNumber, productId
8. cardholder_activate (cardholder_activate)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId
9. card_create (card_create)
   - Actor: product
   - Bindings: accountId <- card_account.accountId, cardholderId <- cardholder.cardholderId
   - Request fields: accountId, cardholderId, currency, label, productId, spendControls
10. card_activate (card_activate)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
11. card_authorization_create (card_authorization_create)
   - Actor: product
   - Bindings: cardAccountId <- card_account.accountId, cardId <- card.cardId, settlementAccountId <- settlement_account.accountId
   - Request fields: amount, cardAccountId, cardId, currency, expiresAt, merchantCategory, merchantCountry, merchantName, merchantReference, productId, settlementAccountId
12. card_authorization_decline (card_authorization_decline)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId

### card_purchase_refunded

- Title: Post and refund a card purchase

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- holder_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- holder_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- card_account.accountId
   - Request fields: amount, currency, destinationAccountId
5. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
6. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- merchant_customer.customerAccessId
   - Request fields: customerAccessId
7. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- merchant_customer.customerId
   - Request fields: currency, owner, role
8. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- merchant_account.accountId
   - Request fields: amount, currency, destinationAccountId
9. cardholder_create (cardholder_create)
   - Actor: product
   - Bindings: customerId <- holder_customer.customerId
   - Request fields: customerId, displayName, email, phoneNumber, productId
10. cardholder_activate (cardholder_activate)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId
11. card_create (card_create)
   - Actor: product
   - Bindings: accountId <- card_account.accountId, cardholderId <- cardholder.cardholderId
   - Request fields: accountId, cardholderId, currency, label, productId, spendControls
12. card_activate (card_activate)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
13. card_authorization_create (card_authorization_create)
   - Actor: product
   - Bindings: cardAccountId <- card_account.accountId, cardId <- card.cardId, settlementAccountId <- merchant_account.accountId
   - Request fields: amount, cardAccountId, cardId, currency, expiresAt, merchantCategory, merchantCountry, merchantName, merchantReference, productId, settlementAccountId
14. card_authorization_approve (card_authorization_approve)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId
15. card_authorization_capture (card_authorization_capture)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId
16. card_transaction_create (card_transaction_create)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId, postedAt, productId
17. card_transaction_refund (card_transaction_refund)
   - Actor: product
   - Bindings: cardTransactionId <- transaction.cardTransactionId
   - Request fields: cardTransactionId, reason

### card_dispute_lost

- Title: Review and lose a card dispute

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- holder_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- holder_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- card_account.accountId
   - Request fields: amount, currency, destinationAccountId
5. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
6. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- merchant_customer.customerAccessId
   - Request fields: customerAccessId
7. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- merchant_customer.customerId
   - Request fields: currency, owner, role
8. cardholder_create (cardholder_create)
   - Actor: product
   - Bindings: customerId <- holder_customer.customerId
   - Request fields: customerId, displayName, email, phoneNumber, productId
9. cardholder_activate (cardholder_activate)
   - Actor: product
   - Bindings: cardholderId <- cardholder.cardholderId
   - Request fields: cardholderId
10. card_create (card_create)
   - Actor: product
   - Bindings: accountId <- card_account.accountId, cardholderId <- cardholder.cardholderId
   - Request fields: accountId, cardholderId, currency, label, productId, spendControls
11. card_activate (card_activate)
   - Actor: product
   - Bindings: cardId <- card.cardId
   - Request fields: cardId
12. card_authorization_create (card_authorization_create)
   - Actor: product
   - Bindings: cardAccountId <- card_account.accountId, cardId <- card.cardId, settlementAccountId <- merchant_account.accountId
   - Request fields: amount, cardAccountId, cardId, currency, expiresAt, merchantCategory, merchantCountry, merchantName, merchantReference, productId, settlementAccountId
13. card_authorization_approve (card_authorization_approve)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId
14. card_authorization_capture (card_authorization_capture)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId
15. card_transaction_create (card_transaction_create)
   - Actor: product
   - Bindings: cardAuthorizationId <- authorization.cardAuthorizationId
   - Request fields: cardAuthorizationId, postedAt, productId
16. card_dispute_create (card_dispute_create)
   - Actor: product
   - Bindings: cardTransactionId <- transaction.cardTransactionId
   - Request fields: cardTransactionId, evidence, productId, reason, responseDueAt
17. card_dispute_review (card_dispute_review)
   - Actor: product
   - Bindings: cardDisputeId <- dispute.cardDisputeId
   - Request fields: cardDisputeId
18. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires card_dispute.lose in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.cardDisputeId <- dispute.cardDisputeId
   - Request fields: input, operation

### cancel_motor_quote

- Title: Cancel a motor quote

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
6. motor_policy_create (motor_policy_create)
   - Actor: product
   - Bindings: insurerAccountId <- insurer_account.accountId, policyholderAccountId <- policyholder_account.accountId, subject <- vehicle.subjectId
   - Request fields: coverageAmount, coverageDescription, currency, expiresAt, insurerAccountId, policyholderAccountId, premiumAmount, productId, subject
7. motor_policy_cancel (motor_policy_cancel)
   - Actor: product
   - Bindings: motorPolicyId <- policy.motorPolicyId
   - Request fields: motorPolicyId

### cancel_vehicle_escrow

- Title: Cancel a vehicle escrow

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
6. motor_policy_create (motor_policy_create)
   - Actor: product
   - Bindings: insurerAccountId <- seller_account.accountId, policyholderAccountId <- buyer_account.accountId, subject <- vehicle.subjectId
   - Request fields: coverageAmount, coverageDescription, currency, expiresAt, insurerAccountId, policyholderAccountId, premiumAmount, productId, subject
7. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- buyer_account.accountId
   - Request fields: amount, currency, destinationAccountId
8. vehicle_escrow_create (vehicle_escrow_create)
   - Actor: product
   - Bindings: buyerAccountId <- buyer_account.accountId, policyId <- policy.motorPolicyId, sellerAccountId <- seller_account.accountId, subject <- vehicle.subjectId
   - Request fields: buyerAccountId, currency, policyId, price, productId, sellerAccountId, subject
9. vehicle_escrow_fund (vehicle_escrow_fund)
   - Actor: product
   - Bindings: vehicleEscrowId <- escrow.vehicleEscrowId
   - Request fields: vehicleEscrowId
10. vehicle_escrow_quote_cancel (vehicle_escrow_quote_cancel)
   - Actor: product
   - Bindings: vehicleEscrowId <- escrow.vehicleEscrowId
   - Request fields: vehicleEscrowId
11. vehicle_escrow_confirm_cancel (vehicle_escrow_confirm_cancel)
   - Actor: product
   - Bindings: vehicleEscrowId <- escrow.vehicleEscrowId
   - Request fields: vehicleEscrowId
12. vehicle_escrow_collect_penalty (vehicle_escrow_collect_penalty)
   - Actor: product
   - Bindings: vehicleEscrowId <- escrow.vehicleEscrowId
   - Request fields: vehicleEscrowId

### delist_vehicle

- Title: Delist a vehicle

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
5. vehicle_listing_create (vehicle_listing_create)
   - Actor: product
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- vehicle.subjectId
   - Request fields: askingPrice, currency, headline, productId, sellerAccountId, subject
6. vehicle_listing_delist (vehicle_listing_delist)
   - Actor: product
   - Bindings: vehicleListingId <- listing.vehicleListingId
   - Request fields: vehicleListingId

### flight_hold_released

- Title: Release a flight hold

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- operator_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- operator_customer.customerId
   - Request fields: currency, owner, role
7. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
8. flight_booking_create (flight_booking_create)
   - Actor: product
   - Bindings: operatorAccountId <- operator.accountId, subject <- subject.subjectId, travelerAccountId <- traveler.accountId
   - Request fields: bookingNote, currency, departsAt, fareAmount, holdExpiresAt, operatorAccountId, productId, subject, travelerAccountId
9. flight_booking_release (flight_booking_release)
   - Actor: product
   - Bindings: flightBookingId <- booking.flightBookingId
   - Request fields: flightBookingId

### release_held_stay

- Title: Release a held stay

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
6. hotel_stay_create (hotel_stay_create)
   - Actor: product
   - Bindings: guestAccountId <- guest_account.accountId, propertyAccountId <- property_account.accountId, subject <- stay_subject.subjectId
   - Request fields: checkInAt, checkOutAt, currency, guestAccountId, holdExpiresAt, productId, propertyAccountId, rateAmount, subject
7. hotel_stay_release (hotel_stay_release)
   - Actor: product
   - Bindings: hotelStayId <- stay.hotelStayId
   - Request fields: hotelStayId

### complete_travel_package

- Title: Complete a travel package

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. travel_package_create (travel_package_create)
   - Actor: product
   - Bindings: payerAccountId <- payer_account.accountId, subject <- traveler_subject.subjectId
   - Request fields: departAt, memo, payerAccountId, productId, subject
6. travel_package_confirm (travel_package_confirm)
   - Actor: product
   - Bindings: travelPackageId <- package.travelPackageId
   - Request fields: travelPackageId
7. travel_package_complete (travel_package_complete)
   - Actor: product
   - Bindings: travelPackageId <- package.travelPackageId
   - Request fields: travelPackageId

### wallet_active_cycle

- Title: Run an active wallet cycle

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- holder_account.accountId
   - Request fields: amount, currency, destinationAccountId
5. wallet_create (wallet_create)
   - Actor: product
   - Bindings: holderAccountId <- holder_account.accountId
   - Request fields: currency, holderAccountId, limitAmount, productId
6. wallet_activate (wallet_activate)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId
7. wallet_topup (wallet_topup)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId, amount
8. wallet_withdraw (wallet_withdraw)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId, amount
9. wallet_close (wallet_close)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId

### refund_wallet_spend

- Title: Refund a wallet spend

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- holder_account.accountId
   - Request fields: amount, currency, destinationAccountId
6. wallet_create (wallet_create)
   - Actor: product
   - Bindings: holderAccountId <- holder_account.accountId
   - Request fields: currency, holderAccountId, limitAmount, productId
7. wallet_activate (wallet_activate)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId
8. wallet_topup (wallet_topup)
   - Actor: product
   - Bindings: walletId <- wallet.walletId
   - Request fields: walletId, amount
9. wallet_spend_create (wallet_spend_create)
   - Actor: product
   - Bindings: beneficiaryAccountId <- beneficiary_account.accountId, walletId <- wallet.walletId
   - Request fields: amount, beneficiaryAccountId, productId, walletId
10. wallet_spend_post (wallet_spend_post)
   - Actor: product
   - Bindings: walletSpendId <- spend.walletSpendId
   - Request fields: walletSpendId
11. wallet_spend_refund (wallet_spend_refund)
   - Actor: product
   - Bindings: walletSpendId <- spend.walletSpendId
   - Request fields: walletSpendId

### advanced_credit_written_off

- Title: Advance and write off credit

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- borrower_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- borrower_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- lender_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- lender_customer.customerId
   - Request fields: currency, owner, role
7. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- lender.accountId
   - Request fields: amount, currency, destinationAccountId
8. credit_agreement_create (credit_agreement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
   - Request fields: borrowerAccountId, currency, fundingAccountId, principal, productId
9. credit_agreement_advance (credit_agreement_advance)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
10. credit_agreement_write_off (credit_agreement_write_off)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId

### write_off_overdue_installment

- Title: Write off an overdue installment

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- funding_account.accountId
   - Request fields: amount, currency, destinationAccountId
6. credit_agreement_create (credit_agreement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower_account.accountId, fundingAccountId <- funding_account.accountId
   - Request fields: borrowerAccountId, currency, fundingAccountId, principal, productId
7. credit_agreement_advance (credit_agreement_advance)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
8. installment_create (installment_create)
   - Actor: product
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower_account.accountId, fundingAccountId <- funding_account.accountId
   - Request fields: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
9. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires installment.mark_overdue in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.installmentId <- installment.installmentId
   - Request fields: input, operation
10. installment_write_off (installment_write_off)
   - Actor: product
   - Bindings: installmentId <- installment.installmentId
   - Request fields: installmentId

### approved_exposure_closed

- Title: Approve and close an exposure

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. exposure_arrangement_create (exposure_arrangement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower_account.accountId
   - Request fields: approvedAmountsCapAmount, borrowerAccountId, borrowerEntityId, currency, productId
5. exposure_arrangement_approve (exposure_arrangement_approve)
   - Actor: product
   - Bindings: exposureArrangementId <- arrangement.exposureArrangementId
   - Request fields: exposureArrangementId
6. exposure_arrangement_close (exposure_arrangement_close)
   - Actor: product
   - Bindings: exposureArrangementId <- arrangement.exposureArrangementId
   - Request fields: exposureArrangementId

### collections_case_recalled

- Title: Assign and recall a collections case

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- borrower_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- borrower_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- lender_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- lender_customer.customerId
   - Request fields: currency, owner, role
7. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- lender.accountId
   - Request fields: amount, currency, destinationAccountId
8. credit_agreement_create (credit_agreement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
   - Request fields: borrowerAccountId, currency, fundingAccountId, principal, productId
9. credit_agreement_advance (credit_agreement_advance)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
10. installment_create (installment_create)
   - Actor: product
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
   - Request fields: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
11. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires installment.mark_overdue in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.installmentId <- installment.installmentId
   - Request fields: input, operation
12. collections_case_create (collections_case_create)
   - Actor: product
   - Bindings: agreementId <- agreement.creditAgreementId, debtorAccountId <- borrower.accountId, recoveryAccountId <- lender.accountId, triggeringInstallmentId <- installment.installmentId
   - Request fields: agreementId, allowedContactEndHour, allowedContactStartHour, currency, debtorAccountId, maxContactAttemptsPer30Days, memo, productId, recoveryAccountId, referredAmount, triggeringInstallmentId
13. collections_case_assign (collections_case_assign)
   - Actor: product
   - Bindings: collectionsCaseId <- case.collectionsCaseId
   - Request fields: collectionsCaseId
14. collections_case_recall (collections_case_recall)
   - Actor: product
   - Bindings: collectionsCaseId <- case.collectionsCaseId
   - Request fields: collectionsCaseId

### contact_attempt_voided

- Title: Record and void a contact attempt

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- borrower_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- borrower_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- lender_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- lender_customer.customerId
   - Request fields: currency, owner, role
7. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- lender.accountId
   - Request fields: amount, currency, destinationAccountId
8. credit_agreement_create (credit_agreement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
   - Request fields: borrowerAccountId, currency, fundingAccountId, principal, productId
9. credit_agreement_advance (credit_agreement_advance)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
10. installment_create (installment_create)
   - Actor: product
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
   - Request fields: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
11. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires installment.mark_overdue in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.installmentId <- installment.installmentId
   - Request fields: input, operation
12. collections_case_create (collections_case_create)
   - Actor: product
   - Bindings: agreementId <- agreement.creditAgreementId, debtorAccountId <- borrower.accountId, recoveryAccountId <- lender.accountId, triggeringInstallmentId <- installment.installmentId
   - Request fields: agreementId, allowedContactEndHour, allowedContactStartHour, currency, debtorAccountId, maxContactAttemptsPer30Days, memo, productId, recoveryAccountId, referredAmount, triggeringInstallmentId
13. collections_case_assign (collections_case_assign)
   - Actor: product
   - Bindings: collectionsCaseId <- case.collectionsCaseId
   - Request fields: collectionsCaseId
14. contact_attempt_create (contact_attempt_create)
   - Actor: product
   - Bindings: caseId <- case.collectionsCaseId
   - Request fields: attemptedAt, caseId, channel, note, outcome, productId
15. contact_attempt_void (contact_attempt_void)
   - Actor: product
   - Bindings: contactAttemptId <- attempt.contactAttemptId
   - Request fields: contactAttemptId

### cancel_scheduled_payout

- Title: Cancel a scheduled payout

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
6. payout_run_create (payout_run_create)
   - Actor: product
   - Bindings: earnerAccountId <- earner_account.accountId, payoutFundingAccountId <- funding_account.accountId, withholdingAccountId <- withholding_account.accountId
   - Request fields: currency, earnerAccountId, netAmount, payoutFundingAccountId, productId, runAt, withholdingAccountId, withholdingAmount
7. payout_run_cancel (payout_run_cancel)
   - Actor: product
   - Bindings: payoutRunId <- run.payoutRunId
   - Request fields: payoutRunId

### underfunded_round_failed

- Title: Fail an underfunded round

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. funding_round_create (funding_round_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower.accountId
   - Request fields: borrowerAccountId, closeBy, currency, memo, productId, targetAmount
5. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_round.fail in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingRoundId <- round.fundingRoundId
   - Request fields: input, operation

### failed_pledge_refunded

- Title: Refund a failed pledge

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- borrower_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- borrower_customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- investor_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- investor_customer.customerId
   - Request fields: currency, owner, role
7. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- investor.accountId
   - Request fields: amount, currency, destinationAccountId
8. funding_round_create (funding_round_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower.accountId
   - Request fields: borrowerAccountId, closeBy, currency, memo, productId, targetAmount
9. funding_commitment_create (funding_commitment_create)
   - Actor: product
   - Bindings: fundingRoundId <- round.fundingRoundId, investorAccountId <- investor.accountId
   - Request fields: amount, committedAt, fundingRoundId, investorAccountId, productId
10. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_round.fail in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingRoundId <- round.fundingRoundId
   - Request fields: input, operation
11. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_commitment.refund in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingCommitmentId <- commitment.fundingCommitmentId
   - Request fields: input, operation

### pay_lender_distribution

- Title: Pay a lender distribution

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
7. funding_round_create (funding_round_create)
   - Actor: product
   - Bindings: borrowerAccountId <- pool_account.accountId
   - Request fields: borrowerAccountId, closeBy, currency, memo, productId, targetAmount
8. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- lender_account.accountId
   - Request fields: amount, currency, destinationAccountId
9. sandbox_account_fund (sandbox_account_fund)
   - Actor: product
   - Bindings: destinationAccountId <- second_lender_account.accountId
   - Request fields: amount, currency, destinationAccountId
10. funding_commitment_create (funding_commitment_create)
   - Actor: product
   - Bindings: fundingRoundId <- round.fundingRoundId, investorAccountId <- lender_account.accountId
   - Request fields: amount, committedAt, fundingRoundId, investorAccountId, productId
11. funding_commitment_create (funding_commitment_create)
   - Actor: product
   - Bindings: fundingRoundId <- round.fundingRoundId, investorAccountId <- second_lender_account.accountId
   - Request fields: amount, committedAt, fundingRoundId, investorAccountId, productId
12. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_round.activate in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingRoundId <- round.fundingRoundId
   - Request fields: input, operation
13. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_commitment.collect in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingCommitmentId <- commitment.fundingCommitmentId
   - Request fields: input, operation
14. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires funding_commitment.collect in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.fundingCommitmentId <- second_commitment.fundingCommitmentId
   - Request fields: input, operation
15. funding_round_close (funding_round_close)
   - Actor: product
   - Bindings: fundingRoundId <- round.fundingRoundId
   - Request fields: fundingRoundId
16. credit_agreement_create (credit_agreement_create)
   - Actor: product
   - Bindings: borrowerAccountId <- borrower_account.accountId, fundingAccountId <- pool_account.accountId, fundingRoundId <- round.fundingRoundId
   - Request fields: borrowerAccountId, currency, fundingAccountId, fundingRoundId, principal, productId
17. credit_agreement_advance (credit_agreement_advance)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
18. lender_distribution_create (lender_distribution_create)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId, fundingCommitmentId <- commitment.fundingCommitmentId, fundingRoundId <- round.fundingRoundId
   - Request fields: claimedAt, creditAgreementId, fundingCommitmentId, fundingRoundId, productId
19. credit_agreement_settle (credit_agreement_settle)
   - Actor: product
   - Bindings: creditAgreementId <- agreement.creditAgreementId
   - Request fields: creditAgreementId
20. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires lender_distribution.payout in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.lenderDistributionId <- distribution.lenderDistributionId
   - Request fields: input, operation

### disband_unfilled_circle

- Title: Disband an unfilled circle

1. savings_circle_create (savings_circle_create)
   - Actor: product
   - Bindings: none
   - Request fields: contributionAmount, currency, memberCount, memo, productId, startAt
2. savings_circle_disband (savings_circle_disband)
   - Actor: product
   - Bindings: savingsCircleId <- circle.savingsCircleId
   - Request fields: savingsCircleId

### membership_withdrawn

- Title: Withdraw an unstarted membership

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- member_customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- member_customer.customerId
   - Request fields: currency, owner, role
4. savings_circle_create (savings_circle_create)
   - Actor: product
   - Bindings: none
   - Request fields: contributionAmount, currency, memberCount, memo, productId, startAt
5. circle_membership_create (circle_membership_create)
   - Actor: product
   - Bindings: memberAccountId <- member.accountId, savingsCircleId <- circle.savingsCircleId
   - Request fields: joinedAt, memberAccountId, payoutAmount, position, productId, receiveAt, savingsCircleId
6. savings_circle_disband (savings_circle_disband)
   - Actor: product
   - Bindings: savingsCircleId <- circle.savingsCircleId
   - Request fields: savingsCircleId
7. sandbox_platform_fire (sandbox_platform_fire)
   - Actor: platform
   - Sandbox trigger: The platform fires circle_membership.withdraw in normal lifecycle processing; sandbox fires it now.
   - Bindings: input.circleMembershipId <- membership.circleMembershipId
   - Request fields: input, operation

### abandon_unfunded_sale

- Title: Abandon an unfunded sale

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
6. subject_create (subject_create)
   - Actor: product
   - Bindings: none
   - Request fields: attributes, declaredValue, kind, kindVersion, productId
7. sale_settlement_create (sale_settlement_create)
   - Actor: product
   - Bindings: buyerAccountId <- buyer_account.accountId, platformAccountId <- platform_account.accountId, sellerAccountId <- seller_account.accountId, subject <- subject.subjectId
   - Request fields: buyerAccountId, currency, piece1Amount, piece2Amount, piece3Amount, platformAccountId, price, productId, sellerAccountId, serviceFeeAmount, subject
8. sale_settlement_abandon (sale_settlement_abandon)
   - Actor: product
   - Bindings: saleSettlementId <- sale.saleSettlementId
   - Request fields: saleSettlementId

### abandon_trade_settlement

- Title: Abandon a trade settlement

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
5. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
6. trade_settlement_create (trade_settlement_create)
   - Actor: product
   - Bindings: platformAccountId <- platform_account.accountId, sideAAccountId <- side_a_account.accountId, sideBAccountId <- side_b_account.accountId
   - Request fields: currency, platformAccountId, productId, sideAAccountId, sideAAmount, sideAServiceFeeAmount, sideBAccountId, sideBAmount, sideBServiceFeeAmount
7. trade_settlement_abandon (trade_settlement_abandon)
   - Actor: product
   - Bindings: tradeSettlementId <- trade.tradeSettlementId
   - Request fields: tradeSettlementId

### unfunded_hold_abandoned

- Title: Abandon an unfunded hold

1. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
2. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- customer.customerAccessId
   - Request fields: customerAccessId
3. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- customer.customerId
   - Request fields: currency, owner, role
4. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
5. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- payee_customer.customerAccessId
   - Request fields: customerAccessId
6. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- payee_customer.customerId
   - Request fields: currency, owner, role
7. sandbox_customer_onboard (sandbox_customer_onboard)
   - Actor: product
   - Bindings: none
   - Request fields: displayName, productId
8. sandbox_customer_access_activate (sandbox_customer_access_activate)
   - Actor: product
   - Bindings: customerAccessId <- platform_customer.customerAccessId
   - Request fields: customerAccessId
9. account_create (account_create)
   - Actor: product
   - Bindings: owner.id <- platform_customer.customerId
   - Request fields: currency, owner, role
10. held_settlement_create (held_settlement_create)
   - Actor: product
   - Bindings: payeeAccountId <- payee.accountId, payerAccountId <- payer.accountId, platformAccountId <- platform.accountId
   - Request fields: currency, heldAmount, payeeAccountId, payerAccountId, platformAccountId, productId, reference, releaseDueAt, serviceFeeAmount
11. held_settlement_abandon (held_settlement_abandon)
   - Actor: product
   - Bindings: heldSettlementId <- hold.heldSettlementId
   - Request fields: heldSettlementId

## Plan Graph

### Nodes
- account_balance_retrieve: operation=account_balance_retrieve risk=read idempotency=not_required
  scopes: account:read
- account_close: operation=account_close risk=mutation idempotency=required
  scopes: account:write
- account_create: operation=account_create risk=mutation idempotency=required
  scopes: account:write
- account_freeze: operation=account_freeze risk=mutation idempotency=required
  scopes: account:write
- account_list: operation=account_list risk=read idempotency=not_required
  scopes: account:read
- account_retrieve: operation=account_retrieve risk=read idempotency=not_required
  scopes: account:read
- account_statement_export: operation=account_statement_export risk=read idempotency=not_required
  scopes: account:read
- account_statement_retrieve: operation=account_statement_retrieve risk=read idempotency=not_required
  scopes: account:read
- account_unfreeze: operation=account_unfreeze risk=mutation idempotency=required
  scopes: account:write
- activity_list: operation=activity_list risk=read idempotency=not_required
  scopes: audit:read, operation:read, receipt:read, usage:read
- audit_event_list: operation=audit_event_list risk=read idempotency=not_required
  scopes: audit:read
- audit_event_retrieve: operation=audit_event_retrieve risk=read idempotency=not_required
  scopes: audit:read
- beneficiary_create: operation=beneficiary_create risk=mutation idempotency=required
  scopes: transfer:write
- beneficiary_list: operation=beneficiary_list risk=read idempotency=not_required
  scopes: beneficiary:read
- beneficiary_retrieve: operation=beneficiary_retrieve risk=read idempotency=not_required
  scopes: beneficiary:read
- beneficiary_verify: operation=beneficiary_verify risk=external_provider idempotency=required
  scopes: transfer:write
- collection_list: operation=collection_list risk=read idempotency=not_required
  scopes: collection:read
- collection_pay_in_cancel: operation=collection_pay_in_cancel risk=money_movement idempotency=required
  scopes: transfer:write
- collection_pay_in_capture: operation=collection_pay_in_capture risk=external_provider idempotency=required
  scopes: transfer:write
- collection_pay_in_reserve: operation=collection_pay_in_reserve risk=external_provider idempotency=required
  scopes: transfer:write
- collection_retrieve: operation=collection_retrieve risk=read idempotency=not_required
  scopes: collection:read
- consent_list: operation=consent_list risk=read idempotency=not_required
  scopes: consent:read
- consent_retrieve: operation=consent_retrieve risk=read idempotency=not_required
  scopes: consent:read
- consent_revoke: operation=consent_revoke risk=mutation idempotency=required
  scopes: consent:write
- customer_access_close: operation=customer_access_close risk=mutation idempotency=required
  scopes: customer:write
- customer_access_list: operation=customer_access_list risk=read idempotency=not_required
  scopes: product:read
- customer_access_reactivate: operation=customer_access_reactivate risk=mutation idempotency=required
  scopes: customer:write
- customer_access_retrieve: operation=customer_access_retrieve risk=read idempotency=not_required
  scopes: product:read
- customer_access_suspend: operation=customer_access_suspend risk=mutation idempotency=required
  scopes: customer:write
- customer_create: operation=customer_create risk=mutation idempotency=required
  scopes: customer:write
- customer_list: operation=customer_list risk=read idempotency=not_required
  scopes: customer:read
- customer_login: operation=customer_login risk=mutation idempotency=required
  scopes: none
- customer_logout: operation=customer_logout risk=mutation idempotency=required
  scopes: none
- customer_retrieve: operation=customer_retrieve risk=read idempotency=not_required
  scopes: customer:read
- customer_session_revoke: operation=customer_session_revoke risk=mutation idempotency=required
  scopes: none
- customer_signup: operation=customer_signup risk=mutation idempotency=required
  scopes: none
- deposit_list: operation=deposit_list risk=read idempotency=not_required
  scopes: deposit:read
- deposit_retrieve: operation=deposit_retrieve risk=read idempotency=not_required
  scopes: deposit:read
- event_retrieve: operation=event_retrieve risk=read idempotency=not_required
  scopes: event:read
- expected_payment_cancel: operation=expected_payment_cancel risk=mutation idempotency=required
  scopes: transfer:write
- expected_payment_create: operation=expected_payment_create risk=mutation idempotency=required
  scopes: transfer:write
- expected_payment_list: operation=expected_payment_list risk=read idempotency=not_required
  scopes: product:read
- expected_payment_retrieve: operation=expected_payment_retrieve risk=read idempotency=not_required
  scopes: product:read
- financial_address_create: operation=financial_address_create risk=mutation idempotency=required
  scopes: account:write
- financial_address_disable: operation=financial_address_disable risk=mutation idempotency=required
  scopes: account:write
- financial_address_list: operation=financial_address_list risk=read idempotency=not_required
  scopes: account:read
- financial_address_retrieve: operation=financial_address_retrieve risk=read idempotency=not_required
  scopes: account:read
- internal_transfer_adjust: operation=internal_transfer_adjust risk=money_movement idempotency=required
  scopes: transfer:write
- internal_transfer_create: operation=internal_transfer_create risk=money_movement idempotency=required
  scopes: transfer:write
- internal_transfer_list: operation=internal_transfer_list risk=read idempotency=not_required
  scopes: internal_transfer:read
- internal_transfer_post: operation=internal_transfer_post risk=money_movement idempotency=required
  scopes: transfer:write
- internal_transfer_reserve: operation=internal_transfer_reserve risk=money_movement idempotency=required
  scopes: transfer:write
- internal_transfer_retrieve: operation=internal_transfer_retrieve risk=read idempotency=not_required
  scopes: internal_transfer:read
- internal_transfer_reverse: operation=internal_transfer_reverse risk=money_movement idempotency=required
  scopes: transfer:write
- internal_transfer_void: operation=internal_transfer_void risk=money_movement idempotency=required
  scopes: transfer:write
- operation_list: operation=operation_list risk=read idempotency=not_required
  scopes: operation:read
- operation_retrieve: operation=operation_retrieve risk=read idempotency=not_required
  scopes: operation:read
- payout_create: operation=payout_create risk=mutation idempotency=required
  scopes: transfer:write
- payout_list: operation=payout_list risk=read idempotency=not_required
  scopes: payout:read
- payout_retrieve: operation=payout_retrieve risk=read idempotency=not_required
  scopes: payout:read
- receipt_list: operation=receipt_list risk=read idempotency=not_required
  scopes: receipt:read
- receipt_retrieve: operation=receipt_retrieve risk=read idempotency=not_required
  scopes: receipt:read
- sandbox_account_fund: operation=sandbox_account_fund risk=money_movement idempotency=required
  scopes: transfer:write
- sandbox_bank_credit_request: operation=sandbox_bank_credit_request risk=mutation idempotency=required
  scopes: transfer:write
- sandbox_beneficiary_accept: operation=sandbox_beneficiary_accept risk=mutation idempotency=required
  scopes: transfer:write
- sandbox_customer_access_activate: operation=sandbox_customer_access_activate risk=mutation idempotency=required
  scopes: customer:write
- sandbox_customer_onboard: operation=sandbox_customer_onboard risk=external_provider idempotency=required
  scopes: customer:write
- sandbox_platform_fire: operation=sandbox_platform_fire risk=mutation idempotency=required
  scopes: none
- subject_create: operation=subject_create risk=mutation idempotency=required
  scopes: product:write
- subject_kind_list: operation=subject_kind_list risk=read idempotency=not_required
  scopes: product:read
- subject_list: operation=subject_list risk=read idempotency=not_required
  scopes: product:read
- subject_retrieve: operation=subject_retrieve risk=read idempotency=not_required
  scopes: product:read

### Edges
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> listing_create
- subject_create -> listing_create
- listing_create -> listing_publish
- account_create -> escrow_order_create
- listing_create -> escrow_order_create
- subject_create -> escrow_order_create
- escrow_order_create -> escrow_order_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> listing_create
- subject_create -> listing_create
- listing_create -> listing_withdraw
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> listing_create
- subject_create -> listing_create
- listing_create -> listing_publish
- account_create -> escrow_order_create
- listing_create -> escrow_order_create
- subject_create -> escrow_order_create
- escrow_order_create -> order_create
- listing_create -> order_create
- subject_create -> order_create
- order_create -> order_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> policy_create
- account_create -> policy_create
- subject_create -> policy_create
- policy_create -> policy_withdraw
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> policy_create
- account_create -> policy_create
- subject_create -> policy_create
- policy_create -> policy_bind
- policy_create -> sandbox_platform_fire
- account_create -> claim_create
- account_create -> claim_create
- policy_create -> claim_create
- subject_create -> claim_create
- claim_create -> claim_assess
- claim_create -> claim_deny
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> deposit_hold_create
- account_create -> deposit_hold_create
- deposit_hold_create -> deposit_hold_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> cardholder_create
- cardholder_create -> cardholder_activate
- cardholder_create -> cardholder_close
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> cardholder_create
- cardholder_create -> cardholder_activate
- account_create -> card_create
- cardholder_create -> card_create
- card_create -> card_activate
- card_create -> card_freeze
- card_create -> card_unfreeze
- card_create -> card_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> cardholder_create
- cardholder_create -> cardholder_activate
- account_create -> card_create
- cardholder_create -> card_create
- card_create -> card_activate
- account_create -> card_authorization_create
- card_create -> card_authorization_create
- account_create -> card_authorization_create
- card_authorization_create -> card_authorization_decline
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- sandbox_customer_onboard -> cardholder_create
- cardholder_create -> cardholder_activate
- account_create -> card_create
- cardholder_create -> card_create
- card_create -> card_activate
- account_create -> card_authorization_create
- card_create -> card_authorization_create
- account_create -> card_authorization_create
- card_authorization_create -> card_authorization_approve
- card_authorization_create -> card_authorization_capture
- card_authorization_create -> card_transaction_create
- card_transaction_create -> card_transaction_refund
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> cardholder_create
- cardholder_create -> cardholder_activate
- account_create -> card_create
- cardholder_create -> card_create
- card_create -> card_activate
- account_create -> card_authorization_create
- card_create -> card_authorization_create
- account_create -> card_authorization_create
- card_authorization_create -> card_authorization_approve
- card_authorization_create -> card_authorization_capture
- card_authorization_create -> card_transaction_create
- card_transaction_create -> card_dispute_create
- card_dispute_create -> card_dispute_review
- card_dispute_create -> sandbox_platform_fire
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> motor_policy_create
- account_create -> motor_policy_create
- subject_create -> motor_policy_create
- motor_policy_create -> motor_policy_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> motor_policy_create
- account_create -> motor_policy_create
- subject_create -> motor_policy_create
- account_create -> sandbox_account_fund
- account_create -> vehicle_escrow_create
- motor_policy_create -> vehicle_escrow_create
- account_create -> vehicle_escrow_create
- subject_create -> vehicle_escrow_create
- vehicle_escrow_create -> vehicle_escrow_fund
- vehicle_escrow_create -> vehicle_escrow_quote_cancel
- vehicle_escrow_create -> vehicle_escrow_confirm_cancel
- vehicle_escrow_create -> vehicle_escrow_collect_penalty
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> vehicle_listing_create
- subject_create -> vehicle_listing_create
- vehicle_listing_create -> vehicle_listing_delist
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> flight_booking_create
- subject_create -> flight_booking_create
- account_create -> flight_booking_create
- flight_booking_create -> flight_booking_release
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> hotel_stay_create
- account_create -> hotel_stay_create
- subject_create -> hotel_stay_create
- hotel_stay_create -> hotel_stay_release
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> travel_package_create
- subject_create -> travel_package_create
- travel_package_create -> travel_package_confirm
- travel_package_create -> travel_package_complete
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> wallet_create
- wallet_create -> wallet_activate
- wallet_create -> wallet_topup
- wallet_create -> wallet_withdraw
- wallet_create -> wallet_close
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> wallet_create
- wallet_create -> wallet_activate
- wallet_create -> wallet_topup
- account_create -> wallet_spend_create
- wallet_create -> wallet_spend_create
- wallet_spend_create -> wallet_spend_post
- wallet_spend_create -> wallet_spend_refund
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> credit_agreement_create
- account_create -> credit_agreement_create
- credit_agreement_create -> credit_agreement_advance
- credit_agreement_create -> credit_agreement_write_off
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> credit_agreement_create
- account_create -> credit_agreement_create
- credit_agreement_create -> credit_agreement_advance
- credit_agreement_create -> installment_create
- account_create -> installment_create
- account_create -> installment_create
- installment_create -> sandbox_platform_fire
- installment_create -> installment_write_off
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> exposure_arrangement_create
- exposure_arrangement_create -> exposure_arrangement_approve
- exposure_arrangement_create -> exposure_arrangement_close
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> credit_agreement_create
- account_create -> credit_agreement_create
- credit_agreement_create -> credit_agreement_advance
- credit_agreement_create -> installment_create
- account_create -> installment_create
- account_create -> installment_create
- installment_create -> sandbox_platform_fire
- credit_agreement_create -> collections_case_create
- account_create -> collections_case_create
- account_create -> collections_case_create
- installment_create -> collections_case_create
- collections_case_create -> collections_case_assign
- collections_case_create -> collections_case_recall
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> credit_agreement_create
- account_create -> credit_agreement_create
- credit_agreement_create -> credit_agreement_advance
- credit_agreement_create -> installment_create
- account_create -> installment_create
- account_create -> installment_create
- installment_create -> sandbox_platform_fire
- credit_agreement_create -> collections_case_create
- account_create -> collections_case_create
- account_create -> collections_case_create
- installment_create -> collections_case_create
- collections_case_create -> collections_case_assign
- collections_case_create -> contact_attempt_create
- contact_attempt_create -> contact_attempt_void
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> payout_run_create
- account_create -> payout_run_create
- account_create -> payout_run_create
- payout_run_create -> payout_run_cancel
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> funding_round_create
- funding_round_create -> sandbox_platform_fire
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> sandbox_account_fund
- account_create -> funding_round_create
- funding_round_create -> funding_commitment_create
- account_create -> funding_commitment_create
- funding_round_create -> sandbox_platform_fire
- funding_commitment_create -> sandbox_platform_fire
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> funding_round_create
- account_create -> sandbox_account_fund
- account_create -> sandbox_account_fund
- funding_round_create -> funding_commitment_create
- account_create -> funding_commitment_create
- funding_round_create -> funding_commitment_create
- account_create -> funding_commitment_create
- funding_round_create -> sandbox_platform_fire
- funding_commitment_create -> sandbox_platform_fire
- funding_commitment_create -> sandbox_platform_fire
- funding_round_create -> funding_round_close
- account_create -> credit_agreement_create
- account_create -> credit_agreement_create
- funding_round_create -> credit_agreement_create
- credit_agreement_create -> credit_agreement_advance
- credit_agreement_create -> lender_distribution_create
- funding_commitment_create -> lender_distribution_create
- funding_round_create -> lender_distribution_create
- credit_agreement_create -> credit_agreement_settle
- lender_distribution_create -> sandbox_platform_fire
- savings_circle_create -> savings_circle_disband
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> circle_membership_create
- savings_circle_create -> circle_membership_create
- savings_circle_create -> savings_circle_disband
- circle_membership_create -> sandbox_platform_fire
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> sale_settlement_create
- account_create -> sale_settlement_create
- account_create -> sale_settlement_create
- subject_create -> sale_settlement_create
- sale_settlement_create -> sale_settlement_abandon
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> account_create
- account_create -> trade_settlement_create
- account_create -> trade_settlement_create
- account_create -> trade_settlement_create
- trade_settlement_create -> trade_settlement_abandon
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- sandbox_customer_onboard -> sandbox_customer_access_activate
- sandbox_customer_onboard -> account_create
- account_create -> held_settlement_create
- account_create -> held_settlement_create
- account_create -> held_settlement_create
- held_settlement_create -> held_settlement_abandon

### Gaps
- none

### Terminals
- account_close: await account.closed
  receiptEvidence: {"required":["local"]}
- account_create: await account.created
  receiptEvidence: {"required":["local","ledger"]}
- account_freeze: await account.frozen
  receiptEvidence: {"required":["local"]}
- account_unfreeze: await account.unfrozen
  receiptEvidence: {"required":["local"]}
- beneficiary_create: await beneficiary.created
  receiptEvidence: {"required":["local"]}
- beneficiary_verify: await beneficiary.verified
  receiptEvidence: {"required":["local","external"]}
- collection_pay_in_cancel: await collection.pay_in.cancelled
  receiptEvidence: {"required":["local","ledger"]}
- collection_pay_in_capture: await collection.pay_in.captured
  receiptEvidence: {"required":["local","ledger","external"]}
- collection_pay_in_reserve: await collection.pay_in.reserved
  receiptEvidence: {"required":["local","ledger","external"]}
- consent_revoke: await consent.revoked
  receiptEvidence: {"required":["local"]}
- customer_access_close: await customer_access.closed
  receiptEvidence: {"required":["local"]}
- customer_access_reactivate: await customer_access.reactivated
  receiptEvidence: {"required":["local"]}
- customer_access_suspend: await customer_access.suspended
  receiptEvidence: {"required":["local"]}
- customer_create: await customer.created
  receiptEvidence: {"required":["local"]}
- customer_session_revoke: await customer.session.revoked
  receiptEvidence: {"required":["local"]}
- customer_signup: await customer.signed_up
  receiptEvidence: {"required":["local"]}
- expected_payment_cancel: await expected_payment.canceled
  receiptEvidence: {"required":["local"]}
- expected_payment_create: await expected_payment.created
  receiptEvidence: {"required":["local"]}
- financial_address_create: await financial_address.requested
  receiptEvidence: {"required":["local"]}
- financial_address_disable: await financial_address.disabled
  receiptEvidence: {"required":["local"]}
- internal_transfer_adjust: await internal_transfer.adjusted
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_create: await internal_transfer.created
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_post: await internal_transfer.partially_posted
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_post: await internal_transfer.posted
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_reserve: await internal_transfer.reserved
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_reverse: await internal_transfer.reversed
  receiptEvidence: {"required":["local","ledger"]}
- internal_transfer_void: await internal_transfer.voided
  receiptEvidence: {"required":["local","ledger"]}
- payout_create: await payout.created
  receiptEvidence: {"required":["local"]}
- sandbox_account_fund: await sandbox.account.funded
  receiptEvidence: {"required":["local","ledger"]}
- sandbox_bank_credit_request: await sandbox.bank_credit.queued
  receiptEvidence: {"required":["local"]}
- sandbox_beneficiary_accept: await sandbox.beneficiary.accepted
  receiptEvidence: {"required":["local"]}
- sandbox_customer_access_activate: await sandbox.customer_access.activated
  receiptEvidence: {"required":["local"]}
- sandbox_customer_onboard: await sandbox.customer.onboarded
  receiptEvidence: {"required":["local","external"]}
- sandbox_platform_fire: await sandbox.platform.fired
  receiptEvidence: {"required":["local"]}
- subject_create: await subject.created
  receiptEvidence: {"required":["local"]}

## Events
- account.closed: operation=account.close operationId=account_close status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- account.created: operation=account.create operationId=account_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- account.frozen: operation=account.freeze operationId=account_freeze status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- account.unfrozen: operation=account.unfreeze operationId=account_unfreeze status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- beneficiary.created: operation=beneficiary.create operationId=beneficiary_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- beneficiary.verified: operation=beneficiary.verify operationId=beneficiary_verify status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- collection.pay_in.cancelled: operation=collection.pay_in.cancel operationId=collection_pay_in_cancel status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- collection.pay_in.captured: operation=collection.pay_in.capture operationId=collection_pay_in_capture status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- collection.pay_in.reserved: operation=collection.pay_in.reserve operationId=collection_pay_in_reserve status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- consent.revoked: operation=consent.revoke operationId=consent_revoke status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer_access.closed: operation=customer_access.close operationId=customer_access_close status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer_access.reactivated: operation=customer_access.reactivate operationId=customer_access_reactivate status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer_access.suspended: operation=customer_access.suspend operationId=customer_access_suspend status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer.created: operation=customer.create operationId=customer_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer.session.revoked: operation=customer.session.revoke operationId=customer_session_revoke status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- customer.signed_up: operation=customer.signup operationId=customer_signup status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- expected_payment.canceled: operation=expected_payment.cancel operationId=expected_payment_cancel status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- expected_payment.created: operation=expected_payment.create operationId=expected_payment_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- financial_address.requested: operation=financial_address.create operationId=financial_address_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- financial_address.disabled: operation=financial_address.disable operationId=financial_address_disable status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.adjusted: operation=internal_transfer.adjust operationId=internal_transfer_adjust status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.created: operation=internal_transfer.create operationId=internal_transfer_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.partially_posted: operation=internal_transfer.post operationId=internal_transfer_post status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.posted: operation=internal_transfer.post operationId=internal_transfer_post status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.reserved: operation=internal_transfer.reserve operationId=internal_transfer_reserve status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.reversed: operation=internal_transfer.reverse operationId=internal_transfer_reverse status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- internal_transfer.voided: operation=internal_transfer.void operationId=internal_transfer_void status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- payout.created: operation=payout.create operationId=payout_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.account.funded: operation=sandbox.account.fund operationId=sandbox_account_fund status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.bank_credit.queued: operation=sandbox_bank_credit.request operationId=sandbox_bank_credit_request status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.beneficiary.accepted: operation=sandbox.beneficiary.accept operationId=sandbox_beneficiary_accept status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.customer_access.activated: operation=sandbox.customer_access.activate operationId=sandbox_customer_access_activate status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.customer.onboarded: operation=sandbox.customer.onboard operationId=sandbox_customer_onboard status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- sandbox.platform.fired: operation=sandbox.platform.fire operationId=sandbox_platform_fire status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed
- subject.created: operation=subject.create operationId=subject_create status=succeeded
  statusField: status
  statusModel: accepted, succeeded, failed

## Sandbox Failure Fixtures
### verification_rejected

- Access: user session only (not Product API or SDK callable)
- Lifecycle point: verification
- Instrument: platform
- Operations: entity.kyc.submit, entity.kyc.verification.start
- Trigger fields: fields.national_id
- Trigger value: 2000000012
- Result code: none
- Result: The sandbox identity provider returns a terminal rejected verdict for the submitted profile.

## Errors
### account_close_balance_nonzero

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Account the platform has already durably recorded (`account close balance nonzero`).
- Action: Re-read the Account with `account.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Account as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_close

### account_freeze_plane_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The account carries a platform-imposed freeze, and tenant-plane unfreeze or close cannot lift or bypass it.
- Action: Stop retrying from this surface; the freeze on this account is not yours to lift.
- Remediation: Contact platform support about the account restriction; the transition succeeds once the platform lifts its freeze.
- Scope: domain
- Operation IDs: account_close, account_unfreeze

### account_frozen

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The account is frozen. Debits always refuse while frozen; some freezes also refuse credits. The error message carries the only reason wording Hyperscale exposes.
- Action: Use a different account for this transfer leg, or have the freeze lifted before retrying.
- Remediation: Unfreeze the account through its lifecycle surface if you imposed the freeze; a freeze you cannot lift was imposed by the platform and clears only when the platform lifts it.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, payout_create

### account_ledger_mapping_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Account the platform has already durably recorded (`account ledger mapping conflict`).
- Action: Re-read the Account with `account.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Account as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create, financial_address_create, internal_transfer_create, internal_transfer_reserve, sandbox_account_fund

### account_ledger_mapping_dangling

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: This Account names the ledger account that holds its money, and the ledger does not have that account. An Account and its ledger side are written together, so this is not a half-made Account: this deployment's records and the ledger it is reading have drifted apart. That happens when the engine is pointed at a different ledger cluster than the one these Accounts were created against, or when a cluster is restored to a point behind them.
- Action: Send the error details to whoever operates this Hyperscale deployment; no change to the request will clear this refusal, and no figures were produced.
- Remediation: Only an operator can settle which ledger this deployment reads; until then the balance is unknowable and the refusal is the honest answer, because the alternative is reporting a figure for money that may well exist somewhere else. Other Accounts on the same organization answer normally -- a refusal on one Account and not its neighbours narrows the drift to that Account's mapping rather than the connection.
- Scope: domain
- Operation IDs: account_balance_retrieve

### account_ledger_unprovisioned

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: This Account exists but has no ledger account behind it, so it holds no balances and no movements to report. Creating an Account provisions its ledger side; an Account in this state was recorded before that provisioning completed, or the provisioning did not finish.
- Action: Read the Account back and confirm it finished provisioning, then run this read again. No figures were produced.
- Remediation: Nothing about the request changes this, and a retry only succeeds once provisioning completes. If the Account has been in this state for more than a moment its ledger provisioning failed and an operator of this deployment has to finish it -- until then no money can enter or leave the Account, so there is nothing for a balance or a statement to report.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_statement_export, account_statement_retrieve

### account_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Account matches the `accountId` this request referenced (`account not found`).
- Action: List Accounts in the same tenant, product, and environment, then retry with the `accountId` that read returns.
- Remediation: Create or select the Account in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: account_close, account_create, account_freeze, account_unfreeze, financial_address_create, internal_transfer_create, internal_transfer_reserve, sandbox_account_fund

### account_role_not_financial_addressable

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `account role not financial addressable` contract condition.
- Action: Read the error details, then the operation reference for this Account, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the Account; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: financial_address_create

### account_role_owner_mismatch

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Account the platform has already durably recorded (`account role owner mismatch`).
- Action: Re-read the Account with `account.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Account as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create

### account_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The account is not in a state that allows this lifecycle transition (for example, freezing a closed account or closing a frozen one). The current status is returned in the error details.
- Action: Read the account's current status and choose the lifecycle operation valid from that state.
- Remediation: Refresh the account and apply the transition allowed from its current status; the account reference itself is valid, so no new account is needed.
- Scope: domain
- Operation IDs: account_close, account_freeze, account_unfreeze

### beneficiary_id_reserved

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The requested beneficiary id is the platform-reserved identity of the per-tenant revenue beneficiary that only Hyperscale's billing sweep may provision.
- Action: Create the beneficiary under a different id (or omit `beneficiaryId` and let Hyperscale assign one); this id is reserved for Hyperscale's own invoice collection.
- Remediation: The revenue beneficiary is created automatically the first time the billing sweep runs -- no tenant ever needs to create it. Pick any other id (or none) for your own beneficiaries and retry with a new Idempotency-Key.
- Scope: domain
- Operation IDs: beneficiary_create

### beneficiary_verification_unavailable

- HTTP status: 503
- Additional HTTP statuses: none
- Retryable: true
- Idempotency safe: false
- Cause: The platform could not durably complete the `beneficiary verification unavailable` step, so the Beneficiary verification may or may not have been written.
- Action: Capture the request id and the receipt or operation id before retrying or escalating; do not re-send under a fresh key until you know whether the Beneficiary verification was written.
- Remediation: Treat the Beneficiary verification's side effects as unknown unless a terminal receipt says otherwise; retry only operations documented as retryable, and replay them with the SAME idempotency key.
- Scope: domain
- Operation IDs: beneficiary_verify

### collection_authorization_unverified

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Collection the platform has already durably recorded (`collection authorization unverified`).
- Action: Re-read the Collection with `collection.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Collection as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: collection_pay_in_cancel, collection_pay_in_capture

### collection_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Collection matches the `collectionId` this request referenced (`collection not found`).
- Action: List Collections in the same tenant, product, and environment, then retry with the `collectionId` that read returns.
- Remediation: Create or select the Collection in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: collection_pay_in_cancel, collection_pay_in_capture

### collection_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Collection's current lifecycle state does not allow this transition (`collection status forbidden`).
- Action: Read the Collection with `collection.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Collection's current status permits. The reference itself is still valid, so no new Collection is needed.
- Scope: domain
- Operation IDs: collection_pay_in_cancel, collection_pay_in_capture

### collection_transfer_mismatch

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Collection the platform has already durably recorded (`collection transfer mismatch`).
- Action: Re-read the Collection with `collection.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Collection as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: collection_pay_in_cancel, collection_pay_in_capture

### consent_expired

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `consent expired` contract condition.
- Action: Read the error details, then the operation reference for this Consent, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the Consent; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: consent_revoke

### consent_not_active

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Consent the platform has already durably recorded (`consent not active`).
- Action: Re-read the Consent with `consent.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Consent as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: consent_revoke

### consent_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Consent matches the `consentId` this request referenced (`consent not found`).
- Action: List Consents in the same tenant, product, and environment, then retry with the `consentId` that read returns.
- Remediation: Create or select the Consent in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: consent_revoke

### consent_revoked

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `consent revoked` contract condition.
- Action: Read the error details, then the operation reference for this Consent, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the Consent; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: consent_revoke

### cross_tenant_transfer_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the resource the platform has already durably recorded (`cross tenant transfer forbidden`).
- Action: Re-read the resource this request referenced and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the resource as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, sandbox_account_fund

### csrf_token_invalid

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: A browser session mutation did not carry a current Hyperscale CSRF token.
- Action: Refresh the portal page or session, then submit the form again.
- Remediation: Use the portal login flow to refresh the session before retrying the mutation.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### currency_mismatch

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The currency on the request does not match the settlement currency of the account or transfer it targets. Hyperscale never converts between currencies, so the two must be identical.
- Action: Read the target account's currency (for example with `account.balance.retrieve`) and resend with that same currency and a minor-unit amount denominated in it.
- Remediation: This is deterministic. Retrying with the same currency fails identically. Correct the request's currency field, or move the money through an account already denominated in the required currency, then retry.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, sandbox_account_fund

### customer_access_compliance_forbidden

- HTTP status: 403
- Additional HTTP statuses: 409
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Customer access the platform has already durably recorded (`customer access compliance forbidden`).
- Action: Re-read the Customer access with `customer_access.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Customer access as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### customer_access_lifecycle_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Customer access's current lifecycle state does not allow this transition (`customer access lifecycle status forbidden`).
- Action: Read the Customer access with `customer_access.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Customer access's current status permits. The reference itself is still valid, so no new Customer access is needed.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_reactivate, customer_access_suspend

### customer_access_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Customer access matches the `customerAccessId` this request referenced (`customer access not found`).
- Action: List Customer accesses in the same tenant, product, and environment, then retry with the `customerAccessId` that read returns.
- Remediation: Create or select the Customer access in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_reactivate, customer_access_suspend

### customer_access_required

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation cannot run against this Customer access until the `customer access required` prerequisite exists.
- Action: Supply the field, capability, evidence, or configuration the error details name for this Customer access, then call the operation again.
- Remediation: Complete the prerequisite through the surface that owns it -- the operation reference for this Customer access names it -- and the same call then succeeds unchanged.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, customer_login, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### customer_access_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Customer access's current lifecycle state does not allow this transition (`customer access status forbidden`).
- Action: Read the Customer access with `customer_access.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Customer access's current status permits. The reference itself is still valid, so no new Customer access is needed.
- Scope: domain
- Operation IDs: customer_login

### customer_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Customer matches the `customerId` this request referenced (`customer not found`).
- Action: List Customers in the same tenant, product, and environment, then retry with the `customerId` that read returns.
- Remediation: Create or select the Customer in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, customer_create, customer_login, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### customer_status_forbidden

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Customer's current lifecycle state does not allow this transition (`customer status forbidden`).
- Action: Read the Customer with `customer.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Customer's current status permits. The reference itself is still valid, so no new Customer is needed.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, customer_create, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### destination_account_status_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The destination (credit) account is not open. It is frozen or closed, so Hyperscale will not credit it.
- Action: Use a destination account whose status is `open`, or unfreeze the intended account, before retrying.
- Remediation: Read the account status, unfreeze it (or select an open account in the same currency and product), then resend the transfer.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### entity_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Entity matches the `entityId` this request referenced (`entity not found`).
- Action: List Entities in the same tenant, product, and environment, then retry with the `entityId` that read returns.
- Remediation: Create or select the Entity in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, customer_create, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### entity_status_forbidden

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Entity's current lifecycle state does not allow this transition (`entity status forbidden`).
- Action: Read the Entity with `entity.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Entity's current status permits. The reference itself is still valid, so no new Entity is needed.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, collection_pay_in_reserve, customer_create, expected_payment_create, financial_address_create, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, payout_create, sandbox_account_fund

### external_confirmation_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the External Confirmation the platform has already durably recorded (`external confirmation conflict`).
- Action: Re-read the External Confirmation with `external_confirmation.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the External Confirmation as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: beneficiary_verify, collection_pay_in_capture, collection_pay_in_reserve, sandbox_customer_onboard

### external_confirmation_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No External Confirmation matches the `externalConfirmationId` this request referenced (`external confirmation not found`).
- Action: List External Confirmations in the same tenant, product, and environment, then retry with the `externalConfirmationId` that read returns.
- Remediation: Create or select the External Confirmation in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: beneficiary_verify, collection_pay_in_capture, collection_pay_in_reserve, sandbox_customer_onboard

### external_confirmation_resource_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the External Confirmation the platform has already durably recorded (`external confirmation resource conflict`).
- Action: Re-read the External Confirmation with `external_confirmation.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the External Confirmation as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: beneficiary_verify, collection_pay_in_capture, collection_pay_in_reserve, sandbox_customer_onboard

### financial_address_account_status_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Financial address's current lifecycle state does not allow this transition (`financial address account status forbidden`).
- Action: Read the Financial address with `financial_address.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Financial address's current status permits. The reference itself is still valid, so no new Financial address is needed.
- Scope: domain
- Operation IDs: financial_address_create

### financial_address_destination_mismatch

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Financial address the platform has already durably recorded (`financial address destination mismatch`).
- Action: Re-read the Financial address with `financial_address.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Financial address as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: expected_payment_create

### financial_address_lifecycle_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Financial address's current lifecycle state does not allow this transition (`financial address lifecycle status forbidden`).
- Action: Read the Financial address with `financial_address.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Financial address's current status permits. The reference itself is still valid, so no new Financial address is needed.
- Scope: domain
- Operation IDs: financial_address_disable

### financial_address_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Financial address matches the `financialAddressId` this request referenced (`financial address not found`).
- Action: List Financial addresses in the same tenant, product, and environment, then retry with the `financialAddressId` that read returns.
- Remediation: Create or select the Financial address in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: expected_payment_create, financial_address_disable

### financial_address_status_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Financial address's current lifecycle state does not allow this transition (`financial address status forbidden`).
- Action: Read the Financial address with `financial_address.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Financial address's current status permits. The reference itself is still valid, so no new Financial address is needed.
- Scope: domain
- Operation IDs: expected_payment_create

### funding_destination_role_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`funding destination role forbidden`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: sandbox_account_fund

### idempotency_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request reused an Idempotency-Key for a different logical mutation.
- Action: Reuse an Idempotency-Key only with the exact same method, path, body, and tenant.
- Remediation: Generate a new key for the new mutation, or replay the original request unchanged.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### idempotency_required

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation is a mutation and Hyperscale requires a replay key before executing it.
- Action: Send an Idempotency-Key header for this mutation.
- Remediation: Let the SDK create the key automatically, or provide a stable key per logical mutation.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### insufficient_balance

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The source (debit) account's available balance is below the transfer amount, so the ledger refused the transfer. No money moved. The transfer was not created and its charge/transfer rows are recorded as failed.
- Action: Fund the source (debit) account so its available balance in minor units covers the full amount, or lower the amount, then retry. Confirm the shortfall first with `account.balance.retrieve`.
- Remediation: This is a definitive refusal, not a transient failure: replaying the exact request with the same Idempotency-Key safely returns this same refusal and never double-charges, so rotating to a fresh key is not the fix. Funding is. Top up the source account (or reduce the amount), then submit the transfer as a new request.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, sandbox_account_fund

### internal_error

- HTTP status: 500
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: false
- Cause: Hyperscale hit an unexpected server-side condition and hid internal implementation details from this audience.
- Action: Capture the request ID, operation ID, and receipt ID if present before escalating.
- Remediation: Retry only if the operation is documented as retryable; otherwise contact Hyperscale support with the tracing IDs.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### invalid_credentials

- HTTP status: 401
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: Hyperscale could not accept the account or credential request. Signup, login, and bearer authentication use one 401 for every case they reject, so the response exposes no credential-specific reason or registered-email verdict. The single exception is a key that is real but homed in the other environment: because the presented secret already matched a stored key, the message names the mismatch instead of leaving a working credential looking unknown.
- Action: For signup or login, re-check the submitted account details. For API calls, re-check the `Authorization: Bearer <key>` API key and whether it matches the target environment (sandbox vs live).
- Remediation: For signup, verify the submitted details or use login or password reset for an existing account. For login, re-enter the credentials or reset the password. For API or MCP calls, use an active key for the target environment, set HYPERSCALE_API_KEY, and retry. When the message reports an environment mismatch, `details.keyEnvironment` names where the key does work: send that environment's key, or set `X-Hyperscale-Environment` to it.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_retrieve, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### invalid_request

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request does not match the API reference.
- Action: Compare the request path, method, headers, and JSON body to the expected request shape.
- Remediation: Use the SDK input types or API reference, then resend with valid JSON and required headers.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### kyc_tier_insufficient

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: Opening an account of this role requires the owning customer's entity to have ATTAINED a KYC tier it has not reached: either required fields are missing or the profile is not verified.
- Action: Complete and verify the entity's KYC profile to the tier this account role requires, then retry. The error details name the required tier and the entity's attained tier.
- Remediation: Submit the missing fields (`entity.kyc.submit`), run verification (`entity.kyc.verification.start`), and once the outcome is verified at the required tier the account open succeeds unchanged. `entity.kyc.retrieve` shows exactly which fields stand between the entity and the required tier.
- Scope: domain
- Operation IDs: account_create

### ledger_transfer_rejected

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the resource the platform has already durably recorded (`ledger transfer rejected`).
- Action: Re-read the resource this request referenced and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the resource as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, sandbox_account_fund

### ledger_unavailable

- HTTP status: 503
- Additional HTTP statuses: none
- Retryable: true
- Idempotency safe: false
- Cause: The platform could not durably complete the `ledger unavailable` step, so the resource may or may not have been written.
- Action: Capture the request id and the receipt or operation id before retrying or escalating; do not re-send under a fresh key until you know whether the resource was written.
- Remediation: Treat the resource's side effects as unknown unless a terminal receipt says otherwise; retry only operations documented as retryable, and replay them with the SAME idempotency key.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_statement_export, account_statement_retrieve, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, sandbox_account_fund

### mfa_verification_required

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: This tenant surface requires a session that completed TOTP at login. Tenant operations demand it while the organization's require-MFA policy (tenant.security.configure) is on; user.mfa.totp.disable demands it unconditionally, because removing a factor is the act that factor exists to guard.
- Action: Enroll and confirm a TOTP factor (user.mfa.totp.enrollment.begin, then user.mfa.totp.enrollment.confirm), then log in again and complete user.login.mfa.verify before retrying.
- Remediation: MFA verification is a mint-time session fact, so enrolling a factor mid-session never upgrades the current session. After the factor is active, a fresh login returns an MFA challenge; completing it mints the verified session this surface demands. Identity self-operations (logout, TOTP enrollment) stay open to a password-only session, so a factorless member is never locked out of enrolling. Disabling a factor is the exception: sign in again and complete the challenge first.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_list, customer_retrieve, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### missing_required_permission

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The signed-in member's current role does not grant the permission required for this operation.
- Action: Ask an organization owner to assign a role containing the required portal permission, then sign in again if your existing session was revoked by the role change.
- Remediation: Review the member's role in the Team desk, add only the required permission to a custom role or assign an appropriate seeded role, and retry with that member's session.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### missing_required_product_capability

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Product was created without a capability required by this operation.
- Action: Call the operation from a Product whose provisioned capability set includes the required capability.
- Remediation: Create or replace the Product on a path that provisions the required capability before creating the API key.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### missing_required_scope

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The credential is valid but does not grant one or more operation scopes.
- Action: Create or rotate an API key with the required access.
- Remediation: Use the portal API key page or `api_key.sandbox.create` after Product creation to create a scoped key.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Hyperscale route matched the requested path and method.
- Action: Verify the URL and request method against the API reference.
- Remediation: Use the SDK method or OpenAPI path for the operation instead of constructing the URL by hand.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### operation_environment_invalid

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this Operation accepts (`operation environment invalid`).
- Action: Replace the rejected value with one this Operation allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this Operation, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend, sandbox_account_fund

### operation_not_allowed

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The credential authenticated, but the operation is outside the allowlist its Product's composition produced. The message names the operation and the capability that would admit it.
- Action: Call an operation inside this key's composition, or recompose the Product to include the one you want.
- Remediation: Compose the Product with the named capability and issue a key from it, or use the scoped SDK/OpenAPI for this key, which publishes exactly the operations it can run.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### operation_not_finalized

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Operation the platform has already durably recorded (`operation not finalized`).
- Action: Re-read the Operation with `operation.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Operation as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_close, account_create, account_freeze, account_unfreeze, beneficiary_create, beneficiary_verify, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, consent_revoke, customer_access_close, customer_access_reactivate, customer_access_suspend, customer_create, customer_login, customer_logout, customer_session_revoke, customer_signup, expected_payment_cancel, expected_payment_create, financial_address_create, financial_address_disable, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void, payout_create, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create

### owner_unsupported

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`owner unsupported`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: account_create

### payout_beneficiary_reserved

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The named beneficiary is the platform-provisioned revenue beneficiary that only Hyperscale's billing sweep may pay.
- Action: Send the payout to a beneficiary you created; this one is reserved for Hyperscale's own invoice collection.
- Remediation: Invoices are collected automatically by the billing sweep -- no tenant payout is ever needed toward this beneficiary. Create and verify your own beneficiary for outbound payments.
- Scope: domain
- Operation IDs: payout_create

### product_access_suspended

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Product is disabled or closed, so its credentials are suspended in every environment.
- Action: Use an active Product before sending traffic.
- Remediation: Reactivate the Product from its settings page (or replace it), then retry with credentials of the active Product.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### product_activation_required

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The live Product or required live capability is not active yet.
- Action: Activate the Product and live-enable the required capability before sending production traffic.
- Remediation: Complete Product activation, satisfy live requirements, and enable the capability before retrying.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### product_context_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this Product accepts (`product context forbidden`).
- Action: Replace the rejected value with one this Product allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this Product, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_context_mismatch

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Product the platform has already durably recorded (`product context mismatch`).
- Action: Re-read the Product with `product.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Product as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_context_owner_mismatch

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Product the platform has already durably recorded (`product context owner mismatch`).
- Action: Re-read the Product with `product.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Product as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_context_required

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation cannot run against this Product until the `product context required` prerequisite exists.
- Action: Supply the field, capability, evidence, or configuration the error details name for this Product, then call the operation again.
- Remediation: Complete the prerequisite through the surface that owns it -- the operation reference for this Product names it -- and the same call then succeeds unchanged.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No Product matches the `productId` this request referenced (`product not found`).
- Action: List Products in the same tenant, product, and environment, then retry with the `productId` that read returns.
- Remediation: Create or select the Product in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, audit_event_retrieve, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_retrieve, consent_revoke, customer_access_close, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_login, customer_retrieve, customer_signup, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_retrieve, payout_create, payout_retrieve, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_customer_access_activate, subject_create, subject_retrieve

### product_scope_required

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation cannot run against this Product until the `product scope required` prerequisite exists.
- Action: Supply the field, capability, evidence, or configuration the error details name for this Product, then call the operation again.
- Remediation: Complete the prerequisite through the surface that owns it -- the operation reference for this Product names it -- and the same call then succeeds unchanged.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_scope_unsupported

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this Product accepts (`product scope unsupported`).
- Action: Replace the rejected value with one this Product allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this Product, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### product_status_forbidden

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The Product's current lifecycle state does not allow this transition (`product status forbidden`).
- Action: Read the Product with `product.retrieve` and pick the lifecycle operation its current status allows.
- Remediation: Apply a transition the Product's current status permits. The reference itself is still valid, so no new Product is needed.
- Scope: domain
- Operation IDs: customer_access_close, customer_access_suspend

### provider_egress_failed

- HTTP status: 502
- Additional HTTP statuses: none
- Retryable: true
- Idempotency safe: false
- Cause: The platform could not durably complete the `provider egress failed` step, so the resource may or may not have been written.
- Action: Capture the request id and the receipt or operation id before retrying or escalating; do not re-send under a fresh key until you know whether the resource was written.
- Remediation: Treat the resource's side effects as unknown unless a terminal receipt says otherwise; retry only operations documented as retryable, and replay them with the SAME idempotency key.
- Scope: domain
- Operation IDs: collection_pay_in_reserve

### provider_egress_rejected

- HTTP status: 422
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `provider egress rejected` contract condition.
- Action: Read the error details, then the operation reference for this resource, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the resource; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: collection_pay_in_capture, collection_pay_in_reserve

### provider_outcome_unsupported

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`provider outcome unsupported`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: beneficiary_verify, collection_pay_in_capture, collection_pay_in_reserve, sandbox_customer_onboard

### rate_limited

- HTTP status: 429
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The caller exceeded Hyperscale's fair use request rate for its credential, or its IP address when unauthenticated.
- Action: Back off for the response retry window before sending the next request.
- Remediation: Spread bursts, batch reads, and respect the response rate limit headers.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### request_body_too_large

- HTTP status: 413
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The JSON request body exceeded Hyperscale's accepted payload size.
- Action: Reduce the request body size and move large payloads to supported external storage.
- Remediation: Send only contract fields and references needed by the operation, then retry with a smaller body.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### resource_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The requested resource does not exist in the credential's visible scope.
- Action: Confirm the resource ID belongs to the same tenant, product, and environment as the credential.
- Remediation: Read or create the resource in the same sandbox/live environment before calling this operation.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### resource_reader_unavailable

- HTTP status: 503
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: false
- Cause: A generated read model could not serve the request at this moment.
- Action: Retry with the same request after the read model or backing dependency recovers.
- Remediation: Use SDK retries for eligible reads; keep the same tenant/environment and escalate if it persists.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### session_expired

- HTTP status: 401
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `session expired` contract condition.
- Action: Read the error details, then the operation reference for this resource, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the resource; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_list, customer_retrieve, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### session_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No resource matches the `id` this request referenced (`session not found`).
- Action: List the collection this request referenced in the same tenant, product, and environment, then retry with an `id` that listing returns.
- Remediation: Create or select the resource in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: customer_session_revoke

### session_required

- HTTP status: 401
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation cannot run against this resource until the `session required` prerequisite exists.
- Action: Supply the field, capability, evidence, or configuration the error details name for this resource, then call the operation again.
- Remediation: Complete the prerequisite through the surface that owns it -- the operation reference for this resource names it -- and the same call then succeeds unchanged.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_list, customer_logout, customer_retrieve, customer_session_revoke, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### session_revoked

- HTTP status: 401
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `session revoked` contract condition.
- Action: Read the error details, then the operation reference for this resource, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the resource; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_list, customer_retrieve, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### source_account_status_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The source (debit) account is not open. It is frozen or closed, so Hyperscale will not debit it.
- Action: Use a source account whose status is `open`, or unfreeze the intended account, before retrying.
- Remediation: Read the account status, unfreeze it (or select an open account in the same currency and product), then resend the transfer.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### source_operation_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No resource matches the `id` this request referenced (`source operation not found`).
- Action: List the collection this request referenced in the same tenant, product, and environment, then retry with an `id` that listing returns.
- Remediation: Create or select the resource in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### state_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation conflicts with the current durable state of the resource.
- Action: Refresh the resource and retry from its current lifecycle state.
- Remediation: List or retrieve the resource first, then call the next valid operation for its state.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### state_constraint_failed

- HTTP status: 422
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request is syntactically valid but violates a business-state constraint.
- Action: Fix the semantic field combination called out by the error details.
- Remediation: Use the operation docs and typed input model to adjust the values before retrying.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### statement_evidence_incomplete

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: One of this month's ledger movements has no complete receipt behind it: no finalized receipt claims that transfer, more than one does, or the receipt that claims it is missing the linkage a statement line is built from. A statement is only ever derived from receipts, so the month is refused whole rather than issued with a line no receipt can back. The error details name the ledger transfer and the receipt the check stopped on.
- Action: Read the month on the treasury window to see how far the gap runs, and ask whoever operates this deployment to repair the receipt the error details name. No statement was issued and no figures were produced.
- Remediation: Nothing in the request causes this and no retry clears it: the same month refuses until the receipt linkage is repaired, which only an operator of this deployment can do. Balances are untouched -- the account's balance read still answers, and every other month still issues -- so the treasury window is the fastest way to see whether one month or a run of them is affected.
- Scope: domain
- Operation IDs: account_statement_export, account_statement_retrieve

### statement_evidence_mismatch

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: This month's records disagree with each other. Either a ledger movement and the receipt claiming it differ on amount, currency, account side, phase, or the transfer resource behind them, or the lines those receipts describe do not add up to the closing balance the ledger reports for the month. Both records are immutable, so the read refuses rather than issue a statement from whichever one it picked.
- Action: Compare the ledger transfer and the receipt the error details name; a statement can only be issued once they agree, which is repair work for whoever operates this deployment. No statement was issued and no figures were produced.
- Remediation: This is a fact about stored records, so retrying, re-authenticating, or asking for a narrower period all return the same refusal. The account and its balances are unaffected and neighbouring months still issue. Repair means correcting the disagreement at its source -- the receipt for that movement -- after which the month issues normally with no change to this call.
- Scope: domain
- Operation IDs: account_statement_export, account_statement_retrieve

### statement_line_limit_exceeded

- HTTP status: 413
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: This account recorded more than 50,000 movements in the requested month -- more activity than a single monthly statement can carry. The account and its balances are fine; the month is too large to render as one document. The error details carry the exact limit.
- Action: Read the month on the accounts that make this one up, rather than on the pooled account itself. No statement was issued and no figures were produced.
- Remediation: A statement is a whole UTC month by definition, so there is no second page to ask for and no date range that narrows it. An account this busy is almost always a pooled account: read the per-customer or per-product accounts beneath it, whose months each fall within the limit, and their opening and closing balances add back to the same totals.
- Scope: domain
- Operation IDs: account_statement_export, account_statement_retrieve

### system_principal_required

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation is restricted to the system principal.
- Action: Use an operator/system credential instead of a tenant API key.
- Remediation: Run the equivalent tenant-safe operation when available, or route through the admin/system surface.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### tenant_bank_confirmation_required

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the Company the platform has already durably recorded (`tenant bank confirmation required`).
- Action: Re-read the Company with `tenant.retrieve` and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the Company as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: financial_address_create

### tenant_mismatch

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request mixed tenant-owned identifiers across tenant boundaries.
- Action: Use resource IDs, product IDs, and credentials from the same tenant.
- Remediation: Recreate the request from the current tenant's product in the portal or from the generated SDK context.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### tenant_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The credential resolved to a tenant Hyperscale cannot find.
- Action: Sign in again or use an API key issued for an existing tenant.
- Remediation: Sign in, create a product, and create a fresh product API key before retrying.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### transfer_adjustment_amount_invalid

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer adjustment amount invalid`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_adjust

### transfer_destination_role_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer destination role forbidden`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### transfer_expiry_invalid

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer expiry invalid`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_reserve

### transfer_expiry_past

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `transfer expiry past` contract condition.
- Action: Read the error details, then the operation reference for this resource, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the resource; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: internal_transfer_reserve

### transfer_expiry_too_large

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The operation refused the request on its `transfer expiry too large` contract condition.
- Action: Read the error details, then the operation reference for this resource, before retrying.
- Remediation: Correct the request against the generated SDK models and a fresh read of the resource; if the shape is already right, the product may be missing the capability this operation needs.
- Scope: domain
- Operation IDs: internal_transfer_reserve

### transfer_lineage_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the resource the platform has already durably recorded (`transfer lineage conflict`).
- Action: Re-read the resource this request referenced and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the resource as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### transfer_not_found

- HTTP status: 404
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: No resource matches the `id` this request referenced (`transfer not found`).
- Action: List the collection this request referenced in the same tenant, product, and environment, then retry with an `id` that listing returns.
- Remediation: Create or select the resource in the environment the call runs against; ids never carry across tenants, or across sandbox and live.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### transfer_post_amount_invalid

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer post amount invalid`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_post

### transfer_role_pair_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer role pair forbidden`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### transfer_source_role_forbidden

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted value is not one this resource accepts (`transfer source role forbidden`).
- Action: Replace the rejected value with one this resource allows, as listed in the API reference or set by product policy.
- Remediation: Rebuild the request from the generated SDK types for this resource, which carry the allowed values as unions rather than free strings.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### transfer_status_forbidden

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The transfer is not in the state this operation requires (for example, posting needs a reserved transfer; returning or reversing needs a posted one). The current and required states are described in the error message.
- Action: Read the transfer's current status and call the operation that is valid for that status.
- Remediation: Follow the transfer lifecycle (reserve → post, then return/reverse) and issue the operation matching the transfer's current state instead of the rejected one.
- Scope: domain
- Operation IDs: internal_transfer_adjust, internal_transfer_create, internal_transfer_post, internal_transfer_reserve, internal_transfer_reverse, internal_transfer_void

### unauthorized

- HTTP status: 403
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request did not include a valid Hyperscale bearer credential for this environment.
- Action: Authenticate with a product API key for REST/OpenAPI, SDK, or MCP calls, or use a current portal session for browser calls.
- Remediation: Sign in, create a product, create a sandbox API key, set HYPERSCALE_API_KEY, and retry with Authorization: Bearer <key>.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

### usage_source_conflict

- HTTP status: 409
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The request contradicts the resource the platform has already durably recorded (`usage source conflict`).
- Action: Re-read the resource this request referenced and compare the submitted ids, currency, product, tenant, and expected state against what comes back.
- Remediation: Rebuild the request from the resource as it now stands, then retry under a NEW idempotency key -- reuse the original key only when you are deliberately replaying the original mutation.
- Scope: domain
- Operation IDs: account_create, collection_pay_in_capture, internal_transfer_create, internal_transfer_post, payout_create

### validation_failed

- HTTP status: 400
- Additional HTTP statuses: none
- Retryable: false
- Idempotency safe: true
- Cause: The submitted input did not match the expected form.
- Action: Fix missing, malformed, or out-of-range fields reported in the error details.
- Remediation: Use the SDK types, examples, and API reference to rebuild the request.
- Scope: structural
- Operation IDs: account_balance_retrieve, account_close, account_create, account_freeze, account_list, account_retrieve, account_statement_export, account_statement_retrieve, account_unfreeze, activity_list, audit_event_list, audit_event_retrieve, beneficiary_create, beneficiary_list, beneficiary_retrieve, beneficiary_verify, collection_list, collection_pay_in_cancel, collection_pay_in_capture, collection_pay_in_reserve, collection_retrieve, consent_list, consent_retrieve, consent_revoke, customer_access_close, customer_access_list, customer_access_reactivate, customer_access_retrieve, customer_access_suspend, customer_create, customer_list, customer_login, customer_logout, customer_retrieve, customer_session_revoke, customer_signup, deposit_list, deposit_retrieve, event_retrieve, expected_payment_cancel, expected_payment_create, expected_payment_list, expected_payment_retrieve, financial_address_create, financial_address_disable, financial_address_list, financial_address_retrieve, internal_transfer_adjust, internal_transfer_create, internal_transfer_list, internal_transfer_post, internal_transfer_reserve, internal_transfer_retrieve, internal_transfer_reverse, internal_transfer_void, operation_list, operation_retrieve, payout_create, payout_list, payout_retrieve, receipt_list, receipt_retrieve, sandbox_account_fund, sandbox_bank_credit_request, sandbox_beneficiary_accept, sandbox_customer_access_activate, sandbox_customer_onboard, sandbox_platform_fire, subject_create, subject_kind_list, subject_list, subject_retrieve

## Refusal And Escalation

### Refusal Notes
- Never echo, log, or persist the returned secret/key; deliver it to the operator through the product surface.
- Refuse to claim external completion without matching External Confirmation.
- Refuse to fabricate tenant, account, provider, receipt, or trust facts.
- Refuse to modify, suspend, disable, or close existing resource state without explicit user confirmation and valid operation input.
- Refuse to move money without explicit user confirmation and valid operation input.

### Escalation Notes
- Escalate ambiguous money movement, reversal, correction, or payout requests.
- Escalate ambiguous, irreversible, or scope-expanding requests to modify, suspend, or close existing resources.
- Escalate missing, rejected, or conflicting External Confirmation.
