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