Mantys Eligibility API

Create a check

POST /v4/eligibility-checks: the body, the response, and the per-payer extra_args.

POST /v4/eligibility-checks starts a check and returns its id straight away. The check then runs in the background (usually under a minute). Poll it with GET /v4/eligibility-checks/{id}.

FieldRequiredNotes
tpa_nameYesPayer or TPA code, e.g. INS026 (Daman), TPA004 (NAS). Send DHPO, RIYATI, BOTH or SEARCH_ALL to search every payer.
identifiersYes1 to 5 IDs for the patient, each {"id_type": ..., "id_value": ...}. One ID is a one-entry list. See Several IDs for one patient.
visit_typeYese.g. OUTPATIENT. Allowed values depend on the payer; some payers need an empty string "". See Visit types by payer.
name, dob, phoneNoHelp the payer find the right member.
doctorId, doctorNameYes for INS026, D004, INS078 and TPA023; no for other payersA value and label from GET /v4/doctors. Daman and Thiqa checks without either are rejected with 400 MISSING_REQUIRED_FIELD.
payerNameNoThe payer being billed, when a TPA serves several.
extra_argsNoPer-payer options, the same keys as v3. See extra_args.

In each identifiers entry, id_type is EMIRATESID, CARDNUMBER, DHAMEMBERID or POLICYNUMBER. Each payer accepts only some of these. Send a member number (not a DHA member id) as CARDNUMBER. An Emirates ID must be 784-YYYY-NNNNNNN-N or 15 digits starting 784.

Any other field is rejected with 422. That includes id_type and id_value at the top level of the body: put them inside identifiers.

  • doctorId, doctorName and payerName may also be sent as doctor_id, doctor_name and payer_name.
  • tpa_name, id_type and visit_type are not case-sensitive: tpa002 is read as TPA002.

Example

curl -X POST "$HOST/v4/eligibility-checks" \
  -H "X-Api-Key: Bearer $API_KEY" \
  -H "X-Clinic-Id: $CLINIC_ID" \
  -H "X-Client-ID: $TENANT" \
  -H "Content-Type: application/json" \
  -d '{"tpa_name": "INS026", "identifiers": [{"id_type": "EMIRATESID", "id_value": "784-1990-1234567-1"}], "visit_type": "OUTPATIENT", "doctorName": "DHA-P-0000000", "name": "Patient Name"}'

Response: 201

{ "id": "3f6c2a9e-...", "status": "IN_QUEUE", "is_search_all": false, "search_all": null }

For a search across all payers, is_search_all is true and search_all holds the search's progress at creation:

{
  "id": "3f6c2a9e-...",
  "status": "IN_QUEUE",
  "is_search_all": true,
  "search_all": { "total_tpas": null, "completed_tpas": 0, "status": "SEARCH_ALL_PROCESSING" }
}

total_tpas is null because the payers to search are not known yet. The GET does not repeat this object: poll the check the same way as any other. It finishes when every payer has answered.

If a payer does not accept your id_type or visit_type, you get 400 VALIDATION_FAILED, with every problem listed in details. Nothing is started. One exception: when no ID in identifiers is usable, the 400 names only the ID problems. Fix them and resend to see anything else.

extra_args

v4 passes extra_args to the payer exactly as v3 does, so the keys, shapes and defaults are the ones on Create a task. Nothing in it is validated: a misspelled key is accepted and ignored. Every key is optional; the last column is what you get when you leave it out.

