diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index 77b61bcd8..efe582848 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -8902,7 +8902,7 @@ paths: schema: $ref: '#/components/schemas/Card' '400': - description: Bad request. Returned with `INVALID_INPUT` when a supplied funding source does not belong to the cardholder or is not denominated in the card's currency, when `fundingSource` is combined with any `status` change on a card program where the card issuer makes authorization decisions, when `status` is supplied without `substatus` or without a non-empty `reason`, and for general invalid parameters. + description: Bad request. Returned with `INVALID_INPUT` when a supplied funding source does not belong to the cardholder or uses a currency unsupported by the card program, when `fundingSource` is combined with any `status` change on a card program where the card issuer makes authorization decisions, when `status` is supplied without `substatus` or without a non-empty `reason`, and for general invalid parameters. content: application/json: schema: @@ -27432,7 +27432,7 @@ components: example: 20 currency: type: string - description: Currency the card transacts in (ISO 4217 for fiat, tickers for crypto). Derived from the funding source at issue time. + description: Currency the card transacts in, fixed at issuance by its card program. USDB-funded cards transact in USD, with funding converted at 1 USDB = 1 USD. Spending limits use the smallest unit of the card's currency (USD cents for USDB-funded cards). Changing the funding source does not change the card's currency or spending-limit units. example: USD processorRef: type: string @@ -27509,7 +27509,7 @@ components: format: int64 minimum: 1 maximum: 9007199254740991 - description: Optional card-specific cap on cumulative new spend during one UTC calendar day, in the smallest unit of the card currency derived from its funding source. Omit this field for no card-specific daily cap. When the platform config also supplies `cardConfigs.maxSpendPerDay`, Grid enforces the lower of the two values. The window resets at 00:00 UTC, and refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the funding-source internal account's `cardCapabilities.supportsSpendLimitsAtIssuance` is true. Spend exactly equal to the effective limit is allowed. + description: Optional card-specific cap on cumulative new spend during one UTC calendar day, in the smallest unit of the card's currency (USD cents for USDB-funded cards). Omit this field for no card-specific daily cap. When the platform config also supplies `cardConfigs.maxSpendPerDay`, Grid enforces the lower of the two values. The window resets at 00:00 UTC, and refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the funding-source internal account's `cardCapabilities.supportsSpendLimitsAtIssuance` is true. Spend exactly equal to the effective limit is allowed. example: 25000 maxTransactionsPerDay: type: integer @@ -27553,7 +27553,7 @@ components: example: Cardholder reported the card stolen. fundingSource: type: string - description: 'Replaces the card''s funding source. Must belong to the customer and be denominated in the card''s currency. Cannot be supplied alongside `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead.' + description: 'Replaces the card''s funding source. Must belong to the customer and be denominated in a currency supported by the card''s program, including USDB for USD cards. Changing the funding source does not change the card''s currency or spending-limit units. Cannot be supplied alongside `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead.' example: InternalAccount:019542f5-b3e7-1d02-0000-000000000002 maxSpendPerTransaction: anyOf: diff --git a/mintlify/snippets/cards/funding-sources.mdx b/mintlify/snippets/cards/funding-sources.mdx index 3155bf957..38c59d7a1 100644 --- a/mintlify/snippets/cards/funding-sources.mdx +++ b/mintlify/snippets/cards/funding-sources.mdx @@ -22,8 +22,10 @@ The internal account must: - Belong to the customer. - Be denominated in a card-eligible currency. -The card's `currency` is derived from the funding source at issue time. If the -account does not qualify, Grid rejects the request with `400 INVALID_INPUT`. +The card program fixes the card's `currency` at issuance. USDB-funded cards +transact in USD, with funding converted at 1 USDB = 1 USD. Their spending +limits are in USD cents. If the account does not qualify, Grid rejects the +request with `400 INVALID_INPUT`. If the funding source is an `EMBEDDED_WALLET` account, the cardholder must also authorize a delegated signing key before the card can fund a @@ -44,9 +46,10 @@ curl -X PATCH "$GRID_BASE_URL/cards/Card:019542f5-b3e7-1d02-0000-000000000010" \ }' ``` -The replacement account must belong to the customer and be denominated in the -card's currency. The response returns the updated `Card` resource. Changing -`fundingSource` does not fire a webhook. +The replacement account must belong to the customer and use a currency +supported by the card's program, including USDB for USD cards. The response +returns the updated `Card` resource. Changing `fundingSource` does not change +the card's currency or spending-limit units, and does not fire a webhook. You cannot supply `fundingSource` alongside `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead. @@ -55,7 +58,7 @@ from spending, set `status: FROZEN` instead. | Status | Code | What it means | |--------|------|---------------| -| 400 | `INVALID_INPUT` | The account does not belong to the customer, or is not denominated in a card-eligible currency at creation or the card's currency when replaced. Also returned when `fundingSource` is supplied alongside `status: CLOSED`, or another request field is invalid. | +| 400 | `INVALID_INPUT` | The account does not belong to the customer, or its currency is not supported by the card program. Also returned when `fundingSource` is supplied alongside `status: CLOSED`, or another request field is invalid. | | 409 | `CARD_NOT_MUTABLE` | The card is `CLOSED`. | ## Stop a card from spending diff --git a/mintlify/snippets/cards/issuing-cards.mdx b/mintlify/snippets/cards/issuing-cards.mdx index fedb56bd0..26eeabca0 100644 --- a/mintlify/snippets/cards/issuing-cards.mdx +++ b/mintlify/snippets/cards/issuing-cards.mdx @@ -28,8 +28,12 @@ curl -X POST "$GRID_BASE_URL/cards" \ | `maxSpendPerDay` | No | Cumulative new spend allowed per UTC calendar day, in the smallest unit of the card's currency. Refunds, reversals, and expiries do not restore capacity that day. | | `maxTransactionsPerDay` | No | Number of transactions the card may authorize per UTC calendar day. Each approved authorization counts once; reversals and expiries do not restore capacity that day. | -The card's `currency` is derived from the funding source at issue time -and surfaces on the returned `Card` resource. +The card program fixes the card's `currency` at issuance and returns it on +the `Card` resource. USDB-funded cards have `currency: "USD"`, with funding +converted at 1 USDB = 1 USD. Spending limits use the smallest unit of the +card's currency: for a USDB-funded card, `50000` means $500.00 in USD cents. +Changing the funding source does not change the card's currency or +spending-limit units. ## The lifecycle diff --git a/openapi.yaml b/openapi.yaml index 77b61bcd8..efe582848 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -8902,7 +8902,7 @@ paths: schema: $ref: '#/components/schemas/Card' '400': - description: Bad request. Returned with `INVALID_INPUT` when a supplied funding source does not belong to the cardholder or is not denominated in the card's currency, when `fundingSource` is combined with any `status` change on a card program where the card issuer makes authorization decisions, when `status` is supplied without `substatus` or without a non-empty `reason`, and for general invalid parameters. + description: Bad request. Returned with `INVALID_INPUT` when a supplied funding source does not belong to the cardholder or uses a currency unsupported by the card program, when `fundingSource` is combined with any `status` change on a card program where the card issuer makes authorization decisions, when `status` is supplied without `substatus` or without a non-empty `reason`, and for general invalid parameters. content: application/json: schema: @@ -27432,7 +27432,7 @@ components: example: 20 currency: type: string - description: Currency the card transacts in (ISO 4217 for fiat, tickers for crypto). Derived from the funding source at issue time. + description: Currency the card transacts in, fixed at issuance by its card program. USDB-funded cards transact in USD, with funding converted at 1 USDB = 1 USD. Spending limits use the smallest unit of the card's currency (USD cents for USDB-funded cards). Changing the funding source does not change the card's currency or spending-limit units. example: USD processorRef: type: string @@ -27509,7 +27509,7 @@ components: format: int64 minimum: 1 maximum: 9007199254740991 - description: Optional card-specific cap on cumulative new spend during one UTC calendar day, in the smallest unit of the card currency derived from its funding source. Omit this field for no card-specific daily cap. When the platform config also supplies `cardConfigs.maxSpendPerDay`, Grid enforces the lower of the two values. The window resets at 00:00 UTC, and refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the funding-source internal account's `cardCapabilities.supportsSpendLimitsAtIssuance` is true. Spend exactly equal to the effective limit is allowed. + description: Optional card-specific cap on cumulative new spend during one UTC calendar day, in the smallest unit of the card's currency (USD cents for USDB-funded cards). Omit this field for no card-specific daily cap. When the platform config also supplies `cardConfigs.maxSpendPerDay`, Grid enforces the lower of the two values. The window resets at 00:00 UTC, and refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the funding-source internal account's `cardCapabilities.supportsSpendLimitsAtIssuance` is true. Spend exactly equal to the effective limit is allowed. example: 25000 maxTransactionsPerDay: type: integer @@ -27553,7 +27553,7 @@ components: example: Cardholder reported the card stolen. fundingSource: type: string - description: 'Replaces the card''s funding source. Must belong to the customer and be denominated in the card''s currency. Cannot be supplied alongside `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead.' + description: 'Replaces the card''s funding source. Must belong to the customer and be denominated in a currency supported by the card''s program, including USDB for USD cards. Changing the funding source does not change the card''s currency or spending-limit units. Cannot be supplied alongside `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead.' example: InternalAccount:019542f5-b3e7-1d02-0000-000000000002 maxSpendPerTransaction: anyOf: diff --git a/openapi/components/schemas/cards/Card.yaml b/openapi/components/schemas/cards/Card.yaml index aef7c639d..068765802 100644 --- a/openapi/components/schemas/cards/Card.yaml +++ b/openapi/components/schemas/cards/Card.yaml @@ -113,8 +113,11 @@ properties: currency: type: string description: >- - Currency the card transacts in (ISO 4217 for fiat, tickers for crypto). - Derived from the funding source at issue time. + Currency the card transacts in, fixed at issuance by its card program. + USDB-funded cards transact in USD, with funding converted at + 1 USDB = 1 USD. Spending limits use the smallest unit of the card's + currency (USD cents for USDB-funded cards). Changing the funding source + does not change the card's currency or spending-limit units. example: USD processorRef: type: string diff --git a/openapi/components/schemas/cards/CardCreateRequest.yaml b/openapi/components/schemas/cards/CardCreateRequest.yaml index 6f000e693..c103bec1e 100644 --- a/openapi/components/schemas/cards/CardCreateRequest.yaml +++ b/openapi/components/schemas/cards/CardCreateRequest.yaml @@ -61,8 +61,8 @@ properties: maximum: 9007199254740991 description: >- Optional card-specific cap on cumulative new spend during one UTC - calendar day, in the smallest unit of the card currency derived from its - funding source. Omit this field for no card-specific daily cap. When the + calendar day, in the smallest unit of the card's currency (USD cents for + USDB-funded cards). Omit this field for no card-specific daily cap. When the platform config also supplies `cardConfigs.maxSpendPerDay`, Grid enforces the lower of the two values. The window resets at 00:00 UTC, and refunds, reversals, and authorization expiries do not restore capacity during the diff --git a/openapi/components/schemas/cards/CardUpdateRequest.yaml b/openapi/components/schemas/cards/CardUpdateRequest.yaml index 72ade0699..eb81e488b 100644 --- a/openapi/components/schemas/cards/CardUpdateRequest.yaml +++ b/openapi/components/schemas/cards/CardUpdateRequest.yaml @@ -54,9 +54,10 @@ properties: type: string description: >- Replaces the card's funding source. Must belong to the customer and be - denominated in the card's currency. Cannot be supplied alongside - `status: CLOSED`. To stop a card from spending, set `status: FROZEN` - instead. + denominated in a currency supported by the card's program, including + USDB for USD cards. Changing the funding source does not change the + card's currency or spending-limit units. Cannot be supplied alongside + `status: CLOSED`. To stop a card from spending, set `status: FROZEN` instead. example: InternalAccount:019542f5-b3e7-1d02-0000-000000000002 maxSpendPerTransaction: anyOf: diff --git a/openapi/paths/cards/cards_{id}.yaml b/openapi/paths/cards/cards_{id}.yaml index 32982f900..ed8a9eb3f 100644 --- a/openapi/paths/cards/cards_{id}.yaml +++ b/openapi/paths/cards/cards_{id}.yaml @@ -204,8 +204,8 @@ patch: '400': description: >- Bad request. Returned with `INVALID_INPUT` when a supplied funding - source does not belong to the cardholder or is not denominated in the - card's currency, when `fundingSource` is combined with any `status` + source does not belong to the cardholder or uses a currency unsupported + by the card program, when `fundingSource` is combined with any `status` change on a card program where the card issuer makes authorization decisions, when `status` is supplied without `substatus` or without a non-empty `reason`, and for general invalid parameters.