Base URL: https://captre.onrender.com/
·
Interactive OpenAPI ↗
POST /attest, POST /revoke,
POST /submit-task, POST /evaluate) require an
x402-enabled HTTP client. The server returns 402 Payment Required
and the client must settle USDC on Algorand before the request is fulfilled.
Free endpoints work with plain curl.
| Method | Path | Payment | Purpose |
|---|---|---|---|
| POST | /attest | $0.01 USDC | Create a first-claim attestation |
| GET | /verify | Free | Verify by content_hash query param |
| GET | /attestation/{id} | Free | Retrieve by UUID or content_hash |
| POST | /revoke | $0.01 USDC | Revoke — original author only |
| POST | /submit-task | $0.01 USDC | Anchor a task hash on-chain |
| GET | /task/{id} | Free | Retrieve task by UUID or hash |
| POST | /evaluate | $0.01 USDC | Record evaluation of an attestation |
| GET | /evaluation/{id} | Free | Retrieve evaluation by UUID |
Facilitator: https://facilitator.goplausible.xyz · Network: mainnet
/attest
$0.01 USDC
A content_hash can only ever be claimed once —
revocation does not reopen it to new claimants.
{
"content_hash": "sha256:abc…", // required
"agent_id": "my-agent", // optional
"output_type": "file", // optional
"description": "…", // optional
"model": "gpt-4o", // optional
"tags": ["v1"], // optional
"extra": {} // optional
}
{
"attestation": {
"attestation_id": "a00fe88e-…",
"author": "GFYF3KDN…",
"status": "active",
"tx_id": "QK5ATJTD…"
},
"message": "Attestation created successfully"
}
402 Payment required (x402 challenge)409 content_hash already claimed — returns existing500 Box write failed after payment settled (retry safe)/verify
Free
curl "https://captre.onrender.com/verify?content_hash=sha256:YOUR_HASH"
/attestation/{id}
Free
UUIDs are resolved via the on-chain id_index BoxMap.
You can also pass the raw content_hash directly.
curl "https://captre.onrender.com/attestation/a00fe88e-c4fa-4d4a-92d6-043af786e4b4"
curl "https://captre.onrender.com/attestation/sha256%3Aabc123..."
/revoke
$0.01 USDC
The x402 payer address of the revoke request must exactly match
the author stored in the original attestation.
Revocation is permanent — the hash is never reopened.
{ "attestation_id": "a00fe88e-…" }
402 Payment required403 Payer is not the original author404 Attestation not found/submit-task
$0.01 USDC
Register a task in TaskApp. The SHA-256 of the raw content
becomes the on-chain key — only the hash is written to Algorand box storage.
A task hash can only be claimed once.
{
"content": "Summarise paper X", // required — hashed on server
"agent_id": "my-agent", // optional
"description": "…", // optional
"tags": ["v1"], // optional
"extra": {} // optional
}
{
"task": {
"task_id": "b12fe88e-…",
"author": "GFYF3KDN…",
"task_hash": "sha256:abc…",
"tx_id": "QK5ATJTD…"
},
"message": "Task submitted successfully"
}
402 Payment required409 Task content already claimed500 Box write failed after payment settled (retry safe)/task/{id}
Free
Pass either the server-assigned task_id UUID or the
raw sha256:… task hash.
curl "https://captre.onrender.com/task/b12fe88e-c4fa-4d4a-92d6-043af786e4b4"
curl "https://captre.onrender.com/task/sha256%3Aabc123..."
/evaluate
$0.01 USDC
Write an evaluation record to LedgerApp. The evaluator identity is
the x402 payer address — cryptographically proven, not self-reported.
policy_hash creates an immutable on-chain commitment to the policy
document used (not just a label).
{
"output_attestation_id": "a00fe88e-…", // required
"content_hash": "sha256:abc…", // required
"policy_hash": "sha256:def…", // required — 64 hex chars
"evaluation_result": "pass", // pass|fail|partial|score_only
"task_hash": "sha256:ghi…", // optional
"score": 0.92, // optional (required for score_only)
"notes": "Meets all criteria" // optional
}
{
"evaluation": {
"evaluation_id": "c99ab88e-…",
"evaluator": "GFYF3KDN…",
"evaluation_result": "pass",
"policy_hash": "sha256:def…",
"tx_id": "QK5ATJTD…"
},
"message": "Evaluation recorded successfully"
}
402 Payment required404 output_attestation_id not found500 Box write failed after payment settled/evaluation/{id}
Free
curl "https://captre.onrender.com/evaluation/c99ab88e-c4fa-4d4a-92d6-043af786e4b4"
author field is always the Algorand address that paid
via x402 — extracted from the signed payment transaction group.
It is never the Captre service account. You cannot spoof authorship by changing a header.
The same logic applies to revocation: Captre decodes the payer address from
the x402 payment payload and compares it to the stored author
before submitting any on-chain write.