PROXAE

API REFERENCE

API Reference

Integrate Proxae timestamp certification into your applications via our REST API.

01

Authentication

All API requests must include your API key in the X-API-Key header. Create keys in your account settings.

Header
X-API-Key: pxe_your_api_key_here

Keep your API keys secret. Never expose them client-side.

02

Base URL

https://proxae.com/api/v1
03

Create a proof

POST /proofs

Submit a SHA-256 hash for Bitcoin blockchain timestamping. Content is never sent — only the hash is transmitted.

Request body
{
  "content_hash": "e3b0c44298fc1c149afbf4c8996fb924...",
  "title": "My document"           // optional
}
Field Type Description
content_hash string SHA-256 hash of the content (64 hex characters). Required.
title string Optional title for the proof.
Response — 201
{
  "proof_id": "550e8400-e29b-41d4-a716-446655440000"
}
04

Get a proof

GET /proofs/{id}

Returns the full details of a proof by its UUID.

Response — 200
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "content_hash": "e3b0c44298fc1c14...",
  "status": "CONFIRMED",
  "bitcoin_block": 850123,
  "bitcoin_block_time": "2026-09-22T14:30:00Z",
  "created_at": "2026-09-22T12:00:00Z"
}
05

Check status

GET /proofs/{id}/status

Lightweight endpoint to check whether a proof has been confirmed on the blockchain. Ideal for polling.

Response — 200
{
  "id": "550e8400-...",
  "status": "PENDING",
  "has_ots": true,
  "bitcoin_block": null,
  "bitcoin_block_time": null
}
06

List proofs

GET /proofs

Returns a paginated list of all proofs associated with your account (25 per page).

07

Webhooks

Configure webhooks in your settings to receive HTTP notifications when your proofs change state. Proxae signs every request with HMAC-SHA256.

proof.confirmed

Sent when a proof is confirmed on the Bitcoin blockchain (typically 1-3h after creation).

Webhook payload
{
  "event": "proof.confirmed",
  "data": {
    "proof_id": "550e8400-...",
    "content_hash": "e3b0c44298fc1c14...",
    "status": "CONFIRMED",
    "bitcoin_block": 850123,
    "bitcoin_block_time": "2026-09-22T14:30:00Z"
  },
  "timestamp": "2026-09-22T15:00:00+00:00"
}

Signature verification

Every webhook request includes an X-Proxae-Signature header containing the HMAC-SHA256 of the request body, signed with your webhook secret.

Headers
X-Proxae-Signature: <HMAC-SHA256 hex digest>
X-Proxae-Event: proof.confirmed
Content-Type: application/json
Verification example (PHP)
$payload   = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_PROXAE_SIGNATURE'];
$secret    = 'your_webhook_secret';

$expected = hash_hmac('sha256', $payload, $secret);

if (! hash_equals($expected, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}
08

Webhook delivery log

Every webhook delivery attempt is logged. Check the history to diagnose failures or replay a missed webhook.

GET /webhook-deliveries

Returns a paginated list of all webhook deliveries for your account, most recent first.

Response — 200
{
  "data": [{
    "id": "a1b2c3d4-...",
    "webhook_endpoint_id": "...",
    "event": "proof.confirmed",
    "payload": { "proof_id": "...", ... },
    "status_code": 200,
    "success": true,
    "attempt": 1,
    "created_at": "2026-09-22T15:00:00Z"
  }],
  ...
}
POST /webhook-deliveries/{id}/replay

Replays a webhook by re-queuing it to your endpoint. Useful if your server was down during the initial delivery.

09

Rate limiting

API requests are rate-limited per key. The default rate limit is 120 requests per minute.

Default 120 req/min
Headers X-RateLimit-Limit, X-RateLimit-Remaining
10

Errors

Code Description
401 Missing or invalid API key.
404 Proof not found.
422 Invalid request data.
429 Rate limit exceeded. Try again later.
11

Quick start

cURL
# Create a proof
curl -X POST https://proxae.com/api/v1/proofs \
  -H "X-API-Key: pxe_your_key" \
  -H "Content-Type: application/json" \
  -d '{"content_hash": "e3b0c442...b855"}'

# Check status
curl https://proxae.com/api/v1/proofs/{proof_id}/status \
  -H "X-API-Key: pxe_your_key"