Mantys Eligibility API

Test IDs

Member IDs starting with 990- return a documented response 10 seconds later, without contacting a payer.

A test ID is a member ID that starts with 990-. Send it to create-task instead of a real Emirates ID or card number and the task runs without contacting any payer. You poll it the same way as a real task. For 10 seconds it reports an in-flight status, then it returns a finished response copied from one of the production cases.

Use test IDs to build and test your client: the polling loop, the terminal statuses, and every branch the case pages describe. The number after 990- picks the response, so you can make each outcome happen whenever you need it.

Same host, same credentials

Test IDs use the normal base URL and your normal API key, clinic id and client id. No separate sandbox host or key is needed.

This page shows the v3 calls. On API v4 the same IDs work on POST /v4/eligibility-checks, sent inside identifiers, with the same timing; that section lists how a v4 test check differs.

Sample requests

Set the same variables as in the Quickstart:

export MANTYS_API_KEY=...      # without the "Bearer " prefix
export MANTYS_CLINIC_ID=...
export MANTYS_CLIENT_ID=...
export BASE=https://hrcm-api.themantys.com/v2/api-integration-v3

990-01 finishes as found with is_eligible: true. It is the response the eligible response structure page walks through.

curl -sS -X POST "$BASE/create-task" \
  -H "x-api-key: Bearer $MANTYS_API_KEY" \
  -H "X-Clinic-ID: $MANTYS_CLINIC_ID" \
  -H "X-Client-ID: $MANTYS_CLIENT_ID" \
  -H 'Content-Type: application/json' \
  -d '{
        "tpa_name": "TPA002",
        "id_type": "EMIRATESID",
        "id_value": "990-01",
        "visit_type": "OUTPATIENT"
      }'

Each one responds like a real create-task:

{
  "success": true,
  "message": "Task created successfully",
  "data": {
    "task_id": "99000000-0001-46aa-aedc-7511f88336aa",
    "status": "pending",
    "organization_api_task_db": {
      "task_id_in_db": "99000000-0001-46aa-aedc-7511f88336aa",
      "task_id_in_celery": "99000000-0001-46aa-aedc-7511f88336aa",
      "status": "IN_QUEUE"
    }
  }
}

Then poll with the returned task_id:

curl -sS "$BASE/eligibility-result/$TASK_ID" \
  -H "x-api-key: Bearer $MANTYS_API_KEY" \
  -H "X-Clinic-ID: $MANTYS_CLINIC_ID" \
  -H "X-Client-ID: $MANTYS_CLIENT_ID"

What a test task does

Seconds since createstatusBody
0 to 3IN_QUEUEThe task, with no eligibility_result
3 to 5NAVIGATING_WEBSITEThe task, with no eligibility_result
5 to 10EXTRACTING_DATAThe task, with no eligibility_result
10 onwardsAs capturedThe finished response for that case, in full

A search-all test task reports SEARCH_ALL_PROCESSING in both status and search_all_status for the first 10 seconds, with an empty aggregated_results. After that both fields read SEARCH_ALL_COMPLETE and the full list appears at once.

GET /task-status/{task_id} works too, and reports the same states with its usual simplified statuses.

