SAGEA LogoDocs & API

Helios KYC v2

Verify identity from server-side files with a single JSON request, including optional 1:1 portrait matching.

POST https://api.sagea.space/helios/kyc/v2

Send base64-encoded artifacts as JSON when files already live on your server or come from another upload pipeline.

Authentication

Send Authorization: Bearer $SAGEA_API_KEY on every request. Get a key

Parameters

ParameterTypeRequiredDescription
front_image_b64stringYesBase64 JPG or PNG of the document front without data URI prefix
back_image_b64stringNoBase64 JPG or PNG of the document back for two-sided documents
liveness_video_b64stringYesBase64 MP4, MOV, or WebM liveness clip, 3 to 10 seconds
reference_portrait_b64stringNoBase64 portrait for 1:1 match against the liveness video
external_idstringNoYour user or application ID, returned verbatim in responses
optionsobjectNoOptions object with store_media boolean to retain source media
options.store_mediabooleanNoSet true to retain media for audit, defaults to false

Use v2 when your backend already holds the files, when the client uploads to your S3-compatible bucket first, or when you need JSON-only logs.

Use Helios KYC v1 when the mobile or web client can POST multipart/form-data directly and you want smaller payloads.

Base64 inflates payloads by about 33 percent, so keep source video under 35 MB before encoding.

curl -X POST https://api.sagea.space/helios/kyc/v2 \
  -H "Authorization: Bearer $SAGEA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "front_image_b64": "'$(base64 -w0 front.jpg)'",
    "back_image_b64": "'$(base64 -w0 back.jpg)'",
    "liveness_video_b64": "'$(base64 -w0 liveness.mp4)'",
    "external_id": "ktm_user_1042",
    "options": {"store_media": false}
  }'

Response

A successful request returns 200 with the same decision schema as v1.

{
  "verification_id": "helios_vrf_2pL7nR4wY9bQ",
  "external_id": "ktm_user_1042",
  "decision": "approved",
  "scores": {
    "document_authenticity": 0.96,
    "face_match": 0.93,
    "liveness": 0.95,
    "overall": 0.95
  },
  "reasons": [],
  "extracted": {
    "full_name": "Aarav Sharma",
    "document_number": "N1234567",
    "date_of_birth": "1995-04-12",
    "expiry_date": "2030-04-11",
    "issuing_country": "NP"
  },
  "model_used": "helios-kyc-1.0"
}

Set reference_portrait_b64 for step-up re-auth where the stored portrait must match the live user.

When decision is review, poll verification status or wait for the configured webhook.

Errors

StatusCodeFix
400missing_artifactInclude required base64 fields with valid encoding
413payload_too_largeShrink source media so encoded JSON stays under limits
422spoof_detectedCapture fresh liveness video and resubmit
401unauthorizedVerify SAGEA_API_KEY and header formatting
429rate_limit_exceededRetry with backoff and batch server-side jobs

Limits

25 MB JSON body max, 60 requests per minute per key on shared plans.

What's next

On this page