REST API Reference
All endpoints are available at https://tectra.vision. API keys are prefixed iai_ and used as Bearer tokens.
Authentication
Pass your API key or JWT token in the Authorization header:
Authorization: Bearer iai_your_api_key
# or
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Endpoints marked Public require no authentication. Endpoints marked API Key / JWT accept both formats.
All Endpoints
/healthPublicHealth check. Returns {status: 'ok'}.
/api/v1/auth/registerPublicCreate an account. Returns JWT and user info.
/api/v1/auth/loginPublicLogin with email and password. Returns JWT.
/api/v1/auth/meJWTGet current authenticated user info.
/api/v1/auth/forgot-passwordPublicRequest a password reset email.
/api/v1/auth/reset-passwordPublicComplete password reset with token.
/api/v1/keys/api-keysJWTCreate a new API key (iai_ prefix). Shown once.
/api/v1/keys/api-keysJWTList all your API keys.
/api/v1/keys/api-keys/{id}JWTRevoke an API key.
/api/v1/keys/signing-keysJWTGenerate an Ed25519 signing keypair.
/api/v1/keys/signing-keysJWTList your signing keys.
/api/v1/origin-typesPublicList all available origin type codes.
/api/v1/signAPI Key / JWTSign an image or video. Core pipeline endpoint.
/api/v1/verifyPublicVerify an image or video. No account needed.
/api/v1/registerAPI Key / JWTSDK: register pre-signed content (hashes only).
/api/v1/dashboard/statsJWTGet your signing stats and recent content records.
/api/v1/sign-batchAPI KeySign multiple images in one request. Scope: sign.
/api/v1/content-recordsAPI KeyList your content records with pagination and filters.
/api/v1/content-records/{id}API KeyGet full detail for a content record.
/api/v1/content-records/{id}/certificatePublicGet public provenance certificate.
/api/v1/content-records/{id}API KeyRevoke a content record.
/api/v1/content-records/public/searchPublicSearch the public registry.
/api/v1/webhooksAPI KeyCreate a webhook.
/api/v1/webhooksAPI KeyList your webhooks.
/api/v1/webhooks/{id}API KeyUpdate a webhook.
/api/v1/webhooks/{id}API KeyDelete a webhook.
/api/v1/widget/embed.jsPublicEmbeddable verification widget JavaScript.
/api/v1/widget/badge/{record_id}.svgPublicVerification badge for a content record.
/api/v1/widget/org-badge/{org_name}.svgPublicOrganization verification badge.
Endpoint Details
/api/v1/auth/registercurl -X POST https://tectra.vision/api/v1/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.com",
"password": "secure-password",
"org_name": "Acme AI Inc.",
"org_type": "ai_provider"
}'{
"access_token": "eyJ...",
"token_type": "bearer",
"user": {
"id": "uuid",
"email": "you@company.com",
"org_name": "Acme AI Inc.",
"org_type": "ai_provider"
}
}org_type options: camera_manufacturer ai_provider creative_studio news_org enterprise individual
/api/v1/signAccepts multipart/form-data. Query param: signing_key_id (required).
curl -X POST "https://tectra.vision/api/v1/sign?signing_key_id=YOUR_KEY_UUID" \
-H "Authorization: Bearer iai_..." \
-F "file=@image.png" \
-F "return_file=false" # true = return watermarked binary{
"record_id": "uuid",
"sha256": "abc123...",
"perceptual_hash": "def456...",
"watermark_payload_hex": "ghi789...",
"signature_hex": "jkl012...",
"blockchain_status": "pending",
"certificate": {
"record_id": "uuid",
"sha256": "abc123...",
"signer_public_key": "mno345...",
"org_name": "Acme AI Inc.",
"timestamp": "2025-01-15T12:34:56Z"
}
}/api/v1/verifyPublic - no authcurl -X POST https://tectra.vision/api/v1/verify \
-F "file=@suspect-image.png"{
"authentic": true,
"confidence": 0.95,
"origin": {
"category": "ai",
"code": "ai_generated_image",
"label": "AI Generated Image"
},
"signer": {
"org_name": "Acme AI Inc.",
"org_type": "ai_provider",
"device_id": "my-model-v3",
"public_key": "abc123...",
"key_name": "production-key"
},
"blockchain_tx": "0x4a7f...",
"timestamp": "2025-01-15T12:34:56Z",
"checks": {
"watermark": { "passed": true, "details": "Payload matched record uuid" },
"sha256": { "passed": true, "details": "Exact hash match" },
"perceptual_hash": { "passed": true, "details": "Distance 0" },
"blockchain": { "passed": true, "details": "Merkle proof verified on Polygon" }
}
}/api/v1/keys/signing-keyscurl -X POST https://tectra.vision/api/v1/keys/signing-keys \
-H "Authorization: Bearer iai_..." \
-H "Content-Type: application/json" \
-d '{
"name": "production-key",
"origin_type": "ai_generated_image",
"device_id": "my-model-v3",
"device_info": "Model v3 production inference cluster"
}'{
"id": "signing-key-uuid",
"name": "production-key",
"public_key_hex": "abc123...",
"origin_type": "ai_generated_image",
"device_id": "my-model-v3",
"created_at": "2025-01-15T12:00:00Z"
}/api/v1/dashboard/statscurl https://tectra.vision/api/v1/dashboard/stats \
-H "Authorization: Bearer iai_..."{
"total_signed": 15420,
"total_verified": 3891,
"blockchain_anchored": 15380,
"pending_batch": 40,
"recent_records": [
{
"id": "uuid",
"sha256": "abc...",
"created_at": "2025-01-15T12:34:56Z",
"blockchain_tx": "0x4a7f..."
}
]
}Rate Limits
POST /sign - 100 requests/minute per API key
POST /verify - 60 requests/minute per IP (public endpoint)
POST /auth/register - 10 requests/minute per IP
Exceeding limits returns HTTP 429. Contact us for higher limits.
Next: Python SDK & TypeScript SDK
Local signing, video support, and directory watcher.