- Breaking
scope is now required
Partial payloads are rejected.
2 places: LinkTokenCreateRequestCraReportParameter.scope, CraReportCreateRequest.scopeCode that breaks
await client.post("/…", { // … scope: /* now required */, }); - Breakingdirection flip: their tools call this safe
value can now return "CRA_PARTNER_INSIGHTS_ERROR", "CRA_REPORT_ERROR"
Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.
PlaidErrorType · reachable from 294 operationsCode that breaks
switch (response) { // existing branches … // no branch for "CRA_PARTNER_INSIGHTS_ERROR" // no branch for "CRA_REPORT_ERROR" default: throw new Error("unexpected value"); } - Breaking
Response field vested_quantity removed
Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.
AssetReportInvestmentTransaction.vested_quantity · reachable from 3 operationsCode that breaks
// response.vested_quantity is now undefined const vested_quantity = response.vested_quantity;
- Breaking
Response field cost_basis removed
Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.
AssetReportInvestmentHolding.cost_basis · reachable from 3 operationsCode that breaks
// response.cost_basis is now undefined const cost_basis = response.cost_basis;
- Breaking
Response field vested_value removed
Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.
AssetReportInvestmentTransaction.vested_value · reachable from 3 operationsCode that breaks
// response.vested_value is now undefined const vested_value = response.vested_value;
- Breakingdirection flip: their tools call this safe
Response field maximum_payment_amount is no longer guaranteed
Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.
PaymentInitiationMetadata.maximum_payment_amount · reachable from 3 operationsCode that breaks
// response.maximum_payment_amount may now be absent or null const maximum_payment_amount = response.maximum_payment_amount ?? fallback;
- Breakingdirection flip: their tools call this safe
Response field valid_standing_order_intervals is no longer guaranteed
Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.
PaymentInitiationStandingOrderMetadata.valid_standing_order_intervals · reachable from 3 operationsCode that breaks
// response.valid_standing_order_intervals may now be absent or null const valid_standing_order_intervals = response.valid_standing_order_intervals ?? fallback;
- Breakingdirection flip: their tools call this safe
value can now return "BLOCKED"
Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.
WalletStatus · reachable from 3 operationsCode that breaks
switch (response) { // existing branches … // no branch for "BLOCKED" default: throw new Error("unexpected value"); } - Breakingdirection flip: their tools call this safe
options is no longer accepted
Usually ignored rather than rejected, so the call succeeds and does something subtly different.
CraReportCreateHomeLendingProductConfig.options · reachable from 2 operationsCode that breaks
await client.post("/…", { // options is now ignored, not rejected options: value, }); - Breaking
decision_stage is now required
Partial payloads are rejected.
LinkTokenCreateRequestCraReportParameter.decision_stage · reachable from 1 operationCode that breaks
await client.post("/…", { // … decision_stage: /* now required */, }); - Breakingdirection flip: their tools call this safe
Response field account_id is no longer guaranteed
Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.
IdentityMatchListAttemptScore.account_id · reachable from 1 operationCode that breaks
// response.account_id may now be absent or null const account_id = response.account_id ?? fallback;
- Breaking
value no longer accepts "PRODUCT_GENERATION_ERROR"
A value you may have hardcoded is now rejected.
SandboxCraServicingSimulateErrorWebhookCode · reachable from 1 operationCode that breaks
// sending "PRODUCT_GENERATION_ERROR" for undefined is now rejected
- Breaking
verification_status no longer accepts "VERIFICATION_STATUS_PENDING_APPROVAL"
A value you may have hardcoded is now rejected.
SandboxIncomeFireWebhookRequest.verification_status · reachable from 1 operationCode that breaks
// sending "VERIFICATION_STATUS_PENDING_APPROVAL" for verification_status is now rejected
- Deprecation
POST /credit/bank_income/webhook/update deprecated
Still works today. This is the earliest warning you will get before it is removed.
POST /credit/bank_income/webhook/update - Additive
/beta/cash_advance/income_insights/v1/get added
No action needed.
/beta/cash_advance/income_insights/v1/get
19 new response fields
- AccountBase.paired_account_id
- InvestmentAccount.paired_account_id
- KYCCheckIDNumberSummary.ssa_verification
- AssetReportInvestmentHolding.vested_quantity
- AssetReportInvestmentHolding.vested_value
- BusinessAccount.paired_account_id
- LinkTokenCreateInstitutionData.institution_id
- AccountIdentity.paired_account_id
- AccountIdentityMatchScore.paired_account_id
- AccountIdentityDocumentUpload.paired_account_id
- CraReportGetIncomeInsightsMetadata.investment_account_type_count
- AccountBaseNullable.paired_account_id
- CraReportGetHomeLendingResponseProduct.items
- CraCreditProfileReportMetadata.investment_account_type_count
- CraReportGetIncomeInsightsResponseProduct.items
- CraReportGetIncomeInsightsStream.description
- CraReportGetIncomeInsightsStream.transactions
- CraReportGetReport.client_report_id
- CraReportGetReport.report_id
5 new request properties
- CraReportCreateLendScoreProductConfig.options
- LinkTokenCreateInstitutionData.institution_id
- LinkTokenCreateRequestCraReportParameter.include_identity_match
- CraLendScoreProduct.options
- CraReportCreateRequest.include_identity_match