Overview
The following data dictionary includes all the essential information you will need to integrate with our Dental Attachments API and serves as a ready reference source should you encounter a problem. It is intended to support developers, analysts, and stakeholders in understanding the structure, usage, and expected values of the data exchanged through the system.
Use this data dictionary:
- As a reference when integrating with or troubleshooting the API/data interface.
- Ensure all required fields are populated when constructing requests.
- Refer to the HTTP status codes section for guidance on resolving issues.
Query examples — See the following example queries or API requests that illustrate the usage and expected formats; useful for developers and testers to understand expected formats and usage patterns.
Request body — Defines the input parameters required for API calls or data queries. Includes field names, data types, required/optional status, and descriptions.
Parameters — Provide required and optional fields for the API calls.
Response body — Lists the fields returned in the response payload. Includes field names, data types, formats, and descriptions.
NOTE
Please note that our APIs are private and secure, and require unique credentials to generate a Bearer token and gain access to. Please (generate a Bearer token based on your API environment) to obtain access to our APIs.
URLs
| Sandbox | Production |
|---|---|
Generate Bearer token — https://sandbox-apigw.optum.com/apip/auth/sntl/v1/token | Generate Bearer token — https://apigw.optum.com/apip/auth/sntl/v1/token |
Health check — https://sandbox-apigw.optum.com/dental/attachments/v1/healthcheck | Health check — https://apigw.optum.com/dental/attachments/v1/healthcheck |
Create Attachments by Uploading Documents — https://sandbox-apigw.optum.com/dental/attachments/v1/attachments/documents | Create Attachments by Uploading Documents — https://apigw.optum.com/dental/attachments/v1/documents |
Search for Attachments by IDs — https://sandbox-apigw.optum.com/dental/attachments/v1/attachments/documents/search | Search for Attachments by IDs — https://apigw.optum.com/dental/attachments/v1/attachments/documents/search |
Create Attachments by Uploading Documents and Enabling Image Intelligence — https://sandbox-apigw.optum.com/dental/attachments/v1/attachments/documents/image-intelligence | Create Attachments by Uploading Documents and Enabling Image Intelligence — https://apigw.optum.com/dental/attachments/v1/attachments/documents/image-intelligence |
Generate a Bearer token
Click Generate Bearer Token for Optum Real Dental APIs, for steps, see Generate a Bearer Token.
Dental Attachments OpenAPI Spec
To download, click Dental Attachments OpenAPI spec.
Perform API health check
All our API collections include a /healthcheck endpoint to verify that the connection to the API server is established and the API is operational. Our APIs can be accessed securely using Bearer token.
API TESTING/USING
- In our developer portal TryIt! interface
- You need to reapply the Bearer token within the Bearer token expiry span by entering it in the CREDENTIALS box to test/use different APIs.
- In your development platform
- The generated Bearer token need not be reapplied or re-entered to test/use different APIs; the same Bearer token will be used across all transactions during the full token lifespan, and you can automatically refresh the token just before it expires.
In the developer portal Try It! interface
- Paste the Bearer token (generated as mentioned in the preceding section), in the CREDENTIALS >> Bearer box as mentioned in the Generate a Bearer token section above.
- Click Try It! under the cURL Request box.
If the request was successful, the response shows such as, {"message": "Service is healthy"} in the RESPONSE box to indicate that the APIs are operational and are accessible. If the request failed, the reason shows in the RESPONSE box as listed in the HTTP Status Codes section at the end of this page or click the link in the TOC on the right.
Note that each API health message depends on the API being tested/used.
In your development platform
- Download our OpenAPI Spec (for example, to access a product OpenAPI spec you are using/testing, go to the required API Overview section >> click Download OpenAPI Spec.) and import it into the API project in your development platform.
- Expand the API collection folder and click the
Get Tokenendpoint to generate a Bearer token. - Click the
Bodytab and enter your unique secure credentials.grant_type: client_credentialsclient_id: your client_idclient_secret: your client_secret
- Send the request to generate a Bearer token.
- Now, click the
/healthcheckendpoint and send it view if the connection to the API server was established.
Apply the same token across all transactions during the full token lifespan and automatically refresh the token just before it expires.
If the request was successful, the response shows such as, {"message": "Service is healthy"} in the RESPONSE box to indicate that the APIs are operational and are accessible. If the request failed, the reason shows in the RESPONSE box as listed in the HTTP Status Codes section at the end of this page or click the link in the TOC on the right.
Note that each API health message depends on the API being tested/used.
For a list of status messages, see HTTP Status Codes.
Create Attachments by Uploading Documents
attachments/documents (link to Create Attachments API) — Providers can create Attachments by uploading the files with the required metadata in a single request. All attachments will be associated with a new Attachment Control Number and ClaimId, and will be considered Closed upon completion of the request.
TIP
- Choose an option to test/use our APIs, that is, in our developer portal TryIt! interface (you need to copy and paste the unexpired Bearer token generated for testing the Healthcheck) and/or in your development platform.
- Repeat the steps provided in the Perform API Healthcheck >> In your developer platform or In our developer portal TryIt! interface section.
You can use the example field values provided in the Parameters table).
NOTE
Supported File Types: BMP, JPG/JPEG, TIFF, PNG, PDF, TXT, DOC/DOCX, DICOM, GIF, RTF
Supported Number of Files: 1-10 files per request
Parameters
| Parameter | In Developer Portal | In Development Platform | Description |
|---|---|---|---|
files (required) | Enter (example given below) | Click the Body tab to enter (example given below) | Raw binary of the files to be uploaded as attachments |
claimId (required) | Enter | Click the Params tab to add | Claim ID associated with the attachments |
payerId (required) | Enter | Click the Params tab to add | Payer ID associated with the attachments |
memberId (required) | Enter | Click the Params tab to add | ID present on the insurance ID card |
providerNPI (required) | Enter | Click the Params tab to add | Provider NPI associated with the attachments |
submitterId (required) | Enter | Click the Params tab to add | Submitter ID associated with the attachments; requestor MUST have access to this submitter ID |
dateOfService (required) | Enter | Click the Params tab to add | First Date of Service associated with the attachments |
patientLastName (required) | Enter | Click the Params tab to add | Patient's last name, for example, "Atreides" |
patientFirstName (required) | Enter | Click the Params tab to add | Patient's first name, for example, "Paul" |
patientDateOfBirth (required) | Enter | Click the Params tab to add | Patient's date of birth, for example, "2000-01-01" |
billingProviderTaxId (required) | Enter | Click the Params tab to add | Billing provider tax ID associated with the attachments; requestor MUST have access to this billing provider tax ID (TIN) |
NOTE
Check the Headers and Body parameters to make sure that the values comply with the parameters provided in the Parameters table.
Request format
Content-Type:multipart/form-data- The request consists of three parts:
request(JSON): Contains claimmetadatafiles(binary): One or more attachment files (1-10 files)
--boundary`
`Content-Disposition: form-data; name=\"request\"`
`Content-Type: application/json
{
"claimId\": \"CLM-2024-001234\",
"payerId\": \"ABC12\",
"providerNPI\": \"1234567890\",
"dateOfService\": \"2024-01-15\",
"patientLastName\": \"Atreides\",
"patientFirstName\": \"Paul\",
"patientDateOfBirth\": \"2000-01-01\",
"memberId\": \"44444444\"
}
--boundary
Content-Disposition: form-data; name=\"files\"; filename=\"xray_image.pdf\";
Content-Type: application/pdf
[binary file content]
--boundary--
IMPORTANT
Please note that the request requires you to provide all the required field values. Please note that these required values are GREYED out, which are pre-populated example values and can be selected to view the canned response. To view the required fields, expand the + symbol (indicated by the
variablesfield below.
If the request was successful, the response shows "200 Successful response" and the information (see the following example) shows in the RESPONSE box. If the request failed, the reason shows in the RESPONSE box as listed in the HTTP Status Codes section at the end of this page or click the HTTPS Status Codes hyperlink in the TOC on the right.
{
"status": "CLOSED",
"createdAt": "2024-01-15T14:30:00Z",
"attachmentIds": [
"CHC#123456789055"
],
"attachmentControlNumber": "CHC#507f1f77bcf86cd799439011"
}
Search for Attachments by IDs
/documents/search (link to Search for Attachments by IDs API) — Payers can search for, retrieve, and download the original binary file with appropriate Content-Typeand Content-Disposition headers for all the requested Attachments by ID.
- Enter the attachment ID (created by performing the create attachments API).
- Click the + symbol to add 1 to 10 attachment IDs.
{
"attachmentIds": [
"CHC#123456789055",
"CHC#123456358902",
"CHC#122256789023"
]
}
Parameter
| Parameter | In Developer Portal | In Development Platform | Description |
|---|---|---|---|
attachmentsIds | Enter | Click the Body tab to add | A valid Optum Real Attachment ID or Attachment Control Number as received by a payer. |
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="xray_1.pdf"; attachmentControlNumber="507f1f77bcf86cd799439011"; attachmentId="023981023345"
Content-Type: application/pdf
[binary file content]
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="report_2.pdf"; attachmentControlNumber="507f1f77bcf86cd799439011"; attachmentId="023981023346"
Content-Type: application/pdf
[binary file content]
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Create Attachments by Uploading Documents and Enabling Image Intelligence
attachments/documents/image-intelligence (link to Create Attachments by uploading documents and enabling Image Intelligence API) — Endpoint creates Attachments by uploading the files with the required metadata in a single request. All attachments will be associated with a new Attachment Control Number and ClaimId, and will be considered Closed upon completion of the request.
TIP
- Choose an option to test/use our APIs, that is, in our developer portal TryIt! interface (you need to copy and paste the unexpired Bearer token generated for testing the Healthcheck) and/or in your development platform.
- Repeat the steps provided in the Perform API Healthcheck >> In your developer platform or In our developer portal TryIt! interface section.
You can use the example field values provided in the Parameters table).
Parameters
| Parameter | In Developer Portal | In Development Platform | Description |
|---|---|---|---|
files (required) | Enter or select | Click the Body tab to add | Raw binary of the files to be uploaded as attachments |
claimId (required) | Enter or select | Click the Body tab to add | Claim ID associated with the attachments |
payerId (required) | Enter or select | Click the Body tab to add | Payer ID associated with the attachments |
memberId (required) | Enter or select | Click the Body tab to add | ID present on the insurance ID card |
providerNPI (required) | Enter or select | Click the Body tab to add | Provider NPI associated with the attachments |
submitterId (required) | Enter or select | Click the Body tab to add | Submitter ID associated with the attachments; requestor MUST have access to this submitter ID |
fileMetadata (required) | Enter or select | Click the Body tab to add | Image Intelligence metadata |
dateOfService (required) | Enter or select | Click the Body tab to add | First Date of Service associated with the attachments |
patientLastName (required) | Enter or select | Click the Body tab to add | Patient's last name, for example, "Atreides" |
patientFirstName (required) | Enter or select | Click the Body tab to add | Patient's first name, for example, "Paul" |
patientDateOfBirth (required) | Enter or select | Click the Body tab to add | Patient's date of birth, for example, "2000-01-01" |
billingProviderTaxId (required) | Enter or select | Click the Body tab to add | Billing provider tax Id associated with the attachments; requestor MUST have access to this billing provider tax ID (TIN) |
Content-Type:multipart/form-data- The request consists of three parts:
request(JSON): Contains claim metadatafiles(Binary): One or more attachment files (1-10 files)fileMetadata(JSON): Required for Image Intelligence service information for the documents being uploaded as attachments.NOTE
To enable Optum Image Intelligence on the attachments, each file MUST match
fileNameandmimeTypeas defined in themetadataobject.procedureCodes: Comma-separated list of alphanumeric procedure codes (max 25 chars each);Pattern:([a-zA-Z0-9]{1,25})(,[a-zA-Z0-9]{1,25})serviceDate: Date in YYYY-MM-DD format.Pattern:\\d{4}-\\d{2}-\\d{2}toothNumbers: Comma-separated list of tooth identifiers. Image Intelligence will further validate these values to numerical values;Pattern:[A-Za-z0-9]{2}(,[A-Za-z0-9]{2})
--boundary
Content-Disposition: form-data; name=\"request\"
Content-Type: application/json
{
\"claimId\": \"CLM-2024-001234\",
\"payerId\": \"ABC12\",
\"providerNPI\": \"1234567890\",
\"dateOfService\": \"2024-01-15\",
\"patientLastName\": \"Atreides\",
\"patientFirstName\": \"Paul\",
\"patientDateOfBirth\": \"2000-01-01\",
\"memberId\": \"44444444\"
}
--boundary
Content-Disposition: form-data; name=\"fileMetadata\"
Content-Type: application/json
[
{
\"fileName\": \"xray_image.pdf\",
\"mimeType\": \"application/pdf\",
\"dateOfService\": \"2026-01-01\",
\"procedureCodes\": \"D0101\",
\"toothNumbers\": \"14, 16\"
}
]
--boundary
Content-Disposition: form-data; name=\"files\"; filename=\"xray_image.pdf\";
Content-Type: application/pdf
[binary file content]
--boundary--
NOTE
Check the Headers and Body parameters to make sure that the values comply with the parameters provided in the Parameters table.
IMPORTANT
Please note that the request requires you to provide all the required field values. Please note that these required values are GREYED out, which are pre-populated example values and can be selected to view the canned response. To view the required fields, expand the + symbol (indicated by the
variablesfield below.
If the request was successful, the response shows "200 Successful response" and the information (see the following example) shows in the RESPONSE box. If the request failed, the reason shows in the RESPONSE box as listed in the HTTP Status Codes section at the end of this page or click the HTTPS Status Codes hyperlink in the TOC on the right.
"status": "CLOSED",
"createdAt": "2024-01-15T14:30:00Z",
"attachmentIds": [
"CHC#123456789055"
],
"attachmentControlNumber": "CHC#507f1f77bcf86cd799439011",
"imageIntelligenceTransactionId": "69122940fab78c16744c5cc2"
}
TIP
- Choose an option to test/use our APIs, that is, in our developer portal TryIt! interface (you need to copy and paste the unexpired Bearer token generated for testing the Healthcheck) and/or in your development platform.
- Repeat the steps provided in the Perform API Healthcheck >> In your developer platform or In our developer portal TryIt! interface section.
You can use the example field values provided in the Parameters table).
API Setup
For information about, setting your API test environment, please see API Setup.
Subscribe to live and mock data testing in sandbox
Please see Subscribe to live and mock data testing in sandbox.
Integrate our APIs in production environment
Please see Integrate our APIs in production environment.
HTTP Status Codes
The following are the possible error codes, including code values, messages, and troubleshooting guidance.
| Status Code | Error Description | Message Example | Notes |
|---|---|---|---|
DENTATT_001 | An unexpected error prevents the completion of this request. Please try again. If the problem persists, please contact customer support. | Service.genericError | |
DENTATT_XXX | Submitter ID is required. | Required.req.submitterId | |
DENTATT_XXX | Billing provider tax ID is required. | Required.req.billingProviderTaxId | |
DENTATT_XXX | Billing provider tax ID does not match required format. | Pattern.req.billingProviderTaxId | |
DENTATT_002 | Attachment control number is required. | Required.req.attachmentControlNumber | |
DENTATT_003 | Attachment control number must be a 24-character hexadecimal string. | Pattern.req.attachmentControlNumber | |
DENTATT_004 | Claim ID is required. | Required.req.claimId | |
DENTATT_005 | Claim ID exceeds maximum length of 50 characters. | Pattern.req.claimId | |
DENTATT_006 | Payer ID is required. | Required.req.payerId | |
DENTATT_007 | Payer ID must be exactly 5 alphanumeric characters. | Pattern.req.payerId | |
DENTATT_008 | Provider NPI is required. | Required.req.providerNpi | |
DENTATT_009 | Provider NPI failed checksum validation. | Checksum.req.providerNpi | |
DENTATT_010 | Provider NPI must be exactly 10 digits. | Pattern.req.providerNpi | |
DENTATT_011 | Date of service is required. | Required.req.dateOfService | |
DENTATT_012 | Date of service does not match required format. | Pattern.req.dateOfService | |
DENTATT_013 | Patient date of birth must be in YYYY-MM-DD format. | Pattern.req.patientDateOfBirth | |
DENTATT_014 | Patient last name does not match required pattern. | Pattern.req.patientLastName | |
DENTATT_015 | Patient first name does not match required pattern. | Pattern.req.patientFirstName | |
DENTATT_016 | Member ID does not match required pattern. | Pattern.req.memberId | |
DENTAL_017 | Attachment IDs list is required. | NotNull.req.attachmentIds | |
DENTATT_018 | Attachment ID must be either a 12-character hexadecimal string or prefixed format (XXX#xxxxxxxxxxxx). | Pattern.req.attachmentId | |
DENTATT_021 | The authorization header is required to access this API and its resources. | Missing.req.header.authorization | |
DENTATT_022 | The user info header is required to access this API and its resources. | Missing.req.header.userInfo | |
DENTATT_101 | Cannot add file to a closed attachment. | Attachment.req.addFile.attachmentClosed | |
DENTATT_102 | Cannot add file to an archived attachment. | Attachment.req.addFile.attachmentArchived | |
DENTATT_105 | Multiple attachments found when only one was expected. | Attachment.req.attachments.find.multiple | |
DENTATT_106 | Comprehensive attachment request timed out. | Attachment.req.comprehensive.timeout | |
DENTATT_107 | File to delete not found in attachment. | Attachment.req.deleteFile.fileNotFound | |
DENTATT_108 | Cannot delete file from a closed attachment. | Attachment.req.deleteFile.attachmentClosed | |
DENTATT_109 | Cannot delete file from an archived. | Attachment.req.deleteFile.attachmentArchived | |
DENTATT_110 | Claim ID does not match the attachment's claim ID during completion. | Attachment.req.complete.claimId.mismatch | |
DENTATT_111 | Requested attachment IDs are not associated. | Attachments.req.searchAttachments.containerMismatch | |
DENTATT_112 | All member metadata fields must be provided if any are provided. | Attachments.req.memberMetadata.missing | |
DENTATT_200 | Retry attempts exhausted while retrieving attachment. | DataService.attachments.find.retryExhausted | |
DENTATT_201 | Attachment not found. | DataService.attachments.find.notFound | |
DENTATT_300 | Access Forbidden. | UserAccess.policy.notfound | |
DENTATT_301 | Access Forbidden. | UserAccess.policy.missingrequired | |
DENTATT_302 | Access Forbidden. | UserAccess.permission.denied | |
DENTATT_400 | File Management Service encountered an error. | FileManagement.service.error | |
DENTATT_401 | File Management Service will not accept the provided file ID. | FileManagement.fileId.error | |
DENTATT_402 | Unable to parse response from File Management Service. | FileManagement.response.parse.failed | |
DENTATT_403 | Failed to upload file to File Management Service. | FileManagement.upload.failed | |
DENTATT_404 | Failed to download file from File Management Service. | FileManagement.download.failed | |
DENTATT_405 | Failed to delete file from File Management Service. | FileManagement.delete.failed | |
DENTATT_406 | Failed to list files from File Management Service. | FileManagement.list.failed | |
DENTATT_407 | File Management Service returned null response. | FileManagement.response.validation.null | |
DENTATT_408 | File Management Service response failed validation. | FileManagement.response.validation.failed | |
DENTATT_409 | Failed to retrieve file tags from File Management Service. | FileManagement.list.tags |