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

# Dream Trip Packages

> The frozen Dream Trip Packages Product Build, version 1.

- Composition id: `dream_trip_packages`
- Version: 1
- Digest: `62d8d72a80da0335a61819e13f6669a7297836aef685325b78ec41cc65a631f5`
- Currencies: `SAR`
- Webhook events: 36

## Instruments

| Instrument | Title | States | Actions |
| --- | --- | --- | --- |
| [`claim`](../instruments/claim.md) | Claim | 5 | create |
| [`collections_case`](../instruments/collections_case.md) | Collections case | 6 | assign, create, recover |
| [`contact_attempt`](../instruments/contact_attempt.md) | Contact attempt | 2 | create |
| [`credit_agreement`](../instruments/credit_agreement.md) | Credit agreement | 6 | advance, create |
| [`flight_booking`](../instruments/flight_booking.md) | Flight booking | 9 | create |
| [`hotel_stay`](../instruments/hotel_stay.md) | Hotel stay | 9 | create |
| [`installment`](../instruments/installment.md) | Installment | 4 | create |
| [`policy`](../instruments/policy.md) | Policy | 6 | bind, create |
| [`travel_package`](../instruments/travel_package.md) | Travel package | 4 | cancel, complete, confirm, create |

## Journeys

### 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: platform write
   - 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

### Release a flight hold

- Journey id: `flight_hold_released`
- 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 <- 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 <- operator_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 <- operator_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: none
   - Bindings: none
8. `flight_booking_create`
   - Actor: product
   - Action: `flight_booking.create`
   - Route: `POST /v1/flight-bookings`, scopes flight_booking:write, idempotency required, receipt yes
   - Body: bookingNote, currency, departsAt, fareAmount, holdExpiresAt, operatorAccountId, productId, subject, travelerAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: operatorAccountId <- operator.accountId, subject <- subject.subjectId, travelerAccountId <- traveler.accountId
9. `flight_booking_release`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/flight-bookings/{flightBookingId}/release`, scopes flight_booking:write, idempotency required, receipt yes
   - Body: none
   - Path: flightBookingId
   - Query: none
   - Expect: none
   - Bindings: flightBookingId <- booking.flightBookingId

### Release a held stay

- Journey id: `release_held_stay`
- 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. `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
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. `hotel_stay_create`
   - Actor: product
   - Action: `hotel_stay.create`
   - Route: `POST /v1/hotel-stays`, scopes hotel_stay:write, idempotency required, receipt yes
   - Body: checkInAt, checkOutAt, currency, guestAccountId, holdExpiresAt, productId, propertyAccountId, rateAmount, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: guestAccountId <- guest_account.accountId, propertyAccountId <- property_account.accountId, subject <- stay_subject.subjectId
7. `hotel_stay_release`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/hotel-stays/{hotelStayId}/release`, scopes hotel_stay:write, idempotency required, receipt yes
   - Body: none
   - Path: hotelStayId
   - Query: none
   - Expect: none
   - Bindings: hotelStayId <- stay.hotelStayId

### Complete a travel package

- Journey id: `complete_travel_package`
- 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. `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
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. `travel_package_create`
   - Actor: product
   - Action: `travel_package.create`
   - Route: `POST /v1/travel-packages`, scopes travel_package:write, idempotency required, receipt yes
   - Body: departAt, memo, payerAccountId, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: payerAccountId <- payer_account.accountId, subject <- traveler_subject.subjectId
6. `travel_package_confirm`
   - Actor: product
   - Action: `travel_package.confirm`
   - Route: `POST /v1/travel-packages/{travelPackageId}/confirm`, scopes travel_package:write, idempotency required, receipt yes
   - Body: none
   - Path: travelPackageId
   - Query: none
   - Expect: none
   - Bindings: travelPackageId <- package.travelPackageId
7. `travel_package_complete`
   - Actor: product
   - Action: `travel_package.complete`
   - Route: `POST /v1/travel-packages/{travelPackageId}/complete`, scopes travel_package:write, idempotency required, receipt yes
   - Body: none
   - Path: travelPackageId
   - Query: none
   - Expect: none
   - Bindings: travelPackageId <- package.travelPackageId

