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-boltls-boltBot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

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

vercelBot commented Jul 1, 2026

Copy link
Copy Markdown

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

2 Skipped Deployments
ProjectDeploymentActionsUpdated (UTC)
grid-flow-builderIgnoredIgnoredPreviewJul 1, 2026 8:04pm
grid-wallet-demoIgnoredIgnoredPreviewJul 1, 2026 8:04pm

Request Review

@ls-boltls-boltBot added the bolt label Jul 1, 2026
@akanterGraphite App

Copy link
Copy Markdown
Contributor

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

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

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-actionsBot 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-openapistudio · code · diff

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

grid-gostudio · 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-typescriptstudio · 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-kotlinstudio · code · diff

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

grid-pythonstudio · 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-csharpstudio · code · diff

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

grid-phpstudio · code · diff

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

grid-clistudio · code · diff

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

grid-rubystudio · 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-boltBotforce-pushed the 07-01-ENG-10686-individual-tax-id branch from 4a51edc to d587c85CompareJuly 1, 2026 20:04
@ls-bolt

ls-boltBot commented Jul 2, 2026

Copy link
Copy Markdown
ContributorAuthor

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

@akanterakanter 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 freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

boltbreaking-changeIntroduces a breaking change to the OpenAPI spec

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@akanter