<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Zuub Developer Portal Blog</title>
        <link>https://developer.zuub.com/changelog</link>
        <description>Zuub Developer Portal Blog</description>
        <lastBuildDate>Thu, 23 Jul 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Introducing the v2 API]]></title>
            <link>https://developer.zuub.com/changelog/2026-07-23</link>
            <guid>https://developer.zuub.com/changelog/2026-07-23</guid>
            <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The v2 API reference goes live with a full error message reference, RFC 9457 error responses, a new Partial insurance verification outcome, and expanded benefit schemas.]]></description>
            <content:encoded><![CDATA[<p class="changelog-subtitle"></p><p>Account Setup, Authentication, Claims Retrieval, Configuration, Credential
Management, Insurance Verification, Payer Network &amp; Portals, Portal
Registration &amp; Authentication: v1 → v2 migration</p><p></p>
<div style="display:flex;flex-wrap:wrap;gap:8px;padding-bottom:1rem;margin-bottom:1.5rem;border-bottom:1px solid var(--ifm-color-emphasis-300)"><button type="button" style="display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:8px;font-size:0.85rem;font-weight:600;line-height:1.2;cursor:pointer;border:none;background:transparent;color:var(--ifm-font-color-base);text-decoration:none"><svg style="width:14px;height:14px;flex-shrink:0" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path></svg>View Markdown</button><span aria-hidden="true" style="align-self:center;width:1px;height:1rem;background:var(--ifm-color-emphasis-300)"></span><button type="button" style="display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:8px;font-size:0.85rem;font-weight:600;line-height:1.2;cursor:pointer;border:none;background:transparent;color:var(--ifm-font-color-base);text-decoration:none"><svg style="width:14px;height:14px;flex-shrink:0" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="12" height="12" rx="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>Copy as Markdown</button></div>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Deprecation Notice</div><div class="admonitionContent_BuS1"><p><strong>The v1 API will be sunset on December 31, 2026</strong>.
After that date, only v2 will be available. v1 and v2 run side by side until then, so you can migrate incrementally, but plan to complete your move to v2 well ahead of the deadline.</p></div></div>
<p>The v2 API reference is now live, with a complete error message reference and error responses standardized on the RFC 9457 problem+json format. Insurance verification gains a new <code>Partial</code> outcome and several benefit schema additions, alongside changes to failure results and coinsurance that require updates when migrating from v1.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's New<a href="https://developer.zuub.com/changelog/2026-07-23#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New">​</a></h2>
<p>This release publishes the v2 API reference and standardizes how errors are represented across the API, and it extends the insurance verification contract with a new outcome and richer benefit data.</p>
<ul>
<li>API reference with a category-grouped error message reference for API and webhook errors (including whether each is retryable), with error responses standardized on RFC 9457 problem+json (<code>type</code>, <code>title</code>, <code>status</code>, <code>detail</code>) and validation failures now returned as <code>422</code> across more endpoints.</li>
<li>New <code>Partial</code> status added for insurance verification outcome on both the <a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a> and the <a href="https://developer.zuub.com/docs/api/insurance-verification-webhook">Insurance Verification Webhook</a>, returning partially-retrieved data with contexts that explain the gaps. For example, payers like Denti-Cal, which require checking multiple portals, may return a <code>Partial</code> status with <code>contexts</code> explaining which portal or data point couldn't be retrieved.</li>
<li>Provider network participation, benefit maximum carryover amounts, and a carry-over disclaimer type added to insurance verification results. Payer coverage for these fields is expanding over time. Availability depends on whether a given payer's portal exposes this data, so these fields may not be populated for every payer yet.</li>
<li>New <code>assignment</code> field added to the <code>plan</code> in <code>InsuranceVerificationV3</code> result, identifying the office and/or provider the plan is assigned to. Applies to plans that restrict coverage to an assigned office or provider, such as HMO, Medicaid, and Medicare. Like other additive fields, availability depends on whether the payer's portal exposes this data.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="impact">Impact<a href="https://developer.zuub.com/changelog/2026-07-23#impact" class="hash-link" aria-label="Direct link to Impact" title="Direct link to Impact">​</a></h2>
<p>Affects any client moving from v1 to v2. Because v1 and v2 run side by side, existing v1 integrations are unaffected until they migrate, but v1 is retired on <strong>December 31, 2026</strong>, so every v1 integration must move to v2 before that date.</p>
<p>When migrating, every request must move from <code>/v1/*</code> to <code>/v2/*</code>, and clients must parse error bodies as RFC 9457 problem+json (including <code>422</code> validation responses with a field-level <code>errors[]</code> array) rather than the legacy error shapes.</p>
<p>Insurance verification integrations additionally must handle the new <code>Partial</code> status and the reshaped failure <code>result</code>, and read coinsurance <code>percentage.final</code> as a range. The additive benefit fields require no action to keep working.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="why-this-changed">Why this changed<a href="https://developer.zuub.com/changelog/2026-07-23#why-this-changed" class="hash-link" aria-label="Direct link to Why this changed" title="Direct link to Why this changed">​</a></h3>
<ul>
<li>Error responses were standardized on the RFC 9457 problem-details format for consistency across the v2 API.</li>
<li>The new <code>Partial</code> status lets insurance verification return the benefits it could retrieve, with <code>contexts</code> explaining what was missing and why, instead of failing the entire request when only some data is unavailable.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="changes">Changes<a href="https://developer.zuub.com/changelog/2026-07-23#changes" class="hash-link" aria-label="Direct link to Changes" title="Direct link to Changes">​</a></h2>
<p>The following summarizes the API contract as it moves from v1 to v2, grouped by resource. Because v1 and v2 run side by side, none of this affects existing v1 integrations.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="all-api-endpoints">All API Endpoints<a href="https://developer.zuub.com/changelog/2026-07-23#all-api-endpoints" class="hash-link" aria-label="Direct link to All API Endpoints" title="Direct link to All API Endpoints">​</a></h3>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Request</td><td>Updated</td><td>Base Path</td><td>Every resource moved from <code>/v1/*</code> to <code>/v2/*</code>. Update the version prefix on all requests.</td></tr><tr><td>Response</td><td>Updated</td><td>Error Response Body</td><td>Error responses standardized on RFC 9457 problem+json (served as <code>application/problem+json</code>): <code>type</code> is now a URI (was a token such as <code>Internal</code>), and <code>title</code> and <code>detail</code> are added. Upstream failures are reported under <code>upstreamErrors[]</code>, replacing <code>details</code>. The legacy <code>ErrorDetail</code> and <code>ErrorType</code> shapes were removed.</td></tr></tbody></table>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="account-setup-credential-management-portal-registration--authentication">Account Setup, Credential Management, Portal Registration &amp; Authentication<a href="https://developer.zuub.com/changelog/2026-07-23#account-setup-credential-management-portal-registration--authentication" class="hash-link" aria-label="Direct link to Account Setup, Credential Management, Portal Registration &amp; Authentication" title="Direct link to Account Setup, Credential Management, Portal Registration &amp; Authentication">​</a></h3>
<ul>
<li><span class="badge badge--primary">GET</span> <code>/v2/organizations/{organizationId}</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/organizations/{organizationId}/clinics</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/clinics/{clinicId}</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/clinics/{clinicId}/portals/{portalId}/credentials</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/emails</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/sms-messages</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/payer-portal-registrations/{correlationId}/emails</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/payer-portal-registrations/{correlationId}/sms-messages</code></li>
</ul>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Response</td><td>Added</td><td><code>422</code></td><td>Request validation failures now return <code>422</code> with a problem+json body that includes an <code>errors[]</code> array of field-level failures, each with the offending <code>field</code>, a <code>message</code>, and a <code>code</code> (e.g. <code>invalid_value</code>).</td></tr></tbody></table>
<ul>
<li><span class="badge badge--success">POST</span> <code>/v2/organizations</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/organizations/{organizationId}/clinics</code></li>
<li><span class="badge badge--primary">GET</span> <code>/v2/customers/{customerId}/organizations</code></li>
<li><span class="badge badge--success">POST</span> <span class="badge badge--primary">GET</span> <span class="badge badge--warning">PATCH</span> <code>/v2/clinics/{clinicId}/portals/{portalId}/credentials</code></li>
</ul>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Response</td><td>Removed</td><td><code>400</code>, <code>404</code>, <code>409</code></td><td>Several bad-request, not-found, and conflict responses are no longer returned (<code>400</code> on <code>GET /v2/customers/{customerId}/organizations</code>; <code>409</code> on <code>POST</code> credentials); validation now surfaces as <code>422</code>.</td></tr></tbody></table>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="insurance-verification">Insurance Verification<a href="https://developer.zuub.com/changelog/2026-07-23#insurance-verification" class="hash-link" aria-label="Direct link to Insurance Verification" title="Direct link to Insurance Verification">​</a></h3>
<ul>
<li><span class="badge badge--primary">GET</span> <code>/v2/insurance-verifications/{correlationId}</code></li>
<li><span class="badge badge--secondary">Webhook</span> Insurance Verification Webhook</li>
</ul>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Response</td><td>Added</td><td><code>status</code></td><td>New <code>Partial</code> outcome: <code>status</code> is <code>Partial</code> with a <code>result</code> holding partially-retrieved <code>data</code> and <code>contexts</code> explaining the gaps.</td></tr><tr><td>Response</td><td>Added</td><td><code>result.verificationProvider</code>, <code>result.disclaimers</code>, benefit maximum <code>carryoverAmount</code> / <code>remainingCarryoverAmount</code></td><td>New benefit data: <code>verificationProvider</code> (with network <code>participation.status</code>), a <code>CarryOverDetails</code> disclaimer type, and carryover amounts on benefit maximums.</td></tr><tr><td>Response</td><td>Added</td><td><code>result.plan.assignment</code></td><td>New optional <code>assignment</code> on the <code>plan</code> within <code>InsuranceVerificationV3</code> results, identifying the office and/or provider the plan is assigned to.</td></tr><tr><td>Response</td><td>Updated</td><td><code>result</code></td><td>Failure <code>result</code> reshaped to problem-details: adds <code>title</code>, <code>detail</code>, <code>upstreamErrors[]</code>; <code>type</code> is now a URI; removes <code>details.code</code> and <code>details.message</code>.</td></tr><tr><td>Response</td><td>Removed</td><td><code>422</code> (GET only)</td><td><code>GET /v2/insurance-verifications/{correlationId}</code> no longer documents <code>422</code>; error conditions are conveyed through the <code>Failed</code> result and the standardized error bodies.</td></tr></tbody></table>
<ul>
<li><span class="badge badge--success">POST</span> <code>/v2/insurance-verifications</code></li>
<li><span class="badge badge--success">POST</span> <code>/v2/insurance-verification-requests</code></li>
</ul>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Response</td><td>Added</td><td><code>401</code>, <code>403</code>, <code>404</code>, <code>503</code></td><td>Authentication, authorization, and not-found error responses are now documented; <code>503</code> is documented on the synchronous <code>POST /v2/insurance-verifications</code>.</td></tr></tbody></table>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="claims-retrieval">Claims Retrieval<a href="https://developer.zuub.com/changelog/2026-07-23#claims-retrieval" class="hash-link" aria-label="Direct link to Claims Retrieval" title="Direct link to Claims Retrieval">​</a></h3>
<ul>
<li><span class="badge badge--success">POST</span> <code>/v2/claim-retrieval-requests</code></li>
</ul>
<table><thead><tr><th>Applies To</th><th>Change</th><th>Parameter</th><th>Details</th></tr></thead><tbody><tr><td>Response</td><td>Added</td><td><code>404</code></td><td>Now documents a <code>404</code> not-found response.</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="upgrade">Upgrade<a href="https://developer.zuub.com/changelog/2026-07-23#upgrade" class="hash-link" aria-label="Direct link to Upgrade" title="Direct link to Upgrade">​</a></h2>
<ol>
<li>Repoint every request from <code>/v1/*</code> to <code>/v2/*</code>. The resource set is unchanged; only the version prefix moved.</li>
<li>Parse all error bodies as RFC 9457 problem+json (<code>type</code>, <code>title</code>, <code>status</code>, <code>detail</code>). See the <a href="https://developer.zuub.com/docs/errors">Error Reference</a> for the full list of error types:<!-- -->
<ul>
<li>Treat <code>type</code> as a URI, not a token like <code>Internal</code>.</li>
<li>Read upstream failures from <code>upstreamErrors[]</code> (was <code>details</code>).</li>
</ul>
</li>
<li>Update failure-response parsing on <a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a> and the <a href="https://developer.zuub.com/docs/api/insurance-verification-webhook">Insurance Verification Webhook</a>:<!-- -->
<ul>
<li>Replace <code>result.details.code</code> and <code>result.details.message</code> with <code>result.type</code>, <code>result.title</code>, and <code>result.detail</code>.</li>
<li>Read per-source failures from <code>result.upstreamErrors[].detail</code>. See the <a href="https://developer.zuub.com/docs/errors/webhook/upstream-error">Upstream Error</a> webhook example.</li>
</ul>
</li>
<li>Handle <code>422</code> validation responses: read the <code>errors[]</code> array for field-level failures, each with:<!-- -->
<ul>
<li><code>field</code>: the parameter that failed validation.</li>
<li><code>message</code>: a human-readable description.</li>
<li><code>code</code>: a machine-readable reason (e.g. <code>invalid_value</code>).</li>
</ul>
</li>
<li>Read coinsurance <code>percentage.final</code> as an object with numeric <code>start</code> and <code>end</code>, not a string.</li>
<li>Handle the new <code>Partial</code> status on <a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a> and the <a href="https://developer.zuub.com/docs/api/insurance-verification-webhook">Insurance Verification Webhook</a>: read <code>result.data</code> and the new <code>result.contexts</code>.</li>
<li>Stop relying on error codes that v2 removed:<!-- -->
<ul>
<li><code>422</code> on <a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a>.</li>
<li><code>400</code>, <code>404</code>, and <code>409</code> responses dropped from the organization, clinic, and credential endpoints.</li>
</ul>
</li>
<li>Optionally, consume the new <code>verificationProvider</code> field on <code>InsuranceVerificationV3</code> result, the provider used to look up benefits. See <a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a> for the full schema. Includes:<!-- -->
<ul>
<li><code>firstName</code>, <code>lastName</code>, <code>middleName</code>, <code>address</code>, <code>taxId</code>.</li>
<li>Network <code>participation.status</code> (<code>Participating</code> and <code>Non-Participating</code>).</li>
</ul>
</li>
<li>Optionally, consume the new <code>assignment</code> field on the <code>InsuranceVerificationV3</code> result's plan (<code>result.plan.assignment</code>), identifying the office and/or provider the plan is assigned to.</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="references">References<a href="https://developer.zuub.com/changelog/2026-07-23#references" class="hash-link" aria-label="Direct link to References" title="Direct link to References">​</a></h2>
<ul>
<li><a href="https://developer.zuub.com/docs/errors">Error Reference</a></li>
<li><a href="https://developer.zuub.com/docs/api/get-insurance-verification">Get Insurance Verification</a></li>
<li><a href="https://developer.zuub.com/docs/api/insurance-verification-webhook">Insurance Verification Webhook</a></li>
<li><a href="https://developer.zuub.com/docs/errors/webhook/upstream-error">Webhook Upstream Error</a></li>
</ul>]]></content:encoded>
            <category>account-setup</category>
            <category>authentication</category>
            <category>claims-retrieval</category>
            <category>configuration</category>
            <category>credential-management</category>
            <category>insurance-verification</category>
            <category>migration</category>
            <category>payer-network-and-portals</category>
            <category>portal-registration-and-authentication</category>
            <category>v2</category>
        </item>
    </channel>
</rss>