> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fastcac.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Monitor a business

> Watches a business on CAC's register. It's read once a day, and a change in its status or name sends
`business.status_changed` or `business.name_changed` to your webhook endpoints. Charged from your wallet for
30 days at a time (see `amount_charged`); each renewal is charged when `paid_through` passes, and a renewal your
wallet can't cover pauses the monitor (`monitor.paused`) until it can. Test monitors are never read from CAC:
change one with the test helper.



## OpenAPI

````yaml /openapi.json post /businesses/monitors
openapi: 3.1.0
info:
  title: FastCAC API
  description: Register Nigerian businesses with CAC from your own product.
  version: '2026-11-01'
servers:
  - url: https://api.fastcac.com/v1
security:
  - apiKey: []
tags:
  - name: Account
    description: Check your key and see your organization.
  - name: Names
    description: >-
      Check a business name against CAC's rules and registry, and the categories
      it takes, before registering it.
  - name: Registrations
    description: Register a Business Name with CAC, from draft to certificate.
  - name: Lookup
    description: >-
      Search CAC's register for free, and look up a business's full record with
      its officers.
  - name: Verification
    description: >-
      Check that a business your applicant names is real, active and run by the
      people they say.
  - name: Monitoring
    description: >-
      Watch businesses on CAC's register and get an event when one goes inactive
      or changes name.
  - name: Identities
    description: >-
      Look up a proprietor's NIN with NIMC, to prefill a registration and use
      their photo.
  - name: Balance
    description: >-
      Your prepaid wallet: what's available, its transactions and your funding
      account.
  - name: Test helpers
    description: >-
      Test keys only: move a registration on without waiting, or simulate a
      deposit.
  - name: Webhooks
    description: Endpoints that receive events, and the events sent to them.
  - name: Webhook events
    description: What FastCAC POSTs to your webhook endpoints.
