Quickstart
The GetProofAnchor prototype focuses on a small public surface:
listing existing proofs and verifying whether a given content block still matches
a stored proof.
Base URL
https://getproofanchor.com/api/public
All endpoints in this document are relative to the base URL above.
Authentication
The public API currently exposes a read-only public surface.
No authentication or API keys are required for the endpoints below.
Environment & base URL
All examples assume the production environment:
https://getproofanchor.com.
If you run your own instance, replace the base domain accordingly.
API reference
GET /public/proofs
Returns a paginated list of public proofs. This is mainly useful for debugging and exploring
stored proofs in the prototype.
Request
GET /api/public/proofs
Example response
{
"items": [
{
"id": "f6e03a4f-802f-4aa0-820a-fd54bebfb808",
"title": "Search check",
"fingerprint": "aeab415b4f3f4c05e672f5df6402206c1d9505c55a0d8dfc88b035716559e207",
"created_at": "2025-11-10T09:15:00Z"
}
]
}
GET /public/proofs/{id}
Returns the details of a single proof, identified by its id (UUID).
This includes the stored fingerprint and metadata.
Request
GET /api/public/proofs/{id}
Example response
{
"id": "f6e03a4f-802f-4aa0-820a-fd54bebfb808",
"title": "Search check",
"fingerprint": "aeab415b4f3f4c05e672f5df6402206c1d9505c55a0d8dfc88b035716559e207",
"created_at": "2025-11-10T09:15:00Z"
}
POST /public/proofs/{id}/verify
Compares a supplied title and/or content string with the stored proof.
Returns whether the supplied inputs match the stored fingerprint.
Request body
JSON object with the following fields:
title (optional, string) – canonical title text.
content (optional, string) – canonical body text.
At least one of title or content should be provided.
POST /api/public/proofs/{id}/verify
Content-Type: application/json
{
"title": "Search check",
"content": "Tady je slovo list v obsahu"
}
Example response (valid)
{
"id": "f6e03a4f-802f-4aa0-820a-fd54bebfb808",
"valid": true,
"fingerprint": "aeab415b4f3f4c05e672f5df6402206c1d9505c55a0d8dfc88b035716559e207"
}
Example response (modified)
{
"id": "f6e03a4f-802f-4aa0-820a-fd54bebfb808",
"valid": false,
"fingerprint": "13b38b30875b2d1d4fa499aa3a2dffb17c0a08b6363e6f11eb45c865dda540"
}
GET /public/proofs/search
Simple search over public proofs. Useful for debugging and for UI that lets you look up a proof
by title or content.
Query parameters:
q (required, string) – free-text query.
Request
GET /api/public/proofs/search?q=hello
Embed builder
The /embed page
is a prototype UI that helps you generate the right widget snippet for your use case:
proof ID, theme, badge mode, position and target selector.
ETags & caching behavior
All public endpoints return strong ETags based on a SHA-256 hash of the normalized JSON response.
Responses are marked as:
Cache-Control: public, max-age=60
- Strong ETags in quotes, e.g.
"aeab41..."
If you send an If-None-Match header with the ETag you previously received, the API
will respond with 304 Not Modified when the underlying data did not change.
Errors & status codes
The prototype uses conventional HTTP status codes and FastAPI-style error bodies.
- 200 OK – request succeeded.
- 304 Not Modified – ETag matches existing data.
- 400 Bad Request – invalid body or query parameters.
- 404 Not Found – proof with given ID does not exist.
- 500 Internal Server Error – unexpected server error.
Example validation error
{
"detail": [
{
"type": "string_type",
"loc": ["body", "title"],
"msg": "Input should be a valid string",
"input": null
}
]
}