The finished body is the captured response shown on the case page, with task_id, clinic_id and the timestamps changed to match your task. You can poll it again at any time and get the same body. A few things differ from a real check:

  • request_dump is the captured request, not yours. It holds the placeholder member from the sample. Do not use it to match a response to the request you sent; use task_id. (On v4 the check's request echoes your own request instead; see API v4.)
  • The document links do not load. screenshot_key and every referral_documents[].s3_url point at storage.example.com, a placeholder host.
  • tpa_name, id_type and visit_type do not change the response. The number after 990- alone picks it. The case's own payer is in eligibility_result.tpa_name. Still send the fields you would send for a real check: on v3 tpa_name must not be empty, and sending search-all IDs with "tpa_name": "BOTH" keeps your client on its search-all path.
  • The 784 prefix check does not apply. 990- IDs are accepted for every id_type.
  • Nothing is sent to a payer. A test task causes no portal session and no lookup, and does not count against the payer's rate limits.
  • Poll it exactly as you would a real task, with the same credentials and the same base URL you created it with.

Every test ID

Only the digits after 990 count, so 990-21 and 990-0000-0000000-21 both select case 21. A number that is not in this table returns a 400 listing the valid ones. Cases 990-90 to 990-99 are answered on v4 only; v3 returns that 400 for them.

The Shape column matters: some cases on single-payer pages were captured from a search-all and come back in the search-all shape, with aggregated_results in place of eligibility_result.

IDCase pageSampleShapeResult
990-01Eligible response structureeligibleSinglefound, eligible
990-10Networks and planstwo-networksSinglefound, eligible
990-11Networks and plansa1-a3Singlefound, eligible
990-12Networks and plansraw-vs-normalisedSinglefound, eligible
990-13Networks and plansenaya-goldSinglefound, eligible
990-14Networks and planssentence-networkSearch all1 found of 18
990-15Networks and plansunmapped-planSinglefound, eligible
990-20Copaysingle-benefitSinglefound, eligible
990-21Copayby-benefitSinglefound, eligible
990-22Copayby-locationSinglefound, eligible
990-30Search-alltwo-eligibleSearch all2 found of 18
990-31Search-alltwo-eligible-with-backoffSearch all2 found, 1 backoff
990-32Search-allfour-statusesSearch all1 found, 4 failed
990-33Search-allnone-eligibleSearch allNo found
990-34Search-allnot-configuredSearch all1 found, 3 tpa_not_configured
990-40Daman multi-carddaman-two-packagesSinglefound, eligible
990-41Daman multi-carddaman-gold-silverSinglefound, eligible
990-42Daman multi-carddaman-ultrasoundSinglefound, eligible
990-43Daman multi-carddaman-with-errorSinglefound, eligible
990-44Daman multi-cardtwo-cardsSearch all1 found, 1 member_not_found
990-45Daman multi-cardtwo-cards-bSinglefound, eligible
990-50Failuresinvalid-credentialsSingleinvalid_credentials
990-51Failuresboth-credentialsSinglefailed
990-52Failureserror-timeoutSingleerror
990-53Failureserror-keyerrorSingleerror
990-54Failuresfailed-bad-requestSearch all3 failed, no found
990-55FailuresbackoffSearch all4 failed, 1 error, 1 backoff
990-56Failuresthree-classesSearch all1 found, 1 failed, 1 invalid_credentials
990-57Failuresclinician-licence-primarySinglefailed
990-58Failuresclinician-licence-nameSearch all3 failed, no found
990-60Emirates ID not linkedeid-not-foundSinglemember_not_found
990-61Emirates ID not linkedcard-eligibleSinglefound, eligible
990-62Emirates ID not linkedcounter-firstSinglemember_not_found
990-63Emirates ID not linkedcounter-laterSinglefound, eligible
990-70Visit typesmaternity-not-eligibleSinglemember_not_found
990-71Visit typeschronic-outSinglemember_not_found
990-72Visit typesdaman-ultrasoundSinglefound, eligible
990-80Documents and warningsgatekeeperSinglefound, eligible
990-81Documents and warningsreferral-dropdownSinglefound, eligible
990-82Documents and warningsspecial-remarksSinglefound, eligible
990-90Benefit plans (v4)outpatient-stampedSinglefound, eligible; plan STAMPED
990-91Benefit plans (v4)two-visit-types-stampedSingle2 found; both plans STAMPED
990-92Benefit plans (v4)second-leg-not-coveredSingle1 found, 1 member_not_found
990-93Benefit plans (v4)inpatient-stampedSinglefound, eligible; plan STAMPED
990-94Benefit plans (v4)no-rate-foundSinglefound, eligible; plan NO_RATE_FOUND
990-95Benefit plans (v4)no-single-plan-matchSinglefound, eligible; NO_SINGLE_PLAN_MATCH
990-96Benefit plans (v4)member-not-foundSinglemember_not_found
990-97Benefit plans (v4)unknown-encounter-valueSinglefound, eligible; plan STAMPED
990-98Benefit plans (v4)portal-errorSingleerror; plan CHECK_FAILED
990-99Benefit plans (v4)health-plan-not-mappedSinglefound, eligible; plan STAMPED

"Result" is eligibility_result.status for a single-payer response, and a count of aggregated_results[].status for a search-all. Every single-payer case finishes with a task status of PROCESS_COMPLETE, including the failures. For 990-90 to 990-99 it is each v4 row's status and each ahd_benefit_plans[].reason; those checks finish as COMPLETE.

A test ID proves your client, not your payer setup

A test task never checks whether your clinic is configured for a payer or whether its portal credentials work. Before go-live, run one real check per payer you depend on.

On this page