From 3cd5a1ba37fae5a892cc68317c3c2ea83b0b586e Mon Sep 17 00:00:00 2001 From: shreyav Date: Mon, 14 Sep 2026 14:21:23 -0700 Subject: [PATCH 1/3] say where a provider-account selection error lists the candidates A STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED response is a missing field with a known set of allowed values, which is what `details.errors` with `constraint.enum` already expresses. The code's row now says so. Co-Authored-By: Claude Fable 5.1 --- mintlify/openapi.yaml | 2 +- openapi.yaml | 2 +- openapi/components/schemas/errors/Error400.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index ad5bb63a0..ff530aedf 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -12911,7 +12911,7 @@ components: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed | diff --git a/openapi.yaml b/openapi.yaml index ad5bb63a0..ff530aedf 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -12911,7 +12911,7 @@ components: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed | diff --git a/openapi/components/schemas/errors/Error400.yaml b/openapi/components/schemas/errors/Error400.yaml index d94c1772b..e7740bec5 100644 --- a/openapi/components/schemas/errors/Error400.yaml +++ b/openapi/components/schemas/errors/Error400.yaml @@ -47,7 +47,7 @@ properties: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed | From f2e28e3b84358a3e7e76f5395d0a198649a5b59f Mon Sep 17 00:00:00 2001 From: shreyav Date: Mon, 14 Sep 2026 22:07:40 -0700 Subject: [PATCH 2/3] close the 400 and 423 error details to their declared fields Nothing the API returns puts undeclared keys under `details` on either status: a 400 carries `errors`, a 423 carries the lockout fields. With `additionalProperties` gone a generated client no longer needs a catch-all on these two objects. Co-Authored-By: Claude Fable 5.1 --- mintlify/openapi.yaml | 4 +--- openapi.yaml | 4 +--- openapi/components/schemas/errors/Error400.yaml | 9 ++++----- openapi/components/schemas/errors/Error423.yaml | 1 - 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index ff530aedf..10ffd9157 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -12998,14 +12998,13 @@ components: description: Error message details: type: object - description: Additional error details. Shape varies by `code`. For field-validation errors on submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` enumerates every invalid field so platforms can render form-field-level UX for the entire request in a single round-trip. + description: Field-level detail. On field-validation errors from submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` enumerates every invalid field so platforms can render form-field-level UX for the entire request in a single round-trip. properties: errors: type: array description: One entry per invalid field. Present on field-validation errors from submit endpoints. items: $ref: '#/components/schemas/FieldError' - additionalProperties: true Error501: type: object required: @@ -14887,7 +14886,6 @@ components: format: date-time failedAttempts: type: integer - additionalProperties: true RecordSecurityEventRequest: type: object description: Records a client-side security event for the customer so Grid can maintain the customer's login-security state (SCA session revocation and failed-login lockout). diff --git a/openapi.yaml b/openapi.yaml index ff530aedf..10ffd9157 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -12998,14 +12998,13 @@ components: description: Error message details: type: object - description: Additional error details. Shape varies by `code`. For field-validation errors on submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` enumerates every invalid field so platforms can render form-field-level UX for the entire request in a single round-trip. + description: Field-level detail. On field-validation errors from submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` enumerates every invalid field so platforms can render form-field-level UX for the entire request in a single round-trip. properties: errors: type: array description: One entry per invalid field. Present on field-validation errors from submit endpoints. items: $ref: '#/components/schemas/FieldError' - additionalProperties: true Error501: type: object required: @@ -14887,7 +14886,6 @@ components: format: date-time failedAttempts: type: integer - additionalProperties: true RecordSecurityEventRequest: type: object description: Records a client-side security event for the customer so Grid can maintain the customer's login-security state (SCA session revocation and failed-login lockout). diff --git a/openapi/components/schemas/errors/Error400.yaml b/openapi/components/schemas/errors/Error400.yaml index e7740bec5..cad632363 100644 --- a/openapi/components/schemas/errors/Error400.yaml +++ b/openapi/components/schemas/errors/Error400.yaml @@ -135,10 +135,10 @@ properties: details: type: object description: >- - Additional error details. Shape varies by `code`. For field-validation - errors on submit endpoints (e.g. `POST /customers`, `PATCH /customers/{id}`), - `details.errors[]` enumerates every invalid field so platforms can render - form-field-level UX for the entire request in a single round-trip. + Field-level detail. On field-validation errors from submit endpoints + (e.g. `POST /customers`, `PATCH /customers/{id}`), `details.errors[]` + enumerates every invalid field so platforms can render form-field-level + UX for the entire request in a single round-trip. properties: errors: type: array @@ -147,4 +147,3 @@ properties: submit endpoints. items: $ref: ./FieldError.yaml - additionalProperties: true diff --git a/openapi/components/schemas/errors/Error423.yaml b/openapi/components/schemas/errors/Error423.yaml index 7330ebe68..f77b580ff 100644 --- a/openapi/components/schemas/errors/Error423.yaml +++ b/openapi/components/schemas/errors/Error423.yaml @@ -31,4 +31,3 @@ properties: format: date-time failedAttempts: type: integer - additionalProperties: true From 336437535413a2de12e982d4c2b4e0cdd7aeecc4 Mon Sep 17 00:00:00 2001 From: shreyav Date: Mon, 14 Sep 2026 22:09:48 -0700 Subject: [PATCH 3/3] keep the selection-required row as it was Co-Authored-By: Claude Fable 5.1 --- mintlify/openapi.yaml | 2 +- openapi.yaml | 2 +- openapi/components/schemas/errors/Error400.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mintlify/openapi.yaml b/mintlify/openapi.yaml index 10ffd9157..44df06881 100644 --- a/mintlify/openapi.yaml +++ b/mintlify/openapi.yaml @@ -12911,7 +12911,7 @@ components: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed | diff --git a/openapi.yaml b/openapi.yaml index 10ffd9157..44df06881 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -12911,7 +12911,7 @@ components: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed | diff --git a/openapi/components/schemas/errors/Error400.yaml b/openapi/components/schemas/errors/Error400.yaml index cad632363..02a743679 100644 --- a/openapi/components/schemas/errors/Error400.yaml +++ b/openapi/components/schemas/errors/Error400.yaml @@ -47,7 +47,7 @@ properties: | PASSKEY_CREDENTIAL_ALREADY_EXISTS | A PASSKEY credential with the same WebAuthn credentialId is already registered on the target internal account | | STABLECOIN_PROVIDER_ACCOUNT_INVALID | The stablecoin provider account link is not usable | | STABLECOIN_PROVIDER_ACCOUNT_REVOKED | The stablecoin provider account link has been revoked | - | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one. `details.errors[0]` names the field and lists the linked account ids in `constraint.enum` | + | STABLECOIN_PROVIDER_ACCOUNT_SELECTION_REQUIRED | Multiple active provider account links exist; pass `stablecoinProviderAccountId` to select one | | CARDHOLDER_KYC_NOT_APPROVED | The cardholder's KYC status is not `APPROVED`, so a card cannot be issued | | TRANSACTION_SIZE_LIMIT_EXCEEDED | The requested amount exceeds the configured maximum single-transaction amount for this trade corridor or withdrawal currency | | EXTERNAL_ACCOUNT_VERIFICATION_REQUIRED | The destination account's ownership must be verified before this transfer can proceed |