AINumbers.co C2PA API
The C2PA API from AINumbers.co — 5 operation(s) for c2pa.
The C2PA API from AINumbers.co — 5 operation(s) for c2pa.
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/ainumbers-co:ainumbers-co-c2pa-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: AINumbers.co Fintech Intelligence Suite C2PA API
version: 1.0.0
description: '**1255 fintech intelligence tools** covering ISO 20022, A2A payments, CFPB §1033, EU AI Act, DORA, MiCA, AML/KYC, BaaS, DLT/tokenization, ESG/climate finance, agentic payments (AP2, ACP, x402, Visa TAP, Mastercard Agent Pay), PQC migration, sanctions screening, and OpenChainGraph v0.4 computation chains.
## Transport
> **The live transport is MCP JSON-RPC 2.0 at `https://mcp.ainumbers.co/mcp` — not REST.**
>
> This OpenAPI file is a **descriptive data-room artifact** — a machine-readable index of all tools and their input/output schemas. The REST paths (`POST /v1/tools/{name}`) described here are a projection; they become functional only if the optional REST shim (Area 2 Path B) is deployed.
>
> To call tools today, connect via the official MCP client SDKs. TypeScript: `@modelcontextprotocol/sdk`. Python: `mcp`.
## Architecture
All tools run **entirely client-side** (browser JavaScript). Zero PII. Zero server calls after page load. Deterministic, reproducible outputs. Licensed CC BY 4.0.
OpenChainGraph v0.4 compute-binding nodes additionally run **server-side on the MCP Worker** and emit verifiable artifacts with `execution_hash` (WebCrypto SHA-256 over RFC 8785 canonical JSON).'
contact:
name: Post Oak Labs
url: https://postoaklabs.com
email: tim@postoaklabs.com
license:
name: CC BY 4.0
url: https://creativecommons.org/licenses/by/4.0/
servers:
- url: https://ainumbers.co
description: Static browser-based tool host (DreamHost). Tools run client-side — no REST gateway is active on this origin. See x-mcp for the live MCP endpoint.
tags:
- name: C2PA
paths:
/v1/tools/compose_c2pa_manifest_definition:
post:
operationId: compose_c2pa_manifest_definition
summary: C2PA Manifest Composer
description: 'Authors a C2PA manifest DEFINITION in-browser: c2pa.actions v2 assertions with a digitalSourceType picker (including trainedAlgorithmicMedia), ingredient declarations with client-side sha256 digests, a creative-work/EXIF-subset assertion, and a draft CAWG identity block. Composes and structurally validates only; never signs and makes no Trust List claims. Also exports a c2patool-compatible manifest-definition file so users can sign externally with their own certificate and tooling.
**Tool URL:** https://ainumbers.co/tools/550-c2pa-manifest-composer.html
**AP2/Policy Mandate export:** yes'
tags:
- C2PA
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
claim_generator:
type: string
actions:
type: array
ingredients:
type: array
responses:
'200':
description: Successful tool execution result
content:
application/json:
schema:
type: object
properties:
manifest_definition:
type: object
description: Composed C2PA manifest DEFINITION JSON
definition_digest:
type: string
description: sha256 digest of the definition, computed client-side
structural_validation:
type: object
description: manifest_valid, has_hard_binding, has_actions, missing_elements — same checks as art-123-c2pa-manifest-validator
c2patool_definition:
type: object
description: Same definition remapped to c2patool's documented manifest JSON field names (claim_generator, title, format, instanceId, assertions) for external signing — never signed by this tool
x-mcp-tool-name: compose_c2pa_manifest_definition
x-tool-url: https://ainumbers.co/tools/550-c2pa-manifest-composer.html
x-source: manifest
x-ap2-export: true
/v1/tools/validate_c2pa_manifest:
post:
operationId: validate_c2pa_manifest
summary: C2PA Content Credential Manifest Validator
description: 'Validate a decoded C2PA 2.x manifest: claim well-formedness, hard-binding hash assertion, and claim-signature reference. Zero network. Feeds the Content Credential signature verifier.
**Tool URL:** https://ainumbers.co/chaingraph/art-123-c2pa-manifest-validator.html
**AP2/Policy Mandate export:** yes'
tags:
- C2PA
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
claim_generator:
type: string
claim:
type: object
assertions:
type: array
signature:
type: object
required:
- claim_generator
- claim
- assertions
responses:
'200':
description: Successful tool execution result
content:
application/json:
schema:
type: object
properties:
manifest_valid:
type: boolean
has_hard_binding:
type: boolean
has_actions:
type: boolean
assertion_count:
type: integer
missing_elements:
type: array
x-mcp-tool-name: validate_c2pa_manifest
x-tool-url: https://ainumbers.co/chaingraph/art-123-c2pa-manifest-validator.html
x-source: manifest
x-ap2-export: true
/v1/tools/verify_content_credential_signature:
post:
operationId: verify_content_credential_signature
summary: Content Credential Signature Verifier
description: 'Assess a C2PA COSE_Sign1 content-credential signature policy. The caller performs the signature check over the manifest bytes with the declared alg (Ed25519/ES256/ES384/PS256) and attests the outcome via the required signature_verified input; the kernel does not re-verify. Trust posture is caller-supplied: zero network, no OCSP. Emits ACCEPT or REFUSE.
**Tool URL:** https://ainumbers.co/chaingraph/art-124-content-credential-signature-verifier.html
**AP2/Policy Mandate export:** yes'
tags:
- C2PA
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
alg:
type: string
enum:
- Ed25519
- ES256
- ES384
- PS256
signature_verified:
type: boolean
description: result of the caller's signature check over the manifest bytes with the declared alg; the kernel does not re-verify
trust_anchor_match:
type: boolean
cert_not_expired:
type: boolean
revocation_status:
type: string
required:
- alg
- signature_verified
- trust_anchor_match
- revocation_status
responses:
'200':
description: Successful tool execution result
content:
application/json:
schema:
type: object
properties:
signature_verified:
type: boolean
signature_verification:
type: string
enum:
- caller_attested
caveats:
type: array
items:
type: string
chain_trusted:
type: boolean
alg:
type: string
alg_allowed:
type: boolean
verdict:
type: string
enum:
- ACCEPT
- REFUSE
x-mcp-tool-name: verify_content_credential_signature
x-tool-url: https://ainumbers.co/chaingraph/art-124-content-credential-signature-verifier.html
x-source: manifest
x-ap2-export: true
/v1/tools/resolve_provenance_ingredient_tree:
post:
operationId: resolve_provenance_ingredient_tree
summary: Provenance Ingredient Tree Resolver
description: 'Walk the c2pa.ingredient parent-of tree; confirm each ingredient hashed_uri binding and nested manifest hash chains back to the active manifest; flag broken provenance edges. Emits intact/broken verdict.
**Tool URL:** https://ainumbers.co/chaingraph/art-125-provenance-ingredient-tree-resolver.html
**AP2/Policy Mandate export:** yes'
tags:
- C2PA
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
active_manifest_hash:
type: string
ingredients:
type: array
required:
- active_manifest_hash
- ingredients
responses:
'200':
description: Successful tool execution result
content:
application/json:
schema:
type: object
properties:
tree_intact:
type: boolean
depth:
type: integer
edges:
type: array
broken_edges:
type: array
root_ok:
type: boolean
x-mcp-tool-name: resolve_provenance_ingredient_tree
x-tool-url: https://ainumbers.co/chaingraph/art-125-provenance-ingredient-tree-resolver.html
x-source: manifest
x-ap2-export: true
/v1/tools/validate_content_binding_assertion:
post:
operationId: validate_content_binding_assertion
summary: Content Binding Assertion Validator
description: 'Validate hard-binding (tamper-evident asset hash match) vs soft-binding (watermark survives re-encode). Emits TAMPER_EVIDENT / SOFT_BINDING_ONLY / UNBOUND verdict. Terminal stage.
**Tool URL:** https://ainumbers.co/chaingraph/art-128-content-binding-assertion-validator.html
**AP2/Policy Mandate export:** yes'
tags:
- C2PA
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
binding_type:
type: string
enum:
- hard
- soft
- both
asset_bytes_hash:
type: string
claimed_hard_binding_hash:
type: string
soft_binding_identifier_present:
type: boolean
required:
- binding_type
responses:
'200':
description: Successful tool execution result
content:
application/json:
schema:
type: object
properties:
binding_type:
type:
- string
- 'null'
hard_binding_matches:
type: boolean
tamper_evident:
type: boolean
soft_binding_present:
type: boolean
verdict:
type: string
enum:
- TAMPER_EVIDENT
- SOFT_BINDING_ONLY
- UNBOUND
x-mcp-tool-name: validate_content_binding_assertion
x-tool-url: https://ainumbers.co/chaingraph/art-128-content-binding-assertion-validator.html
x-source: manifest
x-ap2-export: true
x-mcp:
transport: MCP JSON-RPC 2.0 (streamable HTTP)
endpoint: https://mcp.ainumbers.co/mcp
protocol_version: '2025-11-25'
authentication: none
registry: co.ainumbers/tools (official MCP registry)
note: Connect any MCP-compatible client (Claude, ChatGPT, custom agent) directly to this endpoint. The REST paths in this file are descriptive only — they do not exist on the live server unless the REST shim is deployed.