Ask the registry before you use a face
Send an image to one endpoint and get a decision for every face in it. The answer never says who the person is. This sandbox registry holds only synthetic people, so you can test with the images below.
We send the key to you separately. Keep it on your server: never in a browser, a mobile app or a public repository. If it leaks, tell us and we will replace it.
Quick start
One POST with the image as multipart/form-data.
external_ref is optional: your own identifier for the asset, up to 128
characters, so you can match the answer later.
curl https://sandbox.evertwin.me/v1/checks \ -H "Authorization: Bearer $EVERTWIN_KEY" \ -F image=@cafe-trio.jpg \ -F external_ref=campaign-42/hero.jpg
// Node.js 20 or newer import { readFile } from 'node:fs/promises'; const form = new FormData(); form.set('image', new Blob([await readFile('cafe-trio.jpg')], { type: 'image/jpeg' }), 'cafe-trio.jpg'); form.set('external_ref', 'campaign-42/hero.jpg'); const response = await fetch('https://sandbox.evertwin.me/v1/checks', { method: 'POST', headers: { authorization: `Bearer ${process.env.EVERTWIN_KEY}` }, body: form, }); const check = await response.json();
import os import requests with open("cafe-trio.jpg", "rb") as image: response = requests.post( "https://sandbox.evertwin.me/v1/checks", headers={"Authorization": f"Bearer {os.environ['EVERTWIN_KEY']}"}, files={"image": ("cafe-trio.jpg", image, "image/jpeg")}, data={"external_ref": "campaign-42/hero.jpg"}, ) check = response.json()
The response
For cafe-trio.jpg the registry finds three faces. One of them belongs to a
synthetic person who registered an objection.
{
"check_id": "chk_01JC4T7Y2M8Q5W3E6R9T0Y1V2X",
"decision": "DENY",
"faces": [
{ "bbox": [212, 398, 148, 176], "decision": "NO_RECORD" },
{ "bbox": [671, 352, 156, 188], "decision": "DENY", "reason": "OPT_OUT" },
{ "bbox": [1138, 417, 142, 170], "decision": "NO_RECORD" }
],
"policy_version": "2026-10.v1",
"checked_at": "2026-11-06T10:12:44.318Z",
"input_sha256": "2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881"
}
| Field | Meaning |
|---|---|
decision |
The decision for the whole image: the strictest decision among its faces. |
faces[].bbox |
Where the face is: [x, y, width, height] in pixels of your image.
|
faces[].decision |
The decision for this face, with an optional reason. |
check_id |
Keep it: it proves you asked the registry, and when. |
input_sha256 |
SHA-256 of the file you sent, so you can tie the answer to the exact asset. |
policy_version |
The matching rules that produced the answer. |
There is no name, no match score and no record ID in the response, by design. The registry tells you whether you may use a face, never whose face it is.
Decisions
| Decision | What it means | What to do |
|---|---|---|
Do not useDENY
|
The face matches a person who objects to synthetic use of their face. | Do not generate, train on or publish it. |
Needs reviewREVIEW
|
The face is close to a registered face, but not close enough to be sure. | Have a person decide before you use it. |
No recordNO_RECORD
|
Nobody registered an objection for this face. | No objection on record. This is not consent. |
Can’t assessUNPROCESSABLE
|
No face, more than 10 faces, a face smaller than 64 pixels or a poor-quality image. | Send a clearer or tighter image. |
Test images
All people in these images are synthetic. One of them, the person in the middle of the café photo, registered an objection in the sandbox.
Errors and limits
| Status | Code | When |
|---|---|---|
| 400 | INVALID_FILE |
The image field is missing or is not a JPEG, PNG or WebP up to 5
MB.
|
| 401 | UNAUTHORIZED |
The key is missing, wrong or expired. |
| 415 | UNSUPPORTED_MEDIA_TYPE |
The request is not multipart/form-data. |
| 429 | RATE_LIMITED |
More than 60 checks in a minute. Wait for the number of seconds in
Retry-After.
|
| 503 | VAULT_UNAVAILABLE |
The sandbox was asleep and is waking up. Try again in a few seconds. |
Every error has the same shape: {"error": "RATE_LIMITED", "message": "…"}.
Privacy and terms
Send only synthetic images or images of people who agreed to it. We do not store your
images or any face data from them. For each check we keep the time, the decisions, where
the faces were, the file’s SHA-256 and your external_ref.
The sandbox is for testing an integration, not for production decisions. Your key is valid for 30 days from the day we send it. For a new key or any question, reply to the person who sent you the key.