WritersLogic Verifiable AI Agent Hub Site Access Check API
The Site Access Check API from WritersLogic Verifiable AI Agent Hub — 1 operation(s) for site access check.
The Site Access Check API from WritersLogic Verifiable AI Agent Hub — 1 operation(s) for site access check.
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-site-access-check-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: WritersLogic Verifiable AI Agent Hub Site Access Check API
version: 2.0.0
description: Pay-per-call agents settled in USDC on Base via x402. Every response carries a signed provenance envelope.
contact:
name: WritersLogic
url: https://writerslogic.com/agents
email: agents@writerslogic.com
servers:
- url: https://agents.writerslogic.com
tags:
- name: Site Access Check
paths:
/api/v1/site-access-check:
post:
operationId: site_access_check
summary: 'Site access: caller access rules against observed site facts'
description: 'Checks whether an intended action on a website (read, crawl, submit, log in, ...) satisfies the access rules the caller supplies (robots rule read, terms clause, login present, rate-limit budget, captcha seen) against facts the caller observed, and says which rule blocked it or which fact is missing. For an agent deciding whether to proceed or ask. It is a reading of the caller''s rules, not legal permission, and it never fetches the site; an action no supplied rule covers is unknown.
Price: 0.005 USDC on Base (x402).'
x-x402-price-usdc: '0.005'
x-x402-amount: '5000'
x-payment-info:
protocols:
- x402
price:
mode: fixed
currency: USD
amount: '0.005'
x-audience: business
x-sample-url: https://agents.writerslogic.com/api/v1/samples/site-access-check
security:
- x402: []
- apiKey: []
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- action
- rules
- evidence
properties:
action:
type: string
maxLength: 60
description: The intended action, matched against each rule's appliesTo.
rules:
type: array
items:
type: object
additionalProperties: false
required:
- id
- needs
properties:
id:
type: string
maxLength: 100
text:
type: string
maxLength: 500
description: Free text echoed in witnesses.
needs:
type: array
minItems: 1
maxItems: 20
items:
type: object
additionalProperties: false
required:
- key
properties:
key:
type: string
maxLength: 100
description: Evidence key this need reads.
equals:
description: The evidence value must equal this JSON value (deep equality).
oneOf:
type: array
maxItems: 50
items:
description: Allowed JSON value.
description: The evidence value must equal one of these.
min:
anyOf:
- type: number
- type: string
maxLength: 40
description: Inclusive lower bound. Numbers compare numerically; two dotted-digit strings (1.10.2) compare segment by segment.
max:
anyOf:
- type: number
- type: string
maxLength: 40
description: Inclusive upper bound, same comparison rules as min.
maxAgeDays:
type: number
minimum: 0
maximum: 36500
description: Evidence must be dated (asOf on the evidence item) and at most this many days before the request asOf.
mode:
type: string
enum:
- all
- any
- atLeast
description: How the needs combine. Default all; with forbid:true the default is any (the requirement is unmet as soon as one listed need applies), and all means only the conjunction is prohibited.
atLeast:
type: integer
minimum: 1
maximum: 20
description: 'With mode atLeast: how many needs must hold.'
optional:
type: boolean
description: Reported, never changes the status.
forbid:
type: boolean
description: The needs describe a prohibited condition; the requirement holds only when they are all shown not to apply.
appliesTo:
type: array
items:
type: string
maxLength: 60
description: Action this rule governs.
maxItems: 20
description: Omit to apply to every action.
maxItems: 100
minItems: 1
description: 'Access rules: needs that must hold, or with forbid:true, conditions that must not apply.'
evidence:
type: array
items:
type: object
additionalProperties: false
required:
- key
properties:
key:
type: string
maxLength: 100
value:
description: Observed JSON value. Omitted means the fact is present with no value; false or null means observed absent.
asOf:
type: string
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?$
maxLength: 40
description: When this was observed (ISO date or instant).
source:
type: string
maxLength: 200
maxItems: 500
description: Observed site facts.
asOf:
type: string
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2}))?$
maxLength: 40
description: Reference instant (ISO date or instant) for evidence age; required only when a need sets maxAgeDays. The check never reads the clock.
example:
action: crawl
rules:
- id: robots-allows-path
appliesTo:
- crawl
- read
needs:
- key: robots_allows_path
equals: true
- id: no-login-wall
appliesTo:
- crawl
- read
forbid: true
needs:
- key: login_required
- id: terms-allow-automation
appliesTo:
- crawl
needs:
- key: terms_allow_automation
equals: true
maxAgeDays: 30
evidence:
- key: robots_allows_path
value: true
- key: login_required
value: false
- key: terms_allow_automation
value: true
asOf: '2026-10-20'
asOf: '2026-11-04'
responses:
'200':
description: Paid result with provenance
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
status:
type: string
enum:
- pass
- fail
- unknown
- unsupported
description: 'pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass.'
requirements:
type: array
items:
type: object
properties:
id:
type: string
state:
type: string
enum:
- met
- unmet
- unknown
optional:
type: boolean
needs:
type: array
items:
type: object
properties:
key:
type: string
state:
type: string
enum:
- 'yes'
- 'no'
- unknown
reason:
type: string
enum:
- satisfied
- missing
- stale
- no-reference-instant
- no-evidence-date
- value-mismatch
- type-mismatch
- conflicting-evidence
- negative
evidence:
description: The evidence value the verdict rests on.
counts:
type: object
properties:
met:
type: integer
unmet:
type: integer
unknown:
type: integer
optional:
type: integer
description: Non-optional requirements by state; optional ones are counted separately.
action:
type: string
reading:
type: string
enum:
- allowed-by-supplied-rules
- blocked-by-supplied-rules
- undetermined
blockedBy:
type: array
items:
type: string
maxItems: 100
description: Ids of rules that block the action.
undetermined:
type: array
items:
type: string
maxItems: 100
description: Ids of rules the evidence cannot decide.
witnesses:
type: array
items:
type: object
properties:
ruleId:
type: string
detail:
type: string
path:
type: string
description: JSON pointer or dotted path into the input.
offset:
type: integer
index:
type: integer
expected:
description: What the rule required.
actual:
description: What the input had.
versions:
type: object
description: Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile).
limits:
type: array
items:
type: string
deterministic:
type: boolean
description: 'Always true: pure code, no model.'
_provenance:
type: object
description: C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance
required:
- data
- _provenance
'400':
description: Invalid request (no payment consumed)
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
'401':
description: Invalid X-API-KEY
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
'402':
description: Payment required or invalid
content:
application/json:
schema:
type: object
description: x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)
properties:
x402Version:
type: integer
error:
type: string
code:
type: string
resource:
type: object
accepts:
type: array
items:
type: object
extensions:
type: object
'502':
description: Upstream failure; the payment is released or not settled
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
tags:
- Site Access Check
components:
securitySchemes:
x402:
type: apiKey
in: header
name: PAYMENT-SIGNATURE
description: x402 v2 payment payload (base64) sent after a 402 challenge
apiKey:
type: apiKey
in: header
name: X-API-KEY