How to balance COB claims
Oct 21, 2025
Guide
If a patient has multiple health plans, each plan might pay for part of the patient’s care. The question is which one pays first.
Coordination of Benefits (COB) is the process that decides the billing order and makes sure no payer pays more than their share.
Once you know the billing order, COB seems simple: send the claim to the primary payer first, then the secondary, and so on.
But, in practice, about 5% of all claim rejections come from COB errors. Most happen because the numbers don’t line up.
When you submit a secondary or tertiary claim, payers expect you to show your math. For example, you have to include every payment and adjustment from the primary claim’s remit in the secondary claim. The amounts have to add up to the claim’s total charges. If a single dollar is off, the secondary claim will be rejected.
This guide shows how to balance COB claims using Stedi’s JSON Claims API endpoints.
How COB claim balancing works
1. Get the billing order.
Ask the patient or run a COB check to see which payer is primary, secondary, and so on. The billing order matters. Billing out of sequence may result in claim rejections.
2. Submit a claim to the primary payer.
After the claim is accepted, the primary payer adjudicates the claim and sends back one or more Electronic Remittance Advices (ERAs). The ERA shows what the primary payer paid and adjusted.
You typically receive an ERA about 7-20 business days after submitting a claim.
3. Check for crossover.
Sometimes, a payer automatically forwards the claim to the next payer. This is called a crossover claim. To check for a crossover, look at the ERA's claim status code:
19
– Processed as primary, forwarded to the secondary payer20
– Processed as secondary, forwarded to the tertiary payer21
– Processed as tertiary, forwarded to another payer
If you see one of these claim status codes, you don't need to submit a claim to the next payer.
The ERA also includes information about the crossover payer. For example, using the ERA Report endpoint’s response:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { // Processed as primary payer. Forwarded to secondary payer. "claimStatusCode": "19", ... }, "crossoverCarrier": { // Secondary crossover payer's information "organizationName": "ACME Health Services", "payorId": "12345", ... } } ] } ] }, ... ], ... }
4. Submit the secondary claim (if no crossover)
Wait to submit the secondary claim until you’ve received ERA(s) for the primary claim.
The secondary claim should list the same service lines and total charges as the primary claim, since both refer to the same encounter and services. To make sure the claim balances, use this rule:
Total charges = All payments + All adjustments
If the math doesn’t add up, the secondary payer will reject the claim to avoid overpayment.
For guidance on submitting secondary or tertiary claims, see our docs:
5. Submit additional claims (if needed)
Repeat step 4 for tertiary claims and beyond. Be sure to wait for ERAs from any previous claims so you can include accurate payments and adjustments.
Examples
The following examples show how COB claim balancing works. Each example starts with the same base scenario:
The provider submits a $140 primary professional claim for two service lines:
Line 1 for $120
Line 2 for $20.
The primary payer pays $80 total:
$60 toward the $120 line 1 charge
$20 toward the $20 line 2 charge
The primary payer lists $60 in adjustments for the remaining line 1 charges:
A $35 contractual write-off
A $25 patient responsibility (co-insurance amount)
ERA for the primary claim
The above payments and adjustments are reflected in the ERA response for the primary claim:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { "claimStatusCode": "1", "totalClaimChargeAmount": "140.00", "claimPaymentAmount": "80.00", ... }, "serviceLines": [ { "servicePaymentInformation": { "lineItemChargeAmount": "120.00", // Billed amount for service line 1 "lineItemProviderPaymentAmount": "60.00", // Paid amount for service line 1 ... }, "serviceAdjustments": [ { "claimAdjustmentGroupCode": "CO", // Contractual obligation adjustment "adjustmentReasonCode1": "45", // Contractual write-off "adjustmentAmount1": "35.00", // $35 contractual write-off ... }, { "claimAdjustmentGroupCode": "PR", // Patient responsibility adjustment "adjustmentReasonCode1": "2", // Co-insurance amount "adjustmentAmount1": "25.00", // $25 patient responsibility write-off ... } ] }, { "servicePaymentInformation": { "lineItemChargeAmount": "20.00", // Billed amount for service line 2 "lineItemProviderPaymentAmount": "20.00", // Paid amount for service line 2 ... } }, ... ] } ] } ] } ], ... }
Checklist for a balanced secondary claim
The examples below use Stedi’s Professional Claims JSON endpoint to submit a secondary professional claim.
To balance the claim, every payment and adjustment from the above ERA must be included in the claimInformation
object:
A $140 total charge in
claimChargeAmount
The $80 total payment in
otherSubscriberInformation[].payerPaidAmount
A $120 service-line charge for service line 1 in
serviceLines[].professionalService.lineItemChargeAmount
A $20 service-line charge for service line 2 in
serviceLines[].professionalService.lineItemChargeAmount
The $60 payment for service line 1 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
The $35 contractual write-off for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $25 patient responsibility for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $20 payment for service line 2 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
For simplicity, the example claims omit other required fields. For guidance, see our docs for submitting a secondary or tertiary professional claim.
Example: Balanced COB claim
Secondary claim
The following secondary claim correctly maps each payment and adjustment from the primary claim’s ERA to the claim submission request’s claimInformation
object:
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim balances:
$140 total charges = $80 payments ($60 + $20) + $60 adjustments ($35 + $25)
The secondary payer can process it successfully.
Example: Missing an adjustment
The following secondary claim leaves out the patient’s $25 co-insurance adjustment.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", "adjustmentAmount": "35.00", // $35 contractual write-off for service line 1 ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, // ❗ Missing $25.00 patient responsibility (co-insurance) for the service line 1 ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim is out of balance by $25. Not all adjustments were carried forward:
$140 ≠ $80 payments + $35 adjustments (short by $25)
The secondary payer will reject the claim.
Example: Missing a payment
The following secondary claim leaves out the primary payer’s $20 payment for service line 2.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "60.00", // $60 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing $20.00 payment for the service line 2 ... } ], ... }, ... }
Result
The claim is out of balance by $20. Not all payments were carried forward:
$140 ≠ $60 payments + $60 adjustments (short by $20)
The secondary payer will reject the claim.
Example: Missing all payments and adjustments
The following secondary claim leaves out all payments and adjustments from the primary claim’s ERA. This could happen if you file the secondary claim before waiting on the primary claim’s ERA or if you bill payers out of order.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge // ❗ Missing total payment from the primary payer "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, // ❗ Missing payment and adjustments for service line 1 ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing payment for service line 2 ... } ], ... }, ... }
Result
The secondary claim is completely out of balance. It doesn’t contain any payments or adjustments from the primary ERA:
$140 ≠ $0 payments + $0 adjustments (short by $140)
The secondary payer will reject the claim.
Get help with COB claims
If you have questions about billing order, balancing claims, or troubleshooting rejections, reach out.
Stedi customers get a dedicated Slack or Microsoft Teams channel. Our average response time is under 10 minutes.
If a patient has multiple health plans, each plan might pay for part of the patient’s care. The question is which one pays first.
Coordination of Benefits (COB) is the process that decides the billing order and makes sure no payer pays more than their share.
Once you know the billing order, COB seems simple: send the claim to the primary payer first, then the secondary, and so on.
But, in practice, about 5% of all claim rejections come from COB errors. Most happen because the numbers don’t line up.
When you submit a secondary or tertiary claim, payers expect you to show your math. For example, you have to include every payment and adjustment from the primary claim’s remit in the secondary claim. The amounts have to add up to the claim’s total charges. If a single dollar is off, the secondary claim will be rejected.
This guide shows how to balance COB claims using Stedi’s JSON Claims API endpoints.
How COB claim balancing works
1. Get the billing order.
Ask the patient or run a COB check to see which payer is primary, secondary, and so on. The billing order matters. Billing out of sequence may result in claim rejections.
2. Submit a claim to the primary payer.
After the claim is accepted, the primary payer adjudicates the claim and sends back one or more Electronic Remittance Advices (ERAs). The ERA shows what the primary payer paid and adjusted.
You typically receive an ERA about 7-20 business days after submitting a claim.
3. Check for crossover.
Sometimes, a payer automatically forwards the claim to the next payer. This is called a crossover claim. To check for a crossover, look at the ERA's claim status code:
19
– Processed as primary, forwarded to the secondary payer20
– Processed as secondary, forwarded to the tertiary payer21
– Processed as tertiary, forwarded to another payer
If you see one of these claim status codes, you don't need to submit a claim to the next payer.
The ERA also includes information about the crossover payer. For example, using the ERA Report endpoint’s response:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { // Processed as primary payer. Forwarded to secondary payer. "claimStatusCode": "19", ... }, "crossoverCarrier": { // Secondary crossover payer's information "organizationName": "ACME Health Services", "payorId": "12345", ... } } ] } ] }, ... ], ... }
4. Submit the secondary claim (if no crossover)
Wait to submit the secondary claim until you’ve received ERA(s) for the primary claim.
The secondary claim should list the same service lines and total charges as the primary claim, since both refer to the same encounter and services. To make sure the claim balances, use this rule:
Total charges = All payments + All adjustments
If the math doesn’t add up, the secondary payer will reject the claim to avoid overpayment.
For guidance on submitting secondary or tertiary claims, see our docs:
5. Submit additional claims (if needed)
Repeat step 4 for tertiary claims and beyond. Be sure to wait for ERAs from any previous claims so you can include accurate payments and adjustments.
Examples
The following examples show how COB claim balancing works. Each example starts with the same base scenario:
The provider submits a $140 primary professional claim for two service lines:
Line 1 for $120
Line 2 for $20.
The primary payer pays $80 total:
$60 toward the $120 line 1 charge
$20 toward the $20 line 2 charge
The primary payer lists $60 in adjustments for the remaining line 1 charges:
A $35 contractual write-off
A $25 patient responsibility (co-insurance amount)
ERA for the primary claim
The above payments and adjustments are reflected in the ERA response for the primary claim:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { "claimStatusCode": "1", "totalClaimChargeAmount": "140.00", "claimPaymentAmount": "80.00", ... }, "serviceLines": [ { "servicePaymentInformation": { "lineItemChargeAmount": "120.00", // Billed amount for service line 1 "lineItemProviderPaymentAmount": "60.00", // Paid amount for service line 1 ... }, "serviceAdjustments": [ { "claimAdjustmentGroupCode": "CO", // Contractual obligation adjustment "adjustmentReasonCode1": "45", // Contractual write-off "adjustmentAmount1": "35.00", // $35 contractual write-off ... }, { "claimAdjustmentGroupCode": "PR", // Patient responsibility adjustment "adjustmentReasonCode1": "2", // Co-insurance amount "adjustmentAmount1": "25.00", // $25 patient responsibility write-off ... } ] }, { "servicePaymentInformation": { "lineItemChargeAmount": "20.00", // Billed amount for service line 2 "lineItemProviderPaymentAmount": "20.00", // Paid amount for service line 2 ... } }, ... ] } ] } ] } ], ... }
Checklist for a balanced secondary claim
The examples below use Stedi’s Professional Claims JSON endpoint to submit a secondary professional claim.
To balance the claim, every payment and adjustment from the above ERA must be included in the claimInformation
object:
A $140 total charge in
claimChargeAmount
The $80 total payment in
otherSubscriberInformation[].payerPaidAmount
A $120 service-line charge for service line 1 in
serviceLines[].professionalService.lineItemChargeAmount
A $20 service-line charge for service line 2 in
serviceLines[].professionalService.lineItemChargeAmount
The $60 payment for service line 1 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
The $35 contractual write-off for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $25 patient responsibility for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $20 payment for service line 2 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
For simplicity, the example claims omit other required fields. For guidance, see our docs for submitting a secondary or tertiary professional claim.
Example: Balanced COB claim
Secondary claim
The following secondary claim correctly maps each payment and adjustment from the primary claim’s ERA to the claim submission request’s claimInformation
object:
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim balances:
$140 total charges = $80 payments ($60 + $20) + $60 adjustments ($35 + $25)
The secondary payer can process it successfully.
Example: Missing an adjustment
The following secondary claim leaves out the patient’s $25 co-insurance adjustment.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", "adjustmentAmount": "35.00", // $35 contractual write-off for service line 1 ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, // ❗ Missing $25.00 patient responsibility (co-insurance) for the service line 1 ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim is out of balance by $25. Not all adjustments were carried forward:
$140 ≠ $80 payments + $35 adjustments (short by $25)
The secondary payer will reject the claim.
Example: Missing a payment
The following secondary claim leaves out the primary payer’s $20 payment for service line 2.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "60.00", // $60 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing $20.00 payment for the service line 2 ... } ], ... }, ... }
Result
The claim is out of balance by $20. Not all payments were carried forward:
$140 ≠ $60 payments + $60 adjustments (short by $20)
The secondary payer will reject the claim.
Example: Missing all payments and adjustments
The following secondary claim leaves out all payments and adjustments from the primary claim’s ERA. This could happen if you file the secondary claim before waiting on the primary claim’s ERA or if you bill payers out of order.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge // ❗ Missing total payment from the primary payer "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, // ❗ Missing payment and adjustments for service line 1 ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing payment for service line 2 ... } ], ... }, ... }
Result
The secondary claim is completely out of balance. It doesn’t contain any payments or adjustments from the primary ERA:
$140 ≠ $0 payments + $0 adjustments (short by $140)
The secondary payer will reject the claim.
Get help with COB claims
If you have questions about billing order, balancing claims, or troubleshooting rejections, reach out.
Stedi customers get a dedicated Slack or Microsoft Teams channel. Our average response time is under 10 minutes.
If a patient has multiple health plans, each plan might pay for part of the patient’s care. The question is which one pays first.
Coordination of Benefits (COB) is the process that decides the billing order and makes sure no payer pays more than their share.
Once you know the billing order, COB seems simple: send the claim to the primary payer first, then the secondary, and so on.
But, in practice, about 5% of all claim rejections come from COB errors. Most happen because the numbers don’t line up.
When you submit a secondary or tertiary claim, payers expect you to show your math. For example, you have to include every payment and adjustment from the primary claim’s remit in the secondary claim. The amounts have to add up to the claim’s total charges. If a single dollar is off, the secondary claim will be rejected.
This guide shows how to balance COB claims using Stedi’s JSON Claims API endpoints.
How COB claim balancing works
1. Get the billing order.
Ask the patient or run a COB check to see which payer is primary, secondary, and so on. The billing order matters. Billing out of sequence may result in claim rejections.
2. Submit a claim to the primary payer.
After the claim is accepted, the primary payer adjudicates the claim and sends back one or more Electronic Remittance Advices (ERAs). The ERA shows what the primary payer paid and adjusted.
You typically receive an ERA about 7-20 business days after submitting a claim.
3. Check for crossover.
Sometimes, a payer automatically forwards the claim to the next payer. This is called a crossover claim. To check for a crossover, look at the ERA's claim status code:
19
– Processed as primary, forwarded to the secondary payer20
– Processed as secondary, forwarded to the tertiary payer21
– Processed as tertiary, forwarded to another payer
If you see one of these claim status codes, you don't need to submit a claim to the next payer.
The ERA also includes information about the crossover payer. For example, using the ERA Report endpoint’s response:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { // Processed as primary payer. Forwarded to secondary payer. "claimStatusCode": "19", ... }, "crossoverCarrier": { // Secondary crossover payer's information "organizationName": "ACME Health Services", "payorId": "12345", ... } } ] } ] }, ... ], ... }
4. Submit the secondary claim (if no crossover)
Wait to submit the secondary claim until you’ve received ERA(s) for the primary claim.
The secondary claim should list the same service lines and total charges as the primary claim, since both refer to the same encounter and services. To make sure the claim balances, use this rule:
Total charges = All payments + All adjustments
If the math doesn’t add up, the secondary payer will reject the claim to avoid overpayment.
For guidance on submitting secondary or tertiary claims, see our docs:
5. Submit additional claims (if needed)
Repeat step 4 for tertiary claims and beyond. Be sure to wait for ERAs from any previous claims so you can include accurate payments and adjustments.
Examples
The following examples show how COB claim balancing works. Each example starts with the same base scenario:
The provider submits a $140 primary professional claim for two service lines:
Line 1 for $120
Line 2 for $20.
The primary payer pays $80 total:
$60 toward the $120 line 1 charge
$20 toward the $20 line 2 charge
The primary payer lists $60 in adjustments for the remaining line 1 charges:
A $35 contractual write-off
A $25 patient responsibility (co-insurance amount)
ERA for the primary claim
The above payments and adjustments are reflected in the ERA response for the primary claim:
{ "transactions": [ { "detailInfo": [ { "paymentInfo": [ { "claimPaymentInfo": { "claimStatusCode": "1", "totalClaimChargeAmount": "140.00", "claimPaymentAmount": "80.00", ... }, "serviceLines": [ { "servicePaymentInformation": { "lineItemChargeAmount": "120.00", // Billed amount for service line 1 "lineItemProviderPaymentAmount": "60.00", // Paid amount for service line 1 ... }, "serviceAdjustments": [ { "claimAdjustmentGroupCode": "CO", // Contractual obligation adjustment "adjustmentReasonCode1": "45", // Contractual write-off "adjustmentAmount1": "35.00", // $35 contractual write-off ... }, { "claimAdjustmentGroupCode": "PR", // Patient responsibility adjustment "adjustmentReasonCode1": "2", // Co-insurance amount "adjustmentAmount1": "25.00", // $25 patient responsibility write-off ... } ] }, { "servicePaymentInformation": { "lineItemChargeAmount": "20.00", // Billed amount for service line 2 "lineItemProviderPaymentAmount": "20.00", // Paid amount for service line 2 ... } }, ... ] } ] } ] } ], ... }
Checklist for a balanced secondary claim
The examples below use Stedi’s Professional Claims JSON endpoint to submit a secondary professional claim.
To balance the claim, every payment and adjustment from the above ERA must be included in the claimInformation
object:
A $140 total charge in
claimChargeAmount
The $80 total payment in
otherSubscriberInformation[].payerPaidAmount
A $120 service-line charge for service line 1 in
serviceLines[].professionalService.lineItemChargeAmount
A $20 service-line charge for service line 2 in
serviceLines[].professionalService.lineItemChargeAmount
The $60 payment for service line 1 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
The $35 contractual write-off for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $25 patient responsibility for service line 1 in
serviceLines[].lineAdjudicationInformation[].claimAdjustmentInformation[].adjustmentDetails[].adjustmentAmount
The $20 payment for service line 2 in
serviceLines[].lineAdjudicationInformation[].serviceLinePaidAmount
For simplicity, the example claims omit other required fields. For guidance, see our docs for submitting a secondary or tertiary professional claim.
Example: Balanced COB claim
Secondary claim
The following secondary claim correctly maps each payment and adjustment from the primary claim’s ERA to the claim submission request’s claimInformation
object:
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim balances:
$140 total charges = $80 payments ($60 + $20) + $60 adjustments ($35 + $25)
The secondary payer can process it successfully.
Example: Missing an adjustment
The following secondary claim leaves out the patient’s $25 co-insurance adjustment.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "80.00", // $80 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", "adjustmentAmount": "35.00", // $35 contractual write-off for service line 1 ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, // ❗ Missing $25.00 patient responsibility (co-insurance) for the service line 1 ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "20.00", // $20 paid by primary payer for service line 2 "otherPayerPrimaryIdentifier": "12345", ... } ], ... } ], ... }, ... }
Result
The claim is out of balance by $25. Not all adjustments were carried forward:
$140 ≠ $80 payments + $35 adjustments (short by $25)
The secondary payer will reject the claim.
Example: Missing a payment
The following secondary claim leaves out the primary payer’s $20 payment for service line 2.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge "otherSubscriberInformation": [ { // Primary payer's information "otherPayerName": { "otherPayerIdentifier": "12345", "otherPayerOrganizationName": "ACME Health Services", ... }, "payerPaidAmount": "60.00", // $60 total payment from primary payer ... } ], "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, "lineAdjudicationInformation": [ { "serviceLinePaidAmount": "60.00", // $60 paid by primary payer for service line 1 "claimAdjustmentInformation": [ { "adjustmentGroupCode": "CO", "adjustmentDetails": [ { "adjustmentReasonCode": "45", // $35 contractual write-off for service line 1 "adjustmentAmount": "35.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... }, { "claimAdjustmentInformation": [ { "adjustmentGroupCode": "PR", "adjustmentDetails": [ { "adjustmentReasonCode": "2", // $25 patient responsibility (co-insurance) for service line 1 "adjustmentAmount": "25.00", ... } ] } ], "otherPayerPrimaryIdentifier": "12345", ... } ], ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing $20.00 payment for the service line 2 ... } ], ... }, ... }
Result
The claim is out of balance by $20. Not all payments were carried forward:
$140 ≠ $60 payments + $60 adjustments (short by $20)
The secondary payer will reject the claim.
Example: Missing all payments and adjustments
The following secondary claim leaves out all payments and adjustments from the primary claim’s ERA. This could happen if you file the secondary claim before waiting on the primary claim’s ERA or if you bill payers out of order.
Secondary claim
{ "subscriber": { "paymentResponsibilityLevelCode": "S", // Claim for secondary payer ... }, "claimInformation": { "claimChargeAmount": "140.00", // $140 total charge // ❗ Missing total payment from the primary payer "serviceLines": [ { "professionalService": { "lineItemChargeAmount": "120.00", // $120 charge for service line 1 ... }, // ❗ Missing payment and adjustments for service line 1 ... }, { "professionalService": { "lineItemChargeAmount": "20.00", // $20 charge for service line 2 ... }, // ❗ Missing payment for service line 2 ... } ], ... }, ... }
Result
The secondary claim is completely out of balance. It doesn’t contain any payments or adjustments from the primary ERA:
$140 ≠ $0 payments + $0 adjustments (short by $140)
The secondary payer will reject the claim.
Get help with COB claims
If you have questions about billing order, balancing claims, or troubleshooting rejections, reach out.
Stedi customers get a dedicated Slack or Microsoft Teams channel. Our average response time is under 10 minutes.
Share
Get started with Stedi
Get started with Stedi
Automate healthcare transactions with developer-friendly APIs that support thousands of payers. Contact us to learn more and speak to the team.
Get updates on what’s new at Stedi
Get updates on what’s new at Stedi
Get updates on what’s new at Stedi
Developers
Resources
Get updates on what’s new at Stedi
Backed by
Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.
Get updates on what’s new at Stedi
Backed by
Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.
Developers
Resources
Get updates on what’s new at Stedi
Backed by
Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.