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

# Asset-Backed Membership

> The frozen Asset-Backed Membership Product Build, version 1.

- Composition id: `asset_backed_membership`
- Version: 1
- Digest: `e1aa34ed81719696b5fe70c6d27361986febb36d95dc58274fd6a2481714b80a`
- Currencies: `SAR`
- Webhook events: 45

## Instruments

| Instrument | Title | States | Actions |
| --- | --- | --- | --- |
| [`claim`](../instruments/claim.md) | Claim | 5 | approve, assess, create, pay |
| [`deposit_hold`](../instruments/deposit_hold.md) | Deposit hold | 6 | claim, create, fund, return |
| [`escrow_order`](../instruments/escrow_order.md) | Escrow order | 9 | create, fund, refund, release |
| [`listing`](../instruments/listing.md) | Listing | 5 | create, publish, reserve, sell |
| [`order`](../instruments/order.md) | Order | 5 | confirm, create, fulfill |
| [`payout_run`](../instruments/payout_run.md) | Payout run | 4 | create |
| [`policy`](../instruments/policy.md) | Policy | 6 | bind, create |
| [`trade_settlement`](../instruments/trade_settlement.md) | Trade settlement | 7 | create, fund, release |

## Journeys

### Cancel an unfunded escrow

- Journey id: `unfunded_escrow_canceled`
- Steps: 11

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
5. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- buyer_customer.customerAccessId
6. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- buyer_customer.customerId
7. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: subjectId, tenantId, productId, kind, kindVersion, attributes, declaredValue, createdAt, metadata
   - Bindings: none
8. `listing_create`
   - Actor: product
   - Action: `listing.create`
   - Route: `POST /v1/listings`, scopes listing:write, idempotency required, receipt yes
   - Body: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sellerAccountId <- seller.accountId, subject <- subject.subjectId
9. `listing_publish`
   - Actor: product
   - Action: `listing.publish`
   - Route: `POST /v1/listings/{listingId}/publish`, scopes listing:write, idempotency required, receipt yes
   - Body: none
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId
10. `escrow_order_create`
   - Actor: product
   - Action: `escrow_order.create`
   - Route: `POST /v1/escrow-orders`, scopes escrow_order:write, idempotency required, receipt yes
   - Body: buyerAccountId, fundBy, listingId, memo, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: buyerAccountId <- buyer.accountId, listingId <- listing.listingId, subject <- subject.subjectId
11. `escrow_order_cancel`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/escrow-orders/{escrowOrderId}/cancel`, scopes escrow_order:write, idempotency required, receipt yes
   - Body: none
   - Path: escrowOrderId
   - Query: none
   - Expect: none
   - Bindings: escrowOrderId <- escrow.escrowOrderId

### Withdraw a draft listing

- Journey id: `withdraw_draft_listing`
- Steps: 6

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: subjectId, tenantId, productId, kind, kindVersion, attributes, declaredValue, createdAt, metadata
   - Bindings: none
5. `listing_create`
   - Actor: product
   - Action: `listing.create`
   - Route: `POST /v1/listings`, scopes listing:write, idempotency required, receipt yes
   - Body: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- subject.subjectId
6. `listing_withdraw`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/listings/{listingId}/withdraw`, scopes listing:write, idempotency required, receipt yes
   - Body: none
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId

### Cancel an unfunded order

- Journey id: `cancel_unfunded_order`
- Steps: 10

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
5. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: subjectId, tenantId, productId, kind, kindVersion, attributes, declaredValue, createdAt, metadata
   - Bindings: none
6. `listing_create`
   - Actor: product
   - Action: `listing.create`
   - Route: `POST /v1/listings`, scopes listing:write, idempotency required, receipt yes
   - Body: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- subject.subjectId
7. `listing_publish`
   - Actor: product
   - Action: `listing.publish`
   - Route: `POST /v1/listings/{listingId}/publish`, scopes listing:write, idempotency required, receipt yes
   - Body: none
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId
8. `escrow_order_create`
   - Actor: product
   - Action: `escrow_order.create`
   - Route: `POST /v1/escrow-orders`, scopes escrow_order:write, idempotency required, receipt yes
   - Body: buyerAccountId, fundBy, listingId, memo, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: buyerAccountId <- buyer_account.accountId, listingId <- listing.listingId, subject <- subject.subjectId