### Advance and write off credit

- Journey id: `advanced_credit_written_off`
- 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 <- borrower_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 <- borrower_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 <- lender_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 <- lender_customer.customerId
7. `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 <- lender.accountId
8. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
9. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- agreement.creditAgreementId
10. `credit_agreement_write_off`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/write-off`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- agreement.creditAgreementId

### Write off an overdue installment

- Journey id: `write_off_overdue_installment`
- 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. `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 <- funding_account.accountId
6. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower_account.accountId, fundingAccountId <- funding_account.accountId
7. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- agreement.creditAgreementId
8. `installment_create`
   - Actor: product
   - Action: `installment.create`
   - Route: `POST /v1/installments`, scopes installment:write, idempotency required, receipt yes
   - Body: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower_account.accountId, fundingAccountId <- funding_account.accountId
9. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `installment.mark_overdue` 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.installmentId <- installment.installmentId
10. `installment_write_off`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/installments/{installmentId}/write-off`, scopes installment:write, idempotency required, receipt yes
   - Body: none
   - Path: installmentId
   - Query: none
   - Expect: none
   - Bindings: installmentId <- installment.installmentId

### Approve and close an exposure

- Journey id: `approved_exposure_closed`
- 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. `exposure_arrangement_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/exposure-arrangements`, scopes exposure_arrangement:write, idempotency required, receipt yes
   - Body: approvedAmountsCapAmount, borrowerAccountId, borrowerEntityId, currency, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower_account.accountId
5. `exposure_arrangement_approve`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/exposure-arrangements/{exposureArrangementId}/approve`, scopes exposure_arrangement:write, idempotency required, receipt yes
   - Body: none
   - Path: exposureArrangementId
   - Query: none
   - Expect: none
   - Bindings: exposureArrangementId <- arrangement.exposureArrangementId
6. `exposure_arrangement_close`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/exposure-arrangements/{exposureArrangementId}/close`, scopes exposure_arrangement:write, idempotency required, receipt yes
   - Body: none
   - Path: exposureArrangementId
   - Query: none
   - Expect: none
   - Bindings: exposureArrangementId <- arrangement.exposureArrangementId

### Assign and recall a collections case

- Journey id: `collections_case_recalled`
- 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 <- borrower_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 <- borrower_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 <- lender_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 <- lender_customer.customerId
7. `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 <- lender.accountId
8. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
9. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- agreement.creditAgreementId
10. `installment_create`
   - Actor: product
   - Action: `installment.create`
   - Route: `POST /v1/installments`, scopes installment:write, idempotency required, receipt yes
   - Body: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
11. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `installment.mark_overdue` 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.installmentId <- installment.installmentId
12. `collections_case_create`
   - Actor: product
   - Action: `collections_case.create`
   - Route: `POST /v1/collections-cases`, scopes collections_case:write, idempotency required, receipt yes
   - Body: agreementId, allowedContactEndHour, allowedContactStartHour, currency, debtorAccountId, maxContactAttemptsPer30Days, memo, productId, recoveryAccountId, referredAmount, triggeringInstallmentId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- agreement.creditAgreementId, debtorAccountId <- borrower.accountId, recoveryAccountId <- lender.accountId, triggeringInstallmentId <- installment.installmentId
13. `collections_case_assign`
   - Actor: product
   - Action: `collections_case.assign`
   - Route: `POST /v1/collections-cases/{collectionsCaseId}/assign`, scopes collections_case:write, idempotency required, receipt yes
   - Body: none
   - Path: collectionsCaseId
   - Query: none
   - Expect: none
   - Bindings: collectionsCaseId <- case.collectionsCaseId
14. `collections_case_recall`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/collections-cases/{collectionsCaseId}/recall`, scopes collections_case:write, idempotency required, receipt yes
   - Body: none
   - Path: collectionsCaseId
   - Query: none
   - Expect: none
   - Bindings: collectionsCaseId <- case.collectionsCaseId

### Record and void a contact attempt

