Technical Reference Guide
The Optum Real APIs for Medical Providers Technical Reference Guide will contain all of the essential information the user will need to integrate with an API and serve as a ready reference source should you encounter a problem.
Note: This guide is intended to be referenced by information technology personnel.****
The Real Claim Inquiry API takes the standard X12 EDI 837 transaction. All API traffic is encrypted over HTTPS and authentication is handled with OAuth2.
Test API in sandbox or in production
- Use token generated using client ID and secret key for sandbox or production.
- Download API specs from overview page - every API overview section provides links to download the file in a JSON format, which generates our documentation for developers to use.
- Hit API endpoint through the following options:
- Use Try It page to request complete API response or customize response for sandbox endpoint only.
OR - Use Postman to request complete API response or customize response for Sandbox and Production API endpoint.
Sandbox use for live and mock data testing
- Customers must have purchased an API with status “subscribed” in the AI Marketplace account, please work with API consultant to associate provider TIN(s) before sending live data to sandbox environment.
- Customers must use their sandbox credentials to send live data to the sandbox environment for the API purchased.
At this point, responses will be based on the live data submitted to the sandbox environment as opposed to mock data preloaded to the sandbox environment. - The customer will retain the ability to query mock responses from a sandbox environment by using an optional request header called “environment”. By placing the value “sandbox" in the optional header, the request return mock responses.
NOTE: Do not submit PHI or PII data in the TRY IT page.
Notes:
DO NOT perform load testing or production data testing in the sandbox environment. Please use the sandbox ONLY to view sample API responses to HTTP requests using our predefined values and to familiarize yourself with our APIs.
To perform load testing and production data testing, we recommend using our APIs in the production environment.
API endpoint
Instance | API Endpoint | Description |
---|---|---|
Optum Real Claim Inquiry sandbox | https://sandbox-apigw.optum.com/oihub/claim/inquiry/v1 | Use previously generated bearer token test API through this URL |
Optum Real Claim Inquiry production | https://apigw.optum.com/oihub/claim/inquiry/v1 | Use previously generated production bearer token test API through this URL |
HTTP response codes
Code | Description |
---|---|
200 | Success response |
401 | Unauthorized - authentication failed |
500 | Internal server error - problem occurred on the server |
400 | Bad request - includes schema level validation errors |
Request Elements
Query Parameter | Type | Description |
---|---|---|
payerId | Mandatory | For all queries |
documentId | Conditional | Only for GetDocument. |
transactionId | Conditional | Only for Search277CA. |
ticketType | Conditional | Specify the Ticket Type like PEND or RECON or APPEAL. |
claimNumber | Conditional | Only needed for Search Claim by Claim #. |
patientAccountNumber | Conditional | Only needed for Search Claim by PAN. |
memberId | Conditional | Only needed for Search Claim by Member. |
memberFirstName | Conditional | Only needed for Search Claim by Member. |
memberLastName | Conditional | Only needed for Search Claim by Member. |
memberDateOfBirth | Conditional | Only needed for Search Claim by Member. |
memberPolicy | Conditional | Only needed for Search Claim by Member. |
serviceStartDate | Conditional | Only needed for Search Claim by Member or Provider TIN. |
serviceEndDate | Conditional | Only needed for Search Claim by Member or Provider TIN. |
coverageType | Optional | Default is Medical. |
ticketNumber | Conditional | Only for SearchClaimTicket by TicketNumber. |
ticketFromDate | Conditional | Only for SearchClaimTicket by a DOS range. |
ticketToDate | Conditional | Only for SearchClaimTicket by a DOS range. |
Criteria by Operation
Operation | Description | Key Parameters |
---|---|---|
SearchClaim | Retrieve both summary and detailed information based on search parameters. | Payer ID - Required claimNumber (Only needed for Search Claim by claimnumber.) patientAccountNumber (Only needed for Search Claim by PAN.) Below are only needed as input if search claim by member: memberId memberFirstName memberLastName memberDateOfBirth serviceStartDate serviceEndDate |
SearchClaimTicket | Search for claim RECON or PEND or APPEALTickets based on Ticket Number or date range (30 days max range). Note: 'attachmentList' in response will only be available for a ticket number search. | ticketType(Required) Below are only needed as input if search claimticket by member: ticketNumber ticketFromDate and ticketToDate combinations |
Search277CA | Search for claim 277CA. | transactionId (Required) tin is Not Mandatory for this search |
GetClaimLineAction | Retrieve available actions at a service line level. | claimActionIdentifier (Required) lineKeys (Required) |
GetDocument | Download document | documentId (Required) |
Supported Payer ID and Criteria
Payer ID | Member ID + DOB | Patient Account Number | Claim Number | Provider TIN + DOB |
---|---|---|---|---|
87726 | Y | Y | Y | Y (except USP) |
25463 | Y (Member FN, LN+ DOB) | N | N | N |
39026 | Y | Y | Y | N |
74227 | Y (Member ID + DOB) | N | N | N |
LIFE1 | Y | N | N | N |
WELM2 | Y | N | N | N |
06111 | Y | Y | Y | N |
96385 | Y | Y | Y | Y |
37602 | Y | Y | Y | Y |
03432 | Y | Y | Y | Y |
95467 | Y | Y | Y | Y |
86050 | Y | Y | Y | Y |
86047 | Y | Y | Y | Y |
95378 | Y | Y | Y | Y |
Query Sample for Request by Operation
Request Operation | Description | Query sample |
---|---|---|
SearchClaim | Retrieve both summary and detailed information based on search parameters. | { "query": "query searchClaim($searchClaimInput: SearchClaimInput!) { searchClaimResponse(input: $searchClaimInput) {claims{ claimNumber claimReceiptLocatorNumber claimStatus hasClaimDetails member { subscriberId policyNumber firstName lastName dateOfBirth } provider { submitted{ billingTin billingProviderName billingNpi renderingProviderName } adjudicated{ billingTinPrefix billingTin billingTinSuffix billingProviderName billingNpi renderingProviderName } } claimEvents { receivedDate processedDate processedTime serviceStartDate serviceEndDate statusEffectiveDate } claimLevelInfo { patientAccountNumber claimType providerNetworkStatus claimFlagTag surpriseMedicalBillingIndicator surpriseMedicalBillingState } claimLevelTotalAmount { totalBilledChargeAmount totalProviderWriteOffAmount totalPatientNotCoveredAmount totalProviderNotCoveredAmount totalAllowedAmount totaldeductibleAmount totalCopayAmount totalCoinsAmount totalPaidAmount totalPatientResponsibilityAmount } payments { paymentNumber adjudicatedClaimPaymentNumber adjudicatedClaimPaymentAmount checkSeriesDesignator paymentModeCode paymentAmount paymentIssueDate claimPayeeAssignmentCode payeeName payeeAddress { addressLine cityName state zip } } claimStatusCrosswalkData{ claim507Code claim507CodeDesc claim508Code claim508CodeDesc adjudicatedClaimSuffixCode adjudicatedClaimPaymentNumber } claimAdjudicationCodes{ claimCodeType code description } documents { documentType documentCreatedDate documentReceivedDate documentName documentId } claimDetailedInformation{ claimNumber adjudicatedClaimSummaryStatus claimActionIdentifier allowedActions payerId coordinationOfBenefits{ cobPayerId claimOIPaidAmount otherInsuredName submittedCobIndicator cobPayerType cobDesc cobPolicyDesc cobPaymentType adjudicatedCobIndicator cobMedicalCalcType cobCommercialCalcType } diagnosisCodes{ diagnosisSequenceNumber diagnosisCode diagnosisCodeType } claimDetailEvents{ receivedDate initialDecisionDate lastDenialDate } claimLevelIndicators{ claimReprocessedIndicator paymentToEnrolleeCode isCapitationIndicator electronicPayerID placeOfService payerType } patientInfo{ patientName patientGroupNumber patientSubscriberNumber patientRelationship } claimLineActions{ ticketType allowedAction actionMessage allowedReconReasons requiredConsentForm note documentLink ticketDetails{ ticketNumber ticketSubmitDate ticketStatus ticketOutcome ticketReason isClosed lastUpdatedDate lastComment } } lines{ lineKey lineNumber unitCount serviceCode revenueCode linePaymentServiceCode procedureCode procedureTypeCode modifiers diagnosisPointers lineEvents { processedDate processedTime serviceStartDate serviceEndDate } lineLevelTotalAmounts{ billedChargeAmount notCoveredAmount providerNotCoveredAmount patientNotCoveredAmount providerWriteOffAmount allowedAmount deductibleAmount copayAmount coinsuranceAmount paidAmount memberResponsiblityAmount medicarePaidAmount reserveAmount qualifiedPaymentAmount } lineIndicators { inventoryControlNumberSuffix inventoryControlNumberSuffixVersion providerNetworkStatus transactionCode causeCode overrideCode planCoveragePercent capitationIndicator capFundType lineLevelPlaceOfService surpriseMedicalBillingIndicator surpriseMedicalBillingState providerGroupOfferPercentage } lineAdjudicationCodes { type code description } }} }pagination{ hasMoreRecords nextPageToken } } }", "variables": { "searchClaimInput": { "claimNumber": "1234567890", "patientAccountNumber": "1234567890", "memberId": "1234567890", "memberFirstName": "John", "memberLastName": "Cena", "memberDateOfBirth": "10/1/1975", "memberPolicy": "002781", "serviceStartDate": "01/01/2025", "serviceEndDate": "10/01/2025", "payerId": "87726" } }, "operationName": "searchClaim" } |
SearchClaimTicket | Search for claim RECON or PEND or APPEAL tickets based on Ticket Number or date range (30 days max range). Note: 'attachmentList' in response will only be available for a ticket number search. | { "query": "query searchClaimTicket($searchClaimTicketInput: SearchClaimTicketInput!) { searchClaimTicketResponse(input: $searchClaimTicketInput) { ticketDetails{ ticketNumber ticketStatus ticketSubmitDate ticketType lastUpdatedDate isClosed ticketOutcome ticketReason } comments{ addedBy addedOn comment } claimInfo { claimNumber isOwedAmountUnknown claimAmountOwed totalBilledChargedAmount claimStatus serviceStartDate patientAccountNumber claimType inventoryControlNumber } member { memberId dateOfBirth firstName middleInitial lastName policyNumber relationshipCode dependentSequenceNumber } provider{ adjudicated{ billingTin billingProviderName billingProviderMpin renderingProviderName renderingProviderMpin } } operatorInfo{ name emailId phoneNumber } payerInfo { payerName payerId } attachmentList{ ticketNumber ticketType fileName reportTypeCode reportTypeDesc documentId } }}", "variables": { "searchClaimTicketInput": { "ticketNumber": "840868613", "ticketType": "RECON", "ticketFromDate": "2020-07-27", "ticketToDate": "2020-08-27", "payerId": "87726" } }, "operationName": "searchClaimTicket" } |
Search277CA | Search for claim 277CA. | { "query": "query search277CA($search277CAInput: Search277CAInput!) { search277CAResponse(input: $search277CAInput) { responseType x12ResponseData statuscode message }}", "variables": { "search277CAInput": { "transactionId": "840868613", "payerId": "87726" } }, "operationName": "search277CA" } |
GetClaimLineAction | Retrieve available actions at a service line level. | { "query": "query getClaimLineAction($claimLineActionInput: GetClaimLineActionInput!) { getClaimLineActionResponse(input: $claimLineActionInput) { claimLineActions { ticketType allowedAction actionMessage allowedReconReasons requiredConsentForm note documentLink ticketDetails { ticketNumber ticketStatus ticketSubmitDate ticketOutcome } } } }", "variables": { "claimLineActionInput": { "claimActionIdentifier": "840868613", "payerId": "87726", "lineKeys": [ "1", "2", "5" ] } |
GetDocument | Download document | { "query": "query getDocument($documentInput: GetDocumentInput!) { getDocumentResponse(input: $documentInput) { base64Document }}", "variables": { "documentInput": { "documentID": "840868613", "payerId": "87726" } }, "operationName": "getDocument" } |
Sample Response by Operation
Response | Description | Query response |
---|---|---|
SearchClaimTicket | Search for claim RECON or PEND or APPEAL Tickets based on Ticket Number or date range (30 days max range). Note: 'attachmentList' in response will only be available for a ticket number search. | { "data": { "searchClaimTicketResponse": [ { "ticketDetails": { "ticketNumber": "RECON-001", "ticketStatus": "Under Review", "ticketSubmitDate": "07/27/2020", "ticketType": "RECON", "lastUpdatedDate": "07/27/2020", "isClosed": false, "ticketOutcome": "", "ticketReason": "" }, "comments": [ { "addedBy": "Claim Specialist", "addedOn": "05/04/2025", "comment": "Review of this claim concluded that the claim processed appropriately according to the terms of the patient's health benefit plan. Questions? We're here to help. For more information about this claim decision, including a link to the applicable reimbursement policies, you can use the member info to search for this or any related claims. Once you've located your claim, in the CLAIM DETAILS - LINE ITEMS section, select 'view' under the details column." }, { "addedBy": "System", "addedOn": "04/07/2025", "comment": "Under Review" } ], "claimInfo": { "claimNumber": "12344455", "isOwedAmountUnknown": false, "claimAmountOwed": "123.45", "totalBilledChargedAmount": "46.00", "claimStatus": "F", "serviceStartDate": "06/01/2025", "patientAccountNumber": "A12345", "claimType": "P", "inventoryControlNumber": "AB12345678" }, "member": { "memberId": "483865773", "dateOfBirth": "09/16/1965", "firstName": "John", "lastName": "Cena", "middleInitial": "A", "policyNumber": "01234", "relationshipCode": "EE", "dependentSequenceNumber": "01" }, "provider": { "adjudicated": { "billingTin": "483865773", "billingProviderName": "Hospital Central", "billingProviderMpin": "123345645", "renderingProviderName": "Dr John", "renderingProviderMpin": "123345645" } }, "operatorInfo": { "name": "Cari Helly", "emailId": "[email protected] ", "phoneNumber": "91312121212" }, "payerInfo": { "payerName": "UnitedHealthcare", "payerId": "UHC001" }, "attachmentList": [ { "ticketNumber": "PIQ-1234561", "ticketType": "RECON", "fileName": "2021-TEST-Calendar-United-States.pdf", "reportTypeCode": "OZ", "reportTypeDesc": "Support Data for Claim", "documentId": "111111-11111-111-11-11111c79%attach_2021-11_v1~~~" }, { "ticketNumber": "PIQ-1234562", "ticketType": "RECON", "fileName": "2021-TEST-Calendar-United-States2.pdf", "reportTypeCode": "OZ", "reportTypeDesc": "Support Data for Claim", "documentId": "111111-111112-111-11-11111c79%attach_2021-11_v1~~~" } ] } ] }} |
Search277CA | Search for claim 277CA. | { "data": { "search277CAResponse": { "responseType": "277CA-CH", "x12ResponseData": "X12RESPONSEDATA", "statuscode": "000", "message": "" } } } |
GetClaimLineAction | Retrieve available actions at a service line level. | claimActionIdentifier (required) lineKeys (required) { "data": { "getClaimLineActionResponse": { "claimLineActions": [ { "ticketType": "Recon", "allowedAction": "create", "actionMessage": "disallowed action message", "allowedReconReasons": [ "RECON_REASON_1", "RECON_REASON_2" ], "requiredConsentForm": null, "note": null, "documentLink": null, "ticketDetails": [] }, { "ticketType": "Appeal", "allowedAction": "create", "actionMessage": "disallowed action message", "allowedReconReasons": [], "requiredConsentForm": "AOR", "note": "Consent form is required only when the appeal is submitted on behalf of member.", "documentLink": "https://maelstrom-dmz-nonprod.uhcprovider.com/cdn/uhcp/documents/claims/appeal-messaging/WOL.pdf", "ticketDetails": [ { "ticketNumber": "1234567890", "ticketStatus": "", "ticketSubmitDate": "06/06/2021", "ticketOutcome": "" } ] } ] } } } |
GetDocument | Download document | documentId (required) { "data": { "getDocumentResponse": { "base64Document": "" } } } |
Updated 11 days ago