Skip to main content

Adjudication Complete Event

The adjudication_complete event is sent when a claim adjudication has finished processing. This is the primary webhook event for receiving adjudication results in real time.

Payload

The eventPayload contains the full claim data — the same structure returned by GET /v1/claims?id={claim_id} — including the original claim fields, parsed evidence, and adjudication results.

{
"eventId": "evt_adj_001",
"eventType": "adjudication_complete",
"eventPayload": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"claim_number": "CLM-2025-00042",
"claim_amount": 15000,
"service_start_date": "2025-03-10",
"service_end_date": "2025-03-10",
"submission_date": "2025-03-15",
"provider": "Lakewood Family Dentistry",
"employer": "Acme Corp",
"description": "Routine dental cleaning and X-rays",
"expense_category": "Dental",
"expense_type": "Preventive Care",
"plan_name": "Acme 2025 Medical FSA",
"plan_type": "medical_fsa",
"plan_year_start": "2025-01-01",
"plan_year_end": "2025-12-31",
"final_submission_date": "2026-03-31",
"final_service_date": "2025-12-31",
"adjudication_results": {
"silver_recommendation": "approve",
"valid_service_date": true,
"valid_total_amount": true,
"out_of_pocket_total": 15000,
"suggested_service_date_start": null,
"suggested_service_date_end": null,
"deny_code": null,
"deny_text": null,
"suggested_provider_name": null
},
"receipts": [
{
"merchant": "Lakewood Family Dentistry",
"purchased_at": "2025-03-10",
"total_eligible_amount": 15000,
"items": [
{
"title": "Dental Cleaning",
"sku": "D1110",
"sku_type": "CDT",
"line_item_price": 10000,
"claimable_amount": 10000,
"eligible": true
},
{
"title": "Dental X-Rays (Bitewing)",
"sku": "D0274",
"sku_type": "CDT",
"line_item_price": 5000,
"claimable_amount": 5000,
"eligible": true
}
]
}
],
"medical_invoices": [],
"dependent_care_invoices": [],
"statement_of_accounts": []
}
}
Amounts are in cents

All monetary values are integers representing cents. For example, 15000 represents $150.00.

Field Reference

Top-Level Fields

FieldTypeDescription
eventIdstringUnique event identifier — use for idempotency
eventTypestringAlways "adjudication_complete" for this event
eventPayloadobjectFull claim data including adjudication results

Adjudication Results

The adjudication_results object within eventPayload contains:

FieldTypeDescription
silver_recommendationstringSilver's recommendation (see below)
valid_service_datebooleanWhether the claimed service dates are within the plan year
valid_total_amountbooleanWhether the claimed amount matches the evidence
out_of_pocket_totalintegerTotal out-of-pocket amount from evidence (in cents)
suggested_service_date_startstringCorrected start date if evidence suggests a different date
suggested_service_date_endstringCorrected end date if evidence suggests a different date
deny_codestringMachine-readable denial reason code (null if not denied)
deny_textstringHuman-readable denial explanation (null if not denied)
suggested_provider_namestringProvider name from evidence if it differs from the submitted name

Recommendation Values

ValueDescription
approveThe claim is recommended for approval. The evidence supports the claim.
denyThe claim is recommended for denial. The evidence does not support the claim.
needs_reviewThe claim requires manual review. The automated system could not make a confident determination.
not_neededAdjudication is not needed for this claim type.
request_more_informationAdditional information or evidence is needed before a determination can be made.

Parsed Evidence

The eventPayload includes parsed evidence in four arrays:

FieldDescription
receiptsPurchase receipts with merchant, line items, and eligibility per item
medical_invoicesMedical invoices/EOBs with service-level charges, insurance payments, and patient responsibility
dependent_care_invoicesDependent care invoices with charges, payments, and DCFSA eligibility
statement_of_accountsProvider account statements with ledger entries

Handling the Event

def handle_adjudication_complete(event_payload):
recommendation = event_payload["adjudication_results"]["silver_recommendation"]
claim_number = event_payload["claim_number"]

if recommendation == "approve":
# Process approval — initiate reimbursement
amount_cents = event_payload["adjudication_results"]["out_of_pocket_total"]
process_approval(claim_number, amount_cents)
elif recommendation == "deny":
# Handle denial — notify relevant parties
deny_reason = event_payload["adjudication_results"]["deny_text"]
process_denial(claim_number, deny_reason)
elif recommendation == "needs_review":
# Queue for manual review
queue_for_review(claim_number, event_payload)
elif recommendation == "request_more_information":
# Request additional evidence from the participant
request_more_info(claim_number, event_payload)