MakeSure API
Base URL
https://api.makesure.com.au/v1
All request and response bodies use JSON. All timestamps follow ISO 8601 format unless otherwise noted.
How it works
The typical integration flow involves four steps:
Authenticate
Exchange your Client Key and Secret for a short-lived access token.
Create a job
Submit an applicant and a check package. MakeSure returns a
jobURL for the applicant to complete.
Applicant completes checks
The applicant follows the jobURL to provide any
remaining information or documents.
Receive updates
Poll the job status endpoint or configure a webhook callback to receive real-time status changes.
Job statuses
A job moves through the following statuses during its lifecycle:
| Status | Meaning |
|---|---|
| Pending | Job created but the applicant has not yet started. |
| Progress | The applicant has started and checks are underway. |
| Completed | All checks have been completed and results are available. |
| Archived | The job has been archived. |
| Cancelled | The job was cancelled before completion. |
| Failed | One or more checks could not be completed. |
Quick start
This guide walks you through the minimum steps required to create your first job and retrieve its status. You will need your Client Key and Client Secret before starting — contact makesure@makesure.com.au to obtain test credentials.
Obtain an access token
Send your credentials to the auth endpoint with the scopes you need. The token returned is short-lived — refresh it every 10 minutes.
// Request { "key": "your-client-key", "secret": "your-client-secret", "scope": "api.job:write" } // Response { "status": "ok", "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "response": auth_accepted }
Create a job
Submit the applicant details, a hiring manager, and a check
package. For testing, use the preset package code
100601.
// Authorization header required on all requests Authorization: Bearer <token> // Minimal request body { "id": "your-internal-job-ref-001", "applicant": { "email": "jane.smith@example.com", "firstName": "Jane", "lastName": "Smith", "genderCode": "F", "postCode": "2000", "notificationType": "EMAIL" }, "application": { "job": { "positionTitle": "Software Engineer", "hiringManager": { "firstName": "Alex", "lastName": "Jones", "email": "alex.jones@yourcompany.com" } } }, "package": { "custom": false, "code": "100601" } } // Response { "status": "Pending", "jobId": "your-internal-job-ref-001", "jobURL": "https://app.makesure.com.au/job/abc123", "refusedChecks": [] }
jobURL is the link the applicant must open
to complete their checks. Redirect them to it or send it via
email or SMS.
Check job status
Poll the job status endpoint using the id you
provided when creating the job.
// Response when completed { "jobId": "your-internal-job-ref-001", "status": "Completed", "packageDetails": [ { "12": { "dateCompleted": "2024-08-15", "checkStatus": "Completed" } } ], "jobURL": "https://app.makesure.com.au/job/abc123" }
callback URL in your job
creation request and MakeSure will POST status updates to your
server automatically. See the
Webhooks & callbacks section.
Credentials
To authenticate with the MakeSure API you need two pieces of information: a Client Key and a Client Secret. These are issued per client and are used exclusively to obtain short-lived access tokens — they should never be exposed in client-side code.
Obtaining credentials
To request a set of test credentials, send an email to makesure@makesure.com.au. You can discuss billing options, rate limits, and package configurations at the same time.
Third party read-only credentials
MakeSure can issue read-only credentials scoped to
api.job:read only. This is useful if you want to grant
a third party — such as an analytics tool or an auditor — access to
job data without allowing them to create or modify jobs.
Access tokens
Before you can call any other endpoint you must exchange your
credentials for an access token. Tokens are short-lived JWTs that
carry scope information. Every token is issued for a specific scope
— you cannot use a read token to create jobs, and vice
versa.
Request body
{
"key": "string", // Your Client Key
"secret": "string", // Your Client Secret
"scope": "string" // One of the scope values below
}
Available scopes
| Scope | Grants access to |
|---|---|
| api.job:write | Create and cancel jobs, create job URLs. |
| api.job:read | Retrieve job status, list all jobs, list client checks. |
Using the token
Include the token in the Authorization header on every
subsequent request using the Bearer scheme:
Authorization: Bearer <token>
Token lifetime & refresh
Tokens are short-lived — they expire after approximately
10 minutes. Your integration should refresh the
token before expiry rather than waiting for a
401 response. A straightforward approach is to request
a new token every 9 minutes via a background task.
Create job
Creates a new background check job for an applicant. MakeSure
returns a jobURL that the applicant must visit to
provide any additional information needed to complete their checks.
id field is your internal reference for this job.
MakeSure uses it to prevent duplicate entries — if you submit the
same id twice, the second request will be rejected. Use
a unique identifier from your own system such as an application ID.
jobURL to
complete the checks. The jobURL is the link the
applicant must open to complete their checks. Redirect them to it or
send it via email or SMS.
Request body
{
"id": "string", // required — your internal job reference; this needs to be unique in our system
"applicant": {
"email": "string", // required
"firstName": "string", // required
"lastName": "string", // required
"middleName": "string", // optional — include if known; omitting may cause name mismatch
"genderCode": "M|F|X", // required
"postCode": "string", // required
"notificationType": "SMS|EMAIL|ALL|NONE", // required
"mobile": "string", // optional — include country prefix e.g. +61412345678
"prefName": "string", // optional — how MakeSure addresses the applicant
"title": "string", // optional — e.g. Mr, Ms, Dr
"street": "string", // optional
"suburb": "string", // optional
"state": "string", // optional
"country": "string", // optional — full country name
"countryCode": "string", // optional — ISO ALPHA-2 e.g. AU
"phone1": "string", // optional — additional contact number
"phone2": "string" // optional — additional contact number
},
"application": {
"job": {
"positionTitle": "string", // required — full role name e.g. "Registered Nurse"
"jobTitle": "string", // optional
"jobLocation": "string", // optional
"profitCentre": "string", // optional — internal position reference
"officeCode": "string", // optional — required for multi-ABN entity clients
"hiringManager": {
"firstName": "string", // required
"lastName": "string", // required
"email": "string", // required
"title": "string", // optional
"prefName": "string", // optional
"phone": "string", // optional
"mobile": "string", // optional
"fax": "string", // optional
"country": "string", // optional
"countryCode": "string" // optional — ISO ALPHA-2
}
}
},
"package": {
"custom": false, // false = use a preset code; true = specify checks array
"code": "100601", // required if custom is false;this is unique code provided to each API consumer in order to provide preset job checks for applicants; use "100601" for testing
"title": "string" // optional — display name for the job
},
"duedate": "YYYY-MM-DD", // optional
"options": {
"redirect_url": "string", // optional — redirect applicant here after completing checks
"deadline": "YYYY-MM-DD HH:MM:SS", // optional — applicant must complete before this datetime
"callback": [
{
"url": "string", // optional — your webhook endpoint
"state": "Completed|Cancelled|Archived|All",
"token": "string" // optional — token MakeSure sends to authenticate the callback
}
]
}
}
Custom check packages
If
package.custom is true, provide a
checks array instead of a code.
additionalData is not accepted here, sending the
parameter here, will return error message.
Use the
Get client checks endpoint to
retrieve valid check IDs for your account.
"package": { "custom": true, "checks": [ { "id": 12 }, { "id": 7, "noEmployers": 2 } // noEmployers: 1–3, for Reference checks or Employment Confirmation checks ] }
Response
{
"status": "Pending",
"jobId": "your-internal-job-ref-001",
"jobURL": "https://app.makesure.com.au/job/abc123",
"refusedChecks": []
}
| Field | Description |
|---|---|
| status |
Initial job status. Always Pending on creation.
|
| jobId |
The id you provided. Use this to retrieve or
cancel the job later.
|
| jobURL | The URL the applicant must open to complete their checks. Send this to the applicant immediately. |
| refusedChecks | Array of check IDs that MakeSure could not add to the job. An empty array means all checks were accepted. |
How it works
Authenticate
The client is authenticated using the short-lived access token, scope for the token and requested operation are being checked.
Create a job
Submit an applicant and a check package. MakeSure returns a
jobURL for the applicant to complete.
If
notificationType is SMS or
EMAIL, an SMS or email is sent to the applicant
with the jobURL, if is set to ALL,
both are sent, and if is set to NONE, no
notification is sent to applicant.
Applicant completes checks
The applicant follows the jobURL to provide any
remaining information or documents.
Processing
The documents and received information are being processed by Makesure and third parties. Such process can take from few minutes to 30 days.
Receive updates
Poll the job status endpoint or configure a webhook callback to receive real-time status changes.
Response codes
The API returns standard HTTP status codes. Error responses include a message body explaining what went wrong.
| Code | Status | Meaning | Response format |
|---|---|---|---|
| 200 | OK | Request was successful. | Read the response body. |
| 201 | Queued|Pending | Request was successful. The resource is queued or pending. | {status: 'Queued/Pending',job: { id: <source_id>, data: <job_data>},jobURL:"returned for pending status; will be used by the applicant to complete personal info and add needed documents.",refusedChecks: []}. |
| 400 | Bad Request | The request body failed validation. The response body contains field-level errors. | { status: 'error',errors: ['missing_id', 'source_job_already_existent', 'missing_package_data']} or {status: 'error',error: 'duplicate_check_id'} |
| 401 | Unauthorized | The token is missing, expired, or has been tampered with. | |
| 403 | Forbidden | The token does not have the required scope for this endpoint. | {status: 'error', error: 'access_forbidden'} |
| 404 | Not Found | The endpoint or resource does not exist. | |
| 500 | Internal Server Error | An unexpected error occurred on MakeSure's side. | {status: 'internal_error', code: 'create_package_error'} |
| 429 | Throttle error | Too many requests from client. | { status: 'error',errors: ['too_many_requests']} |
Create job prefilled
Identical to Create job but allows you to pre-supply identity documents and additional applicant data on behalf of the applicant. This reduces the number of steps the applicant must complete on the MakeSure portal.
Please ensure that the following documents are uploaded and all
required information is added before submitting a Nationally
Coordinated Criminal History Check (NCCHC) to Makesure:
Commencement of Identity
Document: Upload at least one document listed as a ‘Commencement of
Identity Document’ in the reference and their document identifiers.
Photographic Identity
Document: Upload an identity document containing a photograph from
one of the provided documents.
Primary Use in Community Document: Upload at least one document
listed as a ‘Primary Use in Community Document’ in the reference and
their document identifiers.
Secondary Use in Community Document: Upload at least one document
listed as a ‘Secondary Use in the Community Document’ in the
reference and their document identifiers.
Passport-Style Photograph: Submit a passport-style photograph of
the applicant.
Name
Discrepancies: If the names on any of the identity documents differ,
provide documentation that demonstrates a link between the differing
names as listed in the reference and their document identifiers.
Additional fields vs. Create job
application.job (NCCHC only)
| Field | Required | Description |
|---|---|---|
| officeCode | NCCHC | Office code for the ABN entity conducting the check. Defaults to Primary Company ABN if omitted. |
| ncchcconsent | NCCHC |
Must be "1" to confirm the applicant has
consented to the NCCHC.
|
| thirdpartyconsent | NCCHC |
"0" or "1" — whether the applicant
consents to sharing results with third parties.
|
documents array
An array of identity documents to submit on behalf of the applicant. Each entry contains:
| Field | Description |
|---|---|
| code |
Document type code. Use "selfie" for a
passport-style photo, "consent" for a signed
consent form, or a document code from the
Identity documents
table (e.g. "DL" for driver licence).
|
| image | URL or base64-encoded image of the document. |
| data | Required for identity documents (not selfie/consent). A structured object with the document's fields — see the Identity documents section for per-document schemas. |
"documents": [ { "code": "selfie", "image": "https://your-cdn.com/applicant-photo.jpg" }, { "code": "DL", "image": "https://your-cdn.com/drivers-licence.jpg", "data": { "FamilyName": "Smith", "GivenName": "Jane", "BirthDate": "1990-04-15", "StateOfIssue": "NSW", "LicenceNumber": "12345678" } } ]
package.checks.additionalData (NCCHC only)
{
"workPlace": "Sydney Children's Hospital",
"work_location_state": "NSW",
"work_location_town": "Randwick",
"contact_with_children": ""No Vulnerable|Supervised contact|Unsupervised contact"",
"address": [
{
"type": "RESID", // RESID = current, POST = postal, PREV = previous
"street": "42 Example St",
"suburb": "Surry Hills",
"state": "NSW",
"postcode": "2010",
"country": "Australia",
"startDate": "01/01/2020"
}
],
"documentsInCurrentName": true
}
NCCHC document checklist
| # | Requirement | Notes |
|---|---|---|
| 1 | Commencement of identity document | At least one — codes BC, CC, VI, IM, PP. |
| 2 | Photographic identity document | Any document containing a photo of the applicant. |
| 3 | Primary use in community document | At least one — see Primary category in Identity documents. |
| 4 | Secondary use in community document | At least one — see Secondary category in Identity documents. |
| 5 | Passport-style photo ("selfie") |
A recent photo of the applicant against a plain background. |
| 6 | Name linkage document | Required only if names across documents differ — e.g. Change of Name (NC) or Marriage Certificate (MC). |
Full request body
{
"id": "string", // required — your internal job reference; this needs to be unique in our system
"applicant": {
"email": "string", // required
"firstName": "string", // required
"lastName": "string", // required
"middleName": "string", // optional — include if known; omitting may cause name mismatch
"genderCode": "M|F|X", // required
"postCode": "string", // required
"notificationType": "SMS|EMAIL|ALL|NONE", // required
"mobile": "string", // optional — include country prefix e.g. +61412345678
"prefName": "string", // optional — how MakeSure addresses the applicant
"title": "string", // optional — e.g. Mr, Ms, Dr
"street": "string", // optional
"suburb": "string", // optional
"state": "string", // optional
"country": "string", // optional — full country name
"countryCode": "string", // optional — ISO ALPHA-2 e.g. AU
"phone1": "string", // optional — additional contact number
"phone2": "string" // optional — additional contact number
},
"application": {
"job": {
"positionTitle": "string", // required — full role name e.g. "Registered Nurse"
"jobTitle": "string", // optional
"jobLocation": "string", // optional
"profitCentre": "string", // optional — internal position reference
"officeCode": "string", // required
"ncchcconsent": "0|1", // required for NCCHCC checks
"thirdpartyconsent": "0|1", // required for NCCHCC checks
"hiringManager": {
"firstName": "string", // required
"lastName": "string", // required
"email": "string", // required
"title": "string", // optional
"prefName": "string", // optional
"phone": "string", // optional
"mobile": "string", // optional
"fax": "string", // optional
"country": "string", // optional
"countryCode": "string" // optional — ISO ALPHA-2
}
}
},
"documents": {
"code": "selfie|consent|IdentityDocumentCode", //find IdentityDocumentCode defined in Identity Documents section
"image": "image url", //Document image URL needs to be accessible and downloadable
"data": "IdentityDocumentData" // as defined in Identity Documents section
},
"package": {
"custom": false, // false = use a preset code; true = specify checks array
"checks": [{
"id": "check number", //as obtained from the Get client checks request
"noEmployers": 2, // noEmployers: 1–3, for Reference checks or Employment Confirmation checks
"additionalData":{
"workPlace": "workPlace",
"work_location_state": "string",
"work_location_town": "string",
"contact_with_children": "No Vulnerable|Supervised contact|Unsupervised contact",
"address":[{
"type": "RESID|POST|PREV",
"street": "string",
"suburb": "string",
"state": "string",
"postcode": "string",
"country": "string",
"startDate": "dd/mm/yyyy",
"endDate": "dd/mm/yyyy" // required only for Previous Addresses
}],
"birthDetails":{
"dateYearOnly": "boolean",
"date": "dd/mm/yyyy|yyyy",
"town": "string",
"state": "string",
"country": "string"
},
"documentsInCurrentName": "boolean",
"previousName":{
"type": "MAIDN|ALIAS|PREVS",
"firstName": "string",
"lastName": "string",
"middleName": "string", // optional
"singleNameOnly": "boolean"
}
}
}],
"code": "string", // Required only if "custom" is false. A unique code provided to each API consumer in order to provide preset job checks for applicants.
"title": "string", // optional - title to be used when referring to the job
},
"duedate": "YYYY-MM-DD", // optional; if you want the job to be created on a specific day. This will result in a response having status: Queued
"options": {
"redirect_url": "string", // optional — redirect applicant here after completing checks
"deadline": "YYYY-MM-DD HH:MM:SS", // optional — applicant must complete before this datetime
"callback": [
{
"url": "string", // optional — your webhook endpoint
"state": "Completed|Cancelled|Archived|All", //optional - job status when you want to receive job information thru callback
"token": "string" // optional — token MakeSure sends to authenticate the callback
}
]
}
}
{
"status": Pending, //required; 'Pending' or 'Queued' for the jobs that have duedate
"jobId": "string" // Makesure job Identifier
"jobURL": "string" // Makesure jobURL
"refusedChecks": "Array" // Array of refused check IDs
}
{
"status": "error", //required
"error": "string", //optional, error message
"errors": "Array", //optional, Array of errors
"message": "string" //optional
}
Response codes
The API returns standard HTTP status codes. Error responses include a message body explaining what went wrong.
| Code | Status | Meaning | Response format |
|---|---|---|---|
| 200 | OK | Request was successful. | Read the response body. |
| 201 | Queued|Pending | Request was successful. The resource is queued or pending. | {status: 'Queued/Pending',job: { id: <source_id>, data: <job_data>},jobURL:"returned for pending status; will be used by the applicant to complete personal info and add needed documents.",refusedChecks: []}. |
| 400 | Bad Request | The request body failed validation. The response body contains field-level errors. | { status: 'error',errors: ['missing_id', 'source_job_already_existent', 'missing_package_data']} or {status: 'error',error: 'duplicate_check_id'} |
| 401 | Unauthorized | The token is missing, expired, or has been tampered with. | |
| 403 | Forbidden | The token does not have the required scope for this endpoint. | {status: 'error', error: 'access_forbidden'} |
| 404 | Not Found | The endpoint or resource does not exist. | |
| 500 | Internal Server Error | An unexpected error occurred on MakeSure's side. | {status: 'internal_error', code: 'create_package_error'} |
| 429 | Throttle error | Too many requests from client. | { status: 'error',errors: ['too_many_requests']} |
Create AFP job prefilled
Identical to Create job but allows you to pre-supply identity documents and additional applicant data on behalf of the applicant. The goal is to remove the applicant intervention on the MakeSure portal.
id field is your internal reference for the
verification request. MakeSure uses this value to prevent duplicate
submissions once document processing has started. If you send the same
id again after the identity
documents have already been submitted and processing is underway,
the new request will be rejected. If processing has not started yet, any previously uploaded documents will be replaced based on the
documentType key. Use a unique identifier from your system, such as an application
ID.
Please ensure that the following documents are accessible for upload
or all the required information is added before submitting a Federal
Police checks (AFP) to Makesure:
Use a combination of
the documents(url or information) listed as AFP documents in the
Identity Documents section.
The total points for the submitted documents must
exceed 100. Please review the points allocated to each type
of document within the Identity Documents section.
Changes in fields vs. Create job
applicant
applicant fields will has supplementary information,
and some fields mandatory status changes:
| Field | Description |
|---|---|
| birthDetails | (required) Birth details will be taken from here |
| addresses | List of addresses; residential is required |
| previousNames | Previous names list, if applicant has any other names than the birth name |
| notificationType | Optional, will be set by default to NONE. |
| email/phone | These fields are optional. You need to set an email/phone number if you want notifications to be sent to applicant. |
| package.custom | true (for AFP checks only true value is accepted) |
identity
An array of identity documents to submit on behalf of the applicant. Each entry contains:
| Field | Description |
|---|---|
| documentType |
Document type code. Use "selfie" for a
passport-style photo, "consent" for a signed
consent form, or a document code from the
Identity documents
table (e.g. "DL" for driver licence).
|
| totalPoints | Points associated to the documentType. Check Identity Documents |
| documentNumber | Number/series associated to the document |
| issuingCountry | Country that released the document |
| expiryDate | Expiry Date of the document having the format MM-DD-YYYY |
| verifiedByClient | yes|no |
| attachments | Containing a list of documents related to the check: an image/pdf URL or base64-encoded image of the document, mimeType, fileName. |
"identity": [ { "documentType": "SELFIE|CONSENT|PP|DL|etc.", "totalPoints": "70", "documentNumber": "AA-1232432334", "issuingCountry": "AU", "expiryDate": "04-29-2026", "verifiedByClient": "yes", "attachments":[{ "type": "image", "fileName": "photo.jpeg", "mimeType": "image/jpeg", "content": "https://your-cdn.com/photo.jpeg" }] } ]
package
The package object will always have custom:true. There
will be no additionalData sent here, as this information will
be passed into identity list.
| Field | Description |
|---|---|
| package.custom | true; for AFP checks only true value is accepted |
"package": [ { "custom": "true", "checks": [{, "id": "123", "noEmployers": 2 }], "callbackUrl": "https://your-callback.com/url" } ]
AFP identity documents
| # | Requirement | Notes |
|---|---|---|
| 1 | Photographic identity document | Any document containing a photo of the applicant. |
| 2 | Applicant consent document | |
| 3 | 100 pts identity documents | A combination of documents listed as AFP documents in the Identity Documents section. The total points for the submitted documents must exceed 100. If you have not sent any identity documents, this validation will not take place. |
{
"id": "string", // your internal job reference; this needs to be unique in our system
"applicant": {
"firstName": "string",
"lastName": "string",
"birthDetails":{
"dateOfBirth": "date", // MM-DD-YYYY format
"birthCity": "string", // town/suburb
"birthCountry": "string"// ISO country code (e.g. AU) or the full country name (e.g. Australia)
},
"address":[{ // RESIDENTIAL is required
"type": "RESIDENTIAL",
"street1": "string", // address1
"country": "string", // ISO country code (e.g. AU) or the full country name (e.g. Australia)
"startDate": "date" // format MM-DD-YYYY
}]
},
"application": {
"job": {
"positionTitle": "string" // full role name e.g. "Registered Nurse"
}
},
"package": {
"custom": true, //always true
"checks": [{
"id": "check number" // as obtained from the Get client checks request
}],
"callbackUrl": "string" // URL where the requester will receive the results
}
}
Full request body
{
"id": "string", // required — your internal job reference; this needs to be unique in our system
"applicant": {
"email": "string", // optional
"firstName": "string", // required
"lastName": "string", // required
"middleName": "string", // optional — include if known; omitting may cause name mismatch
"genderCode": "M|F|X", // optional
"postCode": "string", // optional
"notificationType": "SMS|EMAIL|ALL|NONE", // optional - defaults to ALL
"mobile": "string", // optional — include country prefix e.g. +61412345678
"prefName": "string", // optional — how MakeSure addresses the applicant
"title": "string", // optional — e.g. Mr, Ms, Dr
"street": "string", // optional
"suburb": "string", // optional
"state": "string", // optional
"country": "string", // optional — full country name
"countryCode": "string", // optional — ISO ALPHA-2 e.g. AU
"phone1": "string", // optional — additional contact number
"phone2": "string", // optional — additional contact number
"birthDetails":{
"dateOfBirth": "date", // required — MM-DD-YYYY format
"birthCity": "string", // required - town/suburb
"birthState": "string", // optional - region/state
"birthCountry": "string" // ISO country code (e.g. AU) or the full country name (e.g. Australia)
},
"address":[{ // RESIDENTIAL is required
"type": "RESIDENTIAL|POSTAL|PREVIOUS",
"street1": "string", // required - address1
"street2": "string", // optional - address2
"suburb": "string", // optional - town
"state": "string", // optional - region/state (required if AU)
"postcode": "string", // optional - postal code
"country": "string", // ISO country code (e.g. AU) or the full country name (e.g. Australia)
"startDate": "date", // required - format MM-DD-YYYY
"endDate": "date" // required only for Previous Addresses, format MM-DD-YYYY
}],
"documentsInCurrentName": "boolean", // optional
"previousNames":{
"type": "MAIDEN|ALIAS|PREVIOUS", // required if documents in previous names
"firstName": "string", // required
"lastName": "string", // required
"middleName": "string", // optional
"singleNameOnly": "boolean"
}
},
"application": {
"job": {
"positionTitle": "string", // required — full role name e.g. "Registered Nurse"
"jobTitle": "string", // optional
"jobLocation": "string", // optional
"profitCentre": "string", // optional — internal position reference
"officeCode": "string", // optional
"hiringManager": {
"firstName": "string", // optional
"lastName": "string", // optional
"email": "string", // optional
"title": "string", // optional
"prefName": "string", // optional
"phone": "string", // optional
"mobile": "string", // optional
"fax": "string", // optional
"country": "string", // optional
"countryCode": "string" // optional — ISO ALPHA-2 e.g. AU
}
}
},
"identity": [{ //required
"documentType": "string", //required - selfie|consent|PP|DL|etc. - find IdentityDocumentCode defined in Identity Documents section
"totalPoints": "string", //optional - the document related points - find IdentityDocument Points defined in Identity Documents section
"documentNumber": "string" // optional if the attachments contain an image/pdf/base64-encoded data
"issuingCountry": "string" // optional ISO 3166 ALPHA-2 e.g. AU
"expiryDate": "string" // optional
"verifiedByClient": "string" // optional - yes|no
"attachments":[{
"type": "string", //optional - image/pdf/base64-encoded
"fileName": "string", // optional
"mimeType": "string", // optional
"content": "string", // required - image url, pdf or base64-encoded image content
}]
}],
"package": {
"custom": true, //required - always true
"checks": [{
"id": "check number", //as obtained from the Get client checks request
"noEmployers": 2, // noEmployers: 1–3, for Reference checks or Employment Confirmation checks
}],
"callbackUrl": "string", // required - URL where the requester will receive the results
"callbackToken": "string", // optional - bearer token used to generate bearer token authorization for callback requests
"code": "string", // optional - A unique code provided to each API consumer in order to provide preset job checks for applicants.
"title": "string", // optional - title to be used when referring to the job
},
"duedate": "YYYY-MM-DD", // optional; if you want the job to be created on a specific day. This will result in a response having status: Queued
"clientCustomerId": "string", // optional — if it exists will be returned to client
"submittedAt": "string" // optional — if it exists will be returned to client
}
{
"status": Pending, //required; 'Pending' or 'Queued' for the jobs that have duedate
"jobId": "string" // Makesure job Identifier
"jobURL": "string" // Makesure jobURL
"refusedChecks": "Array" // Array of refused check IDs
}
{
"status": "error", //required
"error": "string", //optional, error message
"errors": "Array", //optional, Array of errors
"message": "string" //optional
}
Response codes
The API returns standard HTTP status codes. Error responses include a message body explaining what went wrong.
| Code | Status | Meaning | Response format |
|---|---|---|---|
| 200 | OK | Request was successful. | Read the response body. |
| 201 | Queued|Pending | Request was successful. The resource is queued or pending. | {status: 'Queued/Pending',job: { id: <source_id>, data: <job_data>},jobURL:"returned for pending status",refusedChecks: [array of checks that were not created for the job]}. |
| 400 | Bad Request | The request body failed validation. The response body contains field-level errors. | { status: 'error',errors: ['missing_id', 'source_job_already_existent', 'missing_package_data']} or {status: 'error',error: 'duplicate_check_id'} |
| 401 | Unauthorized | The token is missing, expired, or has been tampered with. | |
| 403 | Forbidden | The token does not have the required scope for this endpoint. | {status: 'error', error: 'access_forbidden'} |
| 404 | Not Found | The endpoint or resource does not exist. | |
| 500 | Internal Server Error | An unexpected error occurred on MakeSure's side. | {status: 'internal_error', code: 'create_package_error'} |
| 429 | Throttle error | Too many requests from client. | { status: 'error',errors: ['too_many_requests']} |
Get job status
Get a specific job
Replace {id} with the job ID you provided when creating
the job.
// Response { "jobId": "your-internal-job-ref-001", "status": "Completed", "jobDetails": { // Only present for jobs with a Right to Work check "dateCompleted": "2024-08-15", "visaSubclass": "string", "visaExpiryDate": "string", "workingRightsRestrictions": "string" }, "packageDetails": [ { "12": { // Key is the check_id "dateCompleted": "2024-08-15", "checkStatus": "Completed" } } ], "jobURL": "https://app.makesure.com.au/job/abc123", "jobURLvalidUntil": "2024-08-15T10:00:00Z" // Only present if a TTL was set }
Get all jobs
Returns all jobs created by your account. By default, completed jobs are excluded and pending jobs are included.
Query parameters
| Parameter | Default | Description |
|---|---|---|
| include_completed | false |
Set to true to include jobs with status
Completed.
|
| include_unassigned | true |
Set to false to exclude jobs that are still
Pending.
|
// GET /v1/job/all?include_completed=true { "jobs": [ { "jobId": 1001, "status": "Completed" }, { "jobId": 1002, "status": "Progress" } ] }
Cancel job
Cancels a job that is in Pending or
Progress state. Once cancelled, a job cannot be
reactivated. You must provide a reason for the cancellation.
URL parameter
| Parameter | Description |
|---|---|
| id | The job ID you provided at creation time. |
Request body
{
"reason": "Applicant withdrew from the hiring process"
}
id.
Create job URL
Generates a time-limited access URL for an existing job. Use this when you need to share the job portal link with an applicant but want the link to expire after a set period for security reasons.
Request body
{
"id": "your-internal-job-ref-001",
"ttl": 86400 // Time to live in seconds. 0 or omitted = no expiry.
}
Response
{
"jobId": "your-internal-job-ref-001",
"jobURL": "https://app.makesure.com.au/job/abc123?token=xyz",
"validUntil": "2024-08-16T10:00:00Z" // UTC+0. Omitted if no TTL was set.
}
ttl of 0 or omitting the field generates a
URL with no expiry.
Get client checks
Returns all check types available to your account. Use the
id values returned here when building custom check
packages.
Response
{
"response": [
{
"id": 7,
"name": "Employment Reference Check",
"noEmployers": "3" // Max employers for reference checks. null if not applicable.
},
{
"id": 12,
"name": "National Criminal History Check",
"noEmployers": null
}
]
}
Webhooks & callbacks
Instead of polling the job status endpoint, you can configure
MakeSure to POST a payload to your server whenever a job changes
status. Callbacks are configured per-job in the
options.callback array when creating a job.
Configuring a callback for Create job and Create Job Prefilled
"options": { "callback": [ { "url": "https://yourapp.com/webhooks/makesure", "state": "Completed", // Trigger only when job reaches Completed "token": "your-secret-token" }, { "url": "https://yourapp.com/webhooks/makesure", "state": "Cancelled" // Separate callback for cancellations } ] }
State options
| Value | Triggers when |
|---|---|
| Completed | All checks for the job have been completed. |
| Cancelled | The job has been cancelled. |
| Archived | The job has been archived. |
| All | Any status change occurs. |
Callback payload
When triggered, MakeSure sends an HTTP POST to your URL with a JSON body describing the job's current state:
// Example callback payload (Completed) { "jobId": "your-internal-job-ref-001", "status": "Completed", "jobURL": "https://app.makesure.com.au/job/abc123", "packageDetails": [ { "12": { "dateCompleted": "2024-08-15", "checkStatus": "Completed" } } ] }
Configuring a callback for Create AFP Job Prefilled
callbackUrl set in the
package parameters.
"package": { "callbackUrl": "https://yourapp.com/webhooks/makesure" }
State options
| Value | Triggers when |
|---|---|
| Completed | All checks for the job have been completed. |
| Cancelled | The job has been cancelled. |
| Archived | The job has been archived. |
| All | Any status change occurs. |
Callback payload
When triggered, MakeSure sends an HTTP POST to your URL with a JSON body describing the job's current state:
POST: /callbackUrl
{
"status": "string", // required — internal status of the job at the time: Completed, Pending, Cancelled, Archived, Failed
"completedAt": "string", // required - date the job_task was Completed
"providerCaseId": "string", // internal Makeure identifier
"referenceNumber": "string", // job identifier used within your system, sent as id in the api call raw data
"clientCustomerId": "string", // clientCustomerId sent in the api call raw data
"result": {
"outcome":[{ //required if hasRecord is true - outcome of the Disclosures
"conviction_date": "string",
"court_name": "string",
"file_number": "string",
"offence": "string",
"sentence": "string",
"identifiers": "string"
}],
"hasRecord": "boolean" //required - true|false - false if it has no Disclosures
},
"certificate": {
"available": "boolean", //required - true|false
"downloadUrl": "string" //required - url to download the result
}
}
Authentication
If you supply a token in the callback configuration,
MakeSure includes it as a Bearer token in the
Authorization header of the callback request:
Authorization: Bearer your-secret-token
Validate this header in your webhook handler to confirm the request originated from MakeSure and not a third party.
Handling callbacks reliably
200 OK as fast as possible. If
processing takes time, acknowledge receipt immediately and handle
the payload asynchronously in a background worker.
2xx status. Make your handler idempotent — processing
the same jobId + status combination twice
should not cause side effects.
Testing callbacks locally
During development you can use a tool like ngrok or Cloudflare Tunnel to expose your local server to the internet, then supply the resulting public URL as your callback URL.
Identity documents
When submitting a prefilled job, each identity document requires a
code and a structured data object. The
tables below list all supported document types by category.
Commencement documents
| Code | Document | Issuer / Notes |
|---|---|---|
| BC | Birth Certificate | Australian State/Territory Births, Deaths and Marriages. Extracts and birth cards are not accepted. |
| CC | Australian Citizenship Certificate | Department of Home Affairs. |
| VI | Australian Visa | Department of Home Affairs. Must be supported by a foreign passport. |
| IM | ImmiCard | Department of Home Affairs. |
| PP | Australian Passport | DFAT. May be up to 3 years expired if verified via DVS. |
Primary documents
| Code | Document | Notes |
|---|---|---|
| PP | Australian Passport | May be up to 3 years expired if DVS-verified. |
| DL | Driver licence / learner / provisional | Must include photo. Digital licences must have security features verified. |
| IM | ImmiCard | |
| FP | Foreign Passport | Must have a valid visa or entry stamp. |
| PA | Proof of age / photo identity card | Must show name, date of birth, photo, and signature. |
| SD | Student identity document | Only for persons under 18 with no other primary document. |
Secondary documents
| Code | Document |
|---|---|
| MD | Medicare card (Services Australia) |
| AEC | Electoral enrolment (Australian Electoral Commission) |
| TFN | Tax File Number (Australian Taxation Office) |
| BCC | Bank or credit card — signature required; foreign bank cards not accepted |
| CRC | Credit reference check |
| FGD | Foreign identity document — non-English docs need NAATI-accredited translation |
| SCL | Security Guard / Crowd Control photo licence |
| EoR | Evidence of right to government benefit (DVA or Centrelink) |
| CPI | Consular photo identity card (DFAT) |
| PFO | Police Force Officer photo identity card |
| ADF | Australian Defence Force photo identity card |
| CMW | Government-issued photo identity card (e.g. Working with Children card) |
| ASI | Aviation security identification card |
| MSI | Maritime security identification card |
| FAL | Firearms licence |
| AST | Australian secondary or tertiary student photo ID |
| CAT | Certified academic transcript from an Australian institution |
| TRR | Trusted referees report |
| CoI | DFAT Certificate of Identity |
| DoI | DFAT Document of Identity |
| UNT | UN Convention Travel Document |
Change of name documents
| Code | Document | Notes |
|---|---|---|
| NC | Change of Name Certificate | Australian State/Territory Government. |
| MC | Marriage Certificate | Australian State/Territory Government. Church or celebrant certificates not accepted. |
| NBC | Australian Reissued Birth Certificate |
Document data schemas
Australian Birth Certificate
{
"FamilyName": "string", // required
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // required — ISO 8601
"RegistrationNumber": "string", // optional if CertificateNumber is provided
"CertificateNumber": "string", // optional if RegistrationNumber is provided
"RegistrationState": "string", // required
"RegistrationDate": "YYYY-MM-DD", // optional — ISO 8601
"RegistrationYear": "string", // optional
"DatePrinted": "string" // optional
}
Australian Citizenship Certificate
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // optional — ISO 8601
"AcquisitionDate": "YYYY-MM-DD", // optional — ISO 8601
"StockNumber": "string"
}
Australian Visa
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // optional — ISO 8601
"CountryOfIssue": "string", // optional — ISO 3166 alpha-3
"PassportNumber": "string"
}
ImmiCard
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // optional — ISO 8601
"ImmiCardNumber": "string"
}
Australian Passport
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // required — ISO 8601
"Gender": "string", // optional (M|F|X)
"TravelDocumentNumber": "string"
}
Australian Driver Licence
{
"FamilyName": "string",
"GivenName": "string", // optional
"MiddleName": "string", // optional
"BirthDate": "YYYY-MM-DD", // required — ISO 8601
"StateOfIssue": "string",
"LicenceNumber": "string",
"CardNumber": "string" // optional
}
Foreign Passport
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD", // required — ISO 8601
"CountryOfIssue": "string", // optional — ISO 3166 alpha-3
"PassportNumber": "string"
}
Proof of Age
{
"ReferenceNumber": "string", // optional
"ExpiryDate": "YYYY-MM-DD" // required — ISO 8601
}
Student Identity Document
{
"ReferenceNumber": "string", // optional
"ExpiryDate": "YYYY-MM-DD" // required — ISO 8601
}
Medicare Card
{
"FamilyName": "string",
"GivenName": "string", // optional
"CardNumber": "string"
}
Bank / Credit Card
{
"FamilyName": "string",
"GivenName": "string", // optional
"ExpiryDate": "MM-DD"
}
Tax File Number
{
"FamilyName": "string",
"GivenName": "string" // optional
}
Change of Name Certificate
{
"FamilyName": "string",
"GivenName": "string", // optional
"BirthDate": "YYYY-MM-DD",
"RegistrationNumber": "string", // optional if CertificateNumber is provided
"RegistrationState": "string",
"RegistrationYear": "string", // optional
"CertificateNumber": "string", // optional if RegistrationNumber is provided
"DatePrinted": "string", // optional
"RegistrationDate": "string",
"FamilyName2": "string",
"GivenName2": "string" // optional
}
Marriage Certificate
{
"FamilyName": "string",
"GivenName": "string", // optional
"DateOfEvent": "YYYY-MM-DD",
"RegistrationNumber": "string", // optional if CertificateNumber is provided
"RegistrationState": "string", // optional
"CertificateNumber": "string", // optional if RegistrationNumber is provided
"RegistrationYear": "string",
"DatePrinted": "YYYY-MM-DD",
"RegistrationDate": "YYYY-MM-DD",
"FamilyName2": "string",
"GivenName2": "string"
}
Australian Reissued Birth Certificate
{
"FamilyName": "string",
"GivenName": "string", // optional
"FamilyName2": "string",
"GivenName2": "string", // optional
"BirthDate": "YYYY-MM-DD",
"RegistrationState": "string",
"CertificateNumber": "string", // optional if RegistrationNumber is provided
"RegistrationNumber": "string", // optional if CertificateNumber is provided
"RegistrationDate": "YYYY-MM-DD" // optional
}
70 points documents
| Code | Document | Issuer / Notes |
|---|---|---|
| BC | Birth Certificate | Australian State/Territory Births, Deaths and Marriages. Extracts and birth cards are not accepted. |
| CC | Australian Citizenship Certificate | Department of Home Affairs. |
| PP | Australian Passport | DFAT. May be up to 3 years expired if verified via DVS. |
| FP | Foreign Passport | Must have a valid visa or entry stamp. |
| DOI | DFAT Document of Identity | |
| COI | DFAT Certificate of Identity |
40 points documents
| Code | Document | Notes |
|---|---|---|
| DL | Driver licence / learner / provisional | Must include photo. Digital licences must have security features verified. |
| CMW | Government-issued photo identity card (e.g. Working with Children card) | |
| ASI | Aviation security identification card | |
| GEI | Government Employee Id | |
| DVA | Australian Veteran Card | |
| CLC | Centrelink Card | Health Care Card or Pensioner Concession Card |
| AST | Australian secondary or tertiary student photo ID | |
| ADF | Australian Defence Force photo identity card |
25 points documents
| Code | Document |
|---|---|
| MD | Medicare card (Services Australia) |
| PLA | Property lease |
| BST | Bank Statement |
| CCC | Credit card — signature required; foreign bank cards not accepted |
| BCE | Birth certificate extract |
| BCN | Birth card |
| MC | Marriage Certificate |
| DND | Decree Nisi |
| NC | Name Change Certificate |
| TAN | Tax notice |
| AMD | Mortage documents |
| RA | Rating Authority |
20 points documents
| Code | Document |
|---|---|
| UB | Utility bill |
| RRI | Indigenous reference |
| FGD | Documents issued outside Australia |
Response codes
The API returns standard HTTP status codes. Error responses include a message body explaining what went wrong.
| Code | Status | Meaning | What to do |
|---|---|---|---|
| 200 | OK | Request was successful. | Read the response body. |
| 201 | Created | A new resource was created. | Read the response body for the new resource's details. |
| 400 | Bad Request | The request body failed validation. The response body contains field-level errors. | Read the error details and fix the request before retrying. |
| 401 | Unauthorized | The token is missing, expired, or has been tampered with. | Re-authenticate to obtain a fresh token and retry. |
| 403 | Forbidden | The token does not have the required scope for this endpoint. | Request a new token with the correct scope. |
| 404 | Not Found | The endpoint or resource does not exist. | Check the URL and the job ID. |
| 500 | Internal Server Error | An unexpected error occurred on MakeSure's side. | Report to MakeSure support with the request details and timestamp. |
| 503 | Service Unavailable | The API is under maintenance. | Wait and retry. Check MakeSure's status page for updates. |
Error response body
For 400 errors, the response body describes which
fields failed and why:
// Example 400 response { "status": "error", "errors": [ 'missing_id', 'missing_firstname', 'invalid_notification_type', 'source_job_already_existent', etc. ] }
Australian State Codes
| Code | Value |
|---|---|
| ACT | Australian Capital Territory |
| NSW | New South Wales |
| NT | Northern Territory |
| QLD | Queensland |
| SA | South Australia |
| TAS | Tasmania |
| VIC | Victoria |
| WA | Western Australia |