9. `order_create`
   - Actor: product
   - Action: `order.create`
   - Route: `POST /v1/orders`, scopes order:write, idempotency required, receipt yes
   - Body: confirmBy, escrowOrderId, listingId, memo, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: escrowOrderId <- escrow.escrowOrderId, listingId <- listing.listingId, subject <- subject.subjectId
10. `order_cancel`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/orders/{orderId}/cancel`, scopes order:write, idempotency required, receipt yes
   - Body: none
   - Path: orderId
   - Query: none
   - Expect: none
   - Bindings: orderId <- order.orderId

### Withdraw a policy quote

- Journey id: `withdraw_policy_quote`
- Steps: 7

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
5. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: subjectId, tenantId, productId, kind, kindVersion, attributes, declaredValue, createdAt, metadata
   - Bindings: none
6. `policy_create`
   - Actor: product
   - Action: `policy.create`
   - Route: `POST /v1/policies`, scopes policy:write, idempotency required, receipt yes
   - Body: coverageLimit, currency, expiresAt, insurerAccountId, perilSchedule, policyholderAccountId, premiumAmount, productId, startsAt, subject, termsSummary
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: insurerAccountId <- insurer_account.accountId, policyholderAccountId <- holder_account.accountId, subject <- subject.subjectId
7. `policy_withdraw`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/policies/{policyId}/withdraw`, scopes policy:write, idempotency required, receipt yes
   - Body: none
   - Path: policyId
   - Query: none
   - Expect: none
   - Bindings: policyId <- policy.policyId

### Assess and deny a claim

- Journey id: `claim_denied`
- Steps: 14

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- holder_customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- holder_customer.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- holder.accountId
5. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
6. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- insurer_customer.customerAccessId
7. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- insurer_customer.customerId
8. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
9. `policy_create`
   - Actor: product
   - Action: `policy.create`
   - Route: `POST /v1/policies`, scopes policy:write, idempotency required, receipt yes
   - Body: coverageLimit, currency, expiresAt, insurerAccountId, perilSchedule, policyholderAccountId, premiumAmount, productId, startsAt, subject, termsSummary
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: insurerAccountId <- insurer.accountId, policyholderAccountId <- holder.accountId, subject <- subject.subjectId
10. `policy_bind`
   - Actor: product
   - Action: `policy.bind`
   - Route: `POST /v1/policies/{policyId}/bind`, scopes policy:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: policyId
   - Query: none
   - Expect: none
   - Bindings: policyId <- policy.policyId
11. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `policy.activate` in normal lifecycle processing; sandbox fires it now.
   - Action: platform lifecycle trigger
   - Route: `POST /v1/sandbox/platform/fire`, scopes no scopes required, idempotency required, receipt yes
   - Body: input, operation
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: input.policyId <- policy.policyId
12. `claim_create`
   - Actor: product
   - Action: `claim.create`
   - Route: `POST /v1/claims`, scopes claim:write, idempotency required, receipt yes
   - Body: claimAmount, claimantAccountId, currency, evidenceSummary, insurerAccountId, occurredAt, peril, policyId, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: claimantAccountId <- holder.accountId, insurerAccountId <- insurer.accountId, policyId <- policy.policyId, subject <- subject.subjectId
13. `claim_assess`
   - Actor: product
   - Action: `claim.assess`
   - Route: `POST /v1/claims/{claimId}/assess`, scopes claim:write, idempotency required, receipt yes
   - Body: none
   - Path: claimId
   - Query: none
   - Expect: none
   - Bindings: claimId <- claim.claimId