- Journey id: `contact_attempt_voided`
- 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 <- borrower_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 <- borrower_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 <- lender_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 <- lender_customer.customerId
7. `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 <- lender.accountId
8. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
9. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- agreement.creditAgreementId
10. `installment_create`
   - Actor: product
   - Action: `installment.create`
   - Route: `POST /v1/installments`, scopes installment:write, idempotency required, receipt yes
   - Body: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- agreement.creditAgreementId, borrowerAccountId <- borrower.accountId, fundingAccountId <- lender.accountId
11. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `installment.mark_overdue` 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.installmentId <- installment.installmentId
12. `collections_case_create`
   - Actor: product
   - Action: `collections_case.create`
   - Route: `POST /v1/collections-cases`, scopes collections_case:write, idempotency required, receipt yes
   - Body: agreementId, allowedContactEndHour, allowedContactStartHour, currency, debtorAccountId, maxContactAttemptsPer30Days, memo, productId, recoveryAccountId, referredAmount, triggeringInstallmentId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- agreement.creditAgreementId, debtorAccountId <- borrower.accountId, recoveryAccountId <- lender.accountId, triggeringInstallmentId <- installment.installmentId
13. `collections_case_assign`
   - Actor: product
   - Action: `collections_case.assign`
   - Route: `POST /v1/collections-cases/{collectionsCaseId}/assign`, scopes collections_case:write, idempotency required, receipt yes
   - Body: none
   - Path: collectionsCaseId
   - Query: none
   - Expect: none
   - Bindings: collectionsCaseId <- case.collectionsCaseId
14. `contact_attempt_create`
   - Actor: product
   - Action: `contact_attempt.create`
   - Route: `POST /v1/contact-attempts`, scopes contact_attempt:write, idempotency required, receipt yes
   - Body: attemptedAt, caseId, channel, note, outcome, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: caseId <- case.collectionsCaseId
15. `contact_attempt_void`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/contact-attempts/{contactAttemptId}/void`, scopes contact_attempt:write, idempotency required, receipt yes
   - Body: none
   - Path: contactAttemptId
   - Query: none
   - Expect: none
   - Bindings: contactAttemptId <- attempt.contactAttemptId

### Fail an underfunded round

- Journey id: `underfunded_round_failed`
- Steps: 5

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. `funding_round_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/funding-rounds`, scopes funding_round:write, idempotency required, receipt yes
   - Body: borrowerAccountId, closeBy, currency, memo, productId, targetAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower.accountId
5. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `funding_round.fail` 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.fundingRoundId <- round.fundingRoundId

### Refund a failed pledge

- Journey id: `failed_pledge_refunded`
- 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 <- borrower_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 <- borrower_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 <- investor_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 <- investor_customer.customerId
7. `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 <- investor.accountId
8. `funding_round_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/funding-rounds`, scopes funding_round:write, idempotency required, receipt yes
   - Body: borrowerAccountId, closeBy, currency, memo, productId, targetAmount
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- borrower.accountId
9. `funding_commitment_create`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/funding-commitments`, scopes funding_commitment:write, transfer:write, idempotency required, receipt yes
   - Body: amount, committedAt, fundingRoundId, investorAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: fundingRoundId <- round.fundingRoundId, investorAccountId <- investor.accountId
10. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `funding_round.fail` 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.fundingRoundId <- round.fundingRoundId
11. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `funding_commitment.refund` 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.fundingCommitmentId <- commitment.fundingCommitmentId

### Sell a package to departure

- Journey id: `dream_trip_package_departure`
- Steps: 16

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 <- traveler.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 <- traveler.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 <- traveler_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 <- traveler.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 <- traveler.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: none
   - Bindings: none
8. `travel_package_create`
   - Actor: product
   - Action: `travel_package.create`
   - Route: `POST /v1/travel-packages`, scopes travel_package:write, idempotency required, receipt yes
   - Body: departAt, memo, payerAccountId, productId, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: payerAccountId <- traveler_account.accountId, subject <- party.subjectId
