TaskHawk Systems Billing API

Payment surface discovery for clients before attempting a paid call. 1. `GET /payment/health` - rail challenge and configuration status. 2. `GET /payment/quote?endpoint=/path` - per-endpoint price across candidate rails. 3. For generic paid agents, fetch a safe-method 402 challenge, then POST with a verified rail credential. Unpaid executable POST remains Delegation-gated. `GET /payment/discovery` aggregates rail status and quotes. `GET /payment/badge` returns a compact status badge payload. Discovery is cached and does not represent settlement, adoption, or revenue evidence.

Operations 7

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

GET /payment/discovery Get payment rail status and all endpoint prices · Single-call aggregator: rail challenge configuration + all per-endpoint quotes #
Ask an LLM
“Can I get rail health and the price of every paid endpoint in one call?”
“What does each paid TaskHawk endpoint cost across the available payment rails?”
Tell an agent
Fetch the full payment discovery bundle with rail health and every endpoint quote.
Pull the combined pricing and rail discovery response so I can budget paid calls at startup.
HEAD /payment/discovery Check payment discovery headers without a body · Single-call aggregator: rail challenge configuration + all per-endpoint quotes #
Ask an LLM
“Can I send a HEAD request to the payment discovery endpoint to see if pricing changed?”
“How can I read just the discovery response headers without downloading the quotes?”
Tell an agent
Send a HEAD request to payment discovery and report the headers only.
Check the payment discovery endpoint's headers without fetching the quote bundle.
GET /payment/badge Get a compact payment rail status badge · Compact rail challenge-configuration status for embedding #
Ask an LLM
“Is there a Shields.io badge showing how many payment rails are configured?”
“Can I embed a one-line rail status like 3/5 rails configured in my README?”
Tell an agent
Get the payment rail badge as a one-line count of configured rails.
Fetch the Shields.io JSON badge for payment rail configuration.
HEAD /payment/badge Check the payment badge headers without a body · Compact rail challenge-configuration status for embedding #
Ask an LLM
“Can I HEAD the payment badge endpoint to confirm it is reachable?”
“What headers does the rail status badge return without its body?”
Tell an agent
Send a HEAD request to the payment badge endpoint and show the headers.
Check that the rail status badge responds, headers only.
GET /payment/quote Get the per-rail price for one endpoint · Get the per-rail price for a specific endpoint #
Ask an LLM
“How much will a single call to a specific paid endpoint cost on each rail?”
“Can I price one endpoint before calling it, without hitting a 402 first?”
Tell an agent
Quote the price of calling {endpoint} on every payment rail.
Tell me what {endpoint} costs before I make a paid call to it.
HEAD /payment/health Check payment health headers without a body · Payment rail challenge-configuration status #
Ask an LLM
“Can I send a HEAD request to payment health just to see if it responds?”
“What headers does the payment rail health check return without its per-rail detail?”
Tell an agent
Send a HEAD request to payment health and report the status and headers.
Check payment health reachability with HEAD, deep probe set to {deep}.
GET /payment/health Check which payment rails are configured · Payment rail challenge-configuration status #
Ask an LLM
“Which payment rails are enabled right now, and why are any disabled?”
“How do I check rail configuration before attempting a payment?”
Tell an agent
Show the per-rail payment configuration status with reasons for disabled rails.
Run a deep backend connectivity check on payment rails using admin key {admin_key}.

Documentation

Specifications

Other Resources

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/taskhawktech-com:taskhawktech-com-billing-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

taskhawktech-com-billing-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Kevros Governance Billing API
  description: HTTP governance API for delegated requesters.
  termsOfService: https://taskhawktech.com/legal/terms
  contact:
    name: TaskHawk Systems
    url: https://taskhawktech.com/contact
    email: support@taskhawktech.com
  license:
    name: TaskHawk Terms
    url: https://taskhawktech.com/legal/terms
  version: 0.4.1
servers:
- url: https://governance.taskhawktech.com
  description: Production Gateway
security:
- ApiKeyAuth: []
tags:
- name: Billing
  description: Payment surface discovery for clients before attempting a paid call.