ExtraShapePayersOmitted
maternity_treatment
Answers the portal’s "Is IP Maternity" question. Send it whenever visit_type is MATERNITY: omitting it is not an error, it silently checks outpatient maternity cover.
"maternity_treatment": true | falseTPA001, TPA004the portal answers as though you had said no
is_member_present_at_the_facility
Sets the portal’s member-presence radio. Optional; the check runs either way, but some plans price a not-present encounter differently.
"is_member_present_at_the_facility": true | falseTPA001, TPA004the portal is told the member is present
exception_case
Ticks the portal’s exception checkbox, which submits the check without a referral. Absent means true, so send false when you want the portal’s own referral list searched and a real referral attached.
"exception_case": true | falseTPA001, TPA004the portal’s bypass checkbox is ticked and no referral is resolved
referral_document_url
A fetchable URL to the referral letter. The scraper downloads it and attaches it on the portal’s referral upload field.
"referral_document_url": TPA001, TPA004no referral document is uploaded
referring_physician
The clinician who referred the patient. NAS and Neuron match it against the portal’s referring-physician list; Daman sends it as referralClinicianLicense, and only on a referral consultation.
"referring_physician": TPA001, TPA004, TPA023, INS026, INS078, D002, D004no referring clinician is recorded on the check
referring_department
The department that referred the patient, matched against the portal’s referral list on gatekeeper plans. Ignored on every other plan, so sending it always is safe.
"referring_department": TPA002a gatekeeper plan completes with a warning and no referral selected
service_type
The service the claim form is raised for. The value is typed into the portal’s service search, so it has to read as the portal spells it.
"service_type": "Consultation GP" | "Consultation Specialist"TPA029, TPA037the claim form is filled with Consultation GP
use_dental
Runs AXA’s dental flow. Compared against the exact string "YES", so send that and not a boolean. visit_type: "DENTAL" on its own does nothing here.
"use_dental": "YES" | "NO"INS010the ordinary non-dental flow runs, whatever visit_type says
referral_code
The payer’s own referral code, typed into the Aafiya portal’s referral field. Only useful when the patient arrives with one.
"referral_code": TPA026the portal’s referral code field is left blank
visit_category
ADNIC’s consultation-request category. Unlike every other extra, a value outside this list fails the check rather than being ignored.
"visit_category": "FIRST_VISIT" | "VISIT_WITHOUT_REFERRAL" | "VISIT_WITH_REFERRAL"INS017the consultation request is submitted as FIRST_VISIT
use_metlife
Switches the MedNet portal to MetLife before the search. Send "YES" as a string; anything else falls back to MedNet.
"use_metlife": "YES" | "NO"TPA036the member is looked up in MedNet’s own book
use_dubaicare
Switches the MedNet portal to DubaiCare before the search. Ignored when use_metlife is "YES", which is checked first.
"use_dubaicare": "YES" | "NO"TPA036the member is looked up in MedNet’s own book
is_emergency
Ticks MedNet’s emergency registration. Independent of visit_type, which at MedNet carries the consultation type and benefit instead.
"is_emergency": true | falseTPA036the encounter is registered as an ordinary visit
is_pod
Marks the encounter as a POD dispense. Send pod_id with it; the product refuses to submit a POD check without one.
"is_pod": true | falseTPA023, INS026, INS078, D002, D004isPOD is left off the payload entirely, which is not the same as false
pod_id
The point-of-dispense identifier. Meaningless without is_pod: true, and a POD check without it is what the product blocks at the form.
"pod_id": TPA023, INS026, INS078, D002, D004podId is left off the payload
is_maternity
Flags the encounter as maternity. Only applied when the doctor licence on the request resolves to a maternity specialty, so send doctorId alongside it or it is silently dropped.
"is_maternity": true | falseTPA023, INS026, INS078, D002, D004isMaternity is left off the payload
free_followup_or_extended_followup
Pre-answers Daman’s follow-up business rules so a blocked check retries as a follow-up or extended follow-up visit. Checked before not_related_to_chief_complaint.
"free_followup_or_extended_followup": true | falseTPA023, INS026, INS078, D002, D004a business-rule violation ends the check instead of being answered
not_related_to_chief_complaint
Pre-answers the same rules as a visit for a different chief complaint. Ignored when free_followup_or_extended_followup is also true.
"not_related_to_chief_complaint": true | falseTPA023, INS026, INS078, D002, D004a business-rule violation ends the check instead of being answered

Three keys are reserved in v4. Sending any of them is 422 VALIDATION_FAILED, and nothing is started:

KeyWhy
identifiersSend several IDs in the top-level identifiers field instead.
request_credentialsv4 does not take portal logins on the request; checks run on the logins Mantys holds.
request_credentials_onlySame as above.

On POST /v4/appointment-checks, a submitter key is overwritten by the top-level submitter field when you send one.

On this page