REST API Reference
Account info, subscription status, identifier validation, and full read/write access to your monitored entities.
Authentication
Every request must include an Authorization header with a personal access token: Bearer {YOUR_AUTH_TOKEN}.
- Log in and go to Team Settings → API Tokens
- Create a token with the abilities you need (read, create, update, delete)
- Copy it immediately - it's only ever shown once
API access is scoped to your team's active subscription and rate-limited per token.
Account
APIs for account information
Get account information
Get detailed information about the authenticated user's account including team membership.
curl --request GET \
"https://monitorhq.com.au/api/v1/account" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/account", {
method: "GET",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->get('https://monitorhq.com.au/api/v1/account');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.get("https://monitorhq.com.au/api/v1/account", headers=headers)
Example response (200)
{
"name": "John Doe",
"email": "admin@example.com",
"account_type": "admin",
"current_team": {
"name": "John's Team",
"personal_team": true,
"is_parent_team": true
},
"owned_teams": [
{
"name": "John's Team",
"personal_team": true,
"is_parent_team": true
}
],
"member_of_teams": [
{
"id": 2,
"name": "Another Team",
"role": "editor"
}
]
}
Subscription
APIs for subscription status and usage
Get subscription status
Get the current team's subscription status and usage information.
curl --request GET \
"https://monitorhq.com.au/api/v1/subscription" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/subscription", {
method: "GET",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->get('https://monitorhq.com.au/api/v1/subscription');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.get("https://monitorhq.com.au/api/v1/subscription", headers=headers)
Example response (200)
{
"has_subscription": true,
"subscription": {
"plan": "Professional",
"status": "active",
"subscribed_at": "2026-01-15 10:00:00",
"expires_at": "2026-02-15 10:00:00",
"max_entities": 50,
"max_high_risk_entities": 10
},
"usage": {
"total": 25,
"high": 5,
"standard": 15,
"low": 5
},
"remaining": {
"slots": 25,
"high_risk_slots": 5
}
}
Returns {"has_subscription": false, "message": "No active subscription found"} when the team has no subscription.
Identifier Validation
APIs for validating and formatting ACN/ABN identifiers
Check identifier
Validate and format an ACN or ABN identifier. This endpoint determines the type of identifier and formats it correctly.
Body Parameters
- identifier string
- The ACN or ABN to validate.
curl --request POST \
"https://monitorhq.com.au/api/v1/identifier/check" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"identifier": "123456789"
}'
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/identifier/check", {
method: "POST",
headers,
body: JSON.stringify({
"identifier": "123456789"
}),
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->post('https://monitorhq.com.au/api/v1/identifier/check', [
'identifier' => '123456789',
]);
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.post(
"https://monitorhq.com.au/api/v1/identifier/check",
headers=headers,
json={
"identifier": "123456789"
}
)
Example response (200)
{
"valid": true,
"type": "acn",
"formatted": "123 456 789",
"number": "123456789"
}
Returns 422 with {"valid": false, "message": "...", "errors": [...]} when neither a valid ACN nor ABN.
Monitoring
APIs for managing monitored entities
List monitorings
Get a list of all monitorings for the current team. By default, only active monitorings are returned. last_checked_at and consecutive_failures cover the entity's checks across ASIC and the ABR; the acn_ and abn_ prefixed fields report each register separately, so a failing ASIC check is visible even while ABR checks succeed. A stopped monitoring returns null for last_checked_at, consecutive_failures, entity_state and the four per-register fields. If an ABN-only monitoring is merged into the company's ACN monitoring and your team watched both, the duplicate uuid is retired and returns 404 monitoring_not_found; look the entity up again with the acn filter to get the uuid that was kept.
Query Parameters
- page integer (optional)
- Page number for pagination.
- per_page integer (optional)
- Number of items per page.
- risk_level string (optional)
- Filter by risk level (high, standard, low).
- is_active boolean (optional)
- Filter by active status (default: true). Set to false to see stopped monitorings.
- acn string (optional)
- Filter to the team's monitoring of this exact ACN, if any.
- abn string (optional)
- Filter to the team's monitoring of this exact ABN, if any.
curl --request GET \
"https://monitorhq.com.au/api/v1/monitorings?page=1&per_page=15&risk_level=high&is_active=true&acn=123456789&abn=12345678901" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings?page=1&per_page=15&risk_level=high&is_active=true&acn=123456789&abn=12345678901", {
method: "GET",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->get('https://monitorhq.com.au/api/v1/monitorings?page=1&per_page=15&risk_level=high&is_active=true&acn=123456789&abn=12345678901');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.get("https://monitorhq.com.au/api/v1/monitorings?page=1&per_page=15&risk_level=high&is_active=true&acn=123456789&abn=12345678901", headers=headers)
Example response (200)
{
"data": [
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"entity_name": "Example Pty Ltd",
"entity_type": "company",
"acn": "123456789",
"abn": "12345678901",
"risk_level": "high",
"added_at": "2026-01-15T10:00:00Z",
"last_checked_at": "2026-01-16T03:12:00+00:00",
"consecutive_failures": 0,
"acn_last_checked_at": "2026-01-16T03:12:00+00:00",
"abn_last_checked_at": "2026-01-14T22:05:00+00:00",
"acn_consecutive_failures": 0,
"abn_consecutive_failures": 0,
"entity_state": {
"entity_type": "PRV",
"acn_status": "REGD",
"abn_status": "Active",
"gst_registered": true,
"gst_date": "2020-01-15",
"business_names": [],
"is_terminal": false
}
}
],
"links": {
"first": "https://monitorhq.com.au/api/v1/monitorings?page=1",
"last": null,
"prev": null,
"next": "https://monitorhq.com.au/api/v1/monitorings?page=2"
},
"meta": {
"current_page": 1,
"current_page_url": "https://monitorhq.com.au/api/v1/monitorings?page=1",
"from": 1,
"path": "https://monitorhq.com.au/api/v1/monitorings",
"per_page": 15,
"to": 1
}
}
Add monitoring
Add an entity to your monitoring list. The entity will be fetched and monitored automatically. Either acn or abn is required.
Body Parameters
- acn string (optional)
- The ACN number (9 digits).
- abn string (optional)
- The ABN number (11 digits).
- risk_level string
- The risk level (high, standard, low).
curl --request POST \
"https://monitorhq.com.au/api/v1/monitorings" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"acn": "123456789",
"abn": "12345678901",
"risk_level": "high"
}'
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings", {
method: "POST",
headers,
body: JSON.stringify({
"acn": "123456789",
"abn": "12345678901",
"risk_level": "high"
}),
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->post('https://monitorhq.com.au/api/v1/monitorings', [
'acn' => '123456789',
'abn' => '12345678901',
'risk_level' => 'high',
]);
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.post(
"https://monitorhq.com.au/api/v1/monitorings",
headers=headers,
json={
"acn": "123456789",
"abn": "12345678901",
"risk_level": "high"
}
)
Example response (201)
{
"message": "Monitoring added successfully",
"data": {
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"entity_name": "Example Pty Ltd",
"entity_type": "APTY",
"acn": "123456789",
"abn": "12345678901",
"risk_level": "high",
"added_at": "2026-01-15T10:00:00Z"
}
}
Returns 422 with {"message": "...", "code": "already_monitored", "uuid": "..."} when your team already monitors this entity, or {"message": "...", "code": "capacity_exceeded"} when your plan limit is reached. Adding an entity your team previously stopped restarts it and returns 201 with the same uuid.
Bulk add monitorings
Add up to 100 entities to your monitoring list in a single request. Available only on plans with bulk import enabled. Each entity is processed independently - one duplicate, invalid, or over-capacity row does not prevent the others in the same request from being added.
Body Parameters
- entities array
- The entities to add (max 100, min 1).
- entities.*.acn string (optional)
- The ACN number (9 digits). Either acn or abn is required per entity.
- entities.*.abn string (optional)
- The ABN number (11 digits). Either acn or abn is required per entity.
- entities.*.risk_level string
- The risk level (high, standard, low).
curl --request POST \
"https://monitorhq.com.au/api/v1/monitorings/bulk" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"entities": "[{\"acn\": \"123456789\", \"risk_level\": \"standard\"}]",
"entities.*.acn": "123456789",
"entities.*.abn": "12345678901",
"entities.*.risk_level": "standard"
}'
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings/bulk", {
method: "POST",
headers,
body: JSON.stringify({
"entities": "[{\"acn\": \"123456789\", \"risk_level\": \"standard\"}]",
"entities.*.acn": "123456789",
"entities.*.abn": "12345678901",
"entities.*.risk_level": "standard"
}),
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->post('https://monitorhq.com.au/api/v1/monitorings/bulk', [
'entities' => '[{"acn": "123456789", "risk_level": "standard"}]',
'entities.*.acn' => '123456789',
'entities.*.abn' => '12345678901',
'entities.*.risk_level' => 'standard',
]);
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.post(
"https://monitorhq.com.au/api/v1/monitorings/bulk",
headers=headers,
json={
"entities": "[{\"acn\": \"123456789\", \"risk_level\": \"standard\"}]",
"entities.*.acn": "123456789",
"entities.*.abn": "12345678901",
"entities.*.risk_level": "standard"
}
)
Example response (200)
{
"message": "Bulk import processed",
"summary": {
"total": 2,
"succeeded": 1,
"failed": 1
},
"results": [
{
"index": 0,
"success": true,
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"error": null
},
{
"index": 1,
"success": false,
"uuid": null,
"error": "This entity is already in your portfolio"
}
]
}
Get monitoring details
Get detailed information about a specific monitoring by UUID. Check health and entity_state follow the same rules as the list endpoint, including nulls for a stopped monitoring.
URL Parameters
- uuid string
- The monitoring UUID.
curl --request GET \
"https://monitorhq.com.au/api/v1/monitorings/{uuid}" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings/{uuid}", {
method: "GET",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->get('https://monitorhq.com.au/api/v1/monitorings/{uuid}');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.get("https://monitorhq.com.au/api/v1/monitorings/{uuid}", headers=headers)
Example response (200)
{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"risk_level": "high",
"added_at": "2026-01-15T10:00:00Z",
"last_checked_at": "2026-01-16T03:12:00+00:00",
"consecutive_failures": 0,
"acn_last_checked_at": "2026-01-16T03:12:00+00:00",
"abn_last_checked_at": "2026-01-14T22:05:00+00:00",
"acn_consecutive_failures": 0,
"abn_consecutive_failures": 0,
"entity_state": {
"entity_type": "PRV",
"acn_status": "REGD",
"abn_status": "Active",
"gst_registered": true,
"gst_date": "2020-01-15",
"business_names": [],
"is_terminal": false
},
"entity_details": {
"entity_name": "Example Pty Ltd",
"entity_type": "APTY",
"acn": "123456789",
"abn": "12345678901",
"state": "VIC",
"acn_status": "REGD",
"acn_registration_date": "2020-01-15T00:00:00Z",
"acn_review_date": "2026-01-15T00:00:00Z",
"abn_status": "Active",
"abn_registration_date": "2020-01-15T00:00:00Z",
"gst_date": "2020-01-15T00:00:00Z",
"primary_address": {
"type": "RG",
"state": "VIC",
"locality": "MELBOURNE",
"postCode": "3000",
"addressLine": "123 Example St"
},
"secondary_address": {},
"business_names": [],
"former_names": []
},
"recent_history": [
{
"history_id": 1042,
"type": "abn_registration",
"source": "abr",
"initial": true,
"effective_date": "2020-01-15T00:00:00Z",
"detected_at": "2026-01-15T10:00:00+00:00",
"title": "ABN Registered",
"description": "Australian Business Number registered",
"metadata": []
}
]
}
Get monitoring history
Get paginated check results history for a specific monitoring. initial is true for rows describing the entity's past (written when monitoring starts) and false for changes detected since; webhooks only ever carry the latter. A gst_registration row for a cancelled GST registration carries metadata.gst_cancelled = true.
URL Parameters
- uuid string
- The monitoring UUID.
Query Parameters
- page integer (optional)
- Page number for pagination.
- per_page integer (optional)
- Number of items per page (max 100).
- event_type string (optional)
- Filter by event type (company_registration, abn_registration, gst_registration, etc).
- detected_since string (optional)
- Only rows detected at or after this ISO 8601 moment, oldest first (by history_id). URL-encode the value.
curl --request GET \
"https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1&per_page=15&event_type=abn_registration&detected_since=2026-10-12T00%3A00%3A00Z" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1&per_page=15&event_type=abn_registration&detected_since=2026-10-12T00%3A00%3A00Z", {
method: "GET",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->get('https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1&per_page=15&event_type=abn_registration&detected_since=2026-10-12T00%3A00%3A00Z');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.get("https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1&per_page=15&event_type=abn_registration&detected_since=2026-10-12T00%3A00%3A00Z", headers=headers)
Example response (200)
{
"data": [
{
"history_id": 1042,
"type": "abn_registration",
"source": "abr",
"initial": true,
"effective_date": "2020-01-15T00:00:00Z",
"detected_at": "2026-01-15T10:00:00+00:00",
"title": "ABN Registered",
"description": "Australian Business Number registered",
"metadata": []
}
],
"links": {
"first": "https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1",
"last": null,
"prev": null,
"next": "https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=2"
},
"meta": {
"current_page": 1,
"current_page_url": "https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1",
"from": 1,
"path": "https://monitorhq.com.au/api/v1/monitorings/{uuid}/history",
"per_page": 15,
"to": 3
}
}
Update monitoring
Update a monitoring's risk level.
URL Parameters
- uuid string
- The monitoring UUID.
Body Parameters
- risk_level string
- The risk level (high, standard, low).
curl --request PUT \
"https://monitorhq.com.au/api/v1/monitorings/{uuid}" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"risk_level": "standard"
}'
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings/{uuid}", {
method: "PUT",
headers,
body: JSON.stringify({
"risk_level": "standard"
}),
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->put('https://monitorhq.com.au/api/v1/monitorings/{uuid}', [
'risk_level' => 'standard',
]);
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.put(
"https://monitorhq.com.au/api/v1/monitorings/{uuid}",
headers=headers,
json={
"risk_level": "standard"
}
)
Example response (200)
{
"message": "Monitoring updated successfully",
"data": {
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"entity_name": "Example Pty Ltd",
"entity_type": "company",
"acn": "123456789",
"abn": "12345678901",
"risk_level": "standard",
"added_at": "2026-01-15T10:00:00Z"
}
}
Stop monitoring
Stop monitoring an entity. The entity will be removed from your monitoring list. Only team owners can stop monitorings. Stopping a monitoring that is already stopped succeeds and changes nothing. An unknown uuid, or one that belongs to another team, returns 404 with code monitoring_not_found.
URL Parameters
- uuid string
- The monitoring UUID.
curl --request DELETE \
"https://monitorhq.com.au/api/v1/monitorings/{uuid}" \
--header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
--header "Content-Type: application/json"
const headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
};
fetch("https://monitorhq.com.au/api/v1/monitorings/{uuid}", {
method: "DELETE",
headers,
}).then(response => response.json());
$response = Http::withHeaders([
'Authorization' => 'Bearer {YOUR_AUTH_TOKEN}',
])
->delete('https://monitorhq.com.au/api/v1/monitorings/{uuid}');
import requests
headers = {
"Authorization": "Bearer {YOUR_AUTH_TOKEN}",
}
response = requests.delete("https://monitorhq.com.au/api/v1/monitorings/{uuid}", headers=headers)
Example response (200)
{
"message": "Monitoring stopped successfully"
}