Ironfang Rig Usage API

What the organisation has used, and the deployment's fixed facts.

Operations 3

GET /v1/usage Runs, events and metered interactions #
GET /v1/home Tenant-scoped setup facts and recent activity for the portal #
GET /v1/environment The hosts, bounds and retention a client builds against #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ironfang:ironfang-rig-usage-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ironfang-rig-usage-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ironfang Rig Usage API
  version: 0.1.0
  summary: Disposable inboxes, callback URLs, mock endpoints and connector routes for integration tests.
  description: 'Ironfang Rig gives an application under test a disposable external

    world: temporary inbox addresses, public callback URLs, mock HTTP

    endpoints and connector routes, allocated fresh for every run, with an

    append-only, sequenced timeline of everything Ironfang observed.'
  contact:
    name: Ironfang
    email: hello@ironfang.uk
    url: https://ironfang.com/contact
  termsOfService: https://ironfang.com/legal/terms
  license:
    name: Proprietary - use governed by the Ironfang terms of service
    url: https://ironfang.com/legal/terms
servers:
- url: https://api.ironfang.com/rig
security:
- apiKey: []
- bearerAuth: []
tags:
- name: Usage
  description: What the organisation has used, and the deployment's fixed facts.
paths:
  /v1/usage:
    get:
      tags:
      - Usage
      operationId: getUsage
      summary: Runs, events and metered interactions
      description: 'Counts the organisation''s runs started in the window and the events those runs recorded, by type, plus how many runs are active now. The window defaults to the current UTC calendar month to date and may span at most 92 days. Where unified billing runs, `billing` adds the organisation''s `rig.interaction` meter for the current billing period (the UTC calendar month, whatever the window) from the billing ledger: the free allowance, how many interactions were used and are reserved, and the charge so far before tax. One interaction is one accepted inbound email, inbound callback or mock exchange with its response; a transport retry carrying the same identity (an email''s Message-ID with the same bytes, a callback''s `Idempotency-Key` or `Webhook-Id` with the same request) counts once, so `used` can be below the event counts. Creating projects, suites, runs and resources, faults, replays, waits, reads and assertions are never metered. `billing` is null where interactions are not metered. Reading usage is never metered. Needs rig.read.'
      parameters:
      - name: since
        in: query
        required: false
        description: Start of the window, RFC 3339; default the first of the current UTC month.
        schema:
          type: string
          format: date-time
      - name: until
        in: query
        required: false
        description: End of the window, RFC 3339, exclusive; default now.
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: The counts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Usage'
        '400':
          $ref: '#/components/responses/InvalidQuery'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/home:
    get:
      tags:
      - Usage
      operationId: getProductHome
      summary: Tenant-scoped setup facts and recent activity for the portal
      description: Counts of projects, suites and runs, the moments that mark setup (a key first reached the product, the first run started, the first run finished), and the seven most recent runs as activity. Labels carry no addresses, names or payloads. Needs rig.read.
      responses:
        '200':
          description: Counts, timestamps and at most seven activity labels
          content:
            application/json:
              schema:
                type: object
                required:
                - product
                - counts
                - activity
                properties:
                  product:
                    type: string
                    const: rig
                  first_value_at:
                    type: string
                    format: date-time
                  integrated_at:
                    type: string
                    format: date-time
                  key_at:
                    type: string
                    format: date-time
                  last_activity_at:
                    type: string
                    format: date-time
                  counts:
                    type: object
                    additionalProperties:
                      type: integer
                  activity:
                    type: array
                    maxItems: 7
                    items:
                      type: object
                      required:
                      - id
                      - label
                      - href
                      - at
                      properties:
                        id:
                          type: string
                          format: uuid
                        label:
                          type: string
                        href:
                          type: string
                        at:
                          type: string
                          format: date-time
                        issue:
                          type: string
                          enum:
                          - error
                          - warning
                          description: Present when the run failed (error) or expired (warning).
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /v1/environment:
    get:
      tags:
      - Usage
      operationId: getEnvironment
      summary: The hosts, bounds and retention a client builds against
      description: 'The fixed facts of this deployment: the domain inbox addresses are minted under, the base URLs of callback and mock addresses, the gateway connectors dial, the ironfang-connect release to run when the API knows it, every per-organisation, per-suite and per-run bound, what is metered, and how long payload bytes and runs are kept. The bounds are capacity limits, the same whatever the account pays. Read-only. Needs rig.read.'
      responses:
        '200':
          description: The environment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Environment'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  responses:
    Forbidden:
      description: The credential lacks the permission or scope, or names another organisation (`forbidden`, `insufficient_scope`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: No credential, an invalid one, or a delegated token where none is accepted (`unauthorized`, `invalid_api_key`, `delegated_not_allowed`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InvalidQuery:
      description: An unknown, repeated or malformed query parameter (`invalid_query`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Environment:
      type: object
      required:
      - inbox_domain
      - hooks_base_url
      - mock_base_url
      - connect_url
      - limits
      - metering
      - retention
      properties:
        inbox_domain:
          type: string
          example: inbox.rig.ironfang.com
        hooks_base_url:
          type: string
          format: uri
          example: https://hooks.rig.ironfang.com
        mock_base_url:
          type: string
          format: uri
          example: https://mock.rig.ironfang.com
        connect_url:
          type: string
          format: uri
          example: wss://connect.rig.ironfang.com/v1/connect
        release:
          type: object
          nullable: true
          description: The ironfang-connect build to run, when the API knows it.
          required:
          - version
          - checksums_url
          properties:
            version:
              type: string
            checksums_url:
              type: string
              format: uri
        limits:
          type: object
          description: Every capacity bound, in the unit its name says. These are the same whatever the account pays; billing refusals are separate (see metering).
          additionalProperties:
            type: integer
        metering:
          type: object
          description: 'What is metered where unified billing runs. Each counted event is one rig.interaction, once per transport identity. An interaction the billing ledger refuses is not recorded: the sender gets the billing code (HTTP callbacks and mocks the problem''s status, such as 429 free_allowance_exhausted, in the usual error body with product, meter and reset_at beside the code; mail a 452 4.2.2 reply naming the code, or 550 for a closed account) and the run''s timeline gets refusal_event.'
          required:
          - enabled
          - meter
          - counted_events
          - refusal_event
          properties:
            enabled:
              type: boolean
              description: Whether this deployment meters interactions.
            meter:
              type: string
              const: rig.interaction
            counted_events:
              type: array
              items:
                type: string
              example:
              - email.received
              - callback.received
              - mock.request.received
            refusal_event:
              type: string
              const: usage.refused
        retention:
          type: object
          required:
          - payload_days
          - run_days
          properties:
            payload_days:
              type: integer
              description: Days after a run ends that raw message and request bytes are kept.
            run_days:
              type: integer
              description: Days after a run ends that the run and its timeline are kept.
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
            message:
              type: string
            docs:
              type: string
              format: uri
              description: Where the API and its error codes are documented.
        request_id:
          type: string
          description: The X-Ironfang-Request-ID of the failed request.
    Usage:
      type: object
      required:
      - period
      - runs
      - events
      - billing
      properties:
        period:
          type: object
          required:
          - start
          - end
          properties:
            start:
              type: string
              format: date-time
            end:
              type: string
              format: date-time
        runs:
          type: object
          description: Runs started in the window by how they ended, plus the number active right now.
          required:
          - started
          - active_now
          - finished
          - cancelled
          - expired
          - passed
          - failed
          - no_outcome
          properties:
            started:
              type: integer
            active_now:
              type: integer
            finished:
              type: integer
            cancelled:
              type: integer
            expired:
              type: integer
            passed:
              type: integer
            failed:
              type: integer
            no_outcome:
              type: integer
        events:
          type: object
          description: Events recorded by the runs started in the window; by_type carries every type seen.
          required:
          - total
          - email_received
          - callback_received
          - mock_request_received
          - connector_request_completed
          - callback_replayed
          - fault_injected
          - usage_refused
          - by_type
          properties:
            total:
              type: integer
            email_received:
              type: integer
            callback_received:
              type: integer
            mock_request_received:
              type: integer
            connector_request_completed:
              type: integer
            callback_replayed:
              type: integer
            fault_injected:
              type: integer
            usage_refused:
              type: integer
              description: Inbound interactions the billing ledger refused; they were not recorded.
            by_type:
              type: object
              additionalProperties:
                type: integer
        billing:
          type: object
          nullable: true
          description: The rig.interaction meter in the current billing period, from the billing ledger; null where interactions are not metered.
          required:
          - meter
          - unit
          - unit_plural
          - period
          - catalogue_version
          - mode
          - allowance
          - used
          - free_used
          - billable
          - reserved
          - remaining_free
          - charge
          - currency
          - exempt
          properties:
            meter:
              type: string
              const: rig.interaction
            unit:
              type: string
              example: interaction
            unit_plural:
              type: string
              example: interactions
            period:
              type: object
              required:
              - start
              - end
              properties:
                start:
                  type: string
                  format: date-time
                end:
                  type: string
                  format: date-time
            catalogue_version:
              type: string
              description: The rate catalogue version that prices the period.
            mode:
              type: string
              enum:
              - free
              - setup_pending
              - enabled
              - paused
              - closed
              description: 'The billing account''s mode: free accounts stop at the free allowance.'
            allowance:
              type: integer
              description: Free interactions this period.
            used:
              type: integer
              description: Interactions counted this period.
            free_used:
              type: integer
            billable:
              type: integer
              description: Interactions beyond the free allowance.
            reserved:
              type: integer
              description: Interactions admitted and not yet settled; normally 0.
            remaining_free:
              type: integer
            charge:
              type: string
              example: '0.00'
              description: The exact charge so far in pounds before tax.
            currency:
              type: string
              const: GBP
            exempt:
              type: boolean
              description: The account is exempt from settlement for Ironfang Rig.
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: if_live_ platform API key
      description: 'A platform API key minted in the portal (Warden). Its scopes are its

        permissions - `rig:read`, `rig:write`, `rig:run`,

        `rig:connector`, or `rig:*` - and it acts only in the organisation

        it was minted for. Keys without Rig scopes are refused with 403.

        '
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Warden JWT
      description: 'A Warden user token. Each route also requires a tenant permission in

        the acting tenant (`X-Ironfang-Tenant`), resolved live from Warden:

        reads need `rig.read`; creating and revising projects and suites

        `rig.write`; starting, finishing and cancelling runs and allocating

        resources `rig.run`. A missing permission is 403; a permission

        lookup failure is 503.

        '
externalDocs:
  description: Ironfang Rig documentation
  url: https://ironfang.com/rig/docs