List available products for a customer
Returns products available to a customer from active matrix rules. Requires JWT and **RBAC read** on `customer_id`.
Authorization
BearerAuth HTTP bearer JWT from the Corebanq auth service.
Authorization is enforced with RBAC (record-level permissions), not ad-hoc OAuth-style scopes in this spec. See each tag description and operation summaries for which record grants apply.
In: header
Header Parameters
BCP 47 language tag. Selects locale for product name/description. Falls back to the tenant's default locale when absent or unsupported.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/products/list" \ -H "Content-Type: application/json" \ -d '{ "customer_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7" }'{
"customer_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"customer_type": "SMALL_BUSINESS",
"products": [
{
"id": "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
"code": "OWT",
"name": "Transfer",
"description": "Send funds to external bank accounts via wire transfer.",
"type": "transfers",
"route": "payment"
},
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"code": "OFR",
"name": "Convert (Off-Ramp)",
"description": "Convert crypto assets to fiat currency.",
"type": "transfers",
"route": "convert"
},
{
"id": "c9e66790-7425-40de-944b-e07fc1f90000",
"code": "CRD",
"name": "Crypto Receive (Deposit)",
"description": "Deposit cryptocurrency to your account on the platform.",
"type": "transfers",
"route": "deposit"
}
]
}{
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": {}
}{
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": {}
}{
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": {}
}{
"code": "validation_error",
"message": "At least one of product_ids, source_account_id, destination_account_id, or destination_counterparty_id is required.",
"details": {}
}Get persona associated with a user including linked records metadata
Given a partial transfer context for a **target customer** (`customer_id`), returns eligible active products, active counterparty-shaped source rows, active counterparty-shaped destination rows, viable active routes, and optional limits/fees/FX. The target customer itself is represented as a counterparty row, matching the counterparties domain model. Selectable nested payment-source rows expose `cp_account_type` (`account`, `bank_account`, `crypto_wallet`), `cp_account_id`, and `products_allowed`. Inactive catalogue products, inactive matrix rules, inactive transaction channels, inactive source accounts, inactive destination counterparties, inactive bank accounts, and inactive crypto wallets are not returned. Modern finalize clients build selectors from the parent counterparty row `id` plus the chosen nested `cp_account_id`, then send them as `source.counterparty_id` / `source.cp_account_id` and `destination.counterparty_id` / `destination.cp_account_id`. The optional `finalize_recipient` hint is legacy convenience data for older recipient-shaped finalize clients. When a product is pinned via a single effective `product_ids[]` selection and enough route context is provided, `transfer_params` includes the allow/deny verdict, normalized amount, calculated fees, advisory FX, velocity hints, and optional quote state. Requires JWT and **RBAC read** on that customer.