{"version":"1.0","generatedAt":"2026-09-29T20:02:23.269Z","note":"Spec-derived. Severity is assigned by a deterministic ruleset; see /method.","releases":[{"id":"cmun00mpe00012gyfronkqpz0","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-29T18:10:33.000Z","commitSha":"c25ff3f03fa5ec5d075f82a1780c7e5ee54718da","repo":"openai/openai-openapi","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":11,"COSMETIC":0},"changes":[{"id":"cmun00n6s00052gyfwiahyjo3","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"value can now return \"gpt-6.1-sol\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects this value on `BetaModelIdsShared` reachable from 4 operations.\n\nNew value: `gpt-6.1-sol`.","patterns":{"ts":"switch (response) {\n  // existing branches …\n  // no branch for \"gpt-6.1-sol\"\n  default:\n    throw new Error(\"unexpected value\");\n}"},"componentName":"BetaModelIdsShared","affectedOperations":5,"detail":"can now return \"gpt-6.1-sol\"","siteCount":2,"sampleSites":[],"locations":["BetaModelIdsShared","ModelIdsShared"]}],"responseFieldAdds":{"count":3,"fields":["EnvironmentResourceOpenaiHosted.container_size","EnvironmentResourceOpenaiHosted.desktop","EnvironmentTemplateResource.desktop"]},"requestPropertyAdds":{"count":8,"fields":["NetworkPolicyParam.blocked_domains","CreateEnvironmentTemplateParams.network.blocked_domains","CreateEnvironmentTemplateParams.desktop","EnvironmentParamOpenaiHosted.network.blocked_domains","EnvironmentParamOpenaiHosted.container_size","EnvironmentParamOpenaiHosted.desktop","UpdateEnvironmentTemplateParams.network.blocked_domains","UpdateEnvironmentTemplateParams.desktop"]}},{"id":"cmumz3tfw00yfsbnx7812bhvp","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T21:21:09.000Z","commitSha":"b6059fc737ac846e8ba64ad65f4f2c8bc0d15854","repo":"openai/openai-openapi","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":3,"COSMETIC":0},"changes":[{"id":"cmumz4iqp00yisbnxucl89tee","ruleId":"response.property.type-narrowed","severity":"ADDITIVE","directionFlip":false,"headline":"Response type narrowed","body":"A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.\n\nAffects `ChatCompletionResponseMessage` reachable from 4 operations.","patterns":{},"componentName":"ChatCompletionResponseMessage","affectedOperations":4,"fieldPath":"function_call","detail":"null|object → object","siteCount":1,"sampleSites":[]},{"id":"cmumz4iqp00ygsbnxod5un3xq","ruleId":"response.property.type-narrowed","severity":"ADDITIVE","directionFlip":false,"headline":"Response type narrowed","body":"A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.\n\nAffects `ChatCompletionList` reachable from 1 operation.","patterns":{},"componentName":"ChatCompletionList","affectedOperations":1,"fieldPath":"first_id","detail":"null|string → string","siteCount":1,"sampleSites":[]},{"id":"cmumz4iqp00yhsbnxpla1rmaa","ruleId":"response.property.type-narrowed","severity":"ADDITIVE","directionFlip":false,"headline":"Response type narrowed","body":"A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.\n\nAffects `ChatCompletionList` reachable from 1 operation.","patterns":{},"componentName":"ChatCompletionList","affectedOperations":1,"fieldPath":"last_id","detail":"null|string → string","siteCount":1,"sampleSites":[]}]},{"id":"cmumzhbcq015vsbnxnwd9zvsy","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-28T19:14:42.000Z","commitSha":"f6845928e7a72756db3758ca3018c634e5a06ae6","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumzi54x015wsbnxq8uuk1te","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/repos/{owner}/{repo}/actions/jobs/{job_id}/steps/{step_number}/logs added","body":"No action needed.\n\nAffects `/repos/{owner}/{repo}/actions/jobs/{job_id}/steps/{step_number}/logs`.","patterns":{},"path":"/repos/{owner}/{repo}/actions/jobs/{job_id}/steps/{step_number}/logs","siteCount":1,"sampleSites":["/repos/{owner}/{repo}/actions/jobs/{job_id}/steps/{step_number}/logs"]}]},{"id":"cmumz39qj00y3sbnxvtmy23dl","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T18:53:46.000Z","commitSha":"14b6495caf993ebd47cafded1871a8caf55002b9","repo":"openai/openai-openapi","counts":{"BREAKING":4,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumz3g8400y5sbnxjtqm6dkl","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field noise_reduction is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `audio.input.noise_reduction` on `RealtimeSessionCreateResponse` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.audio.input.noise_reduction may now be absent or null\nconst noise_reduction = response.audio.input.noise_reduction ?? fallback;","py":"noise_reduction = response[\"audio\"][\"input\"].get(\"noise_reduction\")"},"componentName":"RealtimeSessionCreateResponse","affectedOperations":1,"fieldPath":"audio.input.noise_reduction","detail":"can now be null","siteCount":3,"sampleSites":[],"locations":["RealtimeSessionCreateResponse.audio.input.noise_reduction","RealtimeSessionCreateResponseGA.audio.input.noise_reduction","RealtimeTranscriptionSessionCreateResponseGA.audio.input.noise_reduction"]},{"id":"cmumz3g8400y6sbnx03gsz3ul","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field turn_detection is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `audio.input.turn_detection` on `RealtimeSessionCreateResponse` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.audio.input.turn_detection may now be absent or null\nconst turn_detection = response.audio.input.turn_detection ?? fallback;","py":"turn_detection = response[\"audio\"][\"input\"].get(\"turn_detection\")"},"componentName":"RealtimeSessionCreateResponse","affectedOperations":1,"fieldPath":"audio.input.turn_detection","detail":"can now be null","siteCount":2,"sampleSites":[],"locations":["RealtimeSessionCreateResponse.audio.input.turn_detection","RealtimeSessionCreateResponse.turn_detection"]},{"id":"cmumz3g8400y9sbnxappu8c6l","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field include is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `include` on `RealtimeSessionCreateResponseGA` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.include may now be absent or null\nconst include = response.include ?? fallback;","py":"include = response.get(\"include\")"},"componentName":"RealtimeSessionCreateResponseGA","affectedOperations":1,"fieldPath":"include","detail":"can now be null","siteCount":2,"sampleSites":[],"locations":["RealtimeSessionCreateResponseGA.include","RealtimeTranscriptionSessionCreateResponseGA.include"]},{"id":"cmumz3g8400y4sbnx6ph6ioz2","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field language is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `language` on `AudioTranscriptionResponse` reachable from 3 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.language may now be absent or null\nconst language = response.language ?? fallback;","py":"language = response.get(\"language\")"},"componentName":"AudioTranscriptionResponse","affectedOperations":3,"fieldPath":"language","detail":"can now be null","siteCount":1,"sampleSites":[]}]},{"id":"cmumz32yc00xmsbnxtnlefk4s","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T18:43:05.000Z","commitSha":"87b2daae521cc5f467cd1748bc175a5bf803fd8a","repo":"openai/openai-openapi","counts":{"BREAKING":8,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":6,"COSMETIC":0},"changes":[{"id":"cmumz38e400xnsbnx54lk3rja","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field annotations removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `ChatCompletionMessageList` reachable from 1 operation.","patterns":{"ts":"// response.data[0].annotations is now undefined\nconst annotations = response.data[0].annotations;","py":"# raises KeyError\nannotations = response[\"data\"][0][\"annotations\"]"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].annotations","siteCount":1,"sampleSites":[]},{"id":"cmumz38e400xosbnx0vexm4o2","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field audio removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `ChatCompletionMessageList` reachable from 1 operation.","patterns":{"ts":"// response.data[0].audio is now undefined\nconst audio = response.data[0].audio;","py":"# raises KeyError\naudio = response[\"data\"][0][\"audio\"]"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].audio","siteCount":1,"sampleSites":[]},{"id":"cmumz38e400xpsbnx7w42cv7q","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field function_call removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `ChatCompletionMessageList` reachable from 1 operation.","patterns":{"ts":"// response.data[0].function_call is now undefined\nconst function_call = response.data[0].function_call;","py":"# raises KeyError\nfunction_call = response[\"data\"][0][\"function_call\"]"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].function_call","siteCount":1,"sampleSites":[]},{"id":"cmumz38e400xqsbnx0j3e0z7n","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field refusal removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `ChatCompletionMessageList` reachable from 1 operation.","patterns":{"ts":"// response.data[0].refusal is now undefined\nconst refusal = response.data[0].refusal;","py":"# raises KeyError\nrefusal = response[\"data\"][0][\"refusal\"]"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].refusal","siteCount":1,"sampleSites":[]},{"id":"cmumz38e400xrsbnx9d14tq69","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"role can now return \"developer\", \"function\", \"system\", \"tool\", \"user\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `data[].role` on `ChatCompletionMessageList` reachable from 1 operation.\n\nNew values: `developer`, `function`, `system`, `tool`, `user`.","patterns":{"ts":"switch (response.data[0].role) {\n  // existing branches …\n  // no branch for \"developer\"\n  // no branch for \"function\"\n  // no branch for \"system\"\n  // no branch for \"tool\"\n  // no branch for \"user\"\n  default:\n    throw new Error(\"unexpected role\");\n}"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].role","detail":"can now return \"developer\", \"function\", \"system\", \"tool\", \"user\"","siteCount":1,"sampleSites":[]},{"id":"cmumz38e400xssbnx2otod42i","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field tool_calls removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `ChatCompletionMessageList` reachable from 1 operation.","patterns":{"ts":"// response.data[0].tool_calls is now undefined\nconst tool_calls = response.data[0].tool_calls;","py":"# raises KeyError\ntool_calls = response[\"data\"][0][\"tool_calls\"]"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"data[].tool_calls","siteCount":1,"sampleSites":[]},{"id":"cmumz38e500y0sbnxyrn0wvoq","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field first_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `first_id` on `ChatCompletionMessageList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.first_id may now be absent or null\nconst first_id = response.first_id ?? fallback;","py":"first_id = response.get(\"first_id\")"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"first_id","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz38e500y1sbnx74iigd2e","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field last_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `last_id` on `ChatCompletionMessageList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.last_id may now be absent or null\nconst last_id = response.last_id ?? fallback;","py":"last_id = response.get(\"last_id\")"},"componentName":"ChatCompletionMessageList","affectedOperations":1,"fieldPath":"last_id","detail":"can now be null","siteCount":1,"sampleSites":[]}],"responseFieldAdds":{"count":6,"fields":["ChatCompletionMessageList.data[].content_parts[].file","ChatCompletionMessageList.data[].content_parts[].image_url","ChatCompletionMessageList.data[].content_parts[].input_audio","ChatCompletionMessageList.data[].content_parts[].text","ChatCompletionMessageList.data[].content_parts[].type","ChatCompletionMessageList.data[].name"]}},{"id":"cmumz2nfp00x9sbnxr12gyp46","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T18:21:25.000Z","commitSha":"f6be21c5e7f32f204af3c6b599a2b90f50b4eb1c","repo":"openai/openai-openapi","counts":{"BREAKING":8,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumz2v8y00xgsbnxhhp4yh23","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field action is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `action` on `BetaWebSearchToolCall` reachable from 6 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.action may now be absent or null\nconst action = response.action ?? fallback;","py":"action = response.get(\"action\")"},"componentName":"BetaWebSearchToolCall","affectedOperations":10,"fieldPath":"action","detail":"no longer guaranteed present","siteCount":2,"sampleSites":[],"locations":["BetaWebSearchToolCall.action","WebSearchToolCall.action"]},{"id":"cmumz2v8y00xasbnx8c8ww0xh","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field completed_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `completed_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.completed_at may now be absent or null\nconst completed_at = response.completed_at ?? fallback;","py":"completed_at = response.get(\"completed_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"completed_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xbsbnxub9udea4","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field error_file_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `error_file_id` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.error_file_id may now be absent or null\nconst error_file_id = response.error_file_id ?? fallback;","py":"error_file_id = response.get(\"error_file_id\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"error_file_id","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xcsbnx92qiyrkm","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field expires_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `expires_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.expires_at may now be absent or null\nconst expires_at = response.expires_at ?? fallback;","py":"expires_at = response.get(\"expires_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"expires_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xdsbnxqla42j2a","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field finalizing_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `finalizing_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.finalizing_at may now be absent or null\nconst finalizing_at = response.finalizing_at ?? fallback;","py":"finalizing_at = response.get(\"finalizing_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"finalizing_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xesbnxrnj8d2uf","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field in_progress_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `in_progress_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.in_progress_at may now be absent or null\nconst in_progress_at = response.in_progress_at ?? fallback;","py":"in_progress_at = response.get(\"in_progress_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"in_progress_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xfsbnx5s52lqat","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field output_file_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `output_file_id` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.output_file_id may now be absent or null\nconst output_file_id = response.output_file_id ?? fallback;","py":"output_file_id = response.get(\"output_file_id\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"output_file_id","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2v8y00xhsbnxz3pldfni","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"object can now return \"vector_store.file_batch\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `object` on `VectorStoreFileBatchObject` reachable from 3 operations.\n\nNew value: `vector_store.file_batch`.","patterns":{"ts":"switch (response.object) {\n  // existing branches …\n  // no branch for \"vector_store.file_batch\"\n  default:\n    throw new Error(\"unexpected object\");\n}"},"componentName":"VectorStoreFileBatchObject","affectedOperations":3,"fieldPath":"object","detail":"can now return \"vector_store.file_batch\"","siteCount":1,"sampleSites":[]}]},{"id":"cmumz26zv00wwsbnxnrf52j7h","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T18:17:26.000Z","commitSha":"883357cf065ef0c7588708416ab3df56d748ecc8","repo":"openai/openai-openapi","counts":{"BREAKING":7,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumz2lim00wzsbnx5btkw1qc","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field refusal is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `data[].refusal` on `ChatCompletionMessageList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.data[0].refusal may now be absent or null\nconst refusal = response.data[0].refusal ?? fallback;","py":"refusal = response[\"data\"][0].get(\"refusal\")"},"componentName":"ChatCompletionMessageList","affectedOperations":5,"fieldPath":"data[].refusal","detail":"no longer guaranteed present","siteCount":2,"sampleSites":[],"locations":["ChatCompletionMessageList.data[].refusal","ChatCompletionResponseMessage.refusal"]},{"id":"cmumz2lim00x0sbnxszkb83wo","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field function_call is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `data[].function_call` on `ChatCompletionMessageList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.data[0].function_call may now be absent or null\nconst function_call = response.data[0].function_call ?? fallback;","py":"function_call = response[\"data\"][0].get(\"function_call\")"},"componentName":"ChatCompletionMessageList","affectedOperations":5,"fieldPath":"data[].function_call","detail":"can now be null","siteCount":2,"sampleSites":[],"locations":["ChatCompletionMessageList.data[].function_call","ChatCompletionResponseMessage.function_call"]},{"id":"cmumz2lim00x3sbnxm8eyjl9n","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field hyperparameters is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `hyperparameters` on `FineTuningJob` reachable from 6 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.hyperparameters may now be absent or null\nconst hyperparameters = response.hyperparameters ?? fallback;","py":"hyperparameters = response.get(\"hyperparameters\")"},"componentName":"FineTuningJob","affectedOperations":6,"fieldPath":"hyperparameters","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumz2lin00x6sbnx79kn7xdr","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field seed is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `seed` on `FineTuningJob` reachable from 6 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.seed may now be absent or null\nconst seed = response.seed ?? fallback;","py":"seed = response.get(\"seed\")"},"componentName":"FineTuningJob","affectedOperations":6,"fieldPath":"seed","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2lin00x7sbnxglr8jz42","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"status can now return \"paused\", \"pausing\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `status` on `FineTuningJob` reachable from 6 operations.\n\nNew values: `paused`, `pausing`.","patterns":{"ts":"switch (response.status) {\n  // existing branches …\n  // no branch for \"paused\"\n  // no branch for \"pausing\"\n  default:\n    throw new Error(\"unexpected status\");\n}"},"componentName":"FineTuningJob","affectedOperations":6,"fieldPath":"status","detail":"can now return \"paused\", \"pausing\"","siteCount":1,"sampleSites":[]},{"id":"cmumz2lim00wxsbnxnwlmqcd4","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field first_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `first_id` on `ChatCompletionList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.first_id may now be absent or null\nconst first_id = response.first_id ?? fallback;","py":"first_id = response.get(\"first_id\")"},"componentName":"ChatCompletionList","affectedOperations":1,"fieldPath":"first_id","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumz2lim00wysbnx4ldjfe0g","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field last_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `last_id` on `ChatCompletionList` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.last_id may now be absent or null\nconst last_id = response.last_id ?? fallback;","py":"last_id = response.get(\"last_id\")"},"componentName":"ChatCompletionList","affectedOperations":1,"fieldPath":"last_id","detail":"can now be null","siteCount":1,"sampleSites":[]}]},{"id":"cmun00p41000r2gyf8pmmrpcb","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-28T15:46:50.000Z","commitSha":"8de50689eb9aef2b0195279c72b20a64ee7671a9","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":6,"COSMETIC":0},"changes":[{"id":"cmun00pn2000v2gyfv3azu3aa","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/properties/installations/schema added","body":"No action needed.\n\nAffects `/orgs/{org}/properties/installations/schema`.","patterns":{},"path":"/orgs/{org}/properties/installations/schema","siteCount":1,"sampleSites":["/orgs/{org}/properties/installations/schema"]},{"id":"cmun00pn2000w2gyfvb7os152","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/properties/installations/values added","body":"No action needed.\n\nAffects `/orgs/{org}/properties/installations/values`.","patterns":{},"path":"/orgs/{org}/properties/installations/values","siteCount":1,"sampleSites":["/orgs/{org}/properties/installations/values"]},{"id":"cmun00pn2000u2gyfiypyakcw","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/properties/installations added","body":"No action needed.\n\nAffects `/orgs/{org}/properties/installations`.","patterns":{},"path":"/orgs/{org}/properties/installations","siteCount":1,"sampleSites":["/orgs/{org}/properties/installations"]},{"id":"cmun00pn2000x2gyffp6yfin5","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/properties/installations/values/{property_name} added","body":"No action needed.\n\nAffects `/orgs/{org}/properties/installations/values/{property_name}`.","patterns":{},"path":"/orgs/{org}/properties/installations/values/{property_name}","siteCount":1,"sampleSites":["/orgs/{org}/properties/installations/values/{property_name}"]},{"id":"cmun00pn1000s2gyfj2mro22e","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field organization_external_properties_for_repos added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `app-permissions` reachable from 11 operations.","patterns":{},"componentName":"app-permissions","affectedOperations":11,"fieldPath":"organization_external_properties_for_repos","siteCount":1,"sampleSites":[]},{"id":"cmun00pn1000t2gyf8y7x4hk7","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property organization_external_properties_for_repos added","body":"No action needed unless it is required.\n\nAffects `app-permissions` reachable from 11 operations.","patterns":{},"componentName":"app-permissions","affectedOperations":11,"fieldPath":"organization_external_properties_for_repos","siteCount":1,"sampleSites":[]}]},{"id":"cmumyzbzh00wdsbnxzrqcai5a","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T05:01:48.000Z","commitSha":"78e0725d18d993ea1fea659ac94145aa318e5ea7","repo":"openai/openai-openapi","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":7,"COSMETIC":0},"changes":[{"id":"cmumyzyqe00wisbnxh4gkudvd","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field user is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `user` on `BetaResponse` reachable from 3 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.user may now be absent or null\nconst user = response.user ?? fallback;","py":"user = response.get(\"user\")"},"componentName":"BetaResponse","affectedOperations":4,"fieldPath":"user","detail":"can now be null","siteCount":4,"sampleSites":[],"locations":["BetaResponse.user","BetaModelResponseProperties.user","ModelResponseProperties.user","Response.user"]},{"id":"cmumyzyqe00wmsbnxc4g4206d","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `ModelResponseProperties` reachable from 4 operations.","patterns":{},"componentName":"ModelResponseProperties","affectedOperations":4,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00whsbnxi0k2u4dx","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `BetaModelResponseProperties` reachable from 3 operations.","patterns":{},"componentName":"BetaModelResponseProperties","affectedOperations":3,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00wksbnxqy6uih5g","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `CreateModelResponseProperties` reachable from 2 operations.","patterns":{},"componentName":"CreateModelResponseProperties","affectedOperations":2,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00wesbnxqj8wbvhs","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `BetaCreateModelResponseProperties` reachable from 1 operation.","patterns":{},"componentName":"BetaCreateModelResponseProperties","affectedOperations":1,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00wfsbnxh8h8ufxp","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `BetaCreateResponse` reachable from 1 operation.","patterns":{},"componentName":"BetaCreateResponse","affectedOperations":1,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00wjsbnxyx6zdk20","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `CreateChatCompletionRequest` reachable from 1 operation.","patterns":{},"componentName":"CreateChatCompletionRequest","affectedOperations":1,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyzyqe00wlsbnxo8h482r1","ruleId":"request.property.became-nullable","severity":"ADDITIVE","directionFlip":false,"headline":"Request field now accepts null","body":"A relaxation. Existing payloads are unaffected.\n\nAffects `CreateResponse` reachable from 1 operation.","patterns":{},"componentName":"CreateResponse","affectedOperations":1,"fieldPath":"user","detail":"can now be null","siteCount":1,"sampleSites":[]}]},{"id":"cmumywzoz00w2sbnxef8cit55","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T04:32:30.000Z","commitSha":"6faa7e5e5b65a7cc090da7fbcfea172136c5d0c6","repo":"openai/openai-openapi","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumyxecm00w3sbnxy3za7zo1","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"finish_reason gained response values","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `choices[].finish_reason` on `CreateChatCompletionStreamResponse` reachable from 1 operation.","patterns":{"ts":"switch (response.choices[0].finish_reason) {\n  // existing branches …\n\n  default:\n    throw new Error(\"unexpected finish_reason\");\n}"},"componentName":"CreateChatCompletionStreamResponse","affectedOperations":1,"fieldPath":"choices[].finish_reason","detail":"can now return null","siteCount":1,"sampleSites":[]}]},{"id":"cmumyvwmb00vrsbnxipuvva12","providerSlug":"openai","providerName":"OpenAI","sourceKey":"api","sourceLabel":"OpenAI API","shippedAt":"2026-09-28T04:25:42.000Z","commitSha":"aae0ce2c96726d7db5ba08cf59ebc04721ee846f","repo":"openai/openai-openapi","counts":{"BREAKING":5,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumyw8ah00vssbnxdjgjoq74","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field cancelled_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `cancelled_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.cancelled_at may now be absent or null\nconst cancelled_at = response.cancelled_at ?? fallback;","py":"cancelled_at = response.get(\"cancelled_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"cancelled_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyw8ah00vtsbnxfoyu7wvb","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field cancelling_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `cancelling_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.cancelling_at may now be absent or null\nconst cancelling_at = response.cancelling_at ?? fallback;","py":"cancelling_at = response.get(\"cancelling_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"cancelling_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyw8ah00vusbnxsxc1wws2","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field errors is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `errors` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.errors may now be absent or null\nconst errors = response.errors ?? fallback;","py":"errors = response.get(\"errors\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"errors","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyw8ah00vvsbnxp5hf8bpz","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field expired_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `expired_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.expired_at may now be absent or null\nconst expired_at = response.expired_at ?? fallback;","py":"expired_at = response.get(\"expired_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"expired_at","detail":"can now be null","siteCount":1,"sampleSites":[]},{"id":"cmumyw8ah00vwsbnx4grmhh8e","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field failed_at is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `failed_at` on `Batch` reachable from 4 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.failed_at may now be absent or null\nconst failed_at = response.failed_at ?? fallback;","py":"failed_at = response.get(\"failed_at\")"},"componentName":"Batch","affectedOperations":4,"fieldPath":"failed_at","detail":"can now be null","siteCount":1,"sampleSites":[]}]},{"id":"cmumyv9ax00vosbnxfvwirhg7","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-09-25T01:05:15.000Z","commitSha":"2bab97685e29abae0c241680c2257153e259e50f","repo":"stripe/openapi","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumyvujp00vpsbnxr2f4ssq1","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field india added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `card_mandate_payment_method_details` reachable from 126 operations.","patterns":{},"componentName":"card_mandate_payment_method_details","affectedOperations":126,"fieldPath":"india","siteCount":1,"sampleSites":[]}]},{"id":"cmumzf834015lsbnxgop1cg4d","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-24T22:01:28.000Z","commitSha":"4fc0ed66afba150d355d3908f8a443f4e1e784ea","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":2,"COSMETIC":0},"changes":[{"id":"cmumzgk4k015osbnxcqr351jl","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/repos/{owner}/{repo}/issues/{issue_number}/relates_to added","body":"No action needed.\n\nAffects `/repos/{owner}/{repo}/issues/{issue_number}/relates_to`.","patterns":{},"path":"/repos/{owner}/{repo}/issues/{issue_number}/relates_to","siteCount":1,"sampleSites":["/repos/{owner}/{repo}/issues/{issue_number}/relates_to"]},{"id":"cmumzgk4k015psbnxr5a9s33o","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/repos/{owner}/{repo}/issues/{issue_number}/relates_to/{issue_id} added","body":"No action needed.\n\nAffects `/repos/{owner}/{repo}/issues/{issue_number}/relates_to/{issue_id}`.","patterns":{},"path":"/repos/{owner}/{repo}/issues/{issue_number}/relates_to/{issue_id}","siteCount":1,"sampleSites":["/repos/{owner}/{repo}/issues/{issue_number}/relates_to/{issue_id}"]}]},{"id":"cmun00obp000o2gyftfkbuuyf","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-24T15:25:50.000Z","commitSha":"f4f0708fb8de458bd47bc2c9b3da8c5bf1780124","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":1,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmun00oxw000p2gyfaorbgi88","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"503 is now documented on /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","body":"An unhandled branch in your error handling.\n\nAffects `POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers`.","patterns":{},"method":"post","path":"/repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers","detail":"503 is now documented","siteCount":1,"sampleSites":["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"]}]},{"id":"cmumyu7qi00omsbnxs34v3n7o","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-09-23T23:02:43.000Z","commitSha":"c8faccbde66b784ea916d3c28f5790d7a9c9aee2","repo":"stripe/openapi","counts":{"BREAKING":24,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":117,"COSMETIC":0},"changes":[{"id":"cmumyv60400uasbnxd9zwy2zz","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"igic is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `country_options.at.igic` on `POST /v1/tax/registrations`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/tax/registrations\", {\n  // igic is now ignored, not rejected\n  igic: value,\n});"},"method":"post","path":"/v1/tax/registrations","fieldPath":"country_options.at.igic","siteCount":27,"sampleSites":["POST /v1/tax/registrations","POST /v1/tax/registrations","POST /v1/tax/registrations","POST /v1/tax/registrations","POST /v1/tax/registrations"],"locations":["POST /v1/tax/registrations · country_options.at.igic","POST /v1/tax/registrations · country_options.be.igic","POST /v1/tax/registrations · country_options.bg.igic","POST /v1/tax/registrations · country_options.cy.igic","POST /v1/tax/registrations · country_options.cz.igic","POST /v1/tax/registrations · country_options.de.igic","POST /v1/tax/registrations · country_options.dk.igic","POST /v1/tax/registrations · country_options.ee.igic","POST /v1/tax/registrations · country_options.es.igic","POST /v1/tax/registrations · country_options.fi.igic","POST /v1/tax/registrations · country_options.fr.igic","POST /v1/tax/registrations · country_options.gr.igic","POST /v1/tax/registrations · country_options.hr.igic","POST /v1/tax/registrations · country_options.hu.igic","POST /v1/tax/registrations · country_options.ie.igic","POST /v1/tax/registrations · country_options.it.igic","POST /v1/tax/registrations · country_options.lt.igic","POST /v1/tax/registrations · country_options.lu.igic","POST /v1/tax/registrations · country_options.lv.igic","POST /v1/tax/registrations · country_options.mt.igic","POST /v1/tax/registrations · country_options.nl.igic","POST /v1/tax/registrations · country_options.pl.igic","POST /v1/tax/registrations · country_options.pt.igic","POST /v1/tax/registrations · country_options.ro.igic","POST /v1/tax/registrations · country_options.se.igic","POST /v1/tax/registrations · country_options.si.igic","POST /v1/tax/registrations · country_options.sk.igic"]},{"id":"cmumyv5zz00p0sbnxiagnfbo6","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"paypay\", \"sequra\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `confirmation_tokens_resource_payment_method_preview` reachable from 2 operations.\n\nNew values: `paypay`, `sequra`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"paypay\"\n  // no branch for \"sequra\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"confirmation_tokens_resource_payment_method_preview","affectedOperations":612,"fieldPath":"type","detail":"can now return \"paypay\", \"sequra\"","siteCount":5,"sampleSites":[],"locations":["confirmation_tokens_resource_payment_method_preview.type","payment_intent.excluded_payment_method_types[]","payment_link.payment_method_types[]","payment_method.type","setup_intent.excluded_payment_method_types[]"]},{"id":"cmumyv60200rxsbnxzceaecf0","ruleId":"request.property.became-required","severity":"BREAKING","directionFlip":false,"headline":"type is now required","body":"Partial payloads are rejected.\n\nAffects `POST /v1/invoices/create_preview`.","patterns":{"ts":"await client.post(\"/v1/invoices/create_preview\", {\n  // …\n  type: /* now required */,\n});"},"method":"post","path":"/v1/invoices/create_preview","fieldPath":"subscription_details.billing_cycle_anchor.type","siteCount":3,"sampleSites":["POST /v1/invoices/create_preview","POST /v1/subscriptions/{subscription_exposed_id}","POST /v1/subscriptions/{subscription}/resume"],"locations":["POST /v1/invoices/create_preview · subscription_details.billing_cycle_anchor.type","POST /v1/subscriptions/{subscription_exposed_id} · billing_cycle_anchor.type","POST /v1/subscriptions/{subscription}/resume · billing_cycle_anchor.type"]},{"id":"cmumyv5zz00pfsbnxrchq0el8","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"allowed_payment_method_types can now return \"card_present\", \"interac_present\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `allowed_payment_method_types[]` on `payment_intent` reachable from 597 operations.\n\nNew values: `card_present`, `interac_present`.","patterns":{"ts":"switch (response.allowed_payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"card_present\"\n  // no branch for \"interac_present\"\n  default:\n    throw new Error(\"unexpected allowed_payment_method_types\");\n}"},"componentName":"payment_intent","affectedOperations":609,"fieldPath":"allowed_payment_method_types[]","detail":"can now return \"card_present\", \"interac_present\"","siteCount":2,"sampleSites":[],"locations":["payment_intent.allowed_payment_method_types[]","setup_intent.allowed_payment_method_types[]"]},{"id":"cmumyv5zz00pdsbnxlmw1mxph","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"blik\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 474 operations.\n\nNew value: `blik`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"blik\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":512,"fieldPath":"payment_method_types[]","detail":"can now return \"blik\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumyv5zz00oysbnxvuobg1tz","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"setup_future_usage can now return \"off_session\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `setup_future_usage` on `checkout_bancontact_payment_method_options` reachable from 15 operations.\n\nNew value: `off_session`.","patterns":{"ts":"switch (response.setup_future_usage) {\n  // existing branches …\n  // no branch for \"off_session\"\n  default:\n    throw new Error(\"unexpected setup_future_usage\");\n}"},"componentName":"checkout_bancontact_payment_method_options","affectedOperations":426,"fieldPath":"setup_future_usage","detail":"can now return \"off_session\"","siteCount":2,"sampleSites":[],"locations":["checkout_bancontact_payment_method_options.setup_future_usage","payment_intent_payment_method_options_blik.setup_future_usage"]},{"id":"cmumyv60100r0sbnxqxo7971c","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"network can now return \"rtp\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `network` on `treasury.received_credit` reachable from 39 operations.\n\nNew value: `rtp`.","patterns":{"ts":"switch (response.network) {\n  // existing branches …\n  // no branch for \"rtp\"\n  default:\n    throw new Error(\"unexpected network\");\n}"},"componentName":"treasury.received_credit","affectedOperations":39,"fieldPath":"network","detail":"can now return \"rtp\"","siteCount":2,"sampleSites":[],"locations":["treasury.received_credit.network","treasury_financial_accounts_resource_financial_address.supported_networks[]"]},{"id":"cmumyv60100qxsbnxuag57q46","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"tax_type can now return \"admissions_tax\", \"attendance_tax\", \"digital_excise_tax\", \"entertainment_tax\", \"gross_receipts_tax\", \"hospitality_tax\", \"luxury_tax\", \"recycling_fee\", \"resort_tax\", \"tourism_tax\", \"utility_users_tax\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `tax_type` on `tax_product_resource_line_item_tax_rate_details` reachable from 3 operations.\n\nNew values: `admissions_tax`, `attendance_tax`, `digital_excise_tax`, `entertainment_tax`, `gross_receipts_tax`, `hospitality_tax`, `luxury_tax`, `recycling_fee`, `resort_tax`, `tourism_tax`, `utility_users_tax`.","patterns":{"ts":"switch (response.tax_type) {\n  // existing branches …\n  // no branch for \"admissions_tax\"\n  // no branch for \"attendance_tax\"\n  // no branch for \"digital_excise_tax\"\n  // no branch for \"entertainment_tax\"\n  // no branch for \"gross_receipts_tax\"\n  // no branch for \"hospitality_tax\"\n  // no branch for \"luxury_tax\"\n  // no branch for \"recycling_fee\"\n  // no branch for \"resort_tax\"\n  // no branch for \"tourism_tax\"\n  // no branch for \"utility_users_tax\"\n  default:\n    throw new Error(\"unexpected tax_type\");\n}"},"componentName":"tax_product_resource_line_item_tax_rate_details","affectedOperations":3,"fieldPath":"tax_type","detail":"can now return \"admissions_tax\", \"attendance_tax\", \"digital_excise_tax\", \"entertainment_tax\", \"gross_receipts_tax\", \"hospitality_tax\", \"luxury_tax\", \"recycling_fee\", \"resort_tax\", \"tourism_tax\", \"utility_users_tax\"","siteCount":2,"sampleSites":[],"locations":["tax_product_resource_line_item_tax_rate_details.tax_type","tax_product_resource_tax_rate_details.tax_type"]},{"id":"cmumyv5zz00orsbnxgaulw0zs","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"code can now return \"invalid_address_cmra_address\", \"invalid_address_registered_agent_address\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `code` on `account_requirements_error` reachable from 575 operations.\n\nNew values: `invalid_address_cmra_address`, `invalid_address_registered_agent_address`.","patterns":{"ts":"switch (response.code) {\n  // existing branches …\n  // no branch for \"invalid_address_cmra_address\"\n  // no branch for \"invalid_address_registered_agent_address\"\n  default:\n    throw new Error(\"unexpected code\");\n}"},"componentName":"account_requirements_error","affectedOperations":575,"fieldPath":"code","detail":"can now return \"invalid_address_cmra_address\", \"invalid_address_registered_agent_address\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv5zz00otsbnxt6clw3r5","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"issuing_dispute_provisional_credit\", \"issuing_dispute_provisional_credit_reversal\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `balance_transaction` reachable from 553 operations.\n\nNew values: `issuing_dispute_provisional_credit`, `issuing_dispute_provisional_credit_reversal`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"issuing_dispute_provisional_credit\"\n  // no branch for \"issuing_dispute_provisional_credit_reversal\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"balance_transaction","affectedOperations":553,"fieldPath":"type","detail":"can now return \"issuing_dispute_provisional_credit\", \"issuing_dispute_provisional_credit_reversal\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60100qzsbnxqtyxpk5f","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"tax_type can now return \"digital_excise_tax\", \"utility_users_tax\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `tax_type` on `tax_rate` reachable from 543 operations.\n\nNew values: `digital_excise_tax`, `utility_users_tax`.","patterns":{"ts":"switch (response.tax_type) {\n  // existing branches …\n  // no branch for \"digital_excise_tax\"\n  // no branch for \"utility_users_tax\"\n  default:\n    throw new Error(\"unexpected tax_type\");\n}"},"componentName":"tax_rate","affectedOperations":543,"fieldPath":"tax_type","detail":"can now return \"digital_excise_tax\", \"utility_users_tax\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60000q1sbnxuapknpi8","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"version can now return \"2.3.0\", \"2.3.1\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `version` on `payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure` reachable from 143 operations.\n\nNew values: `2.3.0`, `2.3.1`.","patterns":{"ts":"switch (response.version) {\n  // existing branches …\n  // no branch for \"2.3.0\"\n  // no branch for \"2.3.1\"\n  default:\n    throw new Error(\"unexpected version\");\n}"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure","affectedOperations":143,"fieldPath":"version","detail":"can now return \"2.3.0\", \"2.3.1\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv5zz00owsbnxkb7q92dy","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"ui_mode can now return \"form\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `ui_mode` on `checkout.session` reachable from 15 operations.\n\nNew value: `form`.","patterns":{"ts":"switch (response.ui_mode) {\n  // existing branches …\n  // no branch for \"form\"\n  default:\n    throw new Error(\"unexpected ui_mode\");\n}"},"componentName":"checkout.session","affectedOperations":15,"fieldPath":"ui_mode","detail":"can now return \"form\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv5zz00ousbnxrsnlinxj","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"status can now return \"expired\", \"pending\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `status` on `bank_connections_resource_account_number_details` reachable from 14 operations.\n\nNew values: `expired`, `pending`.","patterns":{"ts":"switch (response.status) {\n  // existing branches …\n  // no branch for \"expired\"\n  // no branch for \"pending\"\n  default:\n    throw new Error(\"unexpected status\");\n}"},"componentName":"bank_connections_resource_account_number_details","affectedOperations":14,"fieldPath":"status","detail":"can now return \"expired\", \"pending\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60100rgsbnx4jwyjxd5","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `payment_method_types` on `POST /v1/checkout/sessions`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/checkout/sessions\", {\n  // payment_method_types is now ignored, not rejected\n  payment_method_types: value,\n});"},"method":"post","path":"/v1/checkout/sessions","fieldPath":"payment_method_types","siteCount":6,"sampleSites":["POST /v1/checkout/sessions","POST /v1/payment_intents","POST /v1/payment_intents/{intent}","POST /v1/payment_intents/{intent}/confirm","POST /v1/setup_intents"]},{"id":"cmumyv5zz00ovsbnxj41fx0a4","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field countries removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `bank_connections_resource_link_account_session_filters` reachable from 4 operations.","patterns":{"ts":"// response.countries is now undefined\nconst countries = response.countries;","py":"# raises KeyError\ncountries = response[\"countries\"]"},"componentName":"bank_connections_resource_link_account_session_filters","affectedOperations":4,"fieldPath":"countries","siteCount":1,"sampleSites":[]},{"id":"cmumyv60100qmsbnxp7kb5z50","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field igic removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `tax_product_registrations_resource_country_options_europe` reachable from 4 operations.","patterns":{"ts":"// response.igic is now undefined\nconst igic = response.igic;","py":"# raises KeyError\nigic = response[\"igic\"]"},"componentName":"tax_product_registrations_resource_country_options_europe","affectedOperations":4,"fieldPath":"igic","siteCount":1,"sampleSites":[]},{"id":"cmumyv60100qnsbnxy1ssanmm","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"admissions_tax\", \"attendance_tax\", \"entertainment_tax\", \"gross_receipts_tax\", \"hospitality_tax\", \"luxury_tax\", \"resort_tax\", \"tourism_tax\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `tax_product_registrations_resource_country_options_united_states` reachable from 4 operations.\n\nNew values: `admissions_tax`, `attendance_tax`, `entertainment_tax`, `gross_receipts_tax`, `hospitality_tax`, `luxury_tax`, `resort_tax`, `tourism_tax`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"admissions_tax\"\n  // no branch for \"attendance_tax\"\n  // no branch for \"entertainment_tax\"\n  // no branch for \"gross_receipts_tax\"\n  // no branch for \"hospitality_tax\"\n  // no branch for \"luxury_tax\"\n  // no branch for \"resort_tax\"\n  // no branch for \"tourism_tax\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"tax_product_registrations_resource_country_options_united_states","affectedOperations":4,"fieldPath":"type","detail":"can now return \"admissions_tax\", \"attendance_tax\", \"entertainment_tax\", \"gross_receipts_tax\", \"hospitality_tax\", \"luxury_tax\", \"resort_tax\", \"tourism_tax\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60100qwsbnxo0qt8eqy","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"sourcing can now return \"performance\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `sourcing` on `tax_product_resource_line_item_tax_breakdown` reachable from 3 operations.\n\nNew value: `performance`.","patterns":{"ts":"switch (response.sourcing) {\n  // existing branches …\n  // no branch for \"performance\"\n  default:\n    throw new Error(\"unexpected sourcing\");\n}"},"componentName":"tax_product_resource_line_item_tax_breakdown","affectedOperations":3,"fieldPath":"sourcing","detail":"can now return \"performance\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60200rrsbnx9x8egnbb","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"countries is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `filters.countries` on `POST /v1/financial_connections/sessions`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/financial_connections/sessions\", {\n  // countries is now ignored, not rejected\n  countries: value,\n});"},"method":"post","path":"/v1/financial_connections/sessions","fieldPath":"filters.countries","siteCount":2,"sampleSites":["POST /v1/financial_connections/sessions","POST /v1/link_account_sessions"]},{"id":"cmumyv60400twsbnxgzqnn7j3","ruleId":"request.property.type-changed","severity":"BREAKING","directionFlip":false,"headline":"billing_cycle_anchor changed type","body":"Serialization mismatch. Integer-to-string moves are the usual cause and the usual outage.\n\nAffects `POST /v1/subscriptions/{subscription_exposed_id}`.","patterns":{"ts":"// payload.billing_cycle_anchor\n// was: string\n// now: object"},"method":"post","path":"/v1/subscriptions/{subscription_exposed_id}","fieldPath":"billing_cycle_anchor","detail":"string → object","siteCount":2,"sampleSites":["POST /v1/subscriptions/{subscription_exposed_id}","POST /v1/subscriptions/{subscription}/resume"]},{"id":"cmumyv5zz00p5sbnxmxhr7ham","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field score is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `score` on `insights_resources_payment_evaluation_signal_v2` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.score may now be absent or null\nconst score = response.score ?? fallback;","py":"score = response.get(\"score\")"},"componentName":"insights_resources_payment_evaluation_signal_v2","affectedOperations":1,"fieldPath":"score","detail":"can now be null; no longer guaranteed present","siteCount":2,"sampleSites":[]},{"id":"cmumyv5zz00p3sbnxueh9680c","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"rerouted\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `insights_resources_payment_evaluation_outcome` reachable from 1 operation.\n\nNew value: `rerouted`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"rerouted\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"insights_resources_payment_evaluation_outcome","affectedOperations":1,"fieldPath":"type","detail":"can now return \"rerouted\"","siteCount":1,"sampleSites":[]},{"id":"cmumyv60300t6sbnx1tinh9da","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"payto is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `payto` on `POST /v1/payment_methods/{payment_method}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/payment_methods/{payment_method}\", {\n  // payto is now ignored, not rejected\n  payto: value,\n});"},"method":"post","path":"/v1/payment_methods/{payment_method}","fieldPath":"payto","siteCount":1,"sampleSites":["POST /v1/payment_methods/{payment_method}"]},{"id":"cmumyv60400txsbnxymdsj3y0","ruleId":"request.enum.constraint-removed","severity":"ADDITIVE","directionFlip":false,"headline":"Value restriction lifted","body":"A relaxation, not a break. Everything you could send before still works, and more is accepted now.\n\nAffects `POST /v1/subscriptions/{subscription_exposed_id}`.","patterns":{},"method":"post","path":"/v1/subscriptions/{subscription_exposed_id}","fieldPath":"billing_cycle_anchor","detail":"the documented value list is gone; more is accepted now","siteCount":2,"sampleSites":["POST /v1/subscriptions/{subscription_exposed_id}","POST /v1/subscriptions/{subscription}/resume"]},{"id":"cmumyv60500vbsbnxqq7u1r5o","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/apps/installs added","body":"No action needed.\n\nAffects `/v1/apps/installs`.","patterns":{},"path":"/v1/apps/installs","siteCount":1,"sampleSites":["/v1/apps/installs"]},{"id":"cmumyv60500vfsbnxawwc93vq","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/product_catalog/trial_offers/{id} added","body":"No action needed.\n\nAffects `/v1/product_catalog/trial_offers/{id}`.","patterns":{},"path":"/v1/product_catalog/trial_offers/{id}","siteCount":1,"sampleSites":["/v1/product_catalog/trial_offers/{id}"]},{"id":"cmumyv60500vcsbnxniadh5k5","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/apps/installs/{id} added","body":"No action needed.\n\nAffects `/v1/apps/installs/{id}`.","patterns":{},"path":"/v1/apps/installs/{id}","siteCount":1,"sampleSites":["/v1/apps/installs/{id}"]},{"id":"cmumyv60500vdsbnx8c328jse","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/apps/installs/{id}/uninstall added","body":"No action needed.\n\nAffects `/v1/apps/installs/{id}/uninstall`.","patterns":{},"path":"/v1/apps/installs/{id}/uninstall","siteCount":1,"sampleSites":["/v1/apps/installs/{id}/uninstall"]},{"id":"cmumyv60500vesbnxiiuom1u8","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/product_catalog/trial_offers added","body":"No action needed.\n\nAffects `/v1/product_catalog/trial_offers`.","patterns":{},"path":"/v1/product_catalog/trial_offers","siteCount":1,"sampleSites":["/v1/product_catalog/trial_offers"]},{"id":"cmumyv60500vgsbnxmnwkmzcm","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/subscriptions/{subscription}/pause added","body":"No action needed.\n\nAffects `/v1/subscriptions/{subscription}/pause`.","patterns":{},"path":"/v1/subscriptions/{subscription}/pause","siteCount":1,"sampleSites":["/v1/subscriptions/{subscription}/pause"]},{"id":"cmumyv60600vhsbnxa1ngaen8","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/tax/locations added","body":"No action needed.\n\nAffects `/v1/tax/locations`.","patterns":{},"path":"/v1/tax/locations","siteCount":1,"sampleSites":["/v1/tax/locations"]},{"id":"cmumyv60600visbnx8259hz5g","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/tax/locations/{location} added","body":"No action needed.\n\nAffects `/v1/tax/locations/{location}`.","patterns":{},"path":"/v1/tax/locations/{location}","siteCount":1,"sampleSites":["/v1/tax/locations/{location}"]},{"id":"cmumyv60600vjsbnxqi9ngn6n","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/three_d_secure/authentications added","body":"No action needed.\n\nAffects `/v1/three_d_secure/authentications`.","patterns":{},"path":"/v1/three_d_secure/authentications","siteCount":1,"sampleSites":["/v1/three_d_secure/authentications"]},{"id":"cmumyv60600vksbnx4u4bv363","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/three_d_secure/authentications/{authentication} added","body":"No action needed.\n\nAffects `/v1/three_d_secure/authentications/{authentication}`.","patterns":{},"path":"/v1/three_d_secure/authentications/{authentication}","siteCount":1,"sampleSites":["/v1/three_d_secure/authentications/{authentication}"]},{"id":"cmumyv60600vlsbnxqjyxdeva","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/three_d_secure/authentications/{authentication}/cancel added","body":"No action needed.\n\nAffects `/v1/three_d_secure/authentications/{authentication}/cancel`.","patterns":{},"path":"/v1/three_d_secure/authentications/{authentication}/cancel","siteCount":1,"sampleSites":["/v1/three_d_secure/authentications/{authentication}/cancel"]},{"id":"cmumyv60600vmsbnxfg8lyd24","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/three_d_secure/authentications/{authentication}/submit added","body":"No action needed.\n\nAffects `/v1/three_d_secure/authentications/{authentication}/submit`.","patterns":{},"path":"/v1/three_d_secure/authentications/{authentication}/submit","siteCount":1,"sampleSites":["/v1/three_d_secure/authentications/{authentication}/submit"]}],"responseFieldAdds":{"count":56,"fields":["payment_method.paypay","payment_method.sequra","payment_intent.payment_record","account_capabilities.blik_recurring_payments","account_capabilities.paypay_payments","account_capabilities.sequra_payments","account_business_profile.specified_commercial_transactions_act_url","account_settings.paypay_payments","subscription.status_details","payment_method_details.paypay","payment_method_details.sequra","invoice.status_details","subscription_schedule.pause_schedules","subscriptions_resource_pending_update.cancel_at_period_end","subscription_item.current_trial","setup_attempt_payment_method_details.blik","subscriptions_resource_trial_settings_end_behavior.billing_cycle_anchor","payment_intent_payment_method_options.paypay","payment_intent_payment_method_options.sequra","subscriptions_resource_payment_method_options.blik","payment_intent_payment_method_options_blik.mandate_options","payment_method_options_billie.company_details","payment_method_options_billie.reference","payment_intent_next_action_swish_qr_code.expires_at","invoices_payment_method_options.blik","product.tax_details","subscription_payment_method_options_billie.company_details","tax_code.requirements","invoice_payment_method_options_billie.company_details","invoice_payment_method_options_billie.reference","payments_primitives_payment_records_resource_payment_method_details.momo","payments_primitives_payment_records_resource_payment_method_details.paypay","payments_primitives_payment_records_resource_payment_method_details.sequra","payment_method_details_card.electronic_commerce_indicator","payment_method_details_payment_record_link.funding_source_group","mandate_payment_method_details.blik","payments_primitives_payment_records_resource_payment_method_card_details_resource_wallet.link","setup_intent_payment_method_options.blik","checkout.session.allowed_payment_method_types","checkout_session_payment_method_options.sequra","invoiceitem.invoicing_rules","payment_method_configuration.paypay","payment_method_configuration.sequra","tax_product_registrations_resource_country_options_united_states.admissions_tax","tax_product_registrations_resource_country_options_united_states.attendance_tax","tax_product_registrations_resource_country_options_united_states.entertainment_tax","tax_product_registrations_resource_country_options_united_states.gross_receipts_tax","tax_product_registrations_resource_country_options_united_states.hospitality_tax","tax_product_registrations_resource_country_options_united_states.luxury_tax","tax_product_registrations_resource_country_options_united_states.resort_tax","tax_product_registrations_resource_country_options_united_states.tourism_tax","tax.calculation_line_item.performance_location","confirmation_tokens_resource_payment_method_preview.paypay","confirmation_tokens_resource_payment_method_preview.sequra","insights_resources_payment_evaluation_signals.early_fraud_warning","insights_resources_payment_evaluation_signals.fraudulent_dispute"]},"requestPropertyAdds":{"count":48,"fields":["payment_method_data.paypay","payment_method_data.sequra","payment_settings.payment_method_options.billie.company_details","payment_settings.payment_method_options.blik","payment_method_options.blik","payment_method_options.sequra","items[].current_trial","trial_settings.end_behavior.billing_cycle_anchor","line_items[].price_data.product_data.tax_details","payment_method_options.billie.company_details","payment_method_options.billie.reference","payment_method_options.blik.mandate_options","payment_method_options.paypay","paypay","sequra","business_profile.specified_commercial_transactions_act_url","capabilities.blik_recurring_payments","capabilities.paypay_payments","capabilities.sequra_payments","settings.paypay_payments","filters.country","payment_settings.payment_method_options.billie.reference","lines[].price_data.product_data.tax_details","canceled","tax_details","current_trial","pause_schedules","billing_cycle_anchor.type","settings.sepa_debit_payments","allowed_payment_method_types","invoicing_rules","subscription_details.billing_cycle_anchor.timestamp","subscription_details.billing_cycle_anchor.type","subscription_details.items[].current_trial","subscription_details.pause","price_data.product_data.tax_details","product.tax_details","product_data.tax_details","payment_behavior","line_items[].performance_location","country_options.us.admissions_tax","country_options.us.attendance_tax","country_options.us.entertainment_tax","country_options.us.gross_receipts_tax","country_options.us.hospitality_tax","country_options.us.luxury_tax","country_options.us.resort_tax","country_options.us.tourism_tax"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumzcj7q015asbnxlhldoigq","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-23T02:58:05.000Z","commitSha":"677c1b8f9aa413b7f3d18ccccb80018982a3acd1","repo":"github/rest-api-description","counts":{"BREAKING":5,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumzd3e3015bsbnxmm88v4i0","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"budget_entity_name is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `budget_entity_name` on `PATCH /organizations/{org}/settings/billing/budgets/{budget_id}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/organizations/{org}/settings/billing/budgets/{budget_id}\", {\n  // budget_entity_name is now ignored, not rejected\n  budget_entity_name: value,\n});"},"method":"patch","path":"/organizations/{org}/settings/billing/budgets/{budget_id}","fieldPath":"budget_entity_name","siteCount":1,"sampleSites":["PATCH /organizations/{org}/settings/billing/budgets/{budget_id}"]},{"id":"cmumzd3e3015csbnx82ddtdxp","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"budget_product_sku is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `budget_product_sku` on `PATCH /organizations/{org}/settings/billing/budgets/{budget_id}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/organizations/{org}/settings/billing/budgets/{budget_id}\", {\n  // budget_product_sku is now ignored, not rejected\n  budget_product_sku: value,\n});"},"method":"patch","path":"/organizations/{org}/settings/billing/budgets/{budget_id}","fieldPath":"budget_product_sku","siteCount":1,"sampleSites":["PATCH /organizations/{org}/settings/billing/budgets/{budget_id}"]},{"id":"cmumzd3e3015dsbnxet9h2nkv","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"budget_scope is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `budget_scope` on `PATCH /organizations/{org}/settings/billing/budgets/{budget_id}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/organizations/{org}/settings/billing/budgets/{budget_id}\", {\n  // budget_scope is now ignored, not rejected\n  budget_scope: value,\n});"},"method":"patch","path":"/organizations/{org}/settings/billing/budgets/{budget_id}","fieldPath":"budget_scope","siteCount":1,"sampleSites":["PATCH /organizations/{org}/settings/billing/budgets/{budget_id}"]},{"id":"cmumzd3e3015esbnxkalwhxpf","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"budget_type is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `budget_type` on `PATCH /organizations/{org}/settings/billing/budgets/{budget_id}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/organizations/{org}/settings/billing/budgets/{budget_id}\", {\n  // budget_type is now ignored, not rejected\n  budget_type: value,\n});"},"method":"patch","path":"/organizations/{org}/settings/billing/budgets/{budget_id}","fieldPath":"budget_type","siteCount":1,"sampleSites":["PATCH /organizations/{org}/settings/billing/budgets/{budget_id}"]},{"id":"cmumzd3e3015fsbnxcn25ry3l","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"user is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `user` on `PATCH /organizations/{org}/settings/billing/budgets/{budget_id}`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/organizations/{org}/settings/billing/budgets/{budget_id}\", {\n  // user is now ignored, not rejected\n  user: value,\n});"},"method":"patch","path":"/organizations/{org}/settings/billing/budgets/{budget_id}","fieldPath":"user","siteCount":1,"sampleSites":["PATCH /organizations/{org}/settings/billing/budgets/{budget_id}"]}]},{"id":"cmumzbvrw014nsbnxl5999ixu","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-18T14:31:50.000Z","commitSha":"814de7ac96e215adeeec999308f41f98f94a15db","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":2,"COSMETIC":0},"changes":[{"id":"cmumzbzhm014osbnxg47gcp9o","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field include_drafts added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `GET /orgs/{org}/interaction-limits/pulls/creation-cap`.","patterns":{},"method":"get","path":"/orgs/{org}/interaction-limits/pulls/creation-cap","fieldPath":"include_drafts","siteCount":4,"sampleSites":["GET /orgs/{org}/interaction-limits/pulls/creation-cap","PATCH /orgs/{org}/interaction-limits/pulls/creation-cap","GET /repos/{owner}/{repo}/interaction-limits/pulls/creation-cap","PATCH /repos/{owner}/{repo}/interaction-limits/pulls/creation-cap"]},{"id":"cmumzbzhm014psbnx3iystau1","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property include_drafts added","body":"No action needed unless it is required.\n\nAffects `PATCH /orgs/{org}/interaction-limits/pulls/creation-cap`.","patterns":{},"method":"patch","path":"/orgs/{org}/interaction-limits/pulls/creation-cap","fieldPath":"include_drafts","siteCount":2,"sampleSites":["PATCH /orgs/{org}/interaction-limits/pulls/creation-cap","PATCH /repos/{owner}/{repo}/interaction-limits/pulls/creation-cap"]}]},{"id":"cmumzbqet014ksbnxi3zdzrpc","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-17T16:08:43.000Z","commitSha":"649b8c4987bf79ab0c0451ec590360768c831e51","repo":"github/rest-api-description","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumzbu85014lsbnxiuk1flzo","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"permissions can now return \"triage_plus\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `permissions` on `repository-invitation` reachable from 4 operations.\n\nNew value: `triage_plus`.","patterns":{"ts":"switch (response.permissions) {\n  // existing branches …\n  // no branch for \"triage_plus\"\n  default:\n    throw new Error(\"unexpected permissions\");\n}"},"componentName":"repository-invitation","affectedOperations":4,"fieldPath":"permissions","detail":"can now return \"triage_plus\"","siteCount":1,"sampleSites":[]}]},{"id":"cmumzbg1t014dsbnxdea4b9re","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-16T21:57:32.000Z","commitSha":"29bcb5569205519836ea9abf0c954e737ae71029","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":2,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumzbott014esbnx5cx88w54","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"422 is now documented on /repos/{owner}/{repo}/commits","body":"An unhandled branch in your error handling.\n\nAffects `GET /repos/{owner}/{repo}/commits`.","patterns":{},"method":"get","path":"/repos/{owner}/{repo}/commits","detail":"422 is now documented","siteCount":3,"sampleSites":["GET /repos/{owner}/{repo}/commits","GET /repos/{owner}/{repo}/compare/{basehead}","GET /repos/{owner}/{repo}/pulls/{pull_number}"]},{"id":"cmumzbott014fsbnxgw7ozzr7","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"429 is now documented on /repos/{owner}/{repo}/commits","body":"An unhandled branch in your error handling.\n\nAffects `GET /repos/{owner}/{repo}/commits`.","patterns":{},"method":"get","path":"/repos/{owner}/{repo}/commits","detail":"429 is now documented","siteCount":2,"sampleSites":["GET /repos/{owner}/{repo}/commits","GET /repos/{owner}/{repo}/commits/{ref}"]}]},{"id":"cmumzb0l80143sbnxgks6qmqr","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-16T03:40:32.000Z","commitSha":"6b1cc863d7e4fa47acb90d8c424e3058af1bde6c","repo":"github/rest-api-description","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":1,"ADDITIVE":4,"COSMETIC":0},"changes":[{"id":"cmumzbe1p0146sbnx5v4d48hy","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"status can now return \"enterprise_enforced\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `status` on `code-security-configuration-repositories` reachable from 2 operations.\n\nNew value: `enterprise_enforced`.","patterns":{"ts":"switch (response.status) {\n  // existing branches …\n  // no branch for \"enterprise_enforced\"\n  default:\n    throw new Error(\"unexpected status\");\n}"},"componentName":"code-security-configuration-repositories","affectedOperations":13,"fieldPath":"status","detail":"can now return \"enterprise_enforced\"","siteCount":3,"sampleSites":[],"locations":["code-security-configuration-repositories.status","code-security-configuration.enforcement","code-security-configuration-for-repository.status"]},{"id":"cmumzbe1p0147sbnxvfjp8wo5","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"403 is now documented on /orgs/{org}/code-security/configurations/{configuration_id}/attach","body":"An unhandled branch in your error handling.\n\nAffects `POST /orgs/{org}/code-security/configurations/{configuration_id}/attach`.","patterns":{},"method":"post","path":"/orgs/{org}/code-security/configurations/{configuration_id}/attach","detail":"403 is now documented","siteCount":1,"sampleSites":["POST /orgs/{org}/code-security/configurations/{configuration_id}/attach"]},{"id":"cmumzbe1p0148sbnxwkvblbjj","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/actions/policies added","body":"No action needed.\n\nAffects `/orgs/{org}/actions/policies`.","patterns":{},"path":"/orgs/{org}/actions/policies","siteCount":1,"sampleSites":["/orgs/{org}/actions/policies"]},{"id":"cmumzbe1p0149sbnxbozxegsa","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/orgs/{org}/actions/policies/{policy_id} added","body":"No action needed.\n\nAffects `/orgs/{org}/actions/policies/{policy_id}`.","patterns":{},"path":"/orgs/{org}/actions/policies/{policy_id}","siteCount":1,"sampleSites":["/orgs/{org}/actions/policies/{policy_id}"]},{"id":"cmumzbe1p014asbnx0pc2ku28","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/repos/{owner}/{repo}/actions/policies added","body":"No action needed.\n\nAffects `/repos/{owner}/{repo}/actions/policies`.","patterns":{},"path":"/repos/{owner}/{repo}/actions/policies","siteCount":1,"sampleSites":["/repos/{owner}/{repo}/actions/policies"]},{"id":"cmumzbe1p014bsbnxagn7kepj","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/repos/{owner}/{repo}/actions/policies/{policy_id} added","body":"No action needed.\n\nAffects `/repos/{owner}/{repo}/actions/policies/{policy_id}`.","patterns":{},"path":"/repos/{owner}/{repo}/actions/policies/{policy_id}","siteCount":1,"sampleSites":["/repos/{owner}/{repo}/actions/policies/{policy_id}"]}]},{"id":"cmumz9d1k013ksbnxr6kprm3u","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-12T04:12:34.000Z","commitSha":"e16cc2584c6d32e8cd4d461759e1475e79327d6c","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":11,"COSMETIC":0},"changes":[],"responseFieldAdds":{"count":11,"fields":["issue.labels[].archived_by","label.archived_at","label.archived_by","pull-request-simple.labels[].archived_by","pull-request.labels[].archived_by","nullable-issue.labels[].archived_by","issue-search-result-item.labels[].archived_at","issue-search-result-item.labels[].archived_by","label-search-result-item.archived_at","label-search-result-item.archived_by","labels[].archived_by"]}},{"id":"cmumz8u97013gsbnxg15f86ho","providerSlug":"github","providerName":"GitHub","sourceKey":"rest","sourceLabel":"GitHub REST API","shippedAt":"2026-09-11T16:56:47.000Z","commitSha":"f5d6d10f019dd94650dec88de32057f299411304","repo":"github/rest-api-description","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":1,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumz9bmd013hsbnxj70dqes0","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"410 is now documented on /repos/{owner}/{repo}/dependabot/alerts/{alert_number}","body":"An unhandled branch in your error handling.\n\nAffects `GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}`.","patterns":{},"method":"get","path":"/repos/{owner}/{repo}/dependabot/alerts/{alert_number}","detail":"410 is now documented","siteCount":2,"sampleSites":["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}","PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"]}]},{"id":"cmumz6rh8010asbnxmgfz5bib","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-09-09T10:42:33.000Z","commitSha":"5aa7f31977ce5812f7b7bc1f46a38555ebaa2888","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz6u0i010bsbnxucocnvr1","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property MessageIntent added","body":"No action needed unless it is required.\n\nAffects `POST /2010-04-01/Accounts/{AccountSid}/Messages.json`.","patterns":{},"method":"post","path":"/2010-04-01/Accounts/{AccountSid}/Messages.json","fieldPath":"MessageIntent","siteCount":1,"sampleSites":["POST /2010-04-01/Accounts/{AccountSid}/Messages.json"]}]},{"id":"cmumytv4v00mhsbnxnztqjix0","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-08-26T17:57:44.000Z","commitSha":"30d3391cc09a0f67ad29bee002f570811b19e1da","repo":"stripe/openapi","counts":{"BREAKING":4,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":56,"COSMETIC":0},"changes":[{"id":"cmumyu3xw00mssbnxs4vi7uvi","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"allowed_payment_method_types can now return \"touch_n_go\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `allowed_payment_method_types[]` on `payment_intent` reachable from 579 operations.\n\nNew value: `touch_n_go`.","patterns":{"ts":"switch (response.allowed_payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"touch_n_go\"\n  default:\n    throw new Error(\"unexpected allowed_payment_method_types\");\n}"},"componentName":"payment_intent","affectedOperations":591,"fieldPath":"allowed_payment_method_types[]","detail":"can now return \"touch_n_go\"","siteCount":2,"sampleSites":[],"locations":["payment_intent.allowed_payment_method_types[]","setup_intent.allowed_payment_method_types[]"]},{"id":"cmumyu3xw00mrsbnxy6t1ad82","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"billie\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 457 operations.\n\nNew value: `billie`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"billie\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":494,"fieldPath":"payment_method_types[]","detail":"can now return \"billie\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumyu3xw00mysbnxkiuwrqd3","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field cryptogram removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure` reachable from 48 operations.","patterns":{"ts":"// response.cryptogram is now undefined\nconst cryptogram = response.cryptogram;","py":"# raises KeyError\ncryptogram = response[\"cryptogram\"]"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure","affectedOperations":48,"fieldPath":"cryptogram","siteCount":1,"sampleSites":[]},{"id":"cmumyu3xw00n0sbnxhcrp9fva","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"customer_update\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `portal_flows_flow` reachable from 1 operation.\n\nNew value: `customer_update`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"customer_update\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"portal_flows_flow","affectedOperations":1,"fieldPath":"type","detail":"can now return \"customer_update\"","siteCount":1,"sampleSites":[]},{"id":"cmumyu3xy00oisbnxjeonnxw3","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/billing/feedback_options added","body":"No action needed.\n\nAffects `/v1/billing/feedback_options`.","patterns":{},"path":"/v1/billing/feedback_options","siteCount":1,"sampleSites":["/v1/billing/feedback_options"]},{"id":"cmumyu3xy00ojsbnxmn9711co","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/billing/feedback_options/{id} added","body":"No action needed.\n\nAffects `/v1/billing/feedback_options/{id}`.","patterns":{},"path":"/v1/billing/feedback_options/{id}","siteCount":1,"sampleSites":["/v1/billing/feedback_options/{id}"]},{"id":"cmumyu3xy00oksbnxxot41xt9","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/billing/feedback_options/{id}/deactivate added","body":"No action needed.\n\nAffects `/v1/billing/feedback_options/{id}/deactivate`.","patterns":{},"path":"/v1/billing/feedback_options/{id}/deactivate","siteCount":1,"sampleSites":["/v1/billing/feedback_options/{id}/deactivate"]}],"responseFieldAdds":{"count":15,"fields":["cancellation_details.feedback_option","subscriptions_resource_payment_method_options.billie","invoices_payment_method_options.billie","payment_method_details_link.funding_source_group","payment_method_details_card_wallet_link.funding_source_group","payment_pages_private_card_payment_method_options_resource_restrictions.funding_types_blocked","portal_subscription_cancellation_reason.feedback_options","bank_connections_resource_link_account_session_filters.country","invoiceitem.frozen_fields","tax_product_registrations_resource_country_options_europe.igic","confirmation_token.metadata","connect_embedded_account_session_create_components.payment_method_settings","customer_session_resource_components.active_entitlements","customer_session_resource_components.customer_portal","portal_flows_flow.customer_update"]},"requestPropertyAdds":{"count":38,"fields":["payment_settings.payment_method_options.billie","cancellation_details.feedback_option","features.subscription_cancel.cancellation_reason.feedback_options","components.payment_method_settings","payment_method_options.card.restrictions.funding_types_blocked","components.active_entitlements","components.customer_portal","application_fee_amount","application_fee_percent","on_behalf_of","transfer_data","country_options.at.igic","country_options.be.igic","country_options.bg.igic","country_options.cy.igic","country_options.cz.igic","country_options.de.igic","country_options.dk.igic","country_options.ee.igic","country_options.es.igic","country_options.fi.igic","country_options.fr.igic","country_options.gr.igic","country_options.hr.igic","country_options.hu.igic","country_options.ie.igic","country_options.it.igic","country_options.lt.igic","country_options.lu.igic","country_options.lv.igic","country_options.mt.igic","country_options.nl.igic","country_options.pl.igic","country_options.pt.igic","country_options.ro.igic","country_options.se.igic","country_options.si.igic","country_options.sk.igic"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz6o5i00zxsbnxvxchc9h5","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-08-11T11:13:54.000Z","commitSha":"591755b562834daae097da2371e821f349c5f489","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":1,"ADDITIVE":9,"COSMETIC":0},"changes":[{"id":"cmumz6q160108sbnx8hupt7sw","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"409 is now documented on /2010-04-01/Accounts/{Sid}.json","body":"An unhandled branch in your error handling.\n\nAffects `POST /2010-04-01/Accounts/{Sid}.json`.","patterns":{},"method":"post","path":"/2010-04-01/Accounts/{Sid}.json","detail":"409 is now documented","siteCount":1,"sampleSites":["POST /2010-04-01/Accounts/{Sid}.json"]}],"requestPropertyAdds":{"count":9,"fields":["Passports","EmergencyAddress","EmergencyCallerLocation","EmergencyCallerPosition","EmergencyCity","EmergencyCountry","EmergencyName","EmergencyState","EmergencyZipCode"]}},{"id":"cmumz81o70131sbnxq32n9d7r","providerSlug":"twilio","providerName":"Twilio","sourceKey":"messaging_v1","sourceLabel":"Twilio Messaging v1","shippedAt":"2026-08-11T11:13:54.000Z","commitSha":"591755b562834daae097da2371e821f349c5f489","repo":"twilio/twilio-oai","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":0,"COSMETIC":0},"changes":[{"id":"cmumz82kk0132sbnx9hqulkdu","ruleId":"path.removed","severity":"BREAKING","directionFlip":false,"headline":"/v1/a2p/BrandRegistrations/{BrandRegistrationSid}/2fa removed","body":"Requests to this path now 404.\n\nAffects `/v1/a2p/BrandRegistrations/{BrandRegistrationSid}/2fa`.","patterns":{"ts":"// Was:\nawait client.request(\"GET\", \"/v1/a2p/BrandRegistrations/{BrandRegistrationSid}/2fa\");\n// Now: 404"},"path":"/v1/a2p/BrandRegistrations/{BrandRegistrationSid}/2fa","siteCount":1,"sampleSites":["/v1/a2p/BrandRegistrations/{BrandRegistrationSid}/2fa"]}]},{"id":"cmumytcus00k5sbnx0m8j119j","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-07-29T18:38:34.000Z","commitSha":"af5309cae53e5f666f9686dfed306d6d3b5fdc67","repo":"stripe/openapi","counts":{"BREAKING":10,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":43,"COSMETIC":0},"changes":[{"id":"cmumytta100kfsbnxekurprlp","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"ic_nif\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `invoices_resource_invoice_tax_id` reachable from 452 operations.\n\nNew value: `ic_nif`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"ic_nif\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"invoices_resource_invoice_tax_id","affectedOperations":554,"fieldPath":"type","detail":"can now return \"ic_nif\"","siteCount":4,"sampleSites":[],"locations":["invoices_resource_invoice_tax_id.type","payment_pages_checkout_session_tax_id.type","tax_id.type","tax_product_resource_customer_details_resource_tax_id.type"]},{"id":"cmumytta200l1sbnxu50gcl3c","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"mass_transit_parking_tax\", \"parking_tax\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `tax_product_registrations_resource_country_options_united_states` reachable from 4 operations.\n\nNew values: `mass_transit_parking_tax`, `parking_tax`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"mass_transit_parking_tax\"\n  // no branch for \"parking_tax\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"tax_product_registrations_resource_country_options_united_states","affectedOperations":520,"fieldPath":"type","detail":"can now return \"mass_transit_parking_tax\", \"parking_tax\"","siteCount":4,"sampleSites":[],"locations":["tax_product_registrations_resource_country_options_united_states.type","tax_product_resource_line_item_tax_rate_details.tax_type","tax_product_resource_tax_rate_details.tax_type","tax_rate.tax_type"]},{"id":"cmumytta100kqsbnxsggt4x8f","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"result can now return \"data_share_only\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `result` on `payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure` reachable from 48 operations.\n\nNew value: `data_share_only`.","patterns":{"ts":"switch (response.result) {\n  // existing branches …\n  // no branch for \"data_share_only\"\n  default:\n    throw new Error(\"unexpected result\");\n}"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure","affectedOperations":159,"fieldPath":"result","detail":"can now return \"data_share_only\"","siteCount":3,"sampleSites":[],"locations":["payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.result","three_d_secure_details.result","three_d_secure_details_charge.result"]},{"id":"cmumytta100kesbnxs44jfcu1","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"alipay\", \"mb_way\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 452 operations.\n\nNew values: `alipay`, `mb_way`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"alipay\"\n  // no branch for \"mb_way\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":489,"fieldPath":"payment_method_types[]","detail":"can now return \"alipay\", \"mb_way\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumytta000k7sbnx9lyxh2ut","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field iin removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `card` reachable from 572 operations.","patterns":{"ts":"// response.iin is now undefined\nconst iin = response.iin;","py":"# raises KeyError\niin = response[\"iin\"]"},"componentName":"card","affectedOperations":572,"fieldPath":"iin","siteCount":1,"sampleSites":[]},{"id":"cmumytta100kdsbnxl52wezau","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"supported_networks can now return \"chaps\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `supported_networks[]` on `funding_instructions_bank_transfer_financial_address` reachable from 399 operations.\n\nNew value: `chaps`.","patterns":{"ts":"switch (response.supported_networks[0]) {\n  // existing branches …\n  // no branch for \"chaps\"\n  default:\n    throw new Error(\"unexpected supported_networks\");\n}"},"componentName":"funding_instructions_bank_transfer_financial_address","affectedOperations":399,"fieldPath":"supported_networks[]","detail":"can now return \"chaps\"","siteCount":1,"sampleSites":[]},{"id":"cmumytta100kgsbnxj4w4ipn3","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"reason can now return \"stripe_internal_error\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `reason` on `issuing_authorization_request` reachable from 184 operations.\n\nNew value: `stripe_internal_error`.","patterns":{"ts":"switch (response.reason) {\n  // existing branches …\n  // no branch for \"stripe_internal_error\"\n  default:\n    throw new Error(\"unexpected reason\");\n}"},"componentName":"issuing_authorization_request","affectedOperations":184,"fieldPath":"reason","detail":"can now return \"stripe_internal_error\"","siteCount":1,"sampleSites":[]},{"id":"cmumytta100khsbnxzsusumdv","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"carrier can now return \"correos\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `carrier` on `issuing_card_shipping` reachable from 165 operations.\n\nNew value: `correos`.","patterns":{"ts":"switch (response.carrier) {\n  // existing branches …\n  // no branch for \"correos\"\n  default:\n    throw new Error(\"unexpected carrier\");\n}"},"componentName":"issuing_card_shipping","affectedOperations":165,"fieldPath":"carrier","detail":"can now return \"correos\"","siteCount":1,"sampleSites":[]},{"id":"cmumytta400lqsbnxvu3lmjow","ruleId":"request.enum.value-removed","severity":"BREAKING","directionFlip":false,"headline":"mode no longer accepts \"custom\"","body":"A value you may have hardcoded is now rejected.\n\nAffects `POST /v1/financial_connections/sessions`.","patterns":{"ts":"// sending \"custom\" for manual_entry.mode is now rejected"},"method":"post","path":"/v1/financial_connections/sessions","fieldPath":"manual_entry.mode","detail":"no longer accepts \"custom\"","siteCount":2,"sampleSites":["POST /v1/financial_connections/sessions","POST /v1/link_account_sessions"]},{"id":"cmumytta300ljsbnxhmd3hyux","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"proof_of_registration is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `documents.proof_of_registration` on `POST /v1/accounts`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/accounts\", {\n  // proof_of_registration is now ignored, not rejected\n  proof_of_registration: value,\n});"},"method":"post","path":"/v1/accounts","fieldPath":"documents.proof_of_registration","siteCount":1,"sampleSites":["POST /v1/accounts"]},{"id":"cmumytta500mesbnxbb8b7ei8","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/accounts/{account}/unreject added","body":"No action needed.\n\nAffects `/v1/accounts/{account}/unreject`.","patterns":{},"path":"/v1/accounts/{account}/unreject","siteCount":1,"sampleSites":["/v1/accounts/{account}/unreject"]},{"id":"cmumytta500mfsbnx2u1jgs57","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/payment_records added","body":"No action needed.\n\nAffects `/v1/payment_records`.","patterns":{},"path":"/v1/payment_records","siteCount":1,"sampleSites":["/v1/payment_records"]}],"responseFieldAdds":{"count":22,"fields":["setup_intent.allowed_payment_method_types","payment_intent.allowed_payment_method_types","legal_entity_company.administrative_address","legal_entity_company.principal_place_of_business","refund.payment_method","refund.customer","refund.customer_account","subscription_schedule_phase_configuration.trial","payment_flows_private_payment_methods_payco_payment_method_options.setup_future_usage","payment_flows_private_payment_methods_samsung_pay_payment_method_options.setup_future_usage","topup.initiated_by","topup.payment_method","topup.payment_method_options","issuing_card_shipping.business_name","checkout_payco_payment_method_options.setup_future_usage","checkout_samsung_pay_payment_method_options.setup_future_usage","bank_connections_resource_link_account_session_manual_entry.mode","tax_product_registrations_resource_country_options_united_states.mass_transit_parking_tax","tax_product_registrations_resource_country_options_united_states.parking_tax","connect_embedded_disputes_list_features.smart_disputes_management","connect_embedded_payment_disputes_features.smart_disputes_management","connect_embedded_payments_features.smart_disputes_management"]},"requestPropertyAdds":{"count":19,"fields":["allowed_payment_method_types","payment_method_options.payco.setup_future_usage","payment_method_options.samsung_pay.setup_future_usage","company.administrative_address","company.principal_place_of_business","shipping.business_name","radar_options.referrer","components.disputes_list.features.smart_disputes_management","components.payment_details.features.smart_disputes_management","components.payment_disputes.features.smart_disputes_management","components.payments.features.smart_disputes_management","settings.sepa_debit_payments","payouts_action","subscription_details.metadata","consent_collection","country_options.us.mass_transit_parking_tax","country_options.us.parking_tax","account.company.administrative_address","account.company.principal_place_of_business"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumyszrg00iwsbnxc3suag28","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-07-01T20:55:58.000Z","commitSha":"7061322ce765ba59b40b704e7d8198d6bb24955c","repo":"stripe/openapi","counts":{"BREAKING":2,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":28,"COSMETIC":0},"changes":[{"id":"cmumytaci00jbsbnxhhfkl2uh","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"bank can now return \"bnp_paribas\", \"citibank\", \"mbsb_bank\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `bank` on `payment_method_details_fpx` reachable from 262 operations.\n\nNew values: `bnp_paribas`, `citibank`, `mbsb_bank`.","patterns":{"ts":"switch (response.bank) {\n  // existing branches …\n  // no branch for \"bnp_paribas\"\n  // no branch for \"citibank\"\n  // no branch for \"mbsb_bank\"\n  default:\n    throw new Error(\"unexpected bank\");\n}"},"componentName":"payment_method_details_fpx","affectedOperations":544,"fieldPath":"bank","detail":"can now return \"bnp_paribas\", \"citibank\", \"mbsb_bank\"","siteCount":2,"sampleSites":[],"locations":["payment_method_details_fpx.bank","payment_method_fpx.bank"]},{"id":"cmumytaci00jdsbnx08oo9b3q","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"dynamic_tax_rates is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `line_items[].dynamic_tax_rates` on `POST /v1/checkout/sessions`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/checkout/sessions\", {\n  // dynamic_tax_rates is now ignored, not rejected\n  dynamic_tax_rates: value,\n});"},"method":"post","path":"/v1/checkout/sessions","fieldPath":"line_items[].dynamic_tax_rates","siteCount":1,"sampleSites":["POST /v1/checkout/sessions"]}],"responseFieldAdds":{"count":14,"fields":["invoice_setting_subscription_schedule_setting.custom_fields","invoice_setting_subscription_schedule_setting.description","invoice_setting_subscription_schedule_setting.footer","invoice_setting_subscription_schedule_phase_setting.custom_fields","invoice_setting_subscription_schedule_phase_setting.description","invoice_setting_subscription_schedule_phase_setting.footer","dispute_payment_method_details_card.network","invoice_setting_quote_setting.custom_fields","invoice_setting_quote_setting.description","invoice_setting_quote_setting.footer","financial_connections.session.manual_entry","bank_connections_resource_link_account_session_filters.require_payment_method_support","financial_connections.session.bank_account_token","financial_connections.session.limits"]},"requestPropertyAdds":{"count":14,"fields":["filters.require_payment_method_support","limits","manual_entry","invoice_settings.custom_fields","invoice_settings.description","invoice_settings.footer","default_settings.invoice_settings.custom_fields","default_settings.invoice_settings.description","default_settings.invoice_settings.footer","phases[].invoice_settings.custom_fields","phases[].invoice_settings.description","phases[].invoice_settings.footer","payment_intent_data.setup_future_usage","shipping_options"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumysqw000gwsbnxhqcv64uh","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-06-23T22:37:50.000Z","commitSha":"f4ac6d9a7f40730f7f50c8c1d76c27f80178e4f5","repo":"stripe/openapi","counts":{"BREAKING":10,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":31,"COSMETIC":0},"changes":[{"id":"cmumysxtw00h4sbnxb362dpb1","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"satispay\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 451 operations.\n\nNew value: `satispay`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"satispay\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":488,"fieldPath":"payment_method_types[]","detail":"can now return \"satispay\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumysxtw00gxsbnx3u6aqr94","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"tax_fund\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `balance_transaction` reachable from 530 operations.\n\nNew value: `tax_fund`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"tax_fund\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"balance_transaction","affectedOperations":530,"fieldPath":"type","detail":"can now return \"tax_fund\"","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hasbnx0f3gnvkw","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"network can now return \"sui\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `network` on `payment_method_details_crypto` reachable from 262 operations.\n\nNew value: `sui`.","patterns":{"ts":"switch (response.network) {\n  // existing branches …\n  // no branch for \"sui\"\n  default:\n    throw new Error(\"unexpected network\");\n}"},"componentName":"payment_method_details_crypto","affectedOperations":262,"fieldPath":"network","detail":"can now return \"sui\"","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hbsbnxwysdv1p6","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"token_currency can now return \"usdsui\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `token_currency` on `payment_method_details_crypto` reachable from 262 operations.\n\nNew value: `usdsui`.","patterns":{"ts":"switch (response.token_currency) {\n  // existing branches …\n  // no branch for \"usdsui\"\n  default:\n    throw new Error(\"unexpected token_currency\");\n}"},"componentName":"payment_method_details_crypto","affectedOperations":262,"fieldPath":"token_currency","detail":"can now return \"usdsui\"","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00h0sbnx6a0sw3f8","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"enhanced_eligibility_types can now return \"mastercard_compliance\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `enhanced_eligibility_types[]` on `dispute` reachable from 169 operations.\n\nNew value: `mastercard_compliance`.","patterns":{"ts":"switch (response.enhanced_eligibility_types[0]) {\n  // existing branches …\n  // no branch for \"mastercard_compliance\"\n  default:\n    throw new Error(\"unexpected enhanced_eligibility_types\");\n}"},"componentName":"dispute","affectedOperations":169,"fieldPath":"enhanced_eligibility_types[]","detail":"can now return \"mastercard_compliance\"","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hgsbnxjyk11ub4","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field description removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations.","patterns":{"ts":"// response.description is now undefined\nconst description = response.description;","py":"# raises KeyError\ndescription = response[\"description\"]"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"description","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hhsbnx1ytq95t5","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field iin removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations.","patterns":{"ts":"// response.iin is now undefined\nconst iin = response.iin;","py":"# raises KeyError\niin = response[\"iin\"]"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"iin","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hisbnxmseu0ho3","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field issuer removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations.","patterns":{"ts":"// response.issuer is now undefined\nconst issuer = response.issuer;","py":"# raises KeyError\nissuer = response[\"issuer\"]"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"issuer","siteCount":1,"sampleSites":[]},{"id":"cmumysxtw00hjsbnxwi6nbzah","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field stored_credential_usage removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations.","patterns":{"ts":"// response.stored_credential_usage is now undefined\nconst stored_credential_usage = response.stored_credential_usage;","py":"# raises KeyError\nstored_credential_usage = response[\"stored_credential_usage\"]"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"stored_credential_usage","siteCount":1,"sampleSites":[]},{"id":"cmumysxtx00hrsbnxjz68x1dz","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"status can now return \"validated\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `status` on `verification_session_redaction` reachable from 6 operations.\n\nNew value: `validated`.","patterns":{"ts":"switch (response.status) {\n  // existing branches …\n  // no branch for \"validated\"\n  default:\n    throw new Error(\"unexpected status\");\n}"},"componentName":"verification_session_redaction","affectedOperations":6,"fieldPath":"status","detail":"can now return \"validated\"","siteCount":1,"sampleSites":[]}],"responseFieldAdds":{"count":19,"fields":["payment_method_bizum.buyer_id","payment_method_blik.buyer_id","payment_method_pix.fingerprint","subscriptions_resource_subscription_invoice_settings.custom_fields","subscriptions_resource_subscription_invoice_settings.description","subscriptions_resource_subscription_invoice_settings.footer","setup_attempt_payment_method_details.satispay","payment_intent_payment_method_options.sunbit","payment_method_options_satispay.setup_future_usage","setup_attempt_payment_method_details_pix.fingerprint","payment_method_details_bizum.buyer_id","payment_method_details_card.transaction_link_id","payment_method_details_pix.fingerprint","dispute_enhanced_eligibility.mastercard_compliance","dispute_enhanced_evidence.mastercard_compliance","payment_method_details_payment_record_bizum.buyer_id","checkout_session_payment_method_options.sunbit","checkout_session_payment_method_options.wechat_pay","financial_connections.account.status_details"]},"requestPropertyAdds":{"count":12,"fields":["card.network_token","card.encrypted","card.swipe_data","payment_method_options.sunbit","invoice_settings.custom_fields","invoice_settings.description","invoice_settings.footer","payment_method_options.satispay.setup_future_usage","evidence.enhanced_evidence.mastercard_compliance","subscription_data.billing_cycle_anchor_config","payment_method","payment_method_options"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumys15i00d0sbnx2e8sw34z","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-05-23T11:56:50.000Z","commitSha":"6a1ea0ab2edca83b9fdeeac76355231745788cb4","repo":"stripe/openapi","counts":{"BREAKING":14,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":69,"COSMETIC":0},"changes":[{"id":"cmumyscqa00d7sbnxnuxwamya","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"bizum\", \"scalapay\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `confirmation_tokens_resource_payment_method_preview` reachable from 2 operations.\n\nNew values: `bizum`, `scalapay`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"bizum\"\n  // no branch for \"scalapay\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"confirmation_tokens_resource_payment_method_preview","affectedOperations":587,"fieldPath":"type","detail":"can now return \"bizum\", \"scalapay\"","siteCount":4,"sampleSites":[],"locations":["confirmation_tokens_resource_payment_method_preview.type","payment_intent.excluded_payment_method_types[]","payment_method.type","setup_intent.excluded_payment_method_types[]"]},{"id":"cmumyscqb00dcsbnxrv17zdzm","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"twint\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 451 operations.\n\nNew value: `twint`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"twint\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":488,"fieldPath":"payment_method_types[]","detail":"can now return \"twint\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumyscqa00d6sbnxzvwk9twb","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"setup_future_usage can now return \"off_session\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `setup_future_usage` on `checkout_twint_payment_method_options` reachable from 15 operations.\n\nNew value: `off_session`.","patterns":{"ts":"switch (response.setup_future_usage) {\n  // existing branches …\n  // no branch for \"off_session\"\n  default:\n    throw new Error(\"unexpected setup_future_usage\");\n}"},"componentName":"checkout_twint_payment_method_options","affectedOperations":404,"fieldPath":"setup_future_usage","detail":"can now return \"off_session\"","siteCount":2,"sampleSites":[],"locations":["checkout_twint_payment_method_options.setup_future_usage","payment_method_options_twint.setup_future_usage"]},{"id":"cmumyscqa00dasbnx927z6q20","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"device_type can now return \"simulated_verifone_m425\", \"simulated_verifone_p630\", \"simulated_verifone_ux700\", \"simulated_verifone_v660p\", \"verifone_m425\", \"verifone_p630\", \"verifone_ux700\", \"verifone_v660p\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `device_type` on `deleted_terminal.reader` reachable from 3 operations.\n\nNew values: `simulated_verifone_m425`, `simulated_verifone_p630`, `simulated_verifone_ux700`, `simulated_verifone_v660p`, `verifone_m425`, `verifone_p630`, `verifone_ux700`, `verifone_v660p`.","patterns":{"ts":"switch (response.device_type) {\n  // existing branches …\n  // no branch for \"simulated_verifone_m425\"\n  // no branch for \"simulated_verifone_p630\"\n  // no branch for \"simulated_verifone_ux700\"\n  // no branch for \"simulated_verifone_v660p\"\n  // no branch for \"verifone_m425\"\n  // no branch for \"verifone_p630\"\n  // no branch for \"verifone_ux700\"\n  // no branch for \"verifone_v660p\"\n  default:\n    throw new Error(\"unexpected device_type\");\n}"},"componentName":"deleted_terminal.reader","affectedOperations":15,"fieldPath":"device_type","detail":"can now return \"simulated_verifone_m425\", \"simulated_verifone_p630\", \"simulated_verifone_ux700\", \"simulated_verifone_v660p\", \"verifone_m425\", \"verifone_p630\", \"verifone_ux700\", \"verifone_v660p\"","siteCount":2,"sampleSites":[],"locations":["deleted_terminal.reader.device_type","terminal.reader.device_type"]},{"id":"cmumyscqb00djsbnxg3mgcc7d","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"bizum\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `payment_link` reachable from 19 operations.\n\nNew value: `bizum`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"bizum\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"payment_link","affectedOperations":19,"fieldPath":"payment_method_types[]","detail":"can now return \"bizum\"","siteCount":1,"sampleSites":[]},{"id":"cmumyscqc00emsbnxhmw6ydpm","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"print_content\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `terminal_reader_reader_resource_reader_action` reachable from 15 operations.\n\nNew value: `print_content`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"print_content\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"terminal_reader_reader_resource_reader_action","affectedOperations":15,"fieldPath":"type","detail":"can now return \"print_content\"","siteCount":1,"sampleSites":[]},{"id":"cmumyscqb00ddsbnxuyn52n5n","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"network can now return \"mastercard\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `network` on `issuing.settlement` reachable from 4 operations.\n\nNew value: `mastercard`.","patterns":{"ts":"switch (response.network) {\n  // existing branches …\n  // no branch for \"mastercard\"\n  default:\n    throw new Error(\"unexpected network\");\n}"},"componentName":"issuing.settlement","affectedOperations":4,"fieldPath":"network","detail":"can now return \"mastercard\"","siteCount":1,"sampleSites":[]},{"id":"cmumyscqd00gksbnxrn8fg3qt","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"metadata is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `metadata` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // metadata is now ignored, not rejected\n  metadata: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"metadata","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00gisbnxmfbzabcf","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"amount is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `amount` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // amount is now ignored, not rejected\n  amount: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"amount","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00gjsbnx75uaphvq","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"charge is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `charge` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // charge is now ignored, not rejected\n  charge: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"charge","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00glsbnxtzq3cnd9","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"payment_intent is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `payment_intent` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // payment_intent is now ignored, not rejected\n  payment_intent: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"payment_intent","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00gmsbnxnnrc2wdy","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"reason is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `reason` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // reason is now ignored, not rejected\n  reason: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"reason","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00gnsbnxdultw9gb","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"refund_application_fee is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `refund_application_fee` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // refund_application_fee is now ignored, not rejected\n  refund_application_fee: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"refund_application_fee","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqd00gosbnxfn9feu4a","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"reverse_transfer is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `reverse_transfer` on `POST /v1/terminal/refunds`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/refunds\", {\n  // reverse_transfer is now ignored, not rejected\n  reverse_transfer: value,\n});"},"method":"post","path":"/v1/terminal/refunds","fieldPath":"reverse_transfer","siteCount":1,"sampleSites":["POST /v1/terminal/refunds"]},{"id":"cmumyscqb00dvsbnx1pfz5v8u","ruleId":"response.property.type-narrowed","severity":"ADDITIVE","directionFlip":false,"headline":"Response type narrowed","body":"A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.\n\nAffects `payments_primitives_payment_records_resource_payment_method_alma_details_resource_installments` reachable from 49 operations.","patterns":{},"componentName":"payments_primitives_payment_records_resource_payment_method_alma_details_resource_installments","affectedOperations":49,"fieldPath":"count","detail":"integer|null → integer","siteCount":1,"sampleSites":[]},{"id":"cmumyscqd00fosbnxpikkm9fg","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"active is now optional","body":"No action needed.\n\nAffects `GET /v1/payment_method_configurations`.","patterns":{},"method":"get","path":"/v1/payment_method_configurations","fieldPath":"active","siteCount":1,"sampleSites":["GET /v1/payment_method_configurations"]}],"responseFieldAdds":{"count":43,"fields":["payment_method.bizum","payment_method.scalapay","account_capabilities.bizum_payments","account_capabilities.scalapay_payments","subscription.billing_schedules","payment_method_details.bizum","payment_method_details.scalapay","invoice.amount_paid_off_stripe","subscriptions_resource_pending_update.discount","subscriptions_resource_pending_update.discounts","subscriptions_resource_pending_update.metadata","subscription_item.billed_until","setup_attempt_payment_method_details.twint","payment_intent_next_action.blik_authorize","payment_intent_payment_method_options.bizum","payment_intent_payment_method_options.scalapay","transfer_data.description","transfer_data.metadata","transfer_data.payment_data","subscription_schedule_add_invoice_item.discountable","payment_method_details_twint.mandate","refund_destination_details.scalapay","mandate_payment_method_details.twint","setup_intent_next_action.blik_authorize","setup_intent_payment_method_options.bizum","payments_primitives_payment_records_resource_payment_method_details.bizum","payments_primitives_payment_records_resource_payment_method_details.scalapay","payment_method_details_payment_record_twint.mandate","payment_link.payment_method_options","checkout_session_payment_method_options.scalapay","terminal_reader_reader_resource_reader_action.api_error","terminal_reader_reader_resource_reader_action.print_content","payment_method_configuration.bizum","payment_method_configuration.scalapay","proration_details.credited_items","terminal.configuration.verifone_m425","terminal.configuration.verifone_p630","terminal.configuration.verifone_ux700","terminal.configuration.verifone_v660p","balance_settings_resource_payouts.automatic_transfer_rules_by_currency","balance_settings_resource_settlement_timing.start_of_day","confirmation_tokens_resource_payment_method_preview.bizum","confirmation_tokens_resource_payment_method_preview.scalapay"]},"requestPropertyAdds":{"count":24,"fields":["payment_method_data.bizum","payment_method_data.scalapay","payment_method_options.bizum","add_invoice_items[].discountable","payment_method_options.scalapay","transfer_data.description","bizum","scalapay","capabilities.bizum_payments","capabilities.scalapay_payments","transfer_data.metadata","transfer_data.payment_data","payment_method_options","phases[].add_invoice_items[].discountable","billing_schedules","verifone_m425","verifone_p630","verifone_ux700","verifone_v660p","schedule_details.phases[].add_invoice_items[].discountable","subscription_details.billing_schedules","payments.payouts.automatic_transfer_rules_by_currency","payments.settlement_timing.start_of_day","customer"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz6kbw00zqsbnxmv87c7bh","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-05-06T07:42:34.000Z","commitSha":"bb6288e9f540d2d63540bbaadf6b73fd262c2df3","repo":"twilio/twilio-oai","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":2,"COSMETIC":0},"changes":[{"id":"cmumz6mld00ztsbnxzbs4oknm","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"ConfigurationId is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `ConfigurationId` on `POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json\", {\n  // ConfigurationId is now ignored, not rejected\n  ConfigurationId: value,\n});"},"method":"post","path":"/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json","fieldPath":"ConfigurationId","siteCount":1,"sampleSites":["POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json"]}],"requestPropertyAdds":{"count":2,"fields":["RecordingConfigurationId","TranscriptionConfigurationId"]}},{"id":"cmumyrmqu009vsbnxnt5msqej","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-04-20T18:28:01.000Z","commitSha":"d771243fbfea51def29cebe79e6c458dda032dbd","repo":"stripe/openapi","counts":{"BREAKING":10,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":50,"COSMETIC":0},"changes":[{"id":"cmumyrxdj00a3sbnxybxzp0ik","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"sunbit\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `confirmation_tokens_resource_payment_method_preview` reachable from 2 operations.\n\nNew value: `sunbit`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"sunbit\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"confirmation_tokens_resource_payment_method_preview","affectedOperations":587,"fieldPath":"type","detail":"can now return \"sunbit\"","siteCount":5,"sampleSites":[],"locations":["confirmation_tokens_resource_payment_method_preview.type","payment_intent.excluded_payment_method_types[]","payment_link.payment_method_types[]","payment_method.type","setup_intent.excluded_payment_method_types[]"]},{"id":"cmumyrxdj00absbnxg5srwi8p","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"fo_vat\", \"gi_tin\", \"it_cf\", \"py_ruc\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `invoices_resource_invoice_tax_id` reachable from 451 operations.\n\nNew values: `fo_vat`, `gi_tin`, `it_cf`, `py_ruc`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"fo_vat\"\n  // no branch for \"gi_tin\"\n  // no branch for \"it_cf\"\n  // no branch for \"py_ruc\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"invoices_resource_invoice_tax_id","affectedOperations":553,"fieldPath":"type","detail":"can now return \"fo_vat\", \"gi_tin\", \"it_cf\", \"py_ruc\"","siteCount":4,"sampleSites":[],"locations":["invoices_resource_invoice_tax_id.type","payment_pages_checkout_session_tax_id.type","tax_id.type","tax_product_resource_customer_details_resource_tax_id.type"]},{"id":"cmumyrxdj00aasbnxdxmvobdr","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"pix\", \"upi\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 451 operations.\n\nNew values: `pix`, `upi`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"pix\"\n  // no branch for \"upi\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":488,"fieldPath":"payment_method_types[]","detail":"can now return \"pix\", \"upi\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumyrxdj00a1sbnx51in76s1","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"setup_future_usage can now return \"off_session\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `setup_future_usage` on `checkout_pix_payment_method_options` reachable from 15 operations.\n\nNew value: `off_session`.","patterns":{"ts":"switch (response.setup_future_usage) {\n  // existing branches …\n  // no branch for \"off_session\"\n  default:\n    throw new Error(\"unexpected setup_future_usage\");\n}"},"componentName":"checkout_pix_payment_method_options","affectedOperations":404,"fieldPath":"setup_future_usage","detail":"can now return \"off_session\"","siteCount":2,"sampleSites":[],"locations":["checkout_pix_payment_method_options.setup_future_usage","payment_method_options_pix.setup_future_usage"]},{"id":"cmumyrxdk00adsbnxzdfvl6fd","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"cancellation_reason can now return \"fulfillment_error\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `cancellation_reason` on `issuing.card` reachable from 199 operations.\n\nNew value: `fulfillment_error`.","patterns":{"ts":"switch (response.cancellation_reason) {\n  // existing branches …\n  // no branch for \"fulfillment_error\"\n  default:\n    throw new Error(\"unexpected cancellation_reason\");\n}"},"componentName":"issuing.card","affectedOperations":199,"fieldPath":"cancellation_reason","detail":"can now return \"fulfillment_error\"","siteCount":2,"sampleSites":[],"locations":["issuing.card.cancellation_reason","issuing.card.replacement_reason"]},{"id":"cmumyrxdj009ysbnxjsp6dd9w","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"fee_credit_funding\", \"inbound_transfer\", \"inbound_transfer_reversal\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `balance_transaction` reachable from 530 operations.\n\nNew values: `fee_credit_funding`, `inbound_transfer`, `inbound_transfer_reversal`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"fee_credit_funding\"\n  // no branch for \"inbound_transfer\"\n  // no branch for \"inbound_transfer_reversal\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"balance_transaction","affectedOperations":530,"fieldPath":"type","detail":"can now return \"fee_credit_funding\", \"inbound_transfer\", \"inbound_transfer_reversal\"","siteCount":1,"sampleSites":[]},{"id":"cmumyrxdk00apsbnxl4b18yac","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"capture_method can now return \"automatic_delayed\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `capture_method` on `payment_intent_type_specific_payment_method_options_client` reachable from 404 operations.\n\nNew value: `automatic_delayed`.","patterns":{"ts":"switch (response.capture_method) {\n  // existing branches …\n  // no branch for \"automatic_delayed\"\n  default:\n    throw new Error(\"unexpected capture_method\");\n}"},"componentName":"payment_intent_type_specific_payment_method_options_client","affectedOperations":404,"fieldPath":"capture_method","detail":"can now return \"automatic_delayed\"","siteCount":1,"sampleSites":[]},{"id":"cmumyrxdk00awsbnxt7thvn5i","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"token_currency can now return \"phantom_cash\", \"usdt\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `token_currency` on `payment_method_details_crypto` reachable from 262 operations.\n\nNew values: `phantom_cash`, `usdt`.","patterns":{"ts":"switch (response.token_currency) {\n  // existing branches …\n  // no branch for \"phantom_cash\"\n  // no branch for \"usdt\"\n  default:\n    throw new Error(\"unexpected token_currency\");\n}"},"componentName":"payment_method_details_crypto","affectedOperations":262,"fieldPath":"token_currency","detail":"can now return \"phantom_cash\", \"usdt\"","siteCount":1,"sampleSites":[]},{"id":"cmumyrxdl00bdsbnxf32i460b","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"item_type can now return \"account\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `item_type` on `radar.value_list` reachable from 4 operations.\n\nNew value: `account`.","patterns":{"ts":"switch (response.item_type) {\n  // existing branches …\n  // no branch for \"account\"\n  default:\n    throw new Error(\"unexpected item_type\");\n}"},"componentName":"radar.value_list","affectedOperations":4,"fieldPath":"item_type","detail":"can now return \"account\"","siteCount":1,"sampleSites":[]},{"id":"cmumyrxdj00a7sbnxztx7zmrk","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"risk_level can now return \"low\", \"not_assessed\", \"unknown\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `risk_level` on `insights_resources_payment_evaluation_signal_v2` reachable from 1 operation.\n\nNew values: `low`, `not_assessed`, `unknown`.","patterns":{"ts":"switch (response.risk_level) {\n  // existing branches …\n  // no branch for \"low\"\n  // no branch for \"not_assessed\"\n  // no branch for \"unknown\"\n  default:\n    throw new Error(\"unexpected risk_level\");\n}"},"componentName":"insights_resources_payment_evaluation_signal_v2","affectedOperations":1,"fieldPath":"risk_level","detail":"can now return \"low\", \"not_assessed\", \"unknown\"","siteCount":1,"sampleSites":[]}],"responseFieldAdds":{"count":36,"fields":["payment_method.sunbit","setup_intent.managed_payments","payment_intent.managed_payments","account_capabilities.app_distribution","account_capabilities.sunbit_payments","subscription.managed_payments","payment_method_details.sunbit","setup_attempt_payment_method_details.pix","payment_intent_next_action.klarna_display_qr_code","subscriptions_resource_payment_method_options.pix","subscriptions_resource_payment_method_options.upi","payment_method_options_pix.mandate_options","invoices_payment_method_options.upi","invoices_payment_method_options.pix","payment_method_details_klarna.location","payment_method_details_klarna.reader","payment_method_details_pix.mandate","mandate_multi_use.amount","mandate_multi_use.currency","mandate_payment_method_details.pix","issuing.authorization.card_presence","issuing_card_authorization_controls.allowed_card_presences","issuing_card_authorization_controls.blocked_card_presences","issuing_cardholder_authorization_controls.allowed_card_presences","issuing_cardholder_authorization_controls.blocked_card_presences","setup_intent_next_action.pix_display_qr_code","setup_intent_payment_method_options.pix","payments_primitives_payment_records_resource_payment_method_details.sunbit","payment_method_details_payment_record_pix.mandate","payment_link.managed_payments","checkout.session.managed_payments","checkout_pix_payment_method_options.mandate_options","payment_method_configuration.sunbit","confirmation_tokens_resource_payment_method_preview.sunbit","connect_embedded_account_session_create_components.balance_report","connect_embedded_account_session_create_components.payout_reconciliation_report"]},"requestPropertyAdds":{"count":14,"fields":["payment_method_data.sunbit","payment_settings.payment_method_options.pix","payment_settings.payment_method_options.upi","payment_method_options.pix.mandate_options","spending_controls.allowed_card_presences","spending_controls.blocked_card_presences","sunbit","payment_method_options.pix","managed_payments","capabilities.app_distribution","capabilities.sunbit_payments","components.balance_report","components.payout_reconciliation_report","amount_to_confirm"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumyqjl0009qsbnx9eoigon1","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-03-23T20:52:43.000Z","commitSha":"a54c3888eb6f227e15eeaa97d0adbd561b01e2c2","repo":"stripe/openapi","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumyrjyx009tsbnx6yzjsc8j","ruleId":"request.enum.value-removed","severity":"BREAKING","directionFlip":false,"headline":"ui_mode no longer accepts \"custom\", \"embedded\", \"form\", \"hosted\"","body":"A value you may have hardcoded is now rejected.\n\nAffects `POST /v1/checkout/sessions`.","patterns":{"ts":"// sending \"custom\" for ui_mode is now rejected\n// sending \"embedded\" for ui_mode is now rejected\n// sending \"form\" for ui_mode is now rejected\n// sending \"hosted\" for ui_mode is now rejected"},"method":"post","path":"/v1/checkout/sessions","fieldPath":"ui_mode","detail":"no longer accepts \"custom\", \"embedded\", \"form\", \"hosted\"","siteCount":1,"sampleSites":["POST /v1/checkout/sessions"]},{"id":"cmumyrjyx009ssbnxedadt4fs","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field presentment_details added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `subscription` reachable from 548 operations.","patterns":{},"componentName":"subscription","affectedOperations":548,"fieldPath":"presentment_details","siteCount":1,"sampleSites":[]}],"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumyq0t10072sbnxt20yd68s","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-03-17T22:39:37.000Z","commitSha":"cfe95bf4b8074b8d8957b8ed9b10988e4fa0d9c3","repo":"stripe/openapi","counts":{"BREAKING":16,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":38,"COSMETIC":0},"changes":[{"id":"cmumyqafv0079sbnxkg48sbth","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"upi\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `confirmation_tokens_resource_payment_method_preview` reachable from 2 operations.\n\nNew value: `upi`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"upi\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"confirmation_tokens_resource_payment_method_preview","affectedOperations":587,"fieldPath":"type","detail":"can now return \"upi\"","siteCount":5,"sampleSites":[],"locations":["confirmation_tokens_resource_payment_method_preview.type","payment_intent.excluded_payment_method_types[]","payment_link.payment_method_types[]","payment_method.type","setup_intent.excluded_payment_method_types[]"]},{"id":"cmumyqafy009jsbnxc2zvpzif","ruleId":"request.property.became-required","severity":"BREAKING","directionFlip":false,"headline":"level is now required","body":"Partial payloads are rejected.\n\nAffects `POST /v1/test_helpers/issuing/authorizations`.","patterns":{"ts":"await client.post(\"/v1/test_helpers/issuing/authorizations\", {\n  // …\n  level: /* now required */,\n});"},"method":"post","path":"/v1/test_helpers/issuing/authorizations","fieldPath":"risk_assessment.card_testing_risk.level","siteCount":2,"sampleSites":["POST /v1/test_helpers/issuing/authorizations","POST /v1/test_helpers/issuing/authorizations"],"locations":["POST /v1/test_helpers/issuing/authorizations · risk_assessment.card_testing_risk.level","POST /v1/test_helpers/issuing/authorizations · risk_assessment.merchant_dispute_risk.level"]},{"id":"cmumyqafy009ksbnxh9iwjds3","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"risk_level is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `risk_assessment.card_testing_risk.risk_level` on `POST /v1/test_helpers/issuing/authorizations`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/test_helpers/issuing/authorizations\", {\n  // risk_level is now ignored, not rejected\n  risk_level: value,\n});"},"method":"post","path":"/v1/test_helpers/issuing/authorizations","fieldPath":"risk_assessment.card_testing_risk.risk_level","siteCount":2,"sampleSites":["POST /v1/test_helpers/issuing/authorizations","POST /v1/test_helpers/issuing/authorizations"],"locations":["POST /v1/test_helpers/issuing/authorizations · risk_assessment.card_testing_risk.risk_level","POST /v1/test_helpers/issuing/authorizations · risk_assessment.merchant_dispute_risk.risk_level"]},{"id":"cmumyqafv0074sbnxvucqketk","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"reason can now return \"canceled_by_retention_policy\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `reason` on `cancellation_details` reachable from 488 operations.\n\nNew value: `canceled_by_retention_policy`.","patterns":{"ts":"switch (response.reason) {\n  // existing branches …\n  // no branch for \"canceled_by_retention_policy\"\n  default:\n    throw new Error(\"unexpected reason\");\n}"},"componentName":"cancellation_details","affectedOperations":488,"fieldPath":"reason","detail":"can now return \"canceled_by_retention_policy\"","siteCount":1,"sampleSites":[]},{"id":"cmumyqafw007qsbnxonue24mp","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"network can now return \"tempo\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `network` on `payment_method_details_crypto` reachable from 262 operations.\n\nNew value: `tempo`.","patterns":{"ts":"switch (response.network) {\n  // existing branches …\n  // no branch for \"tempo\"\n  default:\n    throw new Error(\"unexpected network\");\n}"},"componentName":"payment_method_details_crypto","affectedOperations":262,"fieldPath":"network","detail":"can now return \"tempo\"","siteCount":1,"sampleSites":[]},{"id":"cmumyqafv007esbnxevj5fwrm","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field card_reference_id is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `card_reference_id` on `issuing_network_token_visa` reachable from 147 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.card_reference_id may now be absent or null\nconst card_reference_id = response.card_reference_id ?? fallback;","py":"card_reference_id = response.get(\"card_reference_id\")"},"componentName":"issuing_network_token_visa","affectedOperations":147,"fieldPath":"card_reference_id","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafw007rsbnxxp8zj97e","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field brand is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `brand` on `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.brand may now be absent or null\nconst brand = response.brand ?? fallback;","py":"brand = response.get(\"brand\")"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"brand","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafw007ssbnx961ytk7d","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field exp_month is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `exp_month` on `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.exp_month may now be absent or null\nconst exp_month = response.exp_month ?? fallback;","py":"exp_month = response.get(\"exp_month\")"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"exp_month","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafw007tsbnxfztfi3at","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field exp_year is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `exp_year` on `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.exp_year may now be absent or null\nconst exp_year = response.exp_year ?? fallback;","py":"exp_year = response.get(\"exp_year\")"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"exp_year","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafw007usbnxqkxn1olt","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field funding is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `funding` on `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.funding may now be absent or null\nconst funding = response.funding ?? fallback;","py":"funding = response.get(\"funding\")"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"funding","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafw007vsbnxbv3r0gmb","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field last4 is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `last4` on `payments_primitives_payment_records_resource_payment_method_card_details` reachable from 99 operations. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.last4 may now be absent or null\nconst last4 = response.last4 ?? fallback;","py":"last4 = response.get(\"last4\")"},"componentName":"payments_primitives_payment_records_resource_payment_method_card_details","affectedOperations":99,"fieldPath":"last4","detail":"no longer guaranteed present; can now be null","siteCount":2,"sampleSites":[]},{"id":"cmumyqafv0075sbnxnizboka8","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"ui_mode can now return \"elements\", \"embedded_page\", \"form\", \"hosted_page\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `ui_mode` on `checkout.session` reachable from 15 operations.\n\nNew values: `elements`, `embedded_page`, `form`, `hosted_page`.","patterns":{"ts":"switch (response.ui_mode) {\n  // existing branches …\n  // no branch for \"elements\"\n  // no branch for \"embedded_page\"\n  // no branch for \"form\"\n  // no branch for \"hosted_page\"\n  default:\n    throw new Error(\"unexpected ui_mode\");\n}"},"componentName":"checkout.session","affectedOperations":15,"fieldPath":"ui_mode","detail":"can now return \"elements\", \"embedded_page\", \"form\", \"hosted_page\"","siteCount":1,"sampleSites":[]},{"id":"cmumyqafv0078sbnxzc76do5m","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"removal_pathway can now return \"marine_carbon_removal\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `removal_pathway` on `climate.supplier` reachable from 9 operations.\n\nNew value: `marine_carbon_removal`.","patterns":{"ts":"switch (response.removal_pathway) {\n  // existing branches …\n  // no branch for \"marine_carbon_removal\"\n  default:\n    throw new Error(\"unexpected removal_pathway\");\n}"},"componentName":"climate.supplier","affectedOperations":9,"fieldPath":"removal_pathway","detail":"can now return \"marine_carbon_removal\"","siteCount":1,"sampleSites":[]},{"id":"cmumyqafx008isbnxwwxfqna3","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"item_type can now return \"crypto_fingerprint\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `item_type` on `radar.value_list` reachable from 4 operations.\n\nNew value: `crypto_fingerprint`.","patterns":{"ts":"switch (response.item_type) {\n  // existing branches …\n  // no branch for \"crypto_fingerprint\"\n  default:\n    throw new Error(\"unexpected item_type\");\n}"},"componentName":"radar.value_list","affectedOperations":4,"fieldPath":"item_type","detail":"can now return \"crypto_fingerprint\"","siteCount":1,"sampleSites":[]},{"id":"cmumyqafw008esbnx704byoa4","ruleId":"response.property.became-optional","severity":"BREAKING","directionFlip":true,"headline":"Response field insights is no longer guaranteed","body":"Producer-side tools call this non-breaking. For a consumer it is a null dereference on an unknown future date.\n\nAffects `insights` on `radar.payment_evaluation` reachable from 1 operation. Nothing fails at the call; it fails wherever the value is finally used, which is usually somewhere else entirely.","patterns":{"ts":"// response.insights may now be absent or null\nconst insights = response.insights ?? fallback;","py":"insights = response.get(\"insights\")"},"componentName":"radar.payment_evaluation","affectedOperations":1,"fieldPath":"insights","detail":"no longer guaranteed present","siteCount":1,"sampleSites":[]},{"id":"cmumyqafw008fsbnxa0awpnfa","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field insights removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `radar.payment_evaluation` reachable from 1 operation.","patterns":{"ts":"// response.insights is now undefined\nconst insights = response.insights;","py":"# raises KeyError\ninsights = response[\"insights\"]"},"componentName":"radar.payment_evaluation","affectedOperations":1,"fieldPath":"insights","siteCount":1,"sampleSites":[]}],"responseFieldAdds":{"count":24,"fields":["payment_method.upi","account_capabilities.upi_payments","payment_method_details.upi","setup_attempt_payment_method_details.upi","payment_intent_next_action.upi_handle_redirect_or_display_qr_code","payment_intent_payment_method_options.upi","line_item.quantity_decimal","mandate_payment_method_details.upi","issuing.card.lifecycle_controls","setup_intent_next_action.upi_handle_redirect_or_display_qr_code","setup_intent_payment_method_options.upi","payments_primitives_payment_records_resource_payment_method_details.upi","payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.electronic_commerce_indicator","payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.exemption_indicator","payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.cryptogram","payments_primitives_payment_records_resource_payment_method_card_details_resource_three_d_secure.exemption_indicator_applied","checkout.session.integration_identifier","checkout_session_payment_method_options.upi","credit_note_line_item.metadata","invoiceitem.quantity_decimal","payment_method_configuration.upi","confirmation_tokens_resource_payment_method_preview.upi","radar.payment_evaluation.recommended_action","radar.payment_evaluation.signals"]},"requestPropertyAdds":{"count":14,"fields":["payment_method_options.upi","payment_method_data.upi","lines[].metadata","quantity_decimal","upi","capabilities.upi_payments","lines[].quantity_decimal","payment_method_options.crypto","subscription_data.pending_invoice_item_interval","integration_identifier","invoice_items[].quantity_decimal","lifecycle_controls","risk_assessment.card_testing_risk.level","risk_assessment.merchant_dispute_risk.level"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz7z8o012nsbnxf174p1o2","providerSlug":"twilio","providerName":"Twilio","sourceKey":"messaging_v1","sourceLabel":"Twilio Messaging v1","shippedAt":"2026-03-10T08:28:35.000Z","commitSha":"c8540465ecdf9a0a847d8f227e751b6b707221dd","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":3,"COSMETIC":0},"changes":[{"id":"cmumz803e012osbnx5grlq7uy","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"X-Twilio-Api-Version is now optional","body":"No action needed.\n\nAffects `GET /v1/Services/{MessagingServiceSid}/Compliance/Usa2p`.","patterns":{},"method":"get","path":"/v1/Services/{MessagingServiceSid}/Compliance/Usa2p","fieldPath":"X-Twilio-Api-Version","siteCount":4,"sampleSites":["GET /v1/Services/{MessagingServiceSid}/Compliance/Usa2p","POST /v1/Services/{MessagingServiceSid}/Compliance/Usa2p","GET /v1/Services/{MessagingServiceSid}/Compliance/Usa2p/{Sid}","POST /v1/Services/{MessagingServiceSid}/Compliance/Usa2p/{Sid}"]}],"requestPropertyAdds":{"count":2,"fields":["PrivacyPolicyUrl","TermsAndConditionsUrl"]}},{"id":"cmumypqib006usbnx201r391j","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-02-23T22:03:04.000Z","commitSha":"da3eadb239b437b59cdf3459768bc2a6672165f6","repo":"stripe/openapi","counts":{"BREAKING":1,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":2,"COSMETIC":0},"changes":[{"id":"cmumypyze006vsbnx0zgbk6nf","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"device_type can now return \"simulated_stripe_s710\", \"stripe_s710\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `device_type` on `deleted_terminal.reader` reachable from 3 operations.\n\nNew values: `simulated_stripe_s710`, `stripe_s710`.","patterns":{"ts":"switch (response.device_type) {\n  // existing branches …\n  // no branch for \"simulated_stripe_s710\"\n  // no branch for \"stripe_s710\"\n  default:\n    throw new Error(\"unexpected device_type\");\n}"},"componentName":"deleted_terminal.reader","affectedOperations":15,"fieldPath":"device_type","detail":"can now return \"simulated_stripe_s710\", \"stripe_s710\"","siteCount":2,"sampleSites":[],"locations":["deleted_terminal.reader.device_type","terminal.reader.device_type"]},{"id":"cmumypyze006xsbnxhtsq7wcy","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field stripe_s710 added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `terminal.configuration` reachable from 4 operations.","patterns":{},"componentName":"terminal.configuration","affectedOperations":4,"fieldPath":"stripe_s710","siteCount":1,"sampleSites":[]},{"id":"cmumypyze006zsbnxi2s0060y","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property stripe_s710 added","body":"No action needed unless it is required.\n\nAffects `POST /v1/terminal/configurations`.","patterns":{},"method":"post","path":"/v1/terminal/configurations","fieldPath":"stripe_s710","siteCount":2,"sampleSites":["POST /v1/terminal/configurations","POST /v1/terminal/configurations/{configuration}"]}],"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumypitg005ksbnxi19abhhc","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-02-23T17:47:50.000Z","commitSha":"0aaf9a65e5d411caa259ea00c9277d60ff2b0d81","repo":"stripe/openapi","counts":{"BREAKING":6,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":18,"COSMETIC":0},"changes":[{"id":"cmumypoq1005qsbnxy3s4lt8l","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"lk_vat\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `invoices_resource_invoice_tax_id` reachable from 451 operations.\n\nNew value: `lk_vat`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"lk_vat\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"invoices_resource_invoice_tax_id","affectedOperations":553,"fieldPath":"type","detail":"can now return \"lk_vat\"","siteCount":4,"sampleSites":[],"locations":["invoices_resource_invoice_tax_id.type","payment_pages_checkout_session_tax_id.type","tax_id.type","tax_product_resource_customer_details_resource_tax_id.type"]},{"id":"cmumypoq1005psbnxzfysu5zj","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"payment_method_types can now return \"pay_by_bank\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `payment_method_types[]` on `invoices_payment_settings` reachable from 451 operations.\n\nNew value: `pay_by_bank`.","patterns":{"ts":"switch (response.payment_method_types[0]) {\n  // existing branches …\n  // no branch for \"pay_by_bank\"\n  default:\n    throw new Error(\"unexpected payment_method_types\");\n}"},"componentName":"invoices_payment_settings","affectedOperations":488,"fieldPath":"payment_method_types[]","detail":"can now return \"pay_by_bank\"","siteCount":2,"sampleSites":[],"locations":["invoices_payment_settings.payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumypoq1005nsbnx3rlljtgw","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"purpose can now return \"terminal_wifi_certificate\", \"terminal_wifi_private_key\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `purpose` on `file` reachable from 547 operations.\n\nNew values: `terminal_wifi_certificate`, `terminal_wifi_private_key`.","patterns":{"ts":"switch (response.purpose) {\n  // existing branches …\n  // no branch for \"terminal_wifi_certificate\"\n  // no branch for \"terminal_wifi_private_key\"\n  default:\n    throw new Error(\"unexpected purpose\");\n}"},"componentName":"file","affectedOperations":547,"fieldPath":"purpose","detail":"can now return \"terminal_wifi_certificate\", \"terminal_wifi_private_key\"","siteCount":1,"sampleSites":[]},{"id":"cmumypoq2006isbnx9odbcsp8","ruleId":"path.removed","severity":"BREAKING","directionFlip":false,"headline":"/v1/fabric/service/integration_config removed","body":"Requests to this path now 404.\n\nAffects `/v1/fabric/service/integration_config`.","patterns":{"ts":"// Was:\nawait client.request(\"GET\", \"/v1/fabric/service/integration_config\");\n// Now: 404"},"path":"/v1/fabric/service/integration_config","siteCount":1,"sampleSites":["/v1/fabric/service/integration_config"]},{"id":"cmumypoq1005osbnx330bzp59","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field card_issuer_decline removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `insights_resources_payment_evaluation_insights` reachable from 1 operation.","patterns":{"ts":"// response.card_issuer_decline is now undefined\nconst card_issuer_decline = response.card_issuer_decline;","py":"# raises KeyError\ncard_issuer_decline = response[\"card_issuer_decline\"]"},"componentName":"insights_resources_payment_evaluation_insights","affectedOperations":1,"fieldPath":"card_issuer_decline","siteCount":1,"sampleSites":[]},{"id":"cmumypoq2006jsbnxt11flkay","ruleId":"path.removed","severity":"BREAKING","directionFlip":false,"headline":"/v1/fabric/service/subscribe removed","body":"Requests to this path now 404.\n\nAffects `/v1/fabric/service/subscribe`.","patterns":{"ts":"// Was:\nawait client.request(\"GET\", \"/v1/fabric/service/subscribe\");\n// Now: 404"},"path":"/v1/fabric/service/subscribe","siteCount":1,"sampleSites":["/v1/fabric/service/subscribe"]},{"id":"cmumypoq2005ysbnxx8veugz9","ruleId":"response.property.type-narrowed","severity":"ADDITIVE","directionFlip":false,"headline":"Response type narrowed","body":"A tighter guarantee, not a break. Every value you can receive now was already possible, so existing handling still covers it; a null check here may now be dead code.\n\nAffects `payment_method_details_payment_record_us_bank_account` reachable from 99 operations.","patterns":{},"componentName":"payment_method_details_payment_record_us_bank_account","affectedOperations":99,"fieldPath":"expected_debit_date","detail":"null|string → string","siteCount":1,"sampleSites":[]},{"id":"cmumypoq2006ssbnxyg4vy8dg","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/terminal/refunds added","body":"No action needed.\n\nAffects `/v1/terminal/refunds`.","patterns":{},"path":"/v1/terminal/refunds","siteCount":1,"sampleSites":["/v1/terminal/refunds"]}],"responseFieldAdds":{"count":11,"fields":["payment_method_details_card_present.location","payment_method_details_card_present.reader","payment_intent_payment_method_options_us_bank_account.transaction_purpose","payment_method_details_interac_present.location","payment_method_details_interac_present.reader","mandate_bacs_debit.display_name","mandate_bacs_debit.service_user_number","tax_product_registrations_resource_country_options.lk","terminal.configuration.cellular","deleted_terminal.reader.device_type","deleted_terminal.reader.serial_number"]},"requestPropertyAdds":{"count":5,"fields":["payment_method_options.us_bank_account.transaction_purpose","cellular","payment_behavior","optional_items","country_options.lk"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz5m5n00z8sbnxws767pb8","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-02-05T12:23:31.000Z","commitSha":"55a17be6f0f130e5d529f92c0bf774254bb0f1d1","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":1,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz5pm400zasbnxop38c84g","ruleId":"response.status-code.added","severity":"BEHAVIORAL","directionFlip":false,"headline":"408 is now documented on /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json","body":"An unhandled branch in your error handling.\n\nAffects `POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json`.","patterns":{},"method":"post","path":"/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json","detail":"408 is now documented","siteCount":1,"sampleSites":["POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Recordings/{Sid}.json"]},{"id":"cmumz5pm400z9sbnxq9ppobs8","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field type added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `api.v2010.account.incoming_phone_number` reachable from 4 operations.","patterns":{},"componentName":"api.v2010.account.incoming_phone_number","affectedOperations":4,"fieldPath":"type","siteCount":1,"sampleSites":[]}]},{"id":"cmumypdj1005dsbnxciio5jrz","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-01-27T17:14:46.000Z","commitSha":"a402765c987f40ac7474547700da71a218428805","repo":"stripe/openapi","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumyphhj005esbnxqqo6233a","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field adjustable_quantity added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `item` reachable from 30 operations.","patterns":{},"componentName":"item","affectedOperations":30,"fieldPath":"adjustable_quantity","siteCount":1,"sampleSites":[]}]},{"id":"cmumyooj8004gsbnxyj5inm4x","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2026-01-22T16:48:28.000Z","commitSha":"7d73d5593bf01123d9655114c375972a591eb9b0","repo":"stripe/openapi","counts":{"BREAKING":10,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":4,"COSMETIC":0},"changes":[{"id":"cmumyp9b0004jsbnxk3kq1ren","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"pl_nip\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `invoices_resource_invoice_tax_id` reachable from 452 operations.\n\nNew value: `pl_nip`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"pl_nip\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"invoices_resource_invoice_tax_id","affectedOperations":554,"fieldPath":"type","detail":"can now return \"pl_nip\"","siteCount":4,"sampleSites":[],"locations":["invoices_resource_invoice_tax_id.type","payment_pages_checkout_session_tax_id.type","tax_id.type","tax_product_resource_customer_details_resource_tax_id.type"]},{"id":"cmumyp9b0004msbnxre90kz8y","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"bank can now return \"adyen\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `bank` on `payment_method_details_ideal` reachable from 262 operations.\n\nNew value: `adyen`.","patterns":{"ts":"switch (response.bank) {\n  // existing branches …\n  // no branch for \"adyen\"\n  default:\n    throw new Error(\"unexpected bank\");\n}"},"componentName":"payment_method_details_ideal","affectedOperations":545,"fieldPath":"bank","detail":"can now return \"adyen\"","siteCount":3,"sampleSites":[],"locations":["payment_method_details_ideal.bank","payment_method_ideal.bank","setup_attempt_payment_method_details_ideal.bank"]},{"id":"cmumyp9b0004nsbnx70lq3dht","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"bic can now return \"ADYBNL2A\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `bic` on `payment_method_details_ideal` reachable from 262 operations.\n\nNew value: `ADYBNL2A`.","patterns":{"ts":"switch (response.bic) {\n  // existing branches …\n  // no branch for \"ADYBNL2A\"\n  default:\n    throw new Error(\"unexpected bic\");\n}"},"componentName":"payment_method_details_ideal","affectedOperations":545,"fieldPath":"bic","detail":"can now return \"ADYBNL2A\"","siteCount":3,"sampleSites":[],"locations":["payment_method_details_ideal.bic","payment_method_ideal.bic","setup_attempt_payment_method_details_ideal.bic"]},{"id":"cmumyp9b1004ysbnxvex11abn","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"version can now return \"2.3.0\", \"2.3.1\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `version` on `three_d_secure_details` reachable from 100 operations.\n\nNew values: `2.3.0`, `2.3.1`.","patterns":{"ts":"switch (response.version) {\n  // existing branches …\n  // no branch for \"2.3.0\"\n  // no branch for \"2.3.1\"\n  default:\n    throw new Error(\"unexpected version\");\n}"},"componentName":"three_d_secure_details","affectedOperations":159,"fieldPath":"version","detail":"can now return \"2.3.0\", \"2.3.1\"","siteCount":2,"sampleSites":[],"locations":["three_d_secure_details.version","three_d_secure_details_charge.version"]},{"id":"cmumyp9b0004hsbnxel6z9hj5","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"balance_type can now return \"risk_reserved\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `balance_type` on `balance_transaction` reachable from 531 operations.\n\nNew value: `risk_reserved`.","patterns":{"ts":"switch (response.balance_type) {\n  // existing branches …\n  // no branch for \"risk_reserved\"\n  default:\n    throw new Error(\"unexpected balance_type\");\n}"},"componentName":"balance_transaction","affectedOperations":531,"fieldPath":"balance_type","detail":"can now return \"risk_reserved\"","siteCount":1,"sampleSites":[]},{"id":"cmumyp9b0004isbnx7mr2zpn4","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"reserve_hold\", \"reserve_release\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `balance_transaction` reachable from 531 operations.\n\nNew values: `reserve_hold`, `reserve_release`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"reserve_hold\"\n  // no branch for \"reserve_release\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"balance_transaction","affectedOperations":531,"fieldPath":"type","detail":"can now return \"reserve_hold\", \"reserve_release\"","siteCount":1,"sampleSites":[]},{"id":"cmumyp9b0004lsbnxhksje9ar","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field preferred_settlement_speed removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `payment_intent_payment_method_options_us_bank_account` reachable from 405 operations.","patterns":{"ts":"// response.preferred_settlement_speed is now undefined\nconst preferred_settlement_speed = response.preferred_settlement_speed;","py":"# raises KeyError\npreferred_settlement_speed = response[\"preferred_settlement_speed\"]"},"componentName":"payment_intent_payment_method_options_us_bank_account","affectedOperations":405,"fieldPath":"preferred_settlement_speed","siteCount":1,"sampleSites":[]},{"id":"cmumyp9b1004xsbnx4rkk14qw","ruleId":"response.property.removed","severity":"BREAKING","directionFlip":false,"headline":"Response field bgn removed","body":"Reads of this field return undefined, and the failure surfaces wherever that value is used rather than at the call.\n\nAffects `terminal_configuration_configuration_resource_tipping` reachable from 4 operations.","patterns":{"ts":"// response.bgn is now undefined\nconst bgn = response.bgn;","py":"# raises KeyError\nbgn = response[\"bgn\"]"},"componentName":"terminal_configuration_configuration_resource_tipping","affectedOperations":4,"fieldPath":"bgn","siteCount":1,"sampleSites":[]},{"id":"cmumyp9b10052sbnx074v8o9n","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"preferred_settlement_speed is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `payment_method_options.us_bank_account.preferred_settlement_speed` on `POST /v1/payment_intents`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/payment_intents\", {\n  // preferred_settlement_speed is now ignored, not rejected\n  preferred_settlement_speed: value,\n});"},"method":"post","path":"/v1/payment_intents","fieldPath":"payment_method_options.us_bank_account.preferred_settlement_speed","siteCount":3,"sampleSites":["POST /v1/payment_intents","POST /v1/payment_intents/{intent}","POST /v1/payment_intents/{intent}/confirm"]},{"id":"cmumyp9b20059sbnxsp33gdn0","ruleId":"request.property.removed","severity":"BREAKING","directionFlip":true,"headline":"bgn is no longer accepted","body":"Usually ignored rather than rejected, so the call succeeds and does something subtly different.\n\nAffects `tipping.bgn` on `POST /v1/terminal/configurations`. Grep for it: nothing else will tell you.","patterns":{"ts":"await client.post(\"/v1/terminal/configurations\", {\n  // bgn is now ignored, not rejected\n  bgn: value,\n});"},"method":"post","path":"/v1/terminal/configurations","fieldPath":"tipping.bgn","siteCount":2,"sampleSites":["POST /v1/terminal/configurations","POST /v1/terminal/configurations/{configuration}"]},{"id":"cmumyp9b2005bsbnxxf6zomqs","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/radar/payment_evaluations added","body":"No action needed.\n\nAffects `/v1/radar/payment_evaluations`.","patterns":{},"path":"/v1/radar/payment_evaluations","siteCount":1,"sampleSites":["/v1/radar/payment_evaluations"]},{"id":"cmumyp9b10051sbnxtzv5ou79","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property enforce_arithmetic_validation added","body":"No action needed unless it is required.\n\nAffects `POST /v1/payment_intents`.","patterns":{},"method":"post","path":"/v1/payment_intents","fieldPath":"amount_details.enforce_arithmetic_validation","siteCount":5,"sampleSites":["POST /v1/payment_intents","POST /v1/payment_intents/{intent}","POST /v1/payment_intents/{intent}/capture","POST /v1/payment_intents/{intent}/confirm","POST /v1/payment_intents/{intent}/increment_authorization"]}],"responseFieldAdds":{"count":2,"fields":["payment_flows_amount_details.error","treasury_received_debits_resource_linked_flows.topup"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz5hy000z5sbnxtz8w7cn6","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-01-22T10:57:44.000Z","commitSha":"a14fdca9bd34ae5ed5063d093f68fa4d9cf9b01f","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz5kmt00z6sbnxb0sly0g2","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property EnableProviderData added","body":"No action needed unless it is required.\n\nAffects `POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json`.","patterns":{},"method":"post","path":"/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json","fieldPath":"EnableProviderData","siteCount":1,"sampleSites":["POST /2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}/Transcriptions.json"]}]},{"id":"cmumz5av700z1sbnxpa6h5dz3","providerSlug":"twilio","providerName":"Twilio","sourceKey":"api_v2010","sourceLabel":"Twilio Core API (2010-04-01)","shippedAt":"2026-01-07T09:21:24.000Z","commitSha":"2c1b9c8fda4411c3e961688abfecac8927952725","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz5e5l00z2sbnxihqa6bin","ruleId":"request.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Request property ClientNotificationUrl added","body":"No action needed unless it is required.\n\nAffects `POST /2010-04-01/Accounts/{AccountSid}/Calls.json`.","patterns":{},"method":"post","path":"/2010-04-01/Accounts/{AccountSid}/Calls.json","fieldPath":"ClientNotificationUrl","siteCount":2,"sampleSites":["POST /2010-04-01/Accounts/{AccountSid}/Calls.json","POST /2010-04-01/Accounts/{AccountSid}/Conferences/{ConferenceSid}/Participants.json"]}]},{"id":"cmumz7vg1012csbnxtoukhwsj","providerSlug":"twilio","providerName":"Twilio","sourceKey":"messaging_v1","sourceLabel":"Twilio Messaging v1","shippedAt":"2026-01-07T09:21:24.000Z","commitSha":"2c1b9c8fda4411c3e961688abfecac8927952725","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":5,"COSMETIC":0},"changes":[],"responseFieldAdds":{"count":3,"fields":["messaging.v1.tollfree_verification.vetting_id","messaging.v1.tollfree_verification.vetting_id_expiration","messaging.v1.tollfree_verification.vetting_provider"]},"requestPropertyAdds":{"count":2,"fields":["VettingId","VettingProvider"]}},{"id":"cmumyoclr004dsbnx85ano4w6","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2025-12-12T20:23:49.000Z","commitSha":"03af40466c67b98705b1453e929eb801fd8b5b03","repo":"stripe/openapi","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumyomay004esbnx26pxgpci","ruleId":"response.property.added","severity":"ADDITIVE","directionFlip":false,"headline":"Response field subtotal added","body":"No action needed unless you validate responses against a closed schema.\n\nAffects `line_item` reachable from 423 operations.","patterns":{},"componentName":"line_item","affectedOperations":423,"fieldPath":"subtotal","siteCount":1,"sampleSites":[]}]},{"id":"cmumyo62n0043sbnxaaaxuobi","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2025-12-11T18:44:14.000Z","commitSha":"ed93b94259c55782b8b04e01f4ffdaa2872e9bcd","repo":"stripe/openapi","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":7,"COSMETIC":0},"changes":[],"responseFieldAdds":{"count":7,"fields":["payment_method_details_acss_debit.expected_debit_date","payment_method_details_au_becs_debit.expected_debit_date","payment_method_details_bacs_debit.expected_debit_date","payment_method_details_nz_bank_account.expected_debit_date","payment_method_details_sepa_debit.expected_debit_date","payment_method_details_us_bank_account.expected_debit_date","payment_method_details_payment_record_us_bank_account.expected_debit_date"]}},{"id":"cmumynsfd0001sbnxfpwux15i","providerSlug":"stripe","providerName":"Stripe","sourceKey":"api","sourceLabel":"Stripe API","shippedAt":"2025-12-08T21:53:09.000Z","commitSha":"14a40f813acc3a6a8f75bf80b2c06955f5d574d7","repo":"stripe/openapi","counts":{"BREAKING":3,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":73,"COSMETIC":0},"changes":[{"id":"cmumyo3dg000asbnxlg1jy3ru","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"type can now return \"payto\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `type` on `confirmation_tokens_resource_payment_method_preview` reachable from 2 operations.\n\nNew value: `payto`.","patterns":{"ts":"switch (response.type) {\n  // existing branches …\n  // no branch for \"payto\"\n  default:\n    throw new Error(\"unexpected type\");\n}"},"componentName":"confirmation_tokens_resource_payment_method_preview","affectedOperations":587,"fieldPath":"type","detail":"can now return \"payto\"","siteCount":7,"sampleSites":[],"locations":["confirmation_tokens_resource_payment_method_preview.type","invoices_payment_settings.payment_method_types[]","payment_intent.excluded_payment_method_types[]","payment_link.payment_method_types[]","payment_method.type","setup_intent.excluded_payment_method_types[]","subscriptions_resource_payment_settings.payment_method_types[]"]},{"id":"cmumyo3di0011sbnxhnrpkgqg","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"bank can now return \"mollie\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `bank` on `payment_method_details_ideal` reachable from 261 operations.\n\nNew value: `mollie`.","patterns":{"ts":"switch (response.bank) {\n  // existing branches …\n  // no branch for \"mollie\"\n  default:\n    throw new Error(\"unexpected bank\");\n}"},"componentName":"payment_method_details_ideal","affectedOperations":544,"fieldPath":"bank","detail":"can now return \"mollie\"","siteCount":3,"sampleSites":[],"locations":["payment_method_details_ideal.bank","payment_method_ideal.bank","setup_attempt_payment_method_details_ideal.bank"]},{"id":"cmumyo3di0012sbnxjml23n44","ruleId":"response.enum.value-added","severity":"BREAKING","directionFlip":true,"headline":"bic can now return \"MLLENL2A\"","body":"Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.\n\nAffects `bic` on `payment_method_details_ideal` reachable from 261 operations.\n\nNew value: `MLLENL2A`.","patterns":{"ts":"switch (response.bic) {\n  // existing branches …\n  // no branch for \"MLLENL2A\"\n  default:\n    throw new Error(\"unexpected bic\");\n}"},"componentName":"payment_method_details_ideal","affectedOperations":544,"fieldPath":"bic","detail":"can now return \"MLLENL2A\"","siteCount":3,"sampleSites":[],"locations":["payment_method_details_ideal.bic","payment_method_ideal.bic","setup_attempt_payment_method_details_ideal.bic"]},{"id":"cmumyo3dm002qsbnxr50oksbw","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"customer_account is now optional","body":"No action needed.\n\nAffects `GET /v1/invoices`.","patterns":{},"method":"get","path":"/v1/invoices","fieldPath":"customer_account","siteCount":14,"sampleSites":["GET /v1/invoices","GET /v1/billing/credit_balance_summary","GET /v1/billing/credit_balance_transactions","GET /v1/billing/credit_grants","GET /v1/checkout/sessions"]},{"id":"cmumyo3dp0040sbnxgou7y5q3","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/fabric/service/integration_config added","body":"No action needed.\n\nAffects `/v1/fabric/service/integration_config`.","patterns":{},"path":"/v1/fabric/service/integration_config","siteCount":1,"sampleSites":["/v1/fabric/service/integration_config"]},{"id":"cmumyo3dl002hsbnxcisl5111","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"invoice is now optional","body":"No action needed.\n\nAffects `GET /v1/customers/{customer}/balance_transactions`.","patterns":{},"method":"get","path":"/v1/customers/{customer}/balance_transactions","fieldPath":"invoice","siteCount":1,"sampleSites":["GET /v1/customers/{customer}/balance_transactions"]},{"id":"cmumyo3dm002msbnx6smtd7hi","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"related_customer_account is now optional","body":"No action needed.\n\nAffects `GET /v1/identity/verification_sessions`.","patterns":{},"method":"get","path":"/v1/identity/verification_sessions","fieldPath":"related_customer_account","siteCount":1,"sampleSites":["GET /v1/identity/verification_sessions"]},{"id":"cmumyo3do0038sbnx0py9a36t","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"allow_redisplay is now optional","body":"No action needed.\n\nAffects `GET /v1/payment_methods`.","patterns":{},"method":"get","path":"/v1/payment_methods","fieldPath":"allow_redisplay","siteCount":1,"sampleSites":["GET /v1/payment_methods"]},{"id":"cmumyo3dp0041sbnxebj9n3vq","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/fabric/service/subscribe added","body":"No action needed.\n\nAffects `/v1/fabric/service/subscribe`.","patterns":{},"path":"/v1/fabric/service/subscribe","siteCount":1,"sampleSites":["/v1/fabric/service/subscribe"]}],"responseFieldAdds":{"count":53,"fields":["customer.customer_account","payment_method.customer_account","payment_method.payto","setup_intent.customer_account","payment_intent.customer_account","account_capabilities.payto_payments","tax_id.customer_account","discount.customer_account","subscription.customer_account","cash_balance.customer_account","payment_method_details.payto","promotion_code.customer_account","invoice.customer_account","subscription_schedule.customer_account","setup_attempt.customer_account","setup_attempt_payment_method_details.payto","payment_intent_payment_method_options.payto","deleted_discount.customer_account","subscriptions_resource_payment_method_options.payto","payment_intent_type_specific_payment_method_options_client.mandate_options","invoices_payment_method_options.payto","payment_record.reported_by","mandate_payment_method_details.payto","tax_i_ds_owner.customer_account","customer_cash_balance_transaction.customer_account","setup_intent_payment_method_options.payto","payments_primitives_payment_records_resource_payment_method_details.payto","payments_primitives_payment_records_resource_payment_method_card_details.issuer","payments_primitives_payment_records_resource_payment_method_card_details.network_advice_code","payments_primitives_payment_records_resource_payment_method_card_details.authorization_code","payments_primitives_payment_records_resource_payment_method_card_details.description","payments_primitives_payment_records_resource_payment_method_card_details.iin","payments_primitives_payment_records_resource_payment_method_card_details.installments","payments_primitives_payment_records_resource_payment_method_card_details.network_decline_code","payments_primitives_payment_records_resource_payment_method_card_details.stored_credential_usage","billing.credit_grant.customer_account","setup_intent_type_specific_payment_method_options_client.mandate_options","item.metadata","checkout.session.customer_account","checkout_session_payment_method_options.payto","bank_connections_resource_accountholder.customer_account","credit_note.customer_account","customer_balance_transaction.customer_account","quote.customer_account","identity.verification_session.related_customer_account","portal_subscription_update.billing_cycle_anchor","invoiceitem.customer_account","payment_method_configuration.payto","confirmation_tokens_resource_payment_method_preview.customer_account","confirmation_tokens_resource_payment_method_preview.payto","billing.credit_balance_summary.customer_account","billing_portal.session.customer_account","customer_session.customer_account"]},"requestPropertyAdds":{"count":14,"fields":["customer_account","payment_method_options.payto","payment_method_data.payto","payment_settings.payment_method_options.payto","account_holder.customer_account","payto","capabilities.payto_payments","documents.proof_of_registration.signer","documents.proof_of_ultimate_beneficial_ownership.signer","features.subscription_update.billing_cycle_anchor","owner.customer_account","line_items[].metadata","line_items","related_customer_account"]},"providerNote":"Stripe's published spec describes its newest API version. Accounts are pinned to the version they signed up on, so a change like this reaches your integration when you upgrade that version, not the day Stripe ships it."},{"id":"cmumz7sof0129sbnxlih7d74b","providerSlug":"twilio","providerName":"Twilio","sourceKey":"messaging_v1","sourceLabel":"Twilio Messaging v1","shippedAt":"2025-12-03T11:11:31.000Z","commitSha":"733ecb2a635927ba0856f4e8054c775847b0c1b9","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz7tng012asbnxokt55zzb","ruleId":"path.added","severity":"ADDITIVE","directionFlip":false,"headline":"/v1/LinkShortening/Domains/{DomainSid}/ValidateDns added","body":"No action needed.\n\nAffects `/v1/LinkShortening/Domains/{DomainSid}/ValidateDns`.","patterns":{},"path":"/v1/LinkShortening/Domains/{DomainSid}/ValidateDns","siteCount":1,"sampleSites":["/v1/LinkShortening/Domains/{DomainSid}/ValidateDns"]}]},{"id":"cmumz7n3f0126sbnxv5u6np9d","providerSlug":"twilio","providerName":"Twilio","sourceKey":"messaging_v1","sourceLabel":"Twilio Messaging v1","shippedAt":"2025-11-11T07:43:38.000Z","commitSha":"3267dfd528b622b6af47575275b9bdaa869bc41c","repo":"twilio/twilio-oai","counts":{"BREAKING":0,"DEPRECATION":0,"BEHAVIORAL":0,"ADDITIVE":1,"COSMETIC":0},"changes":[{"id":"cmumz7qgt0127sbnx0cxdt1tc","ruleId":"request.param.optional-added","severity":"ADDITIVE","directionFlip":false,"headline":"TrustProductSid is now optional","body":"No action needed.\n\nAffects `GET /v1/Tollfree/Verifications`.","patterns":{},"method":"get","path":"/v1/Tollfree/Verifications","fieldPath":"TrustProductSid","siteCount":1,"sampleSites":["GET /v1/Tollfree/Verifications"]}]}]}