Policies and settings
Policies, templates and bucket keys.
The Policy object
Attributes
namerequired Type:stringversionrequired Type:integeridrequired Type:stringname@versionauto_approve_enabledrequired Type:booleanauto_thresholdrequired Type:numberapprove_thresholdrequired Type:numberfail_thresholdrequired Type:numberqualityrequired Type:QualityPolicynullreview_raterequired Type:numbernullforgery_raterequired Type:numbernullcreated_byrequired Type:stringcreated_atrequired Type:string
{
"name": "strict",
"version": 2,
"id": "strict@2",
"auto_approve_enabled": false,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3,
"quality": null,
"review_rate": null,
"forgery_rate": null,
"created_by": "api_key:key_01j9x3m8v7k2q4r5s6t7u8v9w0",
"created_at": "2026-09-25T10:15:30.123Z"
} The Template object
Attributes
template_idrequired Type:stringnamerequired Type:stringboxesrequired Type:TemplateBox[]blank_typerequired Type:"png""pdf"feature_hashrequired Type:stringnullcreated_atrequired Type:string
{
"template_id": "benefits-form-v3",
"name": "Benefits form",
"boxes": [
{
"name": "applicant_signature",
"x": 400,
"y": 1860,
"w": 520,
"h": 200
}
],
"blank_type": "png",
"feature_hash": "sha256:1cf1da50e3f0be0b50197022be0eedf20fa688cf20ca1154b388098a9d2e29e1",
"created_at": "2026-09-25T10:15:30.123Z"
} The latest version of each policy
GET /nib/policies
Needs org:read: See org, members, usage
Returns
200The policies401Type: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/policies" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/policies",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/policies', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); A policy (the latest version, or `?version=N`)
GET /nib/policies/{name}
Needs org:read: See org, members, usage
Parameters
namepathrequired Type:Idversionqueryoptional Type:integer
Returns
200Type:PolicyThe policy version400Type: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_found421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl "https://api.unforged.sh/nib/policies/{name}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/policies/{name}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/policies/{name}', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"name": "strict",
"version": 2,
"id": "strict@2",
"auto_approve_enabled": false,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3,
"quality": null,
"review_rate": null,
"forgery_rate": null,
"created_by": "api_key:key_01j9x3m8v7k2q4r5s6t7u8v9w0",
"created_at": "2026-09-25T10:15:30.123Z"
} Store a new policy version
PUT /nib/policies/{name}
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
201 with the new version; 200 if unchanged. Checks use the latest version.
Parameters
namepathrequired Type:Id
Request body
auto_approve_enabledoptional Type:booleanauto_thresholdrequired Type:numberA check is approved automatically when its score reaches
approve_thresholdand the low end of its likely range reachesauto_threshold. It can sit belowapprove_threshold, and must be abovefail_threshold.approve_thresholdrequired Type:numberfail_thresholdrequired Type:numberA signature scoring under this fails. With fewer than three references it goes to review instead, unless it scores under 0.01 or is a copy of a reference.
qualityoptional Type:QualityPolicynullreview_rateoptional Type:numbernullThe share of genuine signatures you're prepared to review, for example 0.05. When it's set, the approve bar is chosen for each number of references so that about this share of genuine signatures is flagged or failed, and
approve_thresholdisn't used. Slow, even strokes and a signature closer than the person's usual variation are then shown as notes rather than holding the check.forgery_rateoptional Type:numbernullHow often you expect a forgery, for example 0.001 for 1 in 1,000. Each signature then also shows
forgery_probability. It doesn't change any decision.
Returns
200Type:PolicyUnchanged201Type:PolicyA new version400Type: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_large421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X PUT "https://api.unforged.sh/nib/policies/{name}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" \
-H "Content-Type: application/json" \
-d '{
"auto_approve_enabled": false,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3
}' import requests
r = requests.put(
"https://api.unforged.sh/nib/policies/{name}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
json={
"auto_approve_enabled": False,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3
},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/policies/{name}', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14', 'Content-Type': 'application/json' },
body: JSON.stringify({
"auto_approve_enabled": false,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3
}),
});
console.log(await res.json()); {
"name": "strict",
"version": 2,
"id": "strict@2",
"auto_approve_enabled": false,
"auto_threshold": 0.7,
"approve_threshold": 0.85,
"fail_threshold": 0.3,
"quality": null,
"review_rate": null,
"forgery_rate": null,
"created_by": "api_key:key_01j9x3m8v7k2q4r5s6t7u8v9w0",
"created_at": "2026-09-25T10:15:30.123Z"
} Form templates
GET /nib/templates
Needs org:read: See org, members, usage
Returns
200The templates401Type: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/templates" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/templates",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/templates', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Upload a form template
POST /nib/templates
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
Multipart: a template JSON part and a blank PNG or PDF (at most 20 MB). 409 if the id exists or you have 200 templates.
Parameters
Idempotency-Keyheaderrequired Type:string1–255 printable ASCII characters, kept 24 hours.
Returns
201Type:TemplateCreated400Type: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)409Type:Problemconflict,idempotency_conflict,idempotency_in_progressoridempotency_not_replayable413Type:Problemtoo_large415Type:Problemunsupported_media421Type: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 -X POST "https://api.unforged.sh/nib/templates" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.post(
"https://api.unforged.sh/nib/templates",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/templates', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"template_id": "benefits-form-v3",
"name": "Benefits form",
"boxes": [
{
"name": "applicant_signature",
"x": 400,
"y": 1860,
"w": 520,
"h": 200
}
],
"blank_type": "png",
"feature_hash": "sha256:1cf1da50e3f0be0b50197022be0eedf20fa688cf20ca1154b388098a9d2e29e1",
"created_at": "2026-09-25T10:15:30.123Z"
} A form template
GET /nib/templates/{template_id}
Needs org:read: See org, members, usage
Parameters
template_idpathrequired Type:Id
Returns
200Type:TemplateThe template401Type: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/templates/{template_id}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/templates/{template_id}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/templates/{template_id}', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"template_id": "benefits-form-v3",
"name": "Benefits form",
"boxes": [
{
"name": "applicant_signature",
"x": 400,
"y": 1860,
"w": 520,
"h": 200
}
],
"blank_type": "png",
"feature_hash": "sha256:1cf1da50e3f0be0b50197022be0eedf20fa688cf20ca1154b388098a9d2e29e1",
"created_at": "2026-09-25T10:15:30.123Z"
} Delete a form template and its files
DELETE /nib/templates/{template_id}
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
Parameters
template_idpathrequired Type:Id
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/templates/{template_id}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.delete(
"https://api.unforged.sh/nib/templates/{template_id}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/templates/{template_id}', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); Your bucket's access keys
GET /nib/bucket-keys
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
Returns
200Type:BucketKeyListThe keys401Type:Problemunauthorized403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceeded501Type:Problemnot_implementedornot_available_in_dev503Type: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/bucket-keys" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/bucket-keys",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/bucket-keys', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"iam_user": "unf-prod-acme",
"bucket_keys": [
{
"id": "bkt_01j9x3m8v7k2q4r5s6t7u8v9w0",
"access_key_id": "AKIAIOSFODNN7EXAMPLE",
"status": "active",
"created_at": "2026-09-25T10:15:30Z",
"reissue_required": false
}
]
} Issue a bucket access key
POST /nib/bucket-keys
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
The secret is shown once. At most 2 active keys (409). The first time, your bucket's access is set up first: the answer is 202 with status setting_up, and the list shows the same until it is ready (usually within a minute); then ask again.
Returns
201Type:BucketKeyCreatedCreated202Bucket access is being set up; ask again shortly400Type:Probleminvalid_request,invalid_version,idempotency_key_requiredorinvalid_signature401Type:Problemunauthorized402Type:Problembilling_required403Type:Problempermission_denied,org_suspended, oraddress_not_allowed(your organisation only accepts requests from the addresses it has listed)409Type:Problemconflict,idempotency_conflict,idempotency_in_progressoridempotency_not_replayable421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceeded501Type:Problemnot_implementedornot_available_in_dev503Type:Problembusy,not_ready,org_movingorstorage_provisioning(your organisation's storage is still being set up); retry afterRetry-AfterdefaultType:Probleminternal
curl -X POST "https://api.unforged.sh/nib/bucket-keys" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.post(
"https://api.unforged.sh/nib/bucket-keys",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/bucket-keys', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"id": "bkt_01j9x3m8v7k2q4r5s6t7u8v9w0",
"access_key_id": "AKIAIOSFODNN7EXAMPLE",
"secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"iam_user": "unf-prod-acme",
"created_at": "2026-09-25T10:15:30Z"
} Delete a bucket access key
DELETE /nib/bucket-keys/{id}
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
Revokes the key.
Parameters
idpathrequired Type:stringThe key's
idor access key id.
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_exceeded501Type:Problemnot_implementedornot_available_in_dev503Type:Problembusy,not_ready,org_movingorstorage_provisioning(your organisation's storage is still being set up); retry afterRetry-AfterdefaultType:Probleminternal
curl -X DELETE "https://api.unforged.sh/nib/bucket-keys/{id}" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.delete(
"https://api.unforged.sh/nib/bucket-keys/{id}",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/bucket-keys/{id}', {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); How long job history is kept
GET /nib/settings/retention
Needs org:read: See org, members, usage
Default 90 days.
Returns
200Type:RetentionThe retention settings401Type: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/settings/retention" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/settings/retention",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/settings/retention', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"history_retention": 90,
"default": true,
"results_lifecycle_days": 90,
"audit_log_retention_days": 400
} Set how long job history is kept
PUT /nib/settings/retention
Needs org:settings:manage: Retention, org-wide settings, the API version pin
Finished jobs and their files are deleted once older than this. Uploaded inputs go sooner, inbox_ttl after the check (24 h by default).
Returns
200Type:RetentionThe new settings400Type: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_large421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X PUT "https://api.unforged.sh/nib/settings/retention" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.put(
"https://api.unforged.sh/nib/settings/retention",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/settings/retention', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"history_retention": 90,
"default": true,
"results_lifecycle_days": 90,
"audit_log_retention_days": 400
} Reference learning settings
GET /nib/settings/learning
Needs org:read: See org, members, usage
Defaults: off, 0.90, 0.95, 10.
Returns
200Type:LearningViewThe learning settings401Type: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/settings/learning" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" import requests
r = requests.get(
"https://api.unforged.sh/nib/settings/learning",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/settings/learning', {
method: 'GET',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14' },
});
console.log(await res.json()); {
"reference_learning": "confirmed_only",
"learn_min_band_lo": 0.9,
"learn_min_probability": 0.95,
"max_learned": 10,
"terms_accepted": {
"terms_version": "2026-09-27",
"accepted_by": "user:user_01ABCDEF",
"accepted_at": "2026-09-27T12:00:00.000Z"
}
} Set the reference learning settings
PUT /nib/settings/learning
Needs nib:settings:manage: Policy, learning, templates, webhooks, bucket keys
Replaces the settings; an omitted learn_min_probability is set to its default. Turning learning on needs the terms accepted (409 learning_terms_required).
Request body
reference_learningrequired Type:"off""confirmed_only""confirmed_and_auto"off(default),confirmed_only, orconfirmed_and_auto(also AUTO_APPROVE items).learn_min_band_lorequired Type:numberThe lower bound of the match score a candidate must reach (0.5–1, default 0.90).
learn_min_probabilityoptional Type:numberThe match score a candidate must reach (0.5–1, default 0.95). Optional on write; an omitted value is set to its default.
max_learnedrequired Type:integerMost learned references kept per subject (0–50, default 10).
Returns
200Type:LearningSettingsThe new settings400Type: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)409Type:Problemconflict,idempotency_conflict,idempotency_in_progressoridempotency_not_replayable413Type:Problemtoo_large421Type:Problemwrong_region429Type:Problemrate_limitedorquota_exceededdefaultType:Probleminternal
curl -X PUT "https://api.unforged.sh/nib/settings/learning" \
-H "Authorization: Bearer $UNFORGED_KEY" \
-H "Unforged-Version: 2026-10-14" \
-H "Content-Type: application/json" \
-d '{
"reference_learning": "confirmed_only",
"learn_min_band_lo": 0.99,
"max_learned": 10
}' import requests
r = requests.put(
"https://api.unforged.sh/nib/settings/learning",
headers={"Authorization": f"Bearer {UNFORGED_KEY}", "Unforged-Version": "2026-10-14"},
json={
"reference_learning": "confirmed_only",
"learn_min_band_lo": 0.99,
"max_learned": 10
},
)
print(r.json()) const res = await fetch('https://api.unforged.sh/nib/settings/learning', {
method: 'PUT',
headers: { Authorization: `Bearer ${process.env.UNFORGED_KEY}`, 'Unforged-Version': '2026-10-14', 'Content-Type': 'application/json' },
body: JSON.stringify({
"reference_learning": "confirmed_only",
"learn_min_band_lo": 0.99,
"max_learned": 10
}),
});
console.log(await res.json()); {
"reference_learning": "confirmed_only",
"learn_min_band_lo": 0.9,
"learn_min_probability": 0.95,
"max_learned": 10
}