API DOCUMENTATION

REST API Reference

Account info, subscription status, identifier validation, and full read/write access to your monitored entities.

Base URL: https://monitorhq.com.au Download Postman collection OpenAPI spec

Authentication

Every request must include an Authorization header with a personal access token: Bearer {YOUR_AUTH_TOKEN}.

  1. Log in and go to Team Settings → API Tokens
  2. Create a token with the abilities you need (read, create, update, delete)
  3. 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.

GET /api/v1/account requires authentication
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.

GET /api/v1/subscription requires authentication
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.

POST /api/v1/identifier/check requires authentication

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.

GET /api/v1/monitorings requires authentication

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"
    }
  ],
  "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.

POST /api/v1/monitorings requires authentication

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"
  }
}

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.

POST /api/v1/monitorings/bulk requires authentication

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.

GET /api/v1/monitorings/{uuid} requires authentication

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",
  "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": [
    {
      "type": "abn_registration",
      "effective_date": "2020-01-15T00:00:00Z",
      "title": "ABN Registered",
      "description": "Australian Business Number registered"
    }
  ]
}

Get monitoring history

Get paginated check results history for a specific monitoring.

GET /api/v1/monitorings/{uuid}/history requires authentication

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).
curl --request GET \
    "https://monitorhq.com.au/api/v1/monitorings/{uuid}/history?page=1&per_page=15&event_type=abn_registration" \
    --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", {
    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');
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", headers=headers)

Example response (200)

{
  "data": [
    {
      "type": "abn_registration",
      "effective_date": "2020-01-15T00:00:00Z",
      "title": "ABN Registered",
      "description": "Australian Business Number registered"
    }
  ],
  "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.

PUT /api/v1/monitorings/{uuid} requires authentication

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.

DELETE /api/v1/monitorings/{uuid} requires authentication

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"
}