9. `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
10. `flight_booking_create`
   - Actor: product
   - Action: `flight_booking.create`
   - Route: `POST /v1/flight-bookings`, scopes flight_booking:write, idempotency required, receipt yes
   - Body: bookingNote, currency, departsAt, fareAmount, holdExpiresAt, operatorAccountId, productId, subject, travelPackageId, travelerAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: travelerAccountId <- traveler_account.accountId, operatorAccountId <- operator_account.accountId, subject <- flight_subject.subjectId, travelPackageId <- package.travelPackageId
11. `flight_booking_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/flight-bookings/{flightBookingId}/confirm`, scopes flight_booking:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: flightBookingId
   - Query: none
   - Expect: none
   - Bindings: flightBookingId <- flight.flightBookingId
12. `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
13. `hotel_stay_create`
   - Actor: product
   - Action: `hotel_stay.create`
   - Route: `POST /v1/hotel-stays`, scopes hotel_stay:write, idempotency required, receipt yes
   - Body: checkInAt, checkOutAt, currency, guestAccountId, holdExpiresAt, productId, propertyAccountId, rateAmount, subject, travelPackageId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: guestAccountId <- traveler_account.accountId, propertyAccountId <- property_account.accountId, subject <- stay_subject.subjectId, travelPackageId <- package.travelPackageId
14. `hotel_stay_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/hotel-stays/{hotelStayId}/confirm`, scopes hotel_stay:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: hotelStayId
   - Query: none
   - Expect: none
   - Bindings: hotelStayId <- stay.hotelStayId
15. `travel_package_confirm`
   - Actor: product
   - Action: `travel_package.confirm`
   - Route: `POST /v1/travel-packages/{travelPackageId}/confirm`, scopes travel_package:write, idempotency required, receipt yes
   - Body: none
   - Path: travelPackageId
   - Query: none
   - Expect: none
   - Bindings: travelPackageId <- package.travelPackageId
16. `travel_package_complete`
   - Actor: product
   - Action: `travel_package.complete`
   - Route: `POST /v1/travel-packages/{travelPackageId}/complete`, scopes travel_package:write, idempotency required, receipt yes
   - Body: none
   - Path: travelPackageId
   - Query: none
   - Expect: none
   - Bindings: travelPackageId <- package.travelPackageId

### Run a flight leg

- Journey id: `dream_trip_flight_leg`
- 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 <- traveler.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 <- traveler.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 <- traveler_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 <- traveler.customerId
6. `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
7. `flight_booking_create`
   - Actor: product
   - Action: `flight_booking.create`
   - Route: `POST /v1/flight-bookings`, scopes flight_booking:write, idempotency required, receipt yes
   - Body: bookingNote, currency, departsAt, fareAmount, holdExpiresAt, operatorAccountId, productId, subject, travelerAccountId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: travelerAccountId <- traveler_account.accountId, operatorAccountId <- operator_account.accountId, subject <- flight_subject.subjectId
8. `flight_booking_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/flight-bookings/{flightBookingId}/confirm`, scopes flight_booking:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: flightBookingId
   - Query: none
   - Expect: none
   - Bindings: flightBookingId <- flight.flightBookingId
9. `flight_booking_cancel_quote`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/flight-bookings/{flightBookingId}/cancel-quote`, scopes flight_booking:write, idempotency required, receipt yes
   - Body: none
   - Path: flightBookingId
   - Query: none
   - Expect: none
   - Bindings: flightBookingId <- flight.flightBookingId
10. `flight_booking_cancel_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/flight-bookings/{flightBookingId}/cancel-confirm`, scopes flight_booking:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: flightBookingId
   - Query: none
   - Expect: none
   - Bindings: flightBookingId <- flight.flightBookingId

### Run a stay leg