paths:
  /businesses/monitors:
    post:
      tags:
        - Monitoring
      summary: Monitor a business
      description: >-
        Watches a business on CAC's register. It's read once a day, and a change
        in its status or name sends

        `business.status_changed` or `business.name_changed` to your webhook
        endpoints. Charged from your wallet for

        30 days at a time (see `amount_charged`); each renewal is charged when
        `paid_through` passes, and a renewal your

        wallet can't cover pauses the monitor (`monitor.paused`) until it can.
        Test monitors are never read from CAC:

        change one with the test helper.
      operationId: create_monitor_businesses_monitors_post
      parameters:
        - name: simulate
          in: query
          required: false
          schema:
            anyOf:
              - type: string
              - type: 'null'
            description: >-
              Test keys only: cac_record_missing (404) or insufficient_balance
              (402). Ignored with a live key.
            title: Simulate
          description: >-
            Test keys only: cac_record_missing (404) or insufficient_balance
            (402). Ignored with a live key.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MonitorIn'
            example:
              number: RC 7654321
              external_id: merchant-4471
      responses:
        '201':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1BusinessMonitor'
              examples:
                Example:
                  value:
                    object: business_monitor
                    id: mon_5Rfxqm9UQ4xlFxXoJeFCaT
                    number: '7654321'
                    type: RC
                    type_label: Company
                    name: ADA FOODS LIMITED
                    status: ACTIVE
                    active: true
                    external_id: merchant-4471
                    state: active
                    paid_through: '2026-11-27T15:16:04Z'
                    last_checked_at: null
                    last_changed_at: null
                    amount_charged: '100.00'
                    created_at: '2026-10-28T15:16:04Z'
        '400':
          description: The request is invalid; `param` names the field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The API key is missing, malformed, revoked or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                Example:
                  value:
                    error:
                      type: authentication_error
                      code: api_key_missing
                      message: 'Send your API key as `Authorization: Bearer <key>`.'
                      param: null
                      request_id: req_8r9FEwNmLuxQORZX5Qhvkd0q
        '402':
          description: >-
            The wallet can't cover 30 days: `insufficient_balance`. Nothing was
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
              examples:
                Example:
                  value:
                    error:
                      type: payment_error
                      code: insufficient_balance
                      message: >-
                        Your balance is ₦0.00; monitoring a business costs
                        ₦100.00 for 30 days. Fund your wallet by bank transfer
                        to your funding account, then try again.
                      param: null
                      request_id: req_GV3JxZlBlquNBBSjEqFGHnag
                      details:
                        amount_due: '100.00'
                        balance: '0.00'
                        currency: NGN
                        funding_account:
                          account_number: '0000000000'
                          bank_name: TEST BANK
                          account_name: FastCAC - TEST MODE
        '403':
          description: >-
            The key can't do this (for example, a test helper called with a live
            key).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                Example:
                  value:
                    error:
                      type: permission_error
                      code: live_mode_unavailable
                      message: >-
                        Live registrations are paused right now. Use a test key
                        (fc_test_…) meanwhile.
                      param: null
                      request_id: req_Td9lI1vsT5ARzv0XD7RGS1tD
        '404':
          description: >-
            `cac_record_missing`: CAC has no business with that number. Not
            charged.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
              examples:
                Example:
                  value:
                    error:
                      type: not_found_error
                      code: cac_record_missing
                      message: >-
                        CAC has no business with that number. You weren't
                        charged.
                      param: number
                      request_id: req_Y68cfGTTJjBHCCRQaS2tDHhh
        '409':
          description: >-
            `monitor_exists`: you already monitor it; `details.monitor` is its
            id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
              examples:
                Example:
                  value:
                    error:
                      type: invalid_request_error
                      code: monitor_exists
                      message: You already monitor RC 7654321.
                      param: number
                      request_id: req_pih9euyk6J6Ge0u2TkjaNeO8
                      details:
                        monitor: mon_5Rfxqm9UQ4xlFxXoJeFCaT
        '429':
          description: Too many requests; wait for `Retry-After` seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    MonitorIn:
      properties:
        number:
          type: string
          title: Number
          description: >-
            The registration number, with or without its prefix: "8911267" or
            "RC 8911267".
        type:
          anyOf:
            - type: string
              enum:
                - BN
                - RC
                - IT
                - LP
                - LLP
            - type: 'null'
          title: Type
          description: >-
            The register. Needed only when the number is in more than one
            (`type_required`).
        external_id:
          anyOf:
            - type: string
              maxLength: 255
            - type: 'null'
          title: External Id
          description: Your own reference, sent back in every event.
      type: object
      required:
        - number
      title: MonitorIn
    V1BusinessMonitor:
      properties:
        object:
          type: string
          const: business_monitor
          title: Object
          default: business_monitor
        id:
          type: string
          title: Id
          description: mon_…
        number:
          type: string
          title: Number
        type:
          type: string
          enum:
            - BN
            - RC
            - IT
            - LP
            - LLP
          title: Type
        type_label:
          type: string
          title: Type Label
        name:
          type: string
          title: Name
          description: The registered name at the last check.
        status:
          type: string
          title: Status
          description: >-
            CAC's status at the last check: ACTIVE, INACTIVE, STRUCK OFF and so
            on.
        active:
          type: boolean
          title: Active
          description: True when `status` is ACTIVE.
        external_id:
          anyOf:
            - type: string
            - type: 'null'
          title: External Id
        state:
          type: string
          enum:
            - active
            - paused
            - deleted
          title: State
          description: >-
            paused: a 30-day renewal couldn't be charged; it resumes once your
            wallet can pay. deleted: you stopped it.
        paid_through:
          type: string
          title: Paid Through
          description: When the current 30 days end; it renews then.
        last_checked_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Checked At
          description: The last time CAC's register was read for it.
        last_changed_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Last Changed At
          description: The last time its name or status changed.
        amount_charged:
          anyOf:
            - type: string
            - type: 'null'
          title: Amount Charged
          description: 'On create only: what the first 30 days cost.'
        created_at:
          anyOf:
            - type: string
            - type: 'null'
          title: Created At
      type: object
      required:
        - id
        - number
        - type
        - type_label
        - name
        - status
        - active
        - external_id
        - state
        - paid_through
        - last_checked_at
        - last_changed_at
        - created_at
      title: V1BusinessMonitor
    Error:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      required:
        - error
      title: V1Error
      type: object
    V1Error:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
      required:
        - error
      title: V1Error
      type: object
    ErrorDetail:
      properties:
        type:
          type: string
          enum:
            - invalid_request_error
            - authentication_error
            - payment_error
            - permission_error
            - not_found_error
            - idempotency_error
            - rate_limit_error
            - api_error
          title: Type
        code:
          type: string
          title: Code
          description: Stable and machine-readable, e.g. registration_incomplete.
        message:
          type: string
          title: Message
          description: For a developer to read; may change.
        param:
          anyOf:
            - type: string
            - type: 'null'
          title: Param
          description: The parameter at fault, as a path like proprietors[0].nin.
        request_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Request Id
          description: Also in the FastCAC-Request-Id header. Quote it to support.
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
          description: >-
            Only on some errors. A 402 insufficient_balance carries amount_due,
            balance, currency and funding_account (number, bank, name; null
            until it's active).
      type: object
      required:
        - type
        - code
        - message
        - param
        - request_id
      title: ErrorDetail
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'Your secret API key: fc_test_… in test mode, fc_live_… in live mode.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.