const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.factify.com/v1/plans/{planId}/lock', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"workflow_id": "<string>",
"claim_slots": [
{
"rubric_id": "<string>",
"slot_name": "<string>",
"claim_id": "<string>",
"substitution_value": "<string>"
}
],
"submissions": [
{
"id": "<string>",
"plan_id": "<string>",
"filename": "<string>",
"mime_type": "<string>",
"added_at": "2023-11-07T05:31:56Z",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"created_at": "2023-11-07T05:31:56Z",
"open_conflicts_count": 1,
"total_conflicts_count": 1,
"locked_at": "2023-11-07T05:31:56Z",
"body_md_resolved": "<string>"
}Lock plan
Locks the plan, computing and storing body_md_resolved from bound claims. Pure-render path — does NOT invoke any workflow body. Execution lives separately at POST /v1/plans//execute (L4 execution layer) and requires a prior /lock; the plan + bound claims are immutable after lock.
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.factify.com/v1/plans/{planId}/lock', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"workflow_id": "<string>",
"claim_slots": [
{
"rubric_id": "<string>",
"slot_name": "<string>",
"claim_id": "<string>",
"substitution_value": "<string>"
}
],
"submissions": [
{
"id": "<string>",
"plan_id": "<string>",
"filename": "<string>",
"mime_type": "<string>",
"added_at": "2023-11-07T05:31:56Z",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"created_at": "2023-11-07T05:31:56Z",
"open_conflicts_count": 1,
"total_conflicts_count": 1,
"locked_at": "2023-11-07T05:31:56Z",
"body_md_resolved": "<string>"
}Documentation Index
Fetch the complete documentation index at: https://developers.factify.com/llms.txt
Use this file to discover all available pages before exploring further.
Authorizations
Bearer authentication using a factapi-issued API key
(ffy_<env>_<base32_uuid><base62_random>). Cookie-based
sessions are accepted automatically by user-facing endpoints
but are not surfaced as an OpenAPI auth scheme.
Path Parameters
Plan TypeID (pln_…)
Response
Plan locked successfully.
Plan TypeID (pln_…)
Workflow TypeID.
Server-computed activity state, derived from submission states: IDLE — no submission is currently ingesting. PROCESSING — at least one submission is still ingesting.
Plan lock status is conveyed separately by locked_at
(null = unlocked, set = locked).
IDLE, PROCESSING One entry per rubric in the parent workflow, in creation order.
Show child attributes
Show child attributes
All submissions associated with this plan.
Show child attributes
Show child attributes
Number of claim_conflicts in open status whose new claim was
submitted to this plan. Drives the runs-list "N conflicts" badge
and the per-run conflict tab count without forcing the UI to
N+1 on /v1/conflicts per plan.
x >= 0Total number of claim_conflicts (open + accepted + rejected) whose new claim was submitted to this plan. Backs resolved-since-detection telemetry and the "0/3 unresolved" style breakdown.
x >= 0When the plan was locked. Null for unlocked plans.
Workflow body_md with claim values substituted. Null until the plan is locked.