WritersLogic Verifiable AI Agent Hub API Billing API

Verification credits and optional automatic purchases (JWT auth only)

GitHub OpenAPI

Operations 4

GET /v1/api-billing Read credit balance and recent purchases #
POST /v1/api-billing/checkout Create a Stripe Checkout for verification credits #
POST /v1/api-billing/confirm Reconcile the returning customer’s Checkout #
PUT /v1/api-billing/auto-reload Authorize or disable automatic credit purchases #

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/writerslogic-com:writerslogic-com-api-billing-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

writerslogic-com-api-billing-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: WritersProof API Billing API
  version: 1.0.0
  description: Certificate Authority and verification API for the Proof-of-Effort protocol. Certify, verify, and prove human authorship.
  contact:
    name: WritersLogic LLC
    url: https://writersproof.com
  license:
    name: SSPL-1.0
    url: https://www.mongodb.com/licensing/server-side-public-license
servers:
- url: https://api.writersproof.com
  description: Production
- url: https://api.writerslogic.com
  description: Legacy
tags:
- name: API Billing
  description: Verification credits and optional automatic purchases (JWT auth only)
paths:
  /v1/api-billing:
    get:
      tags:
      - API Billing
      security:
      - bearerAuth: []
      operationId: getApiCreditBalance
      summary: Read credit balance and recent purchases
      description: Account-wide transactional ledger. 100 free lookups per UTC month, then $10 USD per 1,000 prepaid credits. Purchased credits carry forward. Requires a signed-in bearer token; verification keys cannot manage purchases. 30 management requests per minute.
      responses:
        '200':
          description: Current account ledger
          content:
            application/json:
              schema:
                type: object
                required:
                - freeAllowance
                - freeUsed
                - freeRemaining
                - paidCredits
                - creditDebt
                - period
                - completedLookups
                - resetsAt
                - transitionUntil
                - pack
                - autoReload
                - orders
                properties:
                  freeAllowance:
                    type: integer
                    minimum: 0
                    const: 100
                  freeUsed:
                    type: integer
                    minimum: 0
                  freeRemaining:
                    type: integer
                    minimum: 0
                  paidCredits:
                    type: integer
                    minimum: 0
                  creditDebt:
                    type: integer
                    minimum: 0
                  completedLookups:
                    type: integer
                    minimum: 0
                  period:
                    type: string
                    pattern: ^\d{4}-\d{2}$
                  resetsAt:
                    type: string
                    format: date-time
                  transitionUntil:
                    type:
                    - string
                    - 'null'
                    format: date-time
                  pack:
                    type: object
                    properties:
                      credits:
                        const: 1000
                      amount:
                        const: 1000
                        description: USD cents
                      currency:
                        const: usd
                      priceId:
                        type: string
                  autoReload:
                    type: object
                    properties:
                      enabled:
                        type: boolean
                      threshold:
                        type: integer
                        minimum: 0
                      packs:
                        type: integer
                        minimum: 0
                      monthlyCapCents:
                        type: integer
                        minimum: 0
                      committedThisMonthCents:
                        type: integer
                        minimum: 0
                      hasPaymentMethod:
                        type: boolean
                      lastError:
                        type:
                        - string
                        - 'null'
                  orders:
                    type: array
                    maxItems: 20
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        kind:
                          type: string
                          enum:
                          - manual
                          - auto
                        packs:
                          type: integer
                          minimum: 0
                        state:
                          type: string
                          enum:
                          - created
                          - pending
                          - paid
                          - failed
                          - review
                        created:
                          type: integer
                          minimum: 0
                          description: Unix milliseconds
                        reversed:
                          type: integer
                          minimum: 0
                          description: Credits reversed by refunds or disputes
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Signed-in bearer token required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Purchase conflict or saved payment method required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded; respect Retry-After
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Billing unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/api-billing/checkout:
    post:
      tags:
      - API Billing
      security:
      - bearerAuth: []
      operationId: createApiCreditCheckout
      summary: Create a Stripe Checkout for verification credits
      description: A one-time purchase, not a subscription. SaveCard optionally authorizes saving the card for later off-session use; it does not enable auto-reload. Redirect the signed-in user to the returned Stripe URL. Never fulfill from the redirect alone; credits are granted after server-side payment verification. Maximum five checkout requests per minute.
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          format: uuid
        description: Persist one UUID per purchase attempt; retries must use identical packs and saveCard. Start a new attempt after checkout expiration.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - packs
              properties:
                packs:
                  type: integer
                  minimum: 1
                  maximum: 50
                saveCard:
                  type: boolean
                  default: false
      responses:
        '200':
          description: Hosted Checkout URL
          content:
            application/json:
              schema:
                type: object
                required:
                - url
                properties:
                  url:
                    type: string
                    format: uri
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Signed-in bearer token required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Purchase conflict or saved payment method required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded; respect Retry-After
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Billing unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/api-billing/confirm:
    post:
      tags:
      - API Billing
      security:
      - bearerAuth: []
      operationId: confirmApiCreditCheckout
      summary: Reconcile the returning customer’s Checkout
      description: Idempotently retrieves current payment state from Stripe and verifies ownership. Pending is not a payment failure. Stripe webhooks also reconcile purchases, so closing the browser does not lose paid credits.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - sessionId
              properties:
                sessionId:
                  type: string
                  maxLength: 256
                  pattern: ^cs_(test_|live_)?[A-Za-z0-9]+$
      responses:
        '200':
          description: Payment reconciled or still processing
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  required:
                  - ok
                  properties:
                    ok:
                      const: true
                - type: object
                  required:
                  - pending
                  properties:
                    pending:
                      const: true
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Signed-in bearer token required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Purchase conflict or saved payment method required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded; respect Retry-After
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Billing unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/api-billing/auto-reload:
    put:
      tags:
      - API Billing
      security:
      - bearerAuth: []
      operationId: configureApiAutoReload
      summary: Authorize or disable automatic credit purchases
      description: Requires a saved payment method and explicit user consent to enable. Threshold considers free plus paid capacity. Monthly cap counts automatic orders initiated in the UTC month, including pending orders; manual purchases are separate. The cap must cover at least one reload. Disabling stops new reloads; already initiated payments can finish.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
              - enabled
              - threshold
              - packs
              - monthlyCapCents
              properties:
                enabled:
                  type: boolean
                threshold:
                  type: integer
                  minimum: 20
                  maximum: 500
                packs:
                  type: integer
                  minimum: 1
                  maximum: 10
                monthlyCapCents:
                  type: integer
                  minimum: 1000
                  maximum: 100000
                  multipleOf: 1000
      responses:
        '200':
          description: Settings saved
          content:
            application/json:
              schema:
                type: object
                required:
                - ok
                properties:
                  ok:
                    const: true
        '400':
          description: Invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Signed-in bearer token required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Purchase conflict or saved payment method required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate limit exceeded; respect Retry-After
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Billing unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
      required:
      - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Supabase JWT token
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: API key with wp_sk_ prefix