Skip to content

Add idType/identifier to IndividualCustomerCreateRequest (ENG-10686)#636

Closed
ls-bolt[bot] wants to merge 1 commit into
mainfrom
07-01-ENG-10686-individual-tax-id
Closed

Add idType/identifier to IndividualCustomerCreateRequest (ENG-10686)#636
ls-bolt[bot] wants to merge 1 commit into
mainfrom
07-01-ENG-10686-individual-tax-id

Conversation

@ls-bolt

@ls-bolt ls-bolt Bot commented Jul 1, 2026

Copy link
Copy Markdown

This PR has been claimed. The active PR is now #637.

Summary

Adds the individual account-holder's tax identification (SSN/ITIN) to IndividualCustomerCreateRequest so Grid can capture it at customer creation and bridge it downstream to EntUserInfo.tax_identifier for Lead (banking-partner) onboarding of a US individual.

Part of ENG-10686 (Individual account-holder CIP). Consumed by the webdev PR (lightsparkdev/webdev#29658), which reads idType/identifier off the regenerated client model.

Details

  • New fields on the create request only (added to the allOf in IndividualCustomerCreateRequest.yaml, not the shared IndividualCustomerFields), so the identifier is write-only and never echoed in customer GET responses.
  • Reuses the existing IdentificationType enum (SSN/ITIN/EIN/NON_US_TAX_ID) and mirrors the flat idType/identifier/countryOfIssuance shape beneficial owners already expose (BeneficialOwnerPersonalInfo).
  • Regenerated bundle (openapi.yaml, mintlify/openapi.yaml) via make build; redocly lint clean.

Test plan

  • npm run build:openapi + npx @redocly/cli lint openapi.yaml → valid.
  • webdev client regeneration (grid-api/update_schema.sh) picks up id_type/identifier/country_of_issuance on the individual create model.

🤖 sovereign-nebula-2(#2) | Feedback

@vercel

vercel Bot commented Jul 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated (UTC)
grid-flow-builder Ignored Ignored Preview Jul 1, 2026 8:04pm
grid-wallet-demo Ignored Ignored Preview Jul 1, 2026 8:04pm

Request Review

@ls-bolt ls-bolt Bot added the bolt label Jul 1, 2026

akanter commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions github-actions Bot added the breaking-change Introduces a breaking change to the OpenAPI spec label Jul 1, 2026
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

⚠️ Breaking OpenAPI changes detected

This PR introduces breaking changes to openapi.yaml:

API Changelog 2026-06-29 vs. 2026-06-29

API Changes

POST /customers

  • ⚠️ added subschema #3 to the oneOf[subschema #1: Individual Customer Create Request]/ request property allOf list

Detected by oasdiff. This PR will need approval from an API reviewer before merge.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

✱ Stainless preview builds for grid

This PR will update the grid SDKs with the following commit messages.

cli

feat(api): add countryOfIssuance, identifier, idType to customer create

csharp

feat(api): add identifier, id_type, country_of_issuance to customer create

go

feat(api): add identifier, idType, countryOfIssuance to individual customer creation

kotlin

feat(api): add countryOfIssuance, identifier, idType to IndividualCustomerCreateRequest

openapi

feat(api): add idType, identifier, countryOfIssuance to individual customer create

php

feat(api): add countryOfIssuance, identifier, idType to individual customer create

python

feat(api): add country_of_issuance, identifier, id_type to customer creation

ruby

feat(api): add country_of_issuance, identifier, id_type to individual customer create

typescript

feat(api): add countryOfIssuance, identifier, idType to customers.create

Edit this comment to update them. They will appear in their respective SDK's changelogs.

grid-openapi studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️

grid-go studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ❗test ❗

go get github.com/stainless-sdks/grid-go@c866efb2f81984280baf5f36a1d5458524161024
grid-typescript studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅

npm install https://pkg.stainless.com/s/grid-typescript/c6199ba20480c7a6d5b605dceff859913e8fac3b/dist.tar.gz
grid-kotlin studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ✅lint ✅test ❗

grid-python studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ❗test ❗

pip install https://pkg.stainless.com/s/grid-python/3fe1724be22a9c2566f6b621839f6d4fd5c54328/grid-0.0.1-py3-none-any.whl
grid-csharp studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ❗lint ✅test ❗

grid-php studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅lint ✅test ✅

grid-cli studio · code · diff

Your SDK build had at least one "warning" diagnostic, but this did not represent a regression.
generate ⚠️build ❗lint ❗test ❗

grid-ruby studio · code · diff

Your SDK build had at least one "note" diagnostic, but this did not represent a regression.
generate ✅build ✅lint ✅test ✅


This comment is auto-generated by GitHub Actions and is automatically kept up to date as you push.
If you push custom code to the preview branch, re-run this workflow to update the comment.
Last updated: 2026-07-01 20:10:23 UTC

…0686)

Individual account-holder CIP capture — accept the individual's tax
identification (SSN/ITIN) on customer creation so sparkcore can bridge it to
paycore EntUserInfo.tax_identifier for Lead onboarding. Write-only: added to
the create request only (not the shared IndividualCustomerFields), so the SSN
is never echoed in customer responses. Mirrors the flat idType/identifier
shape beneficial owners already use.
@ls-bolt ls-bolt Bot force-pushed the 07-01-ENG-10686-individual-tax-id branch from 4a51edc to d587c85 Compare July 1, 2026 20:04
@ls-bolt

ls-bolt Bot commented Jul 2, 2026

Copy link
Copy Markdown
Author

Clarification on the oasdiff ⚠️ above, since it reads scarier than it is: idType and identifier are optional — no existing request breaks and nothing new is required.

  • Neither field is in any required: list; the request is valid without them, exactly as before. Requests that omit them behave identically (server persists no tax id).
  • The only new enforcement is on callers who opt in: send one of the pair without the other → 400; EIN / NON_US_TAX_ID on an individual → 400. Previously these field names didn't exist on the schema, so no current integrator can be sending them.
  • The tax id is only required much further downstream, at Lead (banking-partner) onboarding of an individual account holder — which already hard-failed without it; that requirement is pre-existing, not added here.
  • oasdiff flags "added subschema to the allOf list" as breaking because allOf composition changes can reject previously-valid payloads in the general case. Here the added subschema contains only optional properties (no required, no additionalProperties: false), so no previously-valid POST /customers request becomes invalid.

Verified in webdev#29658: the full existing create-customer suite passes unchanged with no tax fields sent (118 tests), plus new tests covering both the omit path and the opt-in validation paths.


🤖 sovereign-nebula(#3) | Feedback

@akanter akanter closed this Jul 2, 2026
akanter added a commit that referenced this pull request Jul 2, 2026
…637)

## Summary
Adds the individual account-holder's tax identification (**SSN/ITIN**) to `IndividualCustomerCreateRequest` so Grid can capture it at customer creation and bridge it downstream to `EntUserInfo.tax_identifier` for Lead (banking-partner) onboarding of a US individual.

Part of ENG-10686 (Individual account-holder CIP). Consumed by the webdev PR (lightsparkdev/webdev#29658), which reads `idType`/`identifier` off the regenerated client model.

## Details
- New fields on the **create request only** (added to the `allOf` in `IndividualCustomerCreateRequest.yaml`, not the shared `IndividualCustomerFields`), so the identifier is **write-only** and never echoed in customer GET responses.
- Reuses the existing `IdentificationType` enum (SSN/ITIN/EIN/NON_US_TAX_ID) and mirrors the flat `idType`/`identifier`/`countryOfIssuance` shape beneficial owners already expose (`BeneficialOwnerPersonalInfo`).
- Regenerated bundle (`openapi.yaml`, `mintlify/openapi.yaml`) via `make build`; `redocly lint` clean.

## Test plan
- `npm run build:openapi` + `npx @redocly/cli lint openapi.yaml` → valid.
- webdev client regeneration (`grid-api/update_schema.sh`) picks up `id_type`/`identifier`/`country_of_issuance` on the individual create model.

---
🤖 [sovereign-nebula-2](https://zeus.dev.dev.sparkinfra.net/#/arc?id=sovereign-nebula)[(#2)](https://zeus.dev.dev.sparkinfra.net/#/instance?id=sovereign-nebula-2) | [Feedback](https://zeus.dev.dev.sparkinfra.net/feedback)

Original PR: #636
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bolt breaking-change Introduces a breaking change to the OpenAPI spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant