Feason Proof API
The Proof API from Feason — 4 operation(s) for proof.
The Proof API from Feason — 4 operation(s) for proof.
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/feason-com:feason-com-proof-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: Feason Context REST Proof API
version: 1.4.0
description: Source-grounded theological research plus public Signed Proof V2 publishing, verification, key discovery, and transparency receipts.
servers:
- url: https://www.feason.com
security:
- bearerAuth: []
tags:
- name: Proof
paths:
/api/proof/publish:
post:
operationId: publishSignedClaimProof
summary: Publish a canonical Ed25519-signed claim proof
description: Accepts only claims that map to the curated registry. The server rebuilds from canonical registry wording, signs the complete artifact, and appends an immutable public transparency entry. Arbitrary submitted wording is not persisted.
security: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClaimProofRequest'
responses:
'200':
description: Existing canonical signed proof and a current receipt
content:
application/json:
schema:
$ref: '#/components/schemas/SignedProofRecord'
'201':
description: Newly appended canonical signed proof and receipt
content:
application/json:
schema:
$ref: '#/components/schemas/SignedProofRecord'
'400':
$ref: '#/components/responses/InvalidRequest'
'422':
description: Claim does not map to the curated public registry.
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: Issuer signing or transparency storage is not configured.
tags:
- Proof
/api/proof/verify:
post:
operationId: verifySignedClaimProof
summary: Verify a Signed Proof V2 envelope and optional log receipt
security: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SignedProofVerificationRequest'
responses:
'200':
description: Layered artifact
issuer: null
and transparency verification result.: null
'400':
$ref: '#/components/responses/InvalidRequest'
'413':
description: Artifact exceeds the 2 MB verifier limit.
'429':
$ref: '#/components/responses/RateLimited'
tags:
- Proof
/api/proof/records/{proofId}:
get:
operationId: getPublishedSignedProof
summary: Get a public signed proof and current inclusion receipt
security: []
parameters:
- in: path
name: proofId
required: true
schema:
type: string
pattern: ^proof_[a-f0-9]{20}$
responses:
'200':
description: Signed canonical proof record
content:
application/json:
schema:
$ref: '#/components/schemas/SignedProofRecord'
'404':
description: Proof not found.
'503':
description: Transparency storage is unavailable.
tags:
- Proof
/api/proof/transparency:
get:
operationId: getProofTransparencyCheckpoint
summary: Get the current public proof-log Merkle checkpoint
security: []
responses:
'200':
description: Current tree size
Merkle root: null
observation time: null
and recent safe metadata.: null
'503':
description: Transparency storage is unavailable.
tags:
- Proof
components:
schemas:
SignedProofRecord:
type: object
required:
- envelope
- receipt
properties:
envelope:
$ref: '#/components/schemas/SignedClaimProofEnvelope'
receipt:
$ref: '#/components/schemas/ProofTransparencyReceipt'
publicUrl:
type: string
format: uri
created:
type: boolean
sequence:
type: integer
minimum: 1
publishedAt:
type: string
format: date-time
SignedProofVerificationRequest:
oneOf:
- $ref: '#/components/schemas/SignedClaimProofEnvelope'
- type: object
required:
- envelope
properties:
envelope:
$ref: '#/components/schemas/SignedClaimProofEnvelope'
receipt:
$ref: '#/components/schemas/ProofTransparencyReceipt'
ClaimProofArtifact:
type: object
required:
- proofId
- proofVersion
- generatedAt
- corpusVersion
- claim
- graph
- obligations
- result
- validation
- methodology
- caveats
- integrity
properties:
proofId:
type: string
pattern: ^proof_[a-f0-9]{20}$
proofVersion:
const: feason-claim-proof-v1
generatedAt:
type: string
format: date-time
corpusVersion:
type: string
claim:
type: object
required:
- submitted
- normalizedSlug
- label
- description
properties:
submitted:
type: string
normalizedSlug:
type:
- string
- 'null'
label:
type:
- string
- 'null'
description:
type:
- string
- 'null'
graph:
type: object
required:
- nodes
- edges
properties:
nodes:
type: array
items:
type: object
additionalProperties: true
edges:
type: array
items:
type: object
additionalProperties: true
obligations:
type: array
items:
type: object
required:
- obligationId
- label
- passed
- detail
properties:
obligationId:
type: string
label:
type: string
passed:
type: boolean
detail:
type: string
result:
type: object
required:
- status
- label
- explanation
- confidence
- evidenceCounts
- representedTraditions
properties:
status:
enum:
- corpus_supported
- corpus_supported_with_qualifications
- corpus_disputed
- corpus_opposed
- insufficient_evidence
label:
type: string
explanation:
type: string
confidence:
type: number
minimum: 0
maximum: 1
evidenceCounts:
type: object
additionalProperties:
type: integer
minimum: 0
representedTraditions:
type: array
items:
type: string
validation:
type: object
required:
- valid
- meaning
- checks
properties:
valid:
type: boolean
meaning:
type: string
checks:
type: array
items:
type: object
additionalProperties: true
methodology:
type: string
caveats:
type: array
items:
type: string
integrity:
type: object
required:
- scheme
- rootDigest
- commitmentCount
- commitments
- authenticity
- verifies
- limitation
properties:
scheme:
const: sha256-merkle-v1
rootDigest:
type: string
pattern: ^[a-f0-9]{64}$
commitmentCount:
type: integer
minimum: 1
commitments:
type: array
items:
type: object
additionalProperties: true
authenticity:
const: unsigned
verifies:
type: string
limitation:
type: string
ProofPublicKeyJwk:
type: object
required:
- kty
- crv
- x
properties:
kty:
const: OKP
crv:
const: Ed25519
x:
type: string
pattern: ^[a-zA-Z0-9_-]+$
SignedClaimProofEnvelope:
type: object
required:
- envelopeVersion
- proofId
- artifact
- signature
properties:
envelopeVersion:
const: feason-signed-claim-proof-v2
proofId:
type: string
pattern: ^proof_[a-f0-9]{20}$
artifact:
$ref: '#/components/schemas/ClaimProofArtifact'
signature:
type: object
required:
- algorithm
- keyId
- signedAt
- artifactDigest
- value
- publicKeyJwk
properties:
algorithm:
const: Ed25519
keyId:
type: string
signedAt:
type: string
format: date-time
artifactDigest:
type: string
pattern: ^[a-f0-9]{64}$
value:
type: string
pattern: ^[a-zA-Z0-9_-]+$
publicKeyJwk:
$ref: '#/components/schemas/ProofPublicKeyJwk'
ProofTransparencyReceipt:
type: object
required:
- logVersion
- sequence
- leafIndex
- treeSize
- leafDigest
- rootDigest
- inclusionPath
- observedAt
properties:
logVersion:
const: feason-proof-transparency-log-v1
sequence:
type: integer
minimum: 1
leafIndex:
type: integer
minimum: 0
treeSize:
type: integer
minimum: 1
leafDigest:
type: string
pattern: ^[a-f0-9]{64}$
rootDigest:
type: string
pattern: ^[a-f0-9]{64}$
inclusionPath:
type: array
items:
type: object
required:
- position
- digest
properties:
position:
enum:
- left
- right
digest:
type: string
pattern: ^[a-f0-9]{64}$
observedAt:
type: string
format: date-time
ClaimProofRequest:
type: object
required:
- claim
properties:
claim:
type: string
minLength: 3
maxLength: 4000
limitPerStance:
type: integer
minimum: 1
maximum: 6
default: 4
Error:
type: object
required:
- error
properties:
error:
type: string
issues:
type: array
items:
type: object
properties:
path:
type: string
message:
type: string
responses:
RateLimited:
description: Per-client request limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
InvalidRequest:
description: Request validation failed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: OAuth access token or Feason MCP key
description: Credential must include the context:read scope.