WritersLogic Verifiable AI Agent Hub API Billing API
Verification credits and optional automatic purchases (JWT auth only)
Verification credits and optional automatic purchases (JWT auth only)
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/writerslogic-com:writerslogic-com-api-billing-api"
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.
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: 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