From 6d5bda387d79100fc953d0cf1011137bab2864f3 Mon Sep 17 00:00:00 2001 From: Aaryaman Bhute Date: Tue, 16 Jun 2026 21:08:28 +0000 Subject: [PATCH] rename card status PENDING_ISSUE to PROCESSING MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename the Grid API card lifecycle state PENDING_ISSUE to PROCESSING so that PENDING_* states consistently denote waiting on user/platform action while PROCESSING denotes Grid/the issuer doing work — matching the convention already used by the quotes and transactions resources. PENDING_KYC is unchanged (it waits on the cardholder). Updates the OpenAPI source under openapi/, the Mintlify card doc snippets, and the regenerated openapi.yaml / mintlify/openapi.yaml bundles. --- mintlify/openapi.yaml | 12 ++++++------ mintlify/snippets/cards/implementation-overview.mdx | 2 +- mintlify/snippets/cards/intro.mdx | 2 +- mintlify/snippets/cards/issuing-cards.mdx | 6 +++--- mintlify/snippets/cards/quickstart.mdx | 2 +- mintlify/snippets/cards/sandbox-testing.mdx | 2 +- mintlify/snippets/cards/webhooks.mdx | 4 ++-- openapi.yaml | 12 ++++++------ openapi/components/schemas/cards/CardState.yaml | 4 ++-- .../components/schemas/cards/CardStateReason.yaml | 2 +- openapi/paths/cards/cards.yaml | 2 +- openapi/webhooks/card-state-change.yaml | 4 ++-- 12 files changed, 27 insertions(+), 27 deletions(-) diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index c8830cbfa..8b6b7e727 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -6326,7 +6326,7 @@ paths: description: | Issue a new card for a cardholder. Every card must be bound to at least one funding source at create time. The cardholder must have KYC status `APPROVED` before a card can be issued; otherwise the request is rejected with `CARDHOLDER_KYC_NOT_APPROVED`. - New cards start in `state: "PENDING_ISSUE"` while the card issuer provisions the card. The `card.state_change` webhook fires on the transition to `ACTIVE` (or to `CLOSED` with `stateReason: "ISSUER_REJECTED"` if provisioning fails). + New cards start in `state: "PROCESSING"` while the card issuer provisions the card. The `card.state_change` webhook fires on the transition to `ACTIVE` (or to `CLOSED` with `stateReason: "ISSUER_REJECTED"` if provisioning fails). operationId: createCard tags: - Cards @@ -7812,7 +7812,7 @@ webhooks: post: summary: Card state change description: | - Webhook that is called when a card's lifecycle state changes. Fires on `PENDING_ISSUE → ACTIVE`, on `PENDING_ISSUE → CLOSED (ISSUER_REJECTED)` when issuer provisioning fails, and on every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. + Webhook that is called when a card's lifecycle state changes. Fires on `PROCESSING → ACTIVE`, on `PROCESSING → CLOSED (ISSUER_REJECTED)` when issuer provisioning fails, and on every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. This endpoint should be implemented by clients of the Grid API. @@ -7839,7 +7839,7 @@ webhooks: $ref: '#/components/schemas/CardStateChangeWebhook' examples: activated: - summary: Card transitioned from PENDING_ISSUE to ACTIVE + summary: Card transitioned from PROCESSING to ACTIVE value: id: Webhook:019542f5-b3e7-1d02-0000-000000000020 type: CARD.STATE_CHANGE @@ -18442,7 +18442,7 @@ components: type: string enum: - PENDING_KYC - - PENDING_ISSUE + - PROCESSING - ACTIVE - FROZEN - CLOSED @@ -18452,7 +18452,7 @@ components: | State | Description | |-------|-------------| | `PENDING_KYC` | The cardholder has not yet completed KYC. Cards in this state cannot transact. | - | `PENDING_ISSUE` | The card has been requested and is being provisioned with the issuer. | + | `PROCESSING` | The card has been requested and is being provisioned with the issuer. | | `ACTIVE` | The card is live and can authorize transactions. | | `FROZEN` | The card is temporarily disabled by the platform. New authorizations are declined with `CARD_PAUSED`. Existing settlements and refunds continue to reconcile. | | `CLOSED` | The card is permanently closed. Terminal, irreversible state. | @@ -18469,7 +18469,7 @@ components: | Reason | Description | |--------|-------------| - | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PENDING_ISSUE`. | + | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PROCESSING`. | | `CLOSED_BY_PLATFORM` | The card was closed via `PATCH /cards/{id}` (`state: CLOSED`) by the platform. | | `CLOSED_BY_GRID` | The card was closed by Grid (e.g. compliance or risk action). | CardBrand: diff --git a/mintlify/snippets/cards/implementation-overview.mdx b/mintlify/snippets/cards/implementation-overview.mdx index c8db5cf3f..03c878896 100644 --- a/mintlify/snippets/cards/implementation-overview.mdx +++ b/mintlify/snippets/cards/implementation-overview.mdx @@ -46,7 +46,7 @@ balance before approving each auth, so: ## Issuing and lifecycle Issuance is a single `POST /cards` call. New cards start in -`PENDING_ISSUE` while the issuer provisions them and transition to +`PROCESSING` while the issuer provisions them and transition to `ACTIVE` automatically — you observe both transitions via the `CARD.STATE_CHANGE` webhook. Day-to-day operational changes are: diff --git a/mintlify/snippets/cards/intro.mdx b/mintlify/snippets/cards/intro.mdx index ac78f5f8a..5aee036cd 100644 --- a/mintlify/snippets/cards/intro.mdx +++ b/mintlify/snippets/cards/intro.mdx @@ -25,7 +25,7 @@ A card moves through five states: | State | Meaning | |-------|---------| | `PENDING_KYC` | Cardholder has not finished KYC; the card cannot transact yet. | -| `PENDING_ISSUE` | Card has been requested and is being provisioned with the issuer. | +| `PROCESSING` | Card has been requested and is being provisioned with the issuer. | | `ACTIVE` | Card is live and can authorize transactions. | | `FROZEN` | Card is temporarily disabled. New authorizations are declined; in-flight settlements continue. | | `CLOSED` | Card is permanently closed. Terminal, irreversible. | diff --git a/mintlify/snippets/cards/issuing-cards.mdx b/mintlify/snippets/cards/issuing-cards.mdx index eb1c141b4..f0c36bbd5 100644 --- a/mintlify/snippets/cards/issuing-cards.mdx +++ b/mintlify/snippets/cards/issuing-cards.mdx @@ -32,7 +32,7 @@ one currency. ## The lifecycle ```text -PENDING_ISSUE ──► ACTIVE ──► FROZEN ──► ACTIVE ──► CLOSED +PROCESSING ──► ACTIVE ──► FROZEN ──► ACTIVE ──► CLOSED │ │ ▲ │ └──────────────────────────────┘ │ @@ -41,7 +41,7 @@ PENDING_ISSUE ──► ACTIVE ──► FROZEN ──► ACTIVE ──► CLOSE | State | When you see it | |-------|-----------------| -| `PENDING_ISSUE` | Returned synchronously from `POST /cards`. The card cannot transact yet. | +| `PROCESSING` | Returned synchronously from `POST /cards`. The card cannot transact yet. | | `ACTIVE` | Issuer provisioned the card. Reached via `CARD.STATE_CHANGE` webhook. | | `FROZEN` | You called `PATCH /cards/{id}` with `state: "FROZEN"`. | | `CLOSED` | You called `PATCH /cards/{id}` with `state: "CLOSED"` (or the issuer rejected provisioning). Terminal. | @@ -51,7 +51,7 @@ issuance is gated on KYC up front. ## After issuance -`POST /cards` returns immediately with `state: "PENDING_ISSUE"`. The +`POST /cards` returns immediately with `state: "PROCESSING"`. The issuer provisions the card asynchronously; on success a `CARD.STATE_CHANGE` webhook fires with the activated `Card` resource including the populated `last4`, `expMonth`, `expYear`, and diff --git a/mintlify/snippets/cards/quickstart.mdx b/mintlify/snippets/cards/quickstart.mdx index 067c3ed69..f5642543c 100644 --- a/mintlify/snippets/cards/quickstart.mdx +++ b/mintlify/snippets/cards/quickstart.mdx @@ -49,7 +49,7 @@ curl -X POST "$GRID_BASE_URL/cards" \ }' ``` -The card comes back in `state: "PENDING_ISSUE"` while the issuer +The card comes back in `state: "PROCESSING"` while the issuer provisions it. In Sandbox, activation is near-instant for any `platformCardId` whose last three characters aren't a magic suffix — see the [Sandbox testing guide](/cards/platform-tools/sandbox-testing) diff --git a/mintlify/snippets/cards/sandbox-testing.mdx b/mintlify/snippets/cards/sandbox-testing.mdx index af097b903..d9c175c15 100644 --- a/mintlify/snippets/cards/sandbox-testing.mdx +++ b/mintlify/snippets/cards/sandbox-testing.mdx @@ -20,7 +20,7 @@ The last three characters of `platformCardId` (or `cardholderId` when | Suffix | Behavior | |--------|----------| -| `001` | Stays `PENDING_ISSUE` indefinitely (test the polling path) | +| `001` | Stays `PROCESSING` indefinitely (test the polling path) | | `002` | Issuer provisioning rejected → `state: CLOSED`, `stateReason: "ISSUER_REJECTED"` | | `005` | Delayed activation (~30s) before the `CARD.STATE_CHANGE` webhook fires | | any other | Instant activation → `state: ACTIVE`, `last4` deterministic from the suffix | diff --git a/mintlify/snippets/cards/webhooks.mdx b/mintlify/snippets/cards/webhooks.mdx index 64b818a26..e23019978 100644 --- a/mintlify/snippets/cards/webhooks.mdx +++ b/mintlify/snippets/cards/webhooks.mdx @@ -12,7 +12,7 @@ extends the Transaction model with a card destination type). | Type | Fires on | |------|----------| -| `CARD.STATE_CHANGE` | `PENDING_ISSUE → ACTIVE`, `→ CLOSED (ISSUER_REJECTED)`, and every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. | +| `CARD.STATE_CHANGE` | `PROCESSING → ACTIVE`, `→ CLOSED (ISSUER_REJECTED)`, and every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. | | `CARD.FUNDING_SOURCE_CHANGE` | Whenever `PATCH /cards/{id}` updates the `fundingSources` array. | All three carry the standard envelope: @@ -60,7 +60,7 @@ activation after issuance: Common branches to handle in your consumer: -- `state: "ACTIVE"` after `PENDING_ISSUE` — the card is live; surface +- `state: "ACTIVE"` after `PROCESSING` — the card is live; surface `panEmbedUrl` to the cardholder. - `state: "CLOSED"`, `stateReason: "ISSUER_REJECTED"` — the issuer rejected provisioning; offer to issue a new card. diff --git a/openapi.yaml b/openapi.yaml index c8830cbfa..8b6b7e727 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -6326,7 +6326,7 @@ paths: description: | Issue a new card for a cardholder. Every card must be bound to at least one funding source at create time. The cardholder must have KYC status `APPROVED` before a card can be issued; otherwise the request is rejected with `CARDHOLDER_KYC_NOT_APPROVED`. - New cards start in `state: "PENDING_ISSUE"` while the card issuer provisions the card. The `card.state_change` webhook fires on the transition to `ACTIVE` (or to `CLOSED` with `stateReason: "ISSUER_REJECTED"` if provisioning fails). + New cards start in `state: "PROCESSING"` while the card issuer provisions the card. The `card.state_change` webhook fires on the transition to `ACTIVE` (or to `CLOSED` with `stateReason: "ISSUER_REJECTED"` if provisioning fails). operationId: createCard tags: - Cards @@ -7812,7 +7812,7 @@ webhooks: post: summary: Card state change description: | - Webhook that is called when a card's lifecycle state changes. Fires on `PENDING_ISSUE → ACTIVE`, on `PENDING_ISSUE → CLOSED (ISSUER_REJECTED)` when issuer provisioning fails, and on every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. + Webhook that is called when a card's lifecycle state changes. Fires on `PROCESSING → ACTIVE`, on `PROCESSING → CLOSED (ISSUER_REJECTED)` when issuer provisioning fails, and on every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. This endpoint should be implemented by clients of the Grid API. @@ -7839,7 +7839,7 @@ webhooks: $ref: '#/components/schemas/CardStateChangeWebhook' examples: activated: - summary: Card transitioned from PENDING_ISSUE to ACTIVE + summary: Card transitioned from PROCESSING to ACTIVE value: id: Webhook:019542f5-b3e7-1d02-0000-000000000020 type: CARD.STATE_CHANGE @@ -18442,7 +18442,7 @@ components: type: string enum: - PENDING_KYC - - PENDING_ISSUE + - PROCESSING - ACTIVE - FROZEN - CLOSED @@ -18452,7 +18452,7 @@ components: | State | Description | |-------|-------------| | `PENDING_KYC` | The cardholder has not yet completed KYC. Cards in this state cannot transact. | - | `PENDING_ISSUE` | The card has been requested and is being provisioned with the issuer. | + | `PROCESSING` | The card has been requested and is being provisioned with the issuer. | | `ACTIVE` | The card is live and can authorize transactions. | | `FROZEN` | The card is temporarily disabled by the platform. New authorizations are declined with `CARD_PAUSED`. Existing settlements and refunds continue to reconcile. | | `CLOSED` | The card is permanently closed. Terminal, irreversible state. | @@ -18469,7 +18469,7 @@ components: | Reason | Description | |--------|-------------| - | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PENDING_ISSUE`. | + | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PROCESSING`. | | `CLOSED_BY_PLATFORM` | The card was closed via `PATCH /cards/{id}` (`state: CLOSED`) by the platform. | | `CLOSED_BY_GRID` | The card was closed by Grid (e.g. compliance or risk action). | CardBrand: diff --git a/openapi/components/schemas/cards/CardState.yaml b/openapi/components/schemas/cards/CardState.yaml index e3b9105a6..04c17862b 100644 --- a/openapi/components/schemas/cards/CardState.yaml +++ b/openapi/components/schemas/cards/CardState.yaml @@ -1,7 +1,7 @@ type: string enum: - PENDING_KYC - - PENDING_ISSUE + - PROCESSING - ACTIVE - FROZEN - CLOSED @@ -11,7 +11,7 @@ description: | | State | Description | |-------|-------------| | `PENDING_KYC` | The cardholder has not yet completed KYC. Cards in this state cannot transact. | - | `PENDING_ISSUE` | The card has been requested and is being provisioned with the issuer. | + | `PROCESSING` | The card has been requested and is being provisioned with the issuer. | | `ACTIVE` | The card is live and can authorize transactions. | | `FROZEN` | The card is temporarily disabled by the platform. New authorizations are declined with `CARD_PAUSED`. Existing settlements and refunds continue to reconcile. | | `CLOSED` | The card is permanently closed. Terminal, irreversible state. | diff --git a/openapi/components/schemas/cards/CardStateReason.yaml b/openapi/components/schemas/cards/CardStateReason.yaml index 4dc582e6d..0056d6530 100644 --- a/openapi/components/schemas/cards/CardStateReason.yaml +++ b/openapi/components/schemas/cards/CardStateReason.yaml @@ -10,6 +10,6 @@ description: | | Reason | Description | |--------|-------------| - | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PENDING_ISSUE`. | + | `ISSUER_REJECTED` | The card issuer rejected provisioning during `PROCESSING`. | | `CLOSED_BY_PLATFORM` | The card was closed via `PATCH /cards/{id}` (`state: CLOSED`) by the platform. | | `CLOSED_BY_GRID` | The card was closed by Grid (e.g. compliance or risk action). | diff --git a/openapi/paths/cards/cards.yaml b/openapi/paths/cards/cards.yaml index 08dc7c3a9..4813781d8 100644 --- a/openapi/paths/cards/cards.yaml +++ b/openapi/paths/cards/cards.yaml @@ -7,7 +7,7 @@ post: with `CARDHOLDER_KYC_NOT_APPROVED`. - New cards start in `state: "PENDING_ISSUE"` while the card issuer + New cards start in `state: "PROCESSING"` while the card issuer provisions the card. The `card.state_change` webhook fires on the transition to `ACTIVE` (or to `CLOSED` with `stateReason: "ISSUER_REJECTED"` if provisioning fails). diff --git a/openapi/webhooks/card-state-change.yaml b/openapi/webhooks/card-state-change.yaml index 76752d340..454c238da 100644 --- a/openapi/webhooks/card-state-change.yaml +++ b/openapi/webhooks/card-state-change.yaml @@ -2,7 +2,7 @@ post: summary: Card state change description: > Webhook that is called when a card's lifecycle state changes. Fires on - `PENDING_ISSUE → ACTIVE`, on `PENDING_ISSUE → CLOSED (ISSUER_REJECTED)` + `PROCESSING → ACTIVE`, on `PROCESSING → CLOSED (ISSUER_REJECTED)` when issuer provisioning fails, and on every subsequent `ACTIVE ⇄ FROZEN` and `→ CLOSED` transition. @@ -42,7 +42,7 @@ post: $ref: ../components/schemas/webhooks/CardStateChangeWebhook.yaml examples: activated: - summary: Card transitioned from PENDING_ISSUE to ACTIVE + summary: Card transitioned from PROCESSING to ACTIVE value: id: Webhook:019542f5-b3e7-1d02-0000-000000000020 type: CARD.STATE_CHANGE