Subjects
Enrolled people and their reference signatures.
The Subject object
Attributes
subject_referencerequired Type:stringcreated_atrequired Type:stringreferencesrequired Type:Reference[]checksrequired Type:objectThe subject's checks.
{
"subject_reference": "cust-88",
"created_at": "2026-09-25T10:15:30.123Z",
"checks": {
"recent": [
{
"job_id": "inv-2291",
"index": 0,
"reference": "APP-1042",
"process": "loan-application",
"subject_reference": "cust-88",
"file": "questioned",
"input_type": "photo",
"decision": "APPROVE",
"match_probability": 0.94,
"created_at": "2026-09-27T14:22:05.120Z"
}
],
"total": 1,
"next": "/nib/checks?view=items&subject_reference=cust-88"
},
"references": [
{
"ref_id": "card-2019",
"ref": "ref_01j9x3m8v7k2q4r5s6t7u8v9w1",
"source": "signature_card",
"anchor": true,
"learned_from": null,
"confirmed_by": null,
"content_hash": "sha256:070a8e98f85afe04ba05542428664ec3684db24bc356133c11d41f9fab27f135",
"quality": {
"ok": true
},
"versions": {
"model": "nib-2.6"
},
"created_at": "2026-09-25T10:15:30.123Z",
"unlearned_at": null
}
]
} The Reference object
Attributes
ref_idrequired Type:stringrefrequired Type:stringsourcerequired Type:"signature_card""confirmed_past""unverified""learned"anchorrequired Type:booleanEnrolled by you; never replaced by learned ones.
learned_fromrequired Type:stringnullThe source check,
<job_id>/<index>.confirmed_byrequired Type:stringnullcontent_hashrequired Type:stringnullqualityrequired Type:objectnullversionsrequired Type:objectThe model version at enrolment.
created_atrequired Type:stringunlearned_atrequired Type:stringnull
List subjects
GET /nib/subjects
Needs nib:subjects:read: Read subjects/references metadata and thumbnails
With reference counts and last check, newest first.
Parameters
cursorqueryoptional Type:stringThe previous page's
next_cursor.limitqueryoptional Type:integerqqueryoptional Type:stringSubject reference prefix.
Returns
200Type:SubjectListA page of subjects400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/nib/subjects" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/subjects",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"subjects": [
{
"subject_reference": "cust-88",
"created_at": "2026-09-25T10:15:30.123Z",
"last_checked_at": "2026-09-27T14:22:05.120Z",
"references": {
"total": 3,
"anchors": 2,
"learned": 1
}
}
],
"next_cursor": null
} A subject and its references
GET /nib/subjects/{subject_reference}
Needs nib:subjects:read: Read subjects/references metadata and thumbnails
Includes its 25 newest checked items (checks.recent).
Parameters
subject_referencepathrequired Type:IdYour id for the person.
Returns
200Type:SubjectThe subject401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/nib/subjects/{subject_reference}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/subjects/{subject_reference}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"subject_reference": "cust-88",
"created_at": "2026-09-25T10:15:30.123Z",
"checks": {
"recent": [
{
"job_id": "inv-2291",
"index": 0,
"reference": "APP-1042",
"process": "loan-application",
"subject_reference": "cust-88",
"file": "questioned",
"input_type": "photo",
"decision": "APPROVE",
"match_probability": 0.94,
"created_at": "2026-09-27T14:22:05.120Z"
}
],
"total": 1,
"next": "/nib/checks?view=items&subject_reference=cust-88"
},
"references": [
{
"ref_id": "card-2019",
"ref": "ref_01j9x3m8v7k2q4r5s6t7u8v9w1",
"source": "signature_card",
"anchor": true,
"learned_from": null,
"confirmed_by": null,
"content_hash": "sha256:070a8e98f85afe04ba05542428664ec3684db24bc356133c11d41f9fab27f135",
"quality": {
"ok": true
},
"versions": {
"model": "nib-2.6"
},
"created_at": "2026-09-25T10:15:30.123Z",
"unlearned_at": null
}
]
} Permanently delete a subject and its references
DELETE /nib/subjects/{subject_reference}
Needs nib:references:delete: Delete references and subjects, unlearn
Also revokes the subject's sessions.
Parameters
subject_referencepathrequired Type:IdYour id for the person.
Returns
204Done401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X DELETE "https://api.unforged.sh/nib/subjects/{subject_reference}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.delete(
"https://api.unforged.sh/nib/subjects/{subject_reference}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Enrol reference signatures
PUT /nib/subjects/{subject_reference}/references
Needs nib:references:write: Enroll references, confirm-to-learn
Adds references, creating the subject if new: one PNG, JPEG, WebP, BMP, GIF, TIFF or PDF part per ref_id (at most 20 files, 20 MB), or JSON with URLs. Over 3 are queued (202). learned- ids are reserved.
Parameters
subject_referencepathrequired Type:IdYour id for the person.
Request body
referencesrequired Type:object[]
Returns
200Type:ReferencesResultThe references enrolled or rejected202Type:ReferencesResultSome references were queued400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)413Type:Problemtoo_large415Type:Problemunsupported_media421Type:Problemwrong_region422Type:Problemfetch_failedornot_allowlisted429Type:Problemrate_limitedorquota_exceeded503Type:Problembusy,not_ready,org_movingorstorage_provisioning(your organisation's storage is still being set up); retry afterRetry-After504Type:Problemtimeout; a check continues asynchronously (job_id,status_url)defaultType:Probleminternal
curl -X PUT "https://api.unforged.sh/nib/subjects/{subject_reference}/references" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" \
-H "Content-Type: application/json" \
-d '{
"references": [
{
"ref_id": "card-2019",
"url": "https://files.example.com/card.png",
"source": "signature_card"
}
]
}' import requests
r = requests.put(
"https://api.unforged.sh/nib/subjects/{subject_reference}/references",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
json={
"references": [
{
"ref_id": "card-2019",
"url": "https://files.example.com/card.png",
"source": "signature_card"
}
]
},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}/references', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14', 'Content-Type': 'application/json' },
body: JSON.stringify({
"references": [
{
"ref_id": "card-2019",
"url": "https://files.example.com/card.png",
"source": "signature_card"
}
]
}),
});
console.log(await res.json()); {
"subject_reference": "cust-88",
"references": [
{
"ref_id": "card-2019",
"source": "signature_card",
"status": "enrolled",
"ref": "ref_01j9x3m8v7k2q4r5s6t7u8v9w1"
},
{
"ref_id": "blurry",
"source": "unverified",
"status": "rejected",
"reason": "quality",
"detail": "the image is too blurred"
}
]
} Permanently delete a reference
DELETE /nib/subjects/{subject_reference}/references/{ref_id}
Needs nib:references:delete: Delete references and subjects, unlearn
Learned references are removed with unlearn (409).
Parameters
Returns
204Done401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found409Type:Problemconflict,idempotency_conflict,idempotency_in_progressoridempotency_not_replayable421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X DELETE "https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.delete(
"https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); A reference signature's thumbnail (PNG)
GET /nib/subjects/{subject_reference}/references/{ref_id}/image
Needs nib:subjects:read: Read subjects/references metadata and thumbnails
Greyscale, first page, at most 512 px. 404 if gone.
Parameters
Returns
200The thumbnail401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceeded503Type:Problembusy,not_ready,org_movingorstorage_provisioning(your organisation's storage is still being set up); retry afterRetry-AfterdefaultType:Probleminternal
curl "https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}/image" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}/image",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}/references/{ref_id}/image', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Remove learned references
POST /nib/subjects/{subject_reference}/references/unlearn
Needs nib:references:delete: Delete references and subjects, unlearn
By since or source check; those checks are never learned again.
Parameters
subject_referencepathrequired Type:IdYour id for the person.
Idempotency-Keyheaderrequired Type:string1–255 printable ASCII characters, kept 24 hours.
Request body
Returns
200Type:UnlearnedThe references removed (possibly none)400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found409Type:Problemconflict,idempotency_conflict,idempotency_in_progressoridempotency_not_replayable421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X POST "https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" \
-H "Content-Type: application/json" \
-d '{
"since": "2026-09-01T00:00:00Z"
}' import requests
r = requests.post(
"https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
json={
"since": "2026-09-01T00:00:00Z"
},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14', 'Content-Type': 'application/json' },
body: JSON.stringify({
"since": "2026-09-01T00:00:00Z"
}),
});
console.log(await res.json()); {
"subject_reference": "cust-88",
"unlearned": [
"learned-01j9x3m8v7k2q4r5s6t7u8v9w0"
]
} Delete the reference whose ref_id is `unlearn`
DELETE /nib/subjects/{subject_reference}/references/unlearn
Needs nib:references:delete: Delete references and subjects, unlearn
DELETE …/references/{ref_id} for the ref_id unlearn.
Parameters
subject_referencepathrequired Type:IdYour id for the person.
Returns
204Done401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)404Type:Problemnot_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X DELETE "https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.delete(
"https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/subjects/{subject_reference}/references/unlearn', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json());