14. `claim_deny`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/claims/{claimId}/deny`, scopes claim:write, idempotency required, receipt yes
   - Body: none
   - Path: claimId
   - Query: none
   - Expect: none
   - Bindings: claimId <- claim.claimId

### Cancel an unfunded deposit

- Journey id: `unfunded_deposit_canceled`
- Steps: 8

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
5. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- holder_customer.customerAccessId
6. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- holder_customer.customerId
7. `deposit_hold_create`
   - Actor: product
   - Action: `deposit_hold.create`
   - Route: `POST /v1/deposit-holds`, scopes deposit_hold:write, idempotency required, receipt yes
   - Body: amount, currency, expiresAt, holderAccountId, memo, payerAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: holderAccountId <- holder.accountId, payerAccountId <- payer.accountId
8. `deposit_hold_cancel`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/deposit-holds/{depositHoldId}/cancel`, scopes deposit_hold:write, idempotency required, receipt yes
   - Body: none
   - Path: depositHoldId
   - Query: none
   - Expect: none
   - Bindings: depositHoldId <- hold.depositHoldId

### Cancel a scheduled payout

- Journey id: `cancel_scheduled_payout`
- Steps: 7

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
6. `payout_run_create`
   - Actor: product
   - Action: `payout_run.create`
   - Route: `POST /v1/payout-runs`, scopes payout_run:write, idempotency required, receipt yes
   - Body: currency, earnerAccountId, netAmount, payoutFundingAccountId, productId, runAt, withholdingAccountId, withholdingAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: earnerAccountId <- earner_account.accountId, payoutFundingAccountId <- funding_account.accountId, withholdingAccountId <- withholding_account.accountId
7. `payout_run_cancel`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/payout-runs/{payoutRunId}/cancel`, scopes payout_run:write, idempotency required, receipt yes
   - Body: none
   - Path: payoutRunId
   - Query: none
   - Expect: none
   - Bindings: payoutRunId <- run.payoutRunId

### Abandon a trade settlement

- Journey id: `abandon_trade_settlement`
- Steps: 7

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- customer.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
4. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- customer.customerId
6. `trade_settlement_create`
   - Actor: product
   - Action: `trade_settlement.create`
   - Route: `POST /v1/trade-settlements`, scopes trade_settlement:write, idempotency required, receipt yes
   - Body: currency, platformAccountId, productId, sideAAccountId, sideAAmount, sideAServiceFeeAmount, sideBAccountId, sideBAmount, sideBServiceFeeAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: platformAccountId <- platform_account.accountId, sideAAccountId <- side_a_account.accountId, sideBAccountId <- side_b_account.accountId
7. `trade_settlement_abandon`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/trade-settlements/{tradeSettlementId}/abandon`, scopes trade_settlement:write, idempotency required, receipt yes
   - Body: none
   - Path: tradeSettlementId
   - Query: none
   - Expect: none
   - Bindings: tradeSettlementId <- trade.tradeSettlementId

### Acquire a member asset

- Journey id: `asset_membership_acquisition`
- Steps: 15

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- member.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- member_account.accountId
5. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
6. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- seller.customerAccessId
7. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- seller.customerId
8. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
9. `listing_create`
   - Actor: product
   - Action: `listing.create`
   - Route: `POST /v1/listings`, scopes listing:write, idempotency required, receipt yes
   - Body: askingPrice, currency, description, expiresAt, headline, imageUrl, productId, sellerAccountId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sellerAccountId <- seller_account.accountId, subject <- watch.subjectId
10. `listing_publish`
   - Actor: product
   - Action: `listing.publish`
   - Route: `POST /v1/listings/{listingId}/publish`, scopes listing:write, idempotency required, receipt yes
   - Body: none
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId
11. `escrow_order_create`
   - Actor: product
   - Action: `escrow_order.create`
   - Route: `POST /v1/escrow-orders`, scopes escrow_order:write, idempotency required, receipt yes
   - Body: buyerAccountId, fundBy, listingId, memo, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: buyerAccountId <- member_account.accountId, listingId <- listing.listingId, subject <- watch.subjectId
