Military Search
Verified against source (20)
qbo4.ContactServices.QMS.WebApi/readme.mdControllers/SCRAController.csControllers/MLAController.csqbo4.ContactServices.QMS.WebApi/QMSInstantAPIOptions.csqbo4.ContactServices.QMS.WebApi/appsettings.jsonCSharp/Models.csqbo4.ContactServices.QMS.Models/InstantSearchSCRAOptions.csqbo4.ContactServices.QMS.Models/InstantSearchMLAOptions.csqbo4.ContactServices.QMS.Models/InstantSearchSCRAResponse.csqbo4.ContactServices.QMS.Models/InstantSearchMLAResponse.csqbo4.ContactServices.QMS.Provider/SCRASingleSearchProvider.csqbo4.DMDC.Models/SCRARequest.csqbo4.DMDC.Models/MLARequest.csqbo4.DMDC.Models/SCRAResponse.csqbo4.DMDC.Models/MLAResponse.csOptions/ParsePermutateOptions.csqbo4.DMDC/DMDC.csExtensions/ProcessExtensions.csConfig/Setup.QmsIntegrationNearRealTime.xmlProcess/QMSOrder.Request.xslt
The Military Search instant API runs one SCRA or MLA search per request and returns DMDC’s results in the response. It is a REST API with JSON bodies, documented by an OpenAPI specification and a ReDoc reference.
| Environment | Host |
|---|---|
| Production | https://services.quandis.io |
| UAT (testing) | https://uatservices.quandis.io |
Quandis issues separate keys for testing and production. A Postman workspace has ready-made requests.
Check current API availability on the Quandis status page ↗.
Endpoints
Section titled “Endpoints”| Verb | Path | Purpose |
|---|---|---|
POST |
/api/military/scra/instant/{clientID?} |
SCRA instant search |
POST |
/api/military/mla/instant/{clientID?} |
MLA instant search |
GET |
/api/military/scra/healthcheck |
SCRA service health (no authentication) |
GET |
/api/military/mla/healthcheck |
MLA service health (no authentication) |
{clientID} is optional: your own reference number for the search (up to 50 characters). You can pass it in the path or as clientID in the body; it’s returned in the response.
Authenticate
Section titled “Authenticate”Send either:
- an API key in the
X-ApiKeyheader, or - a bearer token in the
Authorizationheader. Exchange your access key and secret key for a token with the token operation in the API reference.
POST /api/military/scra/instant/LN-1001X-ApiKey: {apiKey}X-Request-ID: 6f1c2a90-3e1b-4c55-9a43-2d0d7f5f8c11Content-Type: application/jsonRetry safely with X-Request-ID
Section titled “Retry safely with X-Request-ID”Send a unique X-Request-ID with each search. If you repeat a request with the same ID (for example after a timeout), you get the original response back instead of a second search. Responses are kept for 24 hours, per user and per search type (SCRA or MLA).
SCRA instant search
Section titled “SCRA instant search”POST /api/military/scra/instant/LN-1001X-ApiKey: {apiKey}Content-Type: application/json
{ "firstName": "John", "lastName": "Doe", "ssn": "123456788", "dateOfInterest": "2026-09-01", "certificate": true}| Field | Type | Notes |
|---|---|---|
lastName |
string | Required. Letters, spaces, hyphens, and apostrophes. |
ssn |
string | 123456789 or 123-45-6789. An SSN or a birthDate is required. |
birthDate |
date | On or after 1900-01-01; not in the future. |
firstName |
string | Up to 20 characters. |
middleName |
string | |
dateOfInterest |
date | The date status is checked for. On or after 1985-09-30; not in the future. Defaults to today. |
certificate |
boolean | Return DMDC certificates. Default false. |
clientID |
string | Your reference, up to 50 characters. |
parsePermutateOptions |
object | Name parsing and permutation settings. See Permutation options. |
Response
Section titled “Response”{ "id": 69629342, "clientID": "LN-1001", "covered": false, "results": [ { "id": "PQCZNKZHM36NKKS", "personRequest": { "firstName": "John", "lastName": "Doe", "activeDutyDate": "2026-09-01T00:00:00" }, "eligibility": { "dateOfInterest": "2026-09-01T00:00:00", "covered": false, "activeDutyCovered": false, "earlyIndicationCovered": false, "heraCovered": false, "matchReasonCode": "NO_MATCH", "transactionId": "PQCZNKZHM36NKKS" } } ]}| Field | Meaning |
|---|---|
id |
Quandis order ID for the search. |
covered |
true if any result is covered. |
results[] |
One entry per name variation searched. |
results[].eligibility.activeDuty* |
Active-duty coverage on the date of interest: …Covered, …StartDate, …EndDate, …ServiceComponentCode, …ServiceComponentString. |
results[].eligibility.earlyIndication* |
Notification of a future call-up, with the same set of fields. |
results[].eligibility.hera* |
Service that ended within the lookback window before the date of interest, with the same set of fields. |
results[].eligibility.matchReasonCode |
DMDC’s match reason, such as NO_MATCH. |
results[].eligibility.content |
The certificate, base64-encoded, when certificate is true. |
MLA instant search
Section titled “MLA instant search”POST /api/military/mla/instant/LN-1001X-ApiKey: {apiKey}Content-Type: application/json
{ "firstName": "John", "lastName": "Doe", "ssn": "123456788", "birthDate": "2000-12-07"}| Field | Type | Notes |
|---|---|---|
lastName |
string | Required. |
birthDate |
date | Required. Not in the future. |
ssn or itin |
string | One is required. 123456789 or 123-45-6789. If both are sent, the SSN is used. An ITIN must start with 9. |
firstName, middleName, certificate, clientID, parsePermutateOptions |
As for SCRA. |
The response has the same shape as SCRA. Each result’s eligibility has covered and certificateType, and person.pnIdTypCd shows the identifier used (S for SSN, I for ITIN).
Status codes
Section titled “Status codes”| Code | When |
|---|---|
200 |
Search complete (check covered and results) |
401 |
Missing or invalid API key or token |
417 |
Declared by the search operations; see the API reference |
429 |
Rate limit reached; retry later with the same X-Request-ID |
The health checks return 200 when healthy and 503 when not.
Permutation options
Section titled “Permutation options”parsePermutateOptions controls how the name is parsed and expanded before searching. Every variation is searched and returned as its own result. Property names are camelCase and enum values are strings:
"parsePermutateOptions": { "transpose": true, "forceHyphen": true, "toggleMiddleName": true, "includeSuffix": "OriginalOnly", "middleNameParse": "AppendMiddleInitialAll"}Set "parseModel": "None" to search the name exactly as sent. What each option does, with examples, is in Permutations in the Power user view.
Ordering from QBO
Section titled “Ordering from QBO”QBO’s near real-time integration sends an XML order (options, user-defined options such as SourceReferenceNumber, and contacts) to:
POST /api/military/searchX-ApiKey: {apiKey}Content-Type: application/xmlWhen the order is ready, Military Search resumes the waiting QBO workflow by calling /api/process/qmsbatchorderproductready/{processID} on your QBO host, as a user in the QDS role. QBO then downloads and imports the results. The setup is described in the Power user view.