- Journey id: `dream_trip_stay_leg`
- 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 <- traveler.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 <- traveler.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 <- guest_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 <- traveler.customerId
6. `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
7. `hotel_stay_create`
   - Actor: product
   - Action: `hotel_stay.create`
   - Route: `POST /v1/hotel-stays`, scopes hotel_stay:write, idempotency required, receipt yes
   - Body: checkInAt, checkOutAt, currency, guestAccountId, holdExpiresAt, productId, propertyAccountId, rateAmount, subject
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: guestAccountId <- guest_account.accountId, propertyAccountId <- property_account.accountId, subject <- stay_subject.subjectId
8. `hotel_stay_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/hotel-stays/{hotelStayId}/confirm`, scopes hotel_stay:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: hotelStayId
   - Query: none
   - Expect: none
   - Bindings: hotelStayId <- stay.hotelStayId
9. `hotel_stay_cancel_quote`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/hotel-stays/{hotelStayId}/cancel-quote`, scopes hotel_stay:write, idempotency required, receipt yes
   - Body: none
   - Path: hotelStayId
   - Query: none
   - Expect: none
   - Bindings: hotelStayId <- stay.hotelStayId
10. `hotel_stay_cancel_confirm`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/hotel-stays/{hotelStayId}/cancel-confirm`, scopes hotel_stay:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: hotelStayId
   - Query: none
   - Expect: none
   - Bindings: hotelStayId <- stay.hotelStayId

### Settle a disruption claim

- Journey id: `dream_trip_disruption_claim`
- 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 <- traveler.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 <- traveler.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 <- traveler_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 <- traveler.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 <- traveler_account.accountId, insurerAccountId <- insurer_account.accountId, subject <- trip.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 <- traveler_account.accountId, insurerAccountId <- insurer_account.accountId, subject <- trip.subjectId
12. `claim_assess`
   - Actor: product
   - Action: platform write
   - 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: platform write
   - 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: platform write
   - 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

### Finance a trip

- Journey id: `dream_trip_financing`
- 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 <- traveler.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 <- traveler.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 <- traveler_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 <- traveler.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 <- pool_account.accountId
7. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- traveler_account.accountId, fundingAccountId <- pool_account.accountId
8. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- plan.creditAgreementId
9. `installment_create`
   - Actor: product
   - Action: `installment.create`
   - Route: `POST /v1/installments`, scopes installment:write, idempotency required, receipt yes
   - Body: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- plan.creditAgreementId, borrowerAccountId <- traveler_account.accountId, fundingAccountId <- pool_account.accountId
10. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `installment.collect` 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.installmentId <- installment.installmentId
11. `credit_agreement_settle`
   - Actor: product
   - Action: platform write
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/settle`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- plan.creditAgreementId

### Hand off a missed payment

- Journey id: `dream_trip_collections`
- 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 <- traveler.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 <- traveler.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 <- traveler_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 <- traveler.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 <- pool_account.accountId
7. `credit_agreement_create`
   - Actor: product
   - Action: `credit_agreement.create`
   - Route: `POST /v1/credit-agreements`, scopes credit_agreement:write, idempotency required, receipt yes
   - Body: borrowerAccountId, currency, fundingAccountId, principal, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: borrowerAccountId <- traveler_account.accountId, fundingAccountId <- pool_account.accountId
8. `credit_agreement_advance`
   - Actor: product
   - Action: `credit_agreement.advance`
   - Route: `POST /v1/credit-agreements/{creditAgreementId}/advance`, scopes credit_agreement:write, transfer:write, idempotency required, receipt yes
   - Body: none
   - Path: creditAgreementId
   - Query: none
   - Expect: none
   - Bindings: creditAgreementId <- plan.creditAgreementId
9. `installment_create`
   - Actor: product
   - Action: `installment.create`
   - Route: `POST /v1/installments`, scopes installment:write, idempotency required, receipt yes
   - Body: agreementId, amount, borrowerAccountId, currency, dueAt, fundingAccountId, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- plan.creditAgreementId, borrowerAccountId <- traveler_account.accountId, fundingAccountId <- pool_account.accountId
10. `sandbox_platform_fire`
   - Actor: platform
   - Sandbox trigger: The platform fires `installment.mark_overdue` 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.installmentId <- installment.installmentId
