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

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