12. `escrow_order_fund`
   - Actor: product
   - Action: `escrow_order.fund`
   - Route: `POST /v1/escrow-orders/{escrowOrderId}/fund`, scopes escrow_order:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: escrowOrderId
   - Query: none
   - Expect: none
   - Bindings: escrowOrderId <- escrow.escrowOrderId
13. `listing_reserve`
   - Actor: product
   - Action: `listing.reserve`
   - Route: `POST /v1/listings/{listingId}/reserve`, scopes listing:write, idempotency required, receipt yes
   - Body: escrowOrderId
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId, escrowOrderId <- escrow.escrowOrderId
14. `escrow_order_release`
   - Actor: product
   - Action: `escrow_order.release`
   - Route: `POST /v1/escrow-orders/{escrowOrderId}/release`, scopes escrow_order:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: escrowOrderId
   - Query: none
   - Expect: none
   - Bindings: escrowOrderId <- escrow.escrowOrderId
15. `listing_sell`
   - Actor: product
   - Action: `listing.sell`
   - Route: `POST /v1/listings/{listingId}/sell`, scopes listing:write, idempotency required, receipt yes
   - Body: none
   - Path: listingId
   - Query: none
   - Expect: none
   - Bindings: listingId <- listing.listingId

### Settle an inspection deposit

- Journey id: `asset_membership_inspection_claim`
- Steps: 8

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- member.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- member_account.accountId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
6. `deposit_hold_create`
   - Actor: product
   - Action: `deposit_hold.create`
   - Route: `POST /v1/deposit-holds`, scopes deposit_hold:write, idempotency required, receipt yes
   - Body: amount, currency, expiresAt, holderAccountId, memo, payerAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: payerAccountId <- member_account.accountId, holderAccountId <- club_account.accountId
7. `deposit_hold_fund`
   - Actor: product
   - Action: `deposit_hold.fund`
   - Route: `POST /v1/deposit-holds/{depositHoldId}/fund`, scopes deposit_hold:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: depositHoldId
   - Query: none
   - Expect: none
   - Bindings: depositHoldId <- deposit.depositHoldId
8. `deposit_hold_claim`
   - Actor: product
   - Action: `deposit_hold.claim`
   - Route: `POST /v1/deposit-holds/{depositHoldId}/claim`, scopes deposit_hold:write, transfer:write, idempotency required, receipt yes
   - Body: actorAccountId, assessmentNote, claimAmount
   - Path: depositHoldId
   - Query: none
   - Expect: none
   - Bindings: actorAccountId <- club_account.accountId, depositHoldId <- deposit.depositHoldId

### Fund a member exchange

- Journey id: `asset_membership_exchange_funding`
- Steps: 13

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- first_member.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- first_member.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- first_account.accountId
5. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
6. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- second_member.customerAccessId
7. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- second_member.customerId
8. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- second_account.accountId
9. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- first_member.customerId
10. `trade_settlement_create`
   - Actor: product
   - Action: `trade_settlement.create`
   - Route: `POST /v1/trade-settlements`, scopes trade_settlement:write, idempotency required, receipt yes
   - Body: currency, platformAccountId, productId, sideAAccountId, sideAAmount, sideAServiceFeeAmount, sideBAccountId, sideBAmount, sideBServiceFeeAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sideAAccountId <- first_account.accountId, sideBAccountId <- second_account.accountId, platformAccountId <- platform_account.accountId
11. `trade_settlement_fund`
   - Actor: product
   - Action: `trade_settlement.fund`
   - Route: `POST /v1/trade-settlements/{tradeSettlementId}/fund`, scopes trade_settlement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: tradeSettlementId
   - Query: none
   - Expect: none
   - Bindings: tradeSettlementId <- trade.tradeSettlementId
12. `trade_settlement_release`
   - Actor: product
   - Action: `trade_settlement.release`
   - Route: `POST /v1/trade-settlements/{tradeSettlementId}/release`, scopes trade_settlement:write, transfer:write, idempotency required, receipt yes
   - Body: actorAccountId
   - Path: tradeSettlementId
   - Query: none
   - Expect: none
   - Bindings: actorAccountId <- first_account.accountId, tradeSettlementId <- trade.tradeSettlementId
13. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `trade_settlement.post` in normal lifecycle processing; sandbox fires it now.
   - Action: platform lifecycle trigger
   - Route: `POST /v1/sandbox/platform/fire`, scopes no scopes required, idempotency required, receipt yes
   - Body: input, operation
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: input.tradeSettlementId <- trade.tradeSettlementId

### Protect a member asset

- Journey id: `asset_membership_damage_protection`
- Steps: 14

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- member.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- member_account.accountId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
6. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- insurer_account.accountId
7. `subject_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/subjects`, scopes product:write, idempotency required, receipt yes
   - Body: attributes, declaredValue, kind, kindVersion, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
8. `policy_create`
   - Actor: product
   - Action: `policy.create`
   - Route: `POST /v1/policies`, scopes policy:write, idempotency required, receipt yes
   - Body: coverageLimit, currency, expiresAt, insurerAccountId, perilSchedule, policyholderAccountId, premiumAmount, productId, startsAt, subject, termsSummary
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: policyholderAccountId <- member_account.accountId, insurerAccountId <- insurer_account.accountId, subject <- watch.subjectId
9. `policy_bind`
   - Actor: product
   - Action: `policy.bind`
   - Route: `POST /v1/policies/{policyId}/bind`, scopes policy:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: policyId
   - Query: none
   - Expect: none
   - Bindings: policyId <- policy.policyId
10. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `policy.activate` in normal lifecycle processing; sandbox fires it now.
   - Action: platform lifecycle trigger
   - Route: `POST /v1/sandbox/platform/fire`, scopes no scopes required, idempotency required, receipt yes
   - Body: input, operation
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: input.policyId <- policy.policyId
11. `claim_create`
   - Actor: product
   - Action: `claim.create`
   - Route: `POST /v1/claims`, scopes claim:write, idempotency required, receipt yes
   - Body: claimAmount, claimantAccountId, currency, evidenceSummary, insurerAccountId, occurredAt, peril, policyId, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: policyId <- policy.policyId, claimantAccountId <- member_account.accountId, insurerAccountId <- insurer_account.accountId, subject <- watch.subjectId
12. `claim_assess`
   - Actor: product
   - Action: `claim.assess`
   - Route: `POST /v1/claims/{claimId}/assess`, scopes claim:write, idempotency required, receipt yes
   - Body: none
   - Path: claimId
   - Query: none
   - Expect: none
   - Bindings: claimId <- claim.claimId
13. `claim_approve`
   - Actor: product
   - Action: `claim.approve`
   - Route: `POST /v1/claims/{claimId}/approve`, scopes claim:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: claimId
   - Query: none
   - Expect: none
   - Bindings: claimId <- claim.claimId
14. `claim_pay`
   - Actor: product
   - Action: `claim.pay`
   - Route: `POST /v1/claims/{claimId}/pay`, scopes claim:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: claimId
   - Query: none
   - Expect: none
   - Bindings: claimId <- claim.claimId

### Move member funds

- Journey id: `asset_membership_ledger_movement`
- Steps: 7

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- member.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- source.accountId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- member.customerId
6. `internal_transfer_reserve`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/internal-transfers/reserve`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId, memo, sourceAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: sourceAccountId <- source.accountId, destinationAccountId <- destination.accountId
7. `internal_transfer_post`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/internal-transfers/{transferId}/post`, scopes transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: transferId
   - Query: none
   - Expect: none
   - Bindings: transferId <- movement.transferId

### Run seller payouts

- Journey id: `asset_membership_seller_payout`
- Steps: 9

1. `sandbox_customer_onboard`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-onboarding`, scopes customer:write, idempotency required, receipt yes
   - Body: displayName, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: none
2. `sandbox_customer_access_activate`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/customer-access/{customerAccessId}/activate`, scopes customer:write, idempotency required, receipt yes
   - Body: none
   - Path: customerAccessId
   - Query: none
   - Expect: none
   - Bindings: customerAccessId <- seller.customerAccessId
3. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- seller.customerId
4. `sandbox_account_fund`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/sandbox/account-funding`, scopes transfer:write, idempotency required, receipt yes
   - Body: amount, currency, destinationAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: destinationAccountId <- earnings.accountId
5. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- seller.customerId
6. `account_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/accounts`, scopes account:write, idempotency required, receipt yes
   - Body: currency, owner, role
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: owner.id <- seller.customerId
7. `payout_run_create`
   - Actor: product
   - Action: `payout_run.create`
   - Route: `POST /v1/payout-runs`, scopes payout_run:write, idempotency required, receipt yes
   - Body: currency, earnerAccountId, netAmount, payoutFundingAccountId, productId, runAt, withholdingAccountId, withholdingAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: earnerAccountId <- earnings.accountId, payoutFundingAccountId <- funding.accountId, withholdingAccountId <- withholding.accountId
8. `payout_run_withhold`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/payout-runs/{payoutRunId}/withhold`, scopes payout_run:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: payoutRunId
   - Query: none
   - Expect: none
   - Bindings: payoutRunId <- run.payoutRunId
9. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `payout_run.execute` in normal lifecycle processing; sandbox fires it now.
   - Action: platform lifecycle trigger
   - Route: `POST /v1/sandbox/platform/fire`, scopes no scopes required, idempotency required, receipt yes
   - Body: input, operation
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: input.payoutRunId <- run.payoutRunId

## Cost

Cost table version 2026-09-02.1. Flat amounts are multiplied by the action count; basis points price the meter's moved amount, which an action count does not determine.

| Instrument | Action | Effect | Meter | Flat per action | Rate on meter | 1,000 per month | 100,000 per month | 10,000,000 per month |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `claim` | `approve` | `decides.insurance_claims_adjuster` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `claim` | `approve` | `holds.reserve` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `claim` | `approve` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `claim` | `attest` | `decides.tenant_port` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `claim` | `attest` | `holds.reserve` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `claim` | `attest` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `claim` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `claim` | `pay` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `claim` | `reverse` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `deposit_hold` | `claim` | `decides.tenant_port` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `claim` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `deposit_hold` | `claim` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `create` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `expire` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `deposit_hold` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `fund` | `holds.reserve` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `fund` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `deposit_hold` | `fund` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `return` | `decides.tenant_port` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `deposit_hold` | `return` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `deposit_hold` | `return` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `collect_penalty` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `escrow_order` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `fund` | `moves.collection.pay_in` | `collection.pay_in.volume_sar` | 2.50 SAR | 16 bps | 2,500.00 SAR | 250,000.00 SAR | 25,000,000.00 SAR |
| `escrow_order` | `fund` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `quote` | `holds.quote` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `quote` | `schedules.expiry` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `escrow_order` | `refund` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `escrow_order` | `release` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `escrow_order` | `release` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `listing` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `listing` | `reopen` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `listing` | `reserve` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `listing` | `sell` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `order` | `cancel` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `order` | `confirm` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `order` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `order` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `order` | `fulfill` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `payout_run` | `execute` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `payout_run` | `execute` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `payout_run` | `withhold` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `policy` | `activate` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `policy` | `activate` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `bind` | `decides.insurance_carrier` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `bind` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `policy` | `cancel` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `policy` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `endorse` | `decides.insurance_carrier` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `preview` | `holds.quote` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `policy` | `preview` | `schedules.expiry` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `cancel` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `trade_settlement` | `dispute` | `decides.tenant_port` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `dispute` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `trade_settlement` | `dispute` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `fund` | `moves.collection.pay_in` | `collection.pay_in.volume_sar` | 2.50 SAR | 16 bps | 2,500.00 SAR | 250,000.00 SAR | 25,000,000.00 SAR |
| `trade_settlement` | `fund` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `trade_settlement` | `post` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `trade_settlement` | `post` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `release` | `decides.tenant_port` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `release` | `holds.reserve` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `trade_settlement` | `release` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| **Total flat** | | | | | | **20,750.00 SAR** | **2,075,000.00 SAR** | **207,500,000.00 SAR** |