11. `collections_case_create`
   - Actor: product
   - Action: `collections_case.create`
   - Route: `POST /v1/collections-cases`, scopes collections_case:write, idempotency required, receipt yes
   - Body: agreementId, allowedContactEndHour, allowedContactStartHour, currency, debtorAccountId, maxContactAttemptsPer30Days, memo, productId, recoveryAccountId, referredAmount, triggeringInstallmentId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: agreementId <- plan.creditAgreementId, triggeringInstallmentId <- installment.installmentId, debtorAccountId <- traveler_account.accountId, recoveryAccountId <- pool_account.accountId
12. `collections_case_assign`
   - Actor: product
   - Action: `collections_case.assign`
   - Route: `POST /v1/collections-cases/{collectionsCaseId}/assign`, scopes collections_case:write, idempotency required, receipt yes
   - Body: none
   - Path: collectionsCaseId
   - Query: none
   - Expect: none
   - Bindings: collectionsCaseId <- case.collectionsCaseId
13. `contact_attempt_create`
   - Actor: product
   - Action: `contact_attempt.create`
   - Route: `POST /v1/contact-attempts`, scopes contact_attempt:write, idempotency required, receipt yes
   - Body: attemptedAt, caseId, channel, note, outcome, productId
   - Path: none
   - Query: none
   - Expect: none
   - Bindings: caseId <- case.collectionsCaseId
14. `collections_case_recover`
   - Actor: product
   - Action: `collections_case.recover`
   - Route: `POST /v1/collections-cases/{collectionsCaseId}/recover`, scopes collections_case:write, transfer:write, idempotency required, receipt yes
   - Body: recoveredAmount
   - Path: collectionsCaseId
   - Query: none
   - Expect: none
   - Bindings: collectionsCaseId <- case.collectionsCaseId

### Onboard a traveler

- Journey id: `dream_trip_traveler_onboarding`
- Steps: 2

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 <- traveler.customerAccessId

### Move trip funds

- Journey id: `dream_trip_fund_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 <- traveler.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 <- traveler.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 <- traveler.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 <- funds.transferId

## 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 |
| `collections_case` | `agree_plan` | `decides.collections_agency` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `collections_case` | `assign` | `decides.collections_agency` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `collections_case` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `collections_case` | `recover` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `collections_case` | `recover` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `contact_attempt` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `advance` | `decides.credit_servicing` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `advance` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `credit_agreement` | `advance` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `refinance` | `decides.credit_servicing` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `reschedule` | `decides.credit_servicing` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `credit_agreement` | `settle` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `amend_collect` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `amend_fee` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `amend_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 |
| `flight_booking` | `cancel_confirm` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `cancel_quote` | `holds.quote` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `cancel_quote` | `schedules.expiry` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `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 |
| `flight_booking` | `complete` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `complete` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `confirm` | `decides.air_carrier` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `confirm` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `flight_booking` | `confirm` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `flight_booking` | `package_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 |
| `flight_booking` | `package_cancel` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `amend_collect` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `hotel_stay` | `amend_fee` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `hotel_stay` | `amend_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 |
| `hotel_stay` | `cancel_confirm` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `hotel_stay` | `cancel_quote` | `holds.quote` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `cancel_quote` | `schedules.expiry` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `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 |
| `hotel_stay` | `complete` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `hotel_stay` | `complete` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `confirm` | `decides.lodging_supplier` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `confirm` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `hotel_stay` | `confirm` | `schedules.deadline` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `create` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `expire` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `hotel_stay` | `package_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 |
| `hotel_stay` | `package_cancel` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `installment` | `collect` | `moves.transfer.internal` | `transfer.internal.volume_sar` | 0.75 SAR | 11 bps | 750.00 SAR | 75,000.00 SAR | 7,500,000.00 SAR |
| `installment` | `collect` | `reads.requires_aggregate` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `installment` | `collect` | `reads.requires_refs` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `installment` | `collect` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `installment` | `mark_overdue` | `schedules.due` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| `installment` | `write_off` | `reads.requires_aggregate` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.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 |
| `travel_package` | `confirm` | `reads.requires_aggregate` | `instrument.event.count` | 0.00 SAR | 0 bps | 0.00 SAR | 0.00 SAR | 0.00 SAR |
| **Total flat** | | | | | | **20,250.00 SAR** | **2,025,000.00 SAR** | **202,500,000.00 SAR** |
