openapi: 3.0.3
info:
title: 'Monitor HQ API Documentation'
description: 'API for monitoring ACN/ABN entities with real-time alerts and subscription management'
version: 1.0.0
servers:
- url: 'https://monitorhq.com.au'
tags:
- name: Account
description: "\nAPIs for account information"
- name: 'Identifier Validation'
description: "\nAPIs for validating and formatting ACN/ABN identifiers"
- name: Monitoring
description: "\nAPIs for managing monitored entities"
- name: Subscription
description: "\nAPIs for subscription status and usage"
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can generate an API token from your account settings at /dashboard/user/api-tokens. Include this token in the Authorization header as Bearer YOUR_TOKEN for all API requests.'
security:
-
default: []
paths:
/api/v1/account:
get:
summary: 'Get account information'
operationId: getAccountInformation
description: "Get detailed information about the authenticated user's account including team membership."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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
properties:
name:
type: string
example: 'John Doe'
email:
type: string
example: admin@example.com
account_type:
type: string
example: admin
current_team:
type: object
properties:
name:
type: string
example: "John's Team"
personal_team:
type: boolean
example: true
is_parent_team:
type: boolean
example: true
owned_teams:
type: array
example:
- name: "John's Team"
personal_team: true
is_parent_team: true
items:
type: object
properties:
name:
type: string
example: "John's Team"
personal_team:
type: boolean
example: true
is_parent_team:
type: boolean
example: true
member_of_teams:
type: array
example:
- id: 2
name: 'Another Team'
role: editor
items:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: 'Another Team'
role:
type: string
example: editor
tags:
- Account
/api/v1/identifier/check:
post:
summary: 'Check identifier'
operationId: checkIdentifier
description: 'Validate and format an ACN or ABN identifier. This endpoint will determine the type of identifier and format it correctly.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
valid: true
type: acn
formatted: '123 456 789'
number: '123456789'
properties:
valid:
type: boolean
example: true
type:
type: string
example: acn
formatted:
type: string
example: '123 456 789'
number:
type: string
example: '123456789'
-
description: ''
type: object
example:
valid: true
type: abn
formatted: '12 345 678 901'
number: '12345678901'
properties:
valid:
type: boolean
example: true
type:
type: string
example: abn
formatted:
type: string
example: '12 345 678 901'
number:
type: string
example: '12345678901'
422:
description: ''
content:
application/json:
schema:
type: object
example:
valid: false
message: 'Invalid identifier format. Must be 9 digits (ACN) or 11 digits (ABN).'
properties:
valid:
type: boolean
example: false
message:
type: string
example: 'Invalid identifier format. Must be 9 digits (ACN) or 11 digits (ABN).'
tags:
- 'Identifier Validation'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
identifier:
type: string
description: 'The ACN or ABN to validate.'
example: '123456789'
required:
- identifier
/api/v1/monitorings:
get:
summary: 'List monitorings'
operationId: listMonitorings
description: 'Get a list of all monitorings for the current team. By default, only active monitorings are returned.'
parameters:
-
in: query
name: page
description: 'Page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'Page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: risk_level
description: 'Filter by risk level (high, standard, low).'
example: high
required: false
schema:
type: string
description: 'Filter by risk level (high, standard, low).'
example: high
-
in: query
name: is_active
description: 'Filter by active status (default: true). Set to false to see stopped monitorings.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status (default: true). Set to false to see stopped monitorings.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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://api.example.com/v1/monitorings?page=1'
last: null
prev: null
next: 'https://api.example.com/v1/monitorings?page=2'
meta:
current_page: 1
current_page_url: 'https://api.example.com/v1/monitorings?page=1'
from: 1
path: 'https://api.example.com/v1/monitorings'
per_page: 15
to: 1
properties:
data:
type: array
example:
- 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'
items:
type: object
properties:
uuid:
type: string
example: 123e4567-e89b-12d3-a456-426614174000
entity_name:
type: string
example: 'Example Pty Ltd'
entity_type:
type: string
example: company
acn:
type: string
example: '123456789'
abn:
type: string
example: '12345678901'
risk_level:
type: string
example: high
added_at:
type: string
example: '2026-01-15T10:00:00Z'
links:
type: object
properties:
first:
type: string
example: 'https://api.example.com/v1/monitorings?page=1'
last:
type: string
example: null
nullable: true
prev:
type: string
example: null
nullable: true
next:
type: string
example: 'https://api.example.com/v1/monitorings?page=2'
meta:
type: object
properties:
current_page:
type: integer
example: 1
current_page_url:
type: string
example: 'https://api.example.com/v1/monitorings?page=1'
from:
type: integer
example: 1
path:
type: string
example: 'https://api.example.com/v1/monitorings'
per_page:
type: integer
example: 15
to:
type: integer
example: 1
tags:
- Monitoring
post:
summary: 'Add monitoring'
operationId: addMonitoring
description: 'Add an entity to your monitoring list. The entity will be fetched and monitored automatically.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
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'
properties:
message:
type: string
example: 'Monitoring added successfully'
data:
type: object
properties:
uuid:
type: string
example: 123e4567-e89b-12d3-a456-426614174000
entity_name:
type: string
example: 'Example Pty Ltd'
entity_type:
type: string
example: APTY
acn:
type: string
example: '123456789'
abn:
type: string
example: '12345678901'
risk_level:
type: string
example: high
added_at:
type: string
example: '2026-01-15T10:00:00Z'
tags:
- Monitoring
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
acn:
type: string
description: 'The ACN number (9 digits).'
example: '123456789'
nullable: true
abn:
type: string
description: 'The ABN number (11 digits).'
example: '12345678901'
nullable: true
risk_level:
type: string
description: 'The risk level (high, standard, low).'
example: high
notification_emails:
type: array
description: 'Deprecated - no longer used for alert delivery. Notification email addresses.'
example:
- admin@example.com
items:
type: string
required:
- risk_level
'/api/v1/monitorings/{uuid}':
get:
summary: 'Get monitoring details'
operationId: getMonitoringDetails
description: 'Get detailed information about a specific monitoring by UUID.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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'
properties:
uuid:
type: string
example: 123e4567-e89b-12d3-a456-426614174000
risk_level:
type: string
example: high
added_at:
type: string
example: '2026-01-15T10:00:00Z'
entity_details:
type: object
properties:
entity_name:
type: string
example: 'Example Pty Ltd'
entity_type:
type: string
example: APTY
acn:
type: string
example: '123456789'
abn:
type: string
example: '12345678901'
state:
type: string
example: VIC
acn_status:
type: string
example: REGD
acn_registration_date:
type: string
example: '2020-01-15T00:00:00Z'
acn_review_date:
type: string
example: '2026-01-15T00:00:00Z'
abn_status:
type: string
example: Active
abn_registration_date:
type: string
example: '2020-01-15T00:00:00Z'
gst_date:
type: string
example: '2020-01-15T00:00:00Z'
primary_address:
type: object
properties:
type:
type: string
example: RG
state:
type: string
example: VIC
locality:
type: string
example: MELBOURNE
postCode:
type: string
example: '3000'
addressLine:
type: string
example: '123 Example St'
secondary_address:
type: object
properties: {}
business_names:
type: array
example: []
former_names:
type: array
example: []
recent_history:
type: array
example:
- type: abn_registration
effective_date: '2020-01-15T00:00:00Z'
title: 'ABN Registered'
description: 'Australian Business Number registered'
items:
type: object
properties:
type:
type: string
example: abn_registration
effective_date:
type: string
example: '2020-01-15T00:00:00Z'
title:
type: string
example: 'ABN Registered'
description:
type: string
example: 'Australian Business Number registered'
tags:
- Monitoring
put:
summary: 'Update monitoring'
operationId: updateMonitoring
description: "Update a monitoring's risk level."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
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'
properties:
message:
type: string
example: 'Monitoring updated successfully'
data:
type: object
properties:
uuid:
type: string
example: 123e4567-e89b-12d3-a456-426614174000
entity_name:
type: string
example: 'Example Pty Ltd'
entity_type:
type: string
example: company
acn:
type: string
example: '123456789'
abn:
type: string
example: '12345678901'
risk_level:
type: string
example: standard
added_at:
type: string
example: '2026-01-15T10:00:00Z'
tags:
- Monitoring
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
risk_level:
type: string
description: 'The risk level (high, standard, low).'
example: standard
required:
- risk_level
delete:
summary: 'Stop monitoring'
operationId: stopMonitoring
description: 'Stop monitoring an entity. The entity will be removed from your monitoring list. Only team owners can stop monitorings.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Monitoring stopped successfully'
properties:
message:
type: string
example: 'Monitoring stopped successfully'
tags:
- Monitoring
parameters:
-
in: path
name: uuid
description: 'The monitoring UUID.'
example: 123e4567-e89b-12d3-a456-426614174000
required: true
schema:
type: string
'/api/v1/monitorings/{uuid}/history':
get:
summary: 'Get monitoring history'
operationId: getMonitoringHistory
description: 'Get paginated check results history for a specific monitoring.'
parameters:
-
in: query
name: page
description: 'Page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'Page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page (max 100).'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page (max 100).'
example: 15
-
in: query
name: event_type
description: 'Filter by event type (company_registration, abn_registration, gst_registration, etc.).'
example: abn_registration
required: false
schema:
type: string
description: 'Filter by event type (company_registration, abn_registration, gst_registration, etc.).'
example: abn_registration
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
type: abn_registration
effective_date: '2020-01-15T00:00:00Z'
title: 'ABN Registered'
description: 'Australian Business Number registered'
links:
first: 'https://api.example.com/v1/monitorings/{uuid}/history?page=1'
last: null
prev: null
next: 'https://api.example.com/v1/monitorings/{uuid}/history?page=2'
meta:
current_page: 1
current_page_url: 'https://api.example.com/v1/monitorings/{uuid}/history?page=1'
from: 1
path: 'https://api.example.com/v1/monitorings/{uuid}/history'
per_page: 15
to: 3
properties:
data:
type: array
example:
- type: abn_registration
effective_date: '2020-01-15T00:00:00Z'
title: 'ABN Registered'
description: 'Australian Business Number registered'
items:
type: object
properties:
type:
type: string
example: abn_registration
effective_date:
type: string
example: '2020-01-15T00:00:00Z'
title:
type: string
example: 'ABN Registered'
description:
type: string
example: 'Australian Business Number registered'
links:
type: object
properties:
first:
type: string
example: 'https://api.example.com/v1/monitorings/{uuid}/history?page=1'
last:
type: string
example: null
nullable: true
prev:
type: string
example: null
nullable: true
next:
type: string
example: 'https://api.example.com/v1/monitorings/{uuid}/history?page=2'
meta:
type: object
properties:
current_page:
type: integer
example: 1
current_page_url:
type: string
example: 'https://api.example.com/v1/monitorings/{uuid}/history?page=1'
from:
type: integer
example: 1
path:
type: string
example: 'https://api.example.com/v1/monitorings/{uuid}/history'
per_page:
type: integer
example: 15
to:
type: integer
example: 3
tags:
- Monitoring
parameters:
-
in: path
name: uuid
description: 'The monitoring UUID.'
example: 123e4567-e89b-12d3-a456-426614174000
required: true
schema:
type: string
/api/v1/subscription:
get:
summary: 'Get subscription status'
operationId: getSubscriptionStatus
description: "Get the current team's subscription status and usage information."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
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
properties:
has_subscription:
type: boolean
example: true
subscription:
type: object
properties:
plan:
type: string
example: Professional
status:
type: string
example: active
subscribed_at:
type: string
example: '2026-01-15 10:00:00'
expires_at:
type: string
example: '2026-02-15 10:00:00'
max_entities:
type: integer
example: 50
max_high_risk_entities:
type: integer
example: 10
usage:
type: object
properties:
total:
type: integer
example: 25
high:
type: integer
example: 5
standard:
type: integer
example: 15
low:
type: integer
example: 5
remaining:
type: object
properties:
slots:
type: integer
example: 25
high_risk_slots:
type: integer
example: 5
-
description: ''
type: object
example:
has_subscription: false
message: 'No active subscription found'
properties:
has_subscription:
type: boolean
example: false
message:
type: string
example: 'No active subscription found'
tags:
- Subscription