paths:
  /payment/discovery:
    get:
      tags:
      - Billing
      summary: 'Single-call aggregator: rail challenge configuration + all per-endpoint quotes'
      description: 'One-call discovery: rail health AND per-endpoint quotes for every

        paid endpoint, bundled into a single response.


        Replaces the N+1 startup pattern (1x /payment/health + N x /payment/quote)

        with a single HTTP round-trip. Cheaper for agents, cheaper for the

        gateway origin, more frictionless.


        Cache: 30s (matches /payment/health since it''s the bottleneck).


        Conditional GET: when the client sends `If-None-Match: W/""`

        AND the value matches the current pricing_fingerprint, the gateway

        returns 304 Not Modified with NO body. Cached agents can poll the

        endpoint cheaply (single line with the `requests` library: pass

        `headers={''If-None-Match'': last_etag}` and check for 304). The 304

        response includes the same ETag and Cache-Control headers as the

        full 200 response so caches continue to dedupe.'
      operationId: getPaymentDiscovery
      responses:
        '200':
          description: 'Full payment surface in one response: rail challenge configuration + per-endpoint pricing'
          content:
            application/json:
              schema: {}
              example:
                health:
                  status: healthy
                  rails_enabled: 5
                  rails_total: 5
                  rails:
                  - rail: x402
                    enabled: true
                    network: base-mainnet
                endpoints:
                  /governance/verify:
                    free: false
                    rails:
                    - rail: x402
                      amount_usdc: '10000'
                      amount_display: $0.01
                      currency: USDC
                      network: base-mainnet
                doc: https://governance.taskhawktech.com/api
    head:
      tags:
      - Billing
      summary: 'Single-call aggregator: rail challenge configuration + all per-endpoint quotes'
      description: 'One-call discovery: rail health AND per-endpoint quotes for every

        paid endpoint, bundled into a single response.


        Replaces the N+1 startup pattern (1x /payment/health + N x /payment/quote)

        with a single HTTP round-trip. Cheaper for agents, cheaper for the

        gateway origin, more frictionless.


        Cache: 30s (matches /payment/health since it''s the bottleneck).


        Conditional GET: when the client sends `If-None-Match: W/""`

        AND the value matches the current pricing_fingerprint, the gateway

        returns 304 Not Modified with NO body. Cached agents can poll the

        endpoint cheaply (single line with the `requests` library: pass

        `headers={''If-None-Match'': last_etag}` and check for 304). The 304

        response includes the same ETag and Cache-Control headers as the

        full 200 response so caches continue to dedupe.'
      operationId: headPaymentDiscovery
      responses:
        '200':
          description: 'Full payment surface in one response: rail challenge configuration + per-endpoint pricing'
          content:
            application/json:
              schema: {}
              example:
                health:
                  status: healthy
                  rails_enabled: 5
                  rails_total: 5
                  rails:
                  - rail: x402
                    enabled: true
                    network: base-mainnet
                endpoints:
                  /governance/verify:
                    free: false
                    rails:
                    - rail: x402
                      amount_usdc: '10000'
                      amount_display: $0.01
                      currency: USDC
                      network: base-mainnet
                doc: https://governance.taskhawktech.com/api
      x-operation-id-source: normalized
      x-operation-id-original: getPaymentDiscovery
  /payment/badge:
    get:
      tags:
      - Billing
      summary: Compact rail challenge-configuration status for embedding
      description: 'Compact rail challenge-configuration badge for status pages, README badges, and

        dashboards. Pairs with `/payment/health` (full detail) but returns

        a single line that''s cheap to embed anywhere.


        Two formats based on Accept header:

        - `text/plain` -> "3/5 rails configured" (suitable for `curl`)

        - `application/json` (default) → Shields.io schema


        For Shields.io embedding:

        https://img.shields.io/endpoint?url=https://governance.taskhawktech.com/payment/badge


        Cache: 30s (matches /payment/health to keep counts in sync).'
      operationId: getPaymentBadge
      responses:
        '200':
          description: Shields.io-compatible JSON badge schema
          content:
            application/json:
              schema: {}
              example:
                schemaVersion: 1
                label: rails
                message: 4/5 configured
                color: brightgreen
            text/plain:
              example: 4/5 rails configured
    head:
      tags:
      - Billing
      summary: Compact rail challenge-configuration status for embedding
      description: 'Compact rail challenge-configuration badge for status pages, README badges, and

        dashboards. Pairs with `/payment/health` (full detail) but returns

        a single line that''s cheap to embed anywhere.


        Two formats based on Accept header:

        - `text/plain` -> "3/5 rails configured" (suitable for `curl`)

        - `application/json` (default) → Shields.io schema


        For Shields.io embedding:

        https://img.shields.io/endpoint?url=https://governance.taskhawktech.com/payment/badge


        Cache: 30s (matches /payment/health to keep counts in sync).'
      operationId: headPaymentBadge
      responses:
        '200':
          description: Shields.io-compatible JSON badge schema
          content:
            application/json:
              schema: {}
              example:
                schemaVersion: 1
                label: rails
                message: 4/5 configured
                color: brightgreen
            text/plain:
              example: 4/5 rails configured
      x-operation-id-source: normalized
      x-operation-id-original: getPaymentBadge
  /payment/quote:
    get:
      tags:
      - Billing
      summary: Get the per-rail price for a specific endpoint
      description: 'Per-endpoint price quote across all candidate rails.


        Lets clients pre-budget for a paid call sequence without burning a 402

        round-trip per endpoint. Returns the same price info that may be

        embedded in a settlement-rail challenge response, but on demand and

        without requiring the client to make a real request first.


        Query param: `endpoint` (required) — the endpoint path the client

        intends to call (e.g. `/governance/verify`).


        Pairs with `/payment/health` for the full discovery loop:

        1. GET /payment/health -> which rails can emit challenge/config metadata?

        2. GET /payment/quote?endpoint=/governance/verify → how much?

        3. POST /governance/verify only after X-API-Key or verified Delegation proof.'
      operationId: getPaymentQuote
      parameters:
      - name: endpoint
        in: query
        required: false
        schema:
          type: string
          default: ''
          title: Endpoint
      responses:
        '200':
          description: Per-rail price for the requested endpoint, with challenge metadata and Protocol 427 prerequisites inline
          content:
            application/json:
              schema: {}
              example:
                endpoint: /governance/verify
                free: false
                rails:
                - rail: x402
                  amount_usdc: '10000'
                  amount_display: $0.01
                  currency: USDC
                  network: base-mainnet
                - rail: mpp
                  amount_cents: 1
                  amount_display: $0.01
                  currency: USD
                doc: https://governance.taskhawktech.com/api
                health_url: https://governance.taskhawktech.com/payment/health
        '400':
          description: Invalid endpoint parameter
        '404':
          description: Endpoint is not priced (free or unknown)
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /payment/health:
    head:
      tags:
      - Billing
      summary: Payment rail challenge-configuration status
      description: 'Per-rail payment challenge-configuration status. Public, cacheable for 30s.


        For each payment rail, returns:

        - enabled: True iff the configuration needed to issue a payment

        challenge or discovery metadata is present (env vars, secrets,

        identity material). This is not settlement or revenue evidence.

        - rail: short identifier matching what /.well-known docs use

        - reason: when enabled=False, a one-line operator-readable reason

        (NEVER includes secret values)


        Designed for two audiences:

        1. AI agents — poll this BEFORE attempting a rail so they do not

        chase a rail that cannot emit the expected challenge metadata.

        2. Operators / oncall — single curl shows configured rail candidates

        without needing to read the gateway''s bootlog.


        By default this endpoint does NO outbound network calls — it only

        reflects local public configuration state. `?deep=true` performs

        operator-only backend probes and requires X-Admin-Key.'
      operationId: getPaymentHealth
      parameters:
      - name: deep
        in: query
        required: false
        schema:
          type: boolean
          description: Probe backend connectivity; requires X-Admin-Key
          default: false
          title: Deep
        description: Probe backend connectivity; requires X-Admin-Key
      - name: X-Admin-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Admin-Key
      responses:
        '200':
          description: Per-rail challenge-configuration state with operator-readable failure reasons. Not settlement or revenue evidence.
          content:
            application/json:
              schema: {}
              example:
                status: healthy
                rails_enabled: 3
                rails_total: 5
                rails:
                - rail: x402
                  enabled: true
                  network: base-mainnet
                - rail: l402
                  enabled: true
                  network: lightning
                - rail: mpp
                  enabled: true
                  network: fiat
                version: 0.x.x
                doc: https://governance.taskhawktech.com/.well-known/x402
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    get:
      tags:
      - Billing
      summary: Payment rail challenge-configuration status
      description: 'Per-rail payment challenge-configuration status. Public, cacheable for 30s.


        For each payment rail, returns:

        - enabled: True iff the configuration needed to issue a payment

        challenge or discovery metadata is present (env vars, secrets,

        identity material). This is not settlement or revenue evidence.

        - rail: short identifier matching what /.well-known docs use

        - reason: when enabled=False, a one-line operator-readable reason

        (NEVER includes secret values)


        Designed for two audiences:

        1. AI agents — poll this BEFORE attempting a rail so they do not

        chase a rail that cannot emit the expected challenge metadata.

        2. Operators / oncall — single curl shows configured rail candidates

        without needing to read the gateway''s bootlog.


        By default this endpoint does NO outbound network calls — it only

        reflects local public configuration state. `?deep=true` performs

        operator-only backend probes and requires X-Admin-Key.'
      operationId: getPaymentHealth
      parameters:
      - name: deep
        in: query
        required: false
        schema:
          type: boolean
          description: Probe backend connectivity; requires X-Admin-Key
          default: false
          title: Deep
        description: Probe backend connectivity; requires X-Admin-Key
      - name: X-Admin-Key
        in: header
        required: false
        schema:
          anyOf:
          - type: string
          - type: 'null'
          title: X-Admin-Key
      responses:
        '200':
          description: Per-rail challenge-configuration state with operator-readable failure reasons. Not settlement or revenue evidence.
          content:
            application/json:
              schema: {}
              example:
                status: healthy
                rails_enabled: 3
                rails_total: 5
                rails:
                - rail: x402
                  enabled: true
                  network: base-mainnet
                - rail: l402
                  enabled: true
                  network: lightning
                - rail: mpp
                  enabled: true
                  network: fiat
                version: 0.x.x
                doc: https://governance.taskhawktech.com/.well-known/x402
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Get a trial key via POST /signup. 1,000-call trial allowance.
x-service-info:
  categories:
  - ai
  - security
  - compliance
  docs:
    homepage: https://governance.taskhawktech.com
    apiReference: https://governance.taskhawktech.com/openapi.json
    llms: https://governance.taskhawktech.com/for-agents.txt