{"openapi":"3.1.0","info":{"title":"form·vee API","version":"1.0.0","description":"Programmatic access to form·vee — create, edit, publish forms and read responses. Authenticate with a per-workspace API key via `Authorization: Bearer <key>`. Each key is scoped; see securitySchemes for the available scopes."},"servers":[{"url":"https://form.vee.kr/api/v1"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Workspace API key. Available scopes: forms:read, forms:write, forms:publish, responses:read, responses:partial:read, assets:write, files:read."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"description":"Optional value-free structured repair details such as validation issues or the current concurrency token."}},"required":["code","message"]}},"required":["ok","error"]},"Usage":{"type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"scopes":{"type":"array","items":{"type":"string"}}}},"rateLimit":{"type":["object","null"],"description":"Current per-minute budget for the calling key (mirrors X-RateLimit-* headers).","properties":{"limit":{"type":"integer"},"remaining":{"type":"integer"},"resetSeconds":{"type":"integer"}}},"requests":{"type":"object","properties":{"last24h":{"type":"integer"},"last7d":{"type":"integer"},"byStatusLast24h":{"type":"object","properties":{"ok":{"type":"integer"},"clientError":{"type":"integer"},"serverError":{"type":"integer"}}}}}}},"Capabilities":{"type":"object","description":"Safe, workspace-evaluated authoring capabilities for the calling API key. Operational and privacy-only flags are omitted.","properties":{"scopes":{"type":"array","items":{"type":"string","enum":["forms:read","forms:write","forms:publish","responses:read","responses:partial:read","assets:write","files:read"]}},"formKinds":{"type":"object","properties":{"classic":{"type":"boolean","const":true},"interview":{"type":"boolean"}},"required":["classic","interview"]},"renderModes":{"type":"object","properties":{"classic":{"type":"boolean","const":true},"conversational":{"type":"boolean"},"document":{"type":"boolean"}},"required":["classic","conversational","document"]},"blockTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["short_text","long_text","multiple_choice","checkboxes","dropdown","ranking","rating","date","datetime","time","date_range","email","number","file_upload","signature","privacy_consent","address","statement","page_break","divider","image","calculated_field","hidden_field"]},"enabled":{"type":"boolean"},"requiredFeature":{"type":"string"}},"required":["type","enabled"]}},"features":{"type":"object","description":"Allowlisted authoring feature flags keyed by their stable registry names.","additionalProperties":{"type":"boolean"}}},"required":["scopes","formKinds","renderModes","blockTypes","features"]},"FormSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published"]},"kind":{"type":"string","enum":["classic","interview"]},"updatedAt":{"type":"string","format":"date-time"},"responseCount":{"type":"integer"}}},"FormListPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FormSummary"}},"nextCursor":{"type":["string","null"],"description":"Opaque keyset cursor for the next page."}},"required":["items","nextCursor"]},"FormDefinition":{"description":"폼 정의 — 블록 배열(BLOCK_TYPES)·조건 분기 로직. 블록은 type 으로 판별되는 oneOf 다.","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"blocks":{"maxItems":200,"type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"short_text"},"options":{"default":{},"type":"object","properties":{"maxLength":{"type":"integer","exclusiveMinimum":0,"maximum":10000},"minLength":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"pattern":{"type":"string","maxLength":300},"placeholder":{"type":"string","maxLength":200},"inputMode":{"type":"string","enum":["text","tel","url","email","numeric","decimal"]},"autoComplete":{"type":"string","maxLength":40}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"long_text"},"options":{"default":{},"type":"object","properties":{"maxLength":{"type":"integer","exclusiveMinimum":0,"maximum":50000},"minLength":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"pattern":{"type":"string","maxLength":300},"placeholder":{"type":"string","maxLength":200}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"multiple_choice"},"options":{"type":"object","properties":{"choices":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","minLength":1,"maxLength":500},"imageKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"imageAlt":{"type":"string","maxLength":300}},"required":["id","label"]}},"allowOther":{"type":"boolean"},"qualityTrap":{"type":"object","properties":{"expectedChoiceId":{"type":"string","minLength":1,"maxLength":64}},"required":["expectedChoiceId"],"additionalProperties":false},"matrixGroupId":{"type":"string","pattern":"^mtx_[A-Za-z0-9_-]{6,}$"},"rowLabel":{"type":"string","maxLength":500},"randomize":{"type":"object","properties":{"mode":{"type":"string","enum":["shuffle","reverse"]},"pinLast":{"default":0,"type":"integer","minimum":0,"maximum":100}},"required":["mode"],"additionalProperties":false}},"required":["choices"]}},"required":["id","label","type","options"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"checkboxes"},"options":{"type":"object","properties":{"choices":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","minLength":1,"maxLength":500},"imageKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"imageAlt":{"type":"string","maxLength":300}},"required":["id","label"]}},"minSelected":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"maxSelected":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"allowOther":{"type":"boolean"},"matrixGroupId":{"type":"string","pattern":"^mtx_[A-Za-z0-9_-]{6,}$"},"rowLabel":{"type":"string","maxLength":500},"randomize":{"type":"object","properties":{"mode":{"type":"string","enum":["shuffle","reverse"]},"pinLast":{"default":0,"type":"integer","minimum":0,"maximum":100}},"required":["mode"],"additionalProperties":false}},"required":["choices"]}},"required":["id","label","type","options"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"dropdown"},"options":{"type":"object","properties":{"choices":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","minLength":1,"maxLength":500},"imageKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"imageAlt":{"type":"string","maxLength":300}},"required":["id","label"]}},"dataset":{"type":"string","enum":["countries"]},"randomize":{"type":"object","properties":{"mode":{"type":"string","enum":["shuffle","reverse"]},"pinLast":{"default":0,"type":"integer","minimum":0,"maximum":100}},"required":["mode"],"additionalProperties":false}},"required":["choices"]}},"required":["id","label","type","options"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"ranking"},"options":{"type":"object","properties":{"choices":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64},"label":{"type":"string","minLength":1,"maxLength":500},"imageKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"imageAlt":{"type":"string","maxLength":300}},"required":["id","label"]}},"randomize":{"type":"object","properties":{"mode":{"type":"string","enum":["shuffle","reverse"]},"pinLast":{"default":0,"type":"integer","minimum":0,"maximum":100}},"required":["mode"],"additionalProperties":false}},"required":["choices"]}},"required":["id","label","type","options"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"rating"},"options":{"default":{"scale":5,"shape":"number"},"type":"object","properties":{"scale":{"default":5,"type":"integer","minimum":2,"maximum":11},"shape":{"default":"number","type":"string","enum":["number","star","circle"]},"zeroBased":{"type":"boolean"},"lowLabel":{"type":"string","maxLength":60},"highLabel":{"type":"string","maxLength":60}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"date"},"options":{"default":{},"type":"object","properties":{"min":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"max":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"datetime"},"options":{"default":{},"type":"object","properties":{"min":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|))$"},"max":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|))$"}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"time"},"options":{"default":{},"type":"object","properties":{"min":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},"max":{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"date_range"},"options":{"default":{},"type":"object","properties":{"min":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"max":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"email"},"options":{"default":{},"type":"object","properties":{"placeholder":{"type":"string","maxLength":200}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"number"},"options":{"default":{},"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"integer":{"type":"boolean"},"step":{"type":"number","exclusiveMinimum":0},"placeholder":{"type":"string","maxLength":200},"prefix":{"type":"string","maxLength":10},"suffix":{"type":"string","maxLength":10},"decimals":{"type":"integer","minimum":0,"maximum":10}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"file_upload"},"options":{"default":{"maxFiles":1,"maxSizeMb":10},"type":"object","properties":{"maxFiles":{"default":1,"type":"integer","minimum":1,"maximum":20},"maxSizeMb":{"default":10,"type":"integer","minimum":1,"maximum":25},"acceptedMimeTypes":{"maxItems":50,"type":"array","items":{"type":"string","maxLength":150}}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"signature"},"options":{"default":{"width":320,"height":160},"type":"object","properties":{"width":{"default":320,"type":"integer","minimum":80,"maximum":800},"height":{"default":160,"type":"integer","minimum":40,"maximum":400}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":true,"type":"boolean","const":true},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"privacy_consent"},"options":{"type":"object","properties":{"mode":{"default":"agree_only","type":"string","enum":["agree_only","agree_or_decline"]},"items":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"purpose":{"type":"string","minLength":1,"maxLength":2000},"retentionPeriod":{"type":"string","minLength":1,"maxLength":1000},"refusalNotice":{"type":"string","minLength":1,"maxLength":2000}},"required":["items","purpose","retentionPeriod","refusalNotice"]}},"required":["id","label","type","options"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean"},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"address"},"options":{"default":{},"type":"object","properties":{}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"statement"},"content":{"maxItems":500,"type":"array","items":{"anyOf":[{"type":"object","properties":{"text":{"type":"string","maxLength":4000},"bold":{"type":"boolean"},"italic":{"type":"boolean"},"underline":{"type":"boolean"},"strike":{"type":"boolean"},"code":{"type":"boolean"},"color":{"type":"string","maxLength":40},"bg":{"type":"string","maxLength":40},"href":{"type":"string","maxLength":2000}},"required":["text"],"additionalProperties":false},{"type":"object","properties":{"fieldRef":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"required":["fieldRef"],"additionalProperties":false}]}},"level":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2},{"type":"number","const":3}]},"align":{"type":"string","enum":["center","right"]},"variant":{"type":"string","enum":["quote","callout"]},"listStyle":{"type":"string","enum":["bullet","number"]},"options":{"default":{},"type":"object","properties":{}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"default":"","type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"page_break"},"options":{"default":{},"type":"object","properties":{}}},"required":["id","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"default":"","type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"divider"},"options":{"default":{},"type":"object","properties":{}}},"required":["id","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"default":"","type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"image"},"imageKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"imageAlt":{"default":"","type":"string","maxLength":300},"width":{"default":"full","type":"string","enum":["small","medium","full"]},"caption":{"type":"string","maxLength":1000},"imageWidth":{"type":"integer","minimum":1,"maximum":65535},"imageHeight":{"type":"integer","minimum":1,"maximum":65535},"options":{"default":{},"type":"object","properties":{}}},"required":["id","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"calculated_field"},"options":{"default":{"expression":""},"type":"object","properties":{"expression":{"default":"","type":"string","maxLength":1000},"precision":{"type":"integer","minimum":0,"maximum":10}}}},"required":["id","label","type"]},{"type":"object","properties":{"id":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"label":{"type":"string","maxLength":2000},"description":{"type":"string","maxLength":4000},"required":{"default":false,"type":"boolean","const":false},"presentation":{"type":"object","properties":{"document":{"type":"object","properties":{"span":{"type":"integer","minimum":3,"maximum":12},"breakBefore":{"type":"boolean"},"fieldChrome":{"type":"string","enum":["full","field-only"]},"controlWidth":{"type":"string","enum":["auto","full"]}},"additionalProperties":false}},"additionalProperties":false},"type":{"type":"string","const":"hidden_field"},"options":{"type":"object","properties":{"param":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"defaultValue":{"type":"string","maxLength":2000}},"required":["param"]}},"required":["id","label","type","options"]}]}},"logic":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^lgc_[A-Za-z0-9_-]{6,}$"},"from":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"match":{"default":"all","type":"string","enum":["any","all"]},"conditions":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"blk":{"type":"string"},"op":{"type":"string","enum":["eq","neq","contains","not_contains","gt","gte","lt","lte","is_empty","is_filled"]},"value":{"anyOf":[{"type":"string","maxLength":2000},{"type":"number"}]}},"required":["blk","op"]}},"actions":{"minItems":1,"maxItems":20,"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"show"},"target":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","const":"hide"},"target":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","const":"skip_to"},"target":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"required":["type","target"]},{"type":"object","properties":{"type":{"type":"string","const":"skip_to_end"}},"required":["type"]}]}}},"required":["id","conditions","actions"]}},"randomGroups":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^rng_[A-Za-z0-9_-]{6,}$"},"blockIds":{"minItems":2,"maxItems":50,"type":"array","items":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"mode":{"type":"string","enum":["shuffle","reverse","latin_square"]}},"required":["id","blockIds","mode"],"additionalProperties":false}},"scales":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$"},"label":{"type":"string","minLength":1,"maxLength":200},"blocks":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"reverse":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}},"aggregation":{"default":"mean","type":"string","enum":["sum","mean"]},"missing":{"default":"exclude","type":"string","enum":["exclude","zero","require_all"]},"cutoffs":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"min":{"type":"number"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["min","label"]}}},"required":["id","label","blocks"]}},"quizzes":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$"},"label":{"type":"string","minLength":1,"maxLength":200},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"},"answer":{"anyOf":[{"type":"string","maxLength":50000},{"type":"number"},{"maxItems":200,"type":"array","items":{"type":"string","maxLength":50000}}]},"points":{"type":"number","exclusiveMinimum":0,"maximum":10000},"feedbackCorrect":{"type":"string","maxLength":2000},"feedbackIncorrect":{"type":"string","maxLength":2000}},"required":["blockId","answer","points"]}},"cutoffs":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"min":{"type":"number"},"label":{"type":"string","minLength":1,"maxLength":200}},"required":["min","label"]}}},"required":["id","label","items"]}}},"required":["schemaVersion","blocks"]},"FormSettings":{"description":"폼 설정 — 렌더 모드·로케일·테마·완료/제출 동작 등.","type":"object","properties":{"renderMode":{"default":"conversational","type":"string","enum":["conversational","classic","document"]},"locale":{"default":"en","type":"string","enum":["en","ko","ja"]},"theme":{"default":{"primaryColor":"#5b57d6","backgroundColor":"#ffffff","textColor":"#1b1b1a"},"type":"object","properties":{"primaryColor":{"default":"#5b57d6","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"backgroundColor":{"default":"#ffffff","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"textColor":{"default":"#1b1b1a","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"themeKey":{"type":"string","enum":["cloud","ink","warm","forest"]},"accentColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"fontKey":{"type":"string","enum":["pretendard","serif","nanum"]},"cornerStyle":{"type":"string","enum":["sharp","rounded","round"]},"background":{"type":"string","enum":["plain","soft","gradient"]},"density":{"type":"string","enum":["compact","cozy","comfortable"]},"reduceMotion":{"type":"boolean"},"logoKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"},"coverKey":{"type":"string","minLength":1,"maxLength":200,"pattern":"^[A-Za-z0-9/._-]+$"}}},"document":{"type":"object","properties":{"pageWidth":{"default":"normal","type":"string","enum":["narrow","normal","wide"]},"showNumbers":{"default":false,"type":"boolean"}}},"completion":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":2000},"redirectUrl":{"type":"string","maxLength":2000,"format":"uri"},"allowAnother":{"type":"boolean"},"icon":{"type":"string","enum":["check","heart","party","none"]},"ctaLabel":{"type":"string","maxLength":80},"ctaUrl":{"type":"string","maxLength":2000,"format":"uri"},"confetti":{"type":"boolean"}}},"intro":{"type":"object","properties":{"title":{"type":"string","maxLength":200},"body":{"type":"string","maxLength":2000},"buttonLabel":{"type":"string","maxLength":80}}},"submission":{"default":{"acceptingResponses":true},"type":"object","properties":{"acceptingResponses":{"default":true,"type":"boolean"},"submitLabel":{"type":"string","minLength":1,"maxLength":80},"closedMessage":{"type":"string","maxLength":1000},"closesAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"maxResponses":{"type":"integer","exclusiveMinimum":0,"maximum":1000000},"respondentTracking":{"type":"string","enum":["anonymous"]},"repeatResponsePolicy":{"type":"string","enum":["warn","soft_block"]},"allowResponseEditing":{"type":"boolean"}}},"notifications":{"default":{"responseEmail":{"enabled":false,"recipients":[]},"respondentReceipt":{"enabled":false}},"type":"object","properties":{"responseEmail":{"default":{"enabled":false,"recipients":[]},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"recipients":{"default":[],"maxItems":5,"type":"array","items":{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}}}},"respondentReceipt":{"default":{"enabled":false},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"emailBlockId":{"type":"string","pattern":"^blk_[A-Za-z0-9_-]{8,}$"}}}}},"researchCompliance":{"type":"object","properties":{"purpose":{"type":"string","minLength":1,"maxLength":2000},"contact":{"type":"string","minLength":1,"maxLength":500},"consentItems":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":500}},"retentionDays":{"type":"integer","minimum":1,"maximum":3650},"withdrawalEnabled":{"default":true,"type":"boolean"},"thirdPartyProvision":{"default":{"enabled":false},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"details":{"type":"string","minLength":1,"maxLength":2000}}}},"required":["purpose","contact","consentItems","retentionDays"]},"customScript":{"type":"string","maxLength":10000}}},"InterviewDefinition":{"description":"인터뷰 정의(kind=interview) — V2 작성 정의. 페르소나·주제·필드·목표·턴 예산 등 대화형 인터뷰 설정.","type":"object","properties":{"schemaVersion":{"default":2,"type":"number","const":2},"title":{"default":"","type":"string","maxLength":200},"goal":{"default":"","type":"string","maxLength":2000},"greetingByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"closingByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"persona":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"tone":{"type":"string","maxLength":200}}},"researchBrief":{"type":"object","properties":{"purpose":{"default":"","type":"string","maxLength":2000},"participantProfile":{"default":"","type":"string","maxLength":2000},"decisionUse":{"default":"","type":"string","maxLength":2000},"researchQuestions":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":1000}},"methodologyPresetId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"}}},"locales":{"default":{"default":"ko","supported":["ko"]},"type":"object","properties":{"default":{"default":"ko","type":"string","enum":["ko","en","ja"]},"supported":{"default":["ko"],"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["ko","en","ja"]}}}},"disclosure":{"type":"object","properties":{"version":{"type":"string","minLength":1,"maxLength":100},"required":{"default":false,"type":"boolean"},"purposeTextByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"retentionTextByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}}},"required":["version"]},"modules":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"labelByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":500}},"purpose":{"type":"string","maxLength":2000},"order":{"default":0,"type":"integer","minimum":0,"maximum":1000},"maxFollowups":{"type":"integer","minimum":0,"maximum":30}},"required":["id","labelByLocale"]}},"fields":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"labelByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":500}},"descriptionByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"questionByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"moduleId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"valueType":{"type":"string","enum":["short_text","long_text","single_select","multi_select","boolean","number","scale_1_5","nps_0_10"]},"requiredness":{"default":"optional","type":"string","enum":["hard","soft","optional"]},"sensitivity":{"default":"none","type":"string","enum":["none","low","moderate","high"]},"priority":{"default":50,"type":"integer","minimum":0,"maximum":100},"options":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"labelByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":500}}},"required":["id","labelByLocale"]}},"allowedNonAnswerStates":{"default":["refused","unknown","not_applicable"],"maxItems":4,"type":"array","items":{"type":"string","enum":["refused","unknown","not_applicable","deferred"]}},"askPolicy":{"default":{"maxAttempts":2,"allowFollowup":true,"askIfAlreadyImplied":false},"type":"object","properties":{"maxAttempts":{"default":2,"type":"integer","minimum":1,"maximum":5},"allowFollowup":{"default":true,"type":"boolean"},"askIfAlreadyImplied":{"default":false,"type":"boolean"}}},"extraction":{"default":{"allowFreeText":true,"allowInference":false,"confidenceThreshold":0.6,"confirmation":"when_ambiguous","requireEvidenceSpan":true},"type":"object","properties":{"allowFreeText":{"default":true,"type":"boolean"},"allowInference":{"default":false,"type":"boolean"},"confidenceThreshold":{"default":0.6,"type":"number","minimum":0,"maximum":1},"confirmation":{"default":"when_ambiguous","type":"string","enum":["never","when_ambiguous","always"]},"requireEvidenceSpan":{"default":true,"type":"boolean"},"allowCustomAnswer":{"type":"boolean"}}}},"required":["id","labelByLocale","valueType"]}},"goals":{"default":[],"maxItems":30,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"labelByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":500}},"internalRubric":{"default":"","type":"string","maxLength":2000},"publicPromptHintByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"anchorQuestionByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}},"moduleId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"priority":{"default":50,"type":"integer","minimum":0,"maximum":100},"requiredCoverage":{"default":0.7,"type":"number","minimum":0,"maximum":1},"required":{"default":true,"type":"boolean"},"allowedProbeKinds":{"default":["example","why","impact"],"maxItems":13,"type":"array","items":{"type":"string","enum":["example","behavior","impact","why","tradeoff","emotion","barrier","clarify","temporal_sequence","comparison","counterexample","priority","laddering"]}},"maxProbes":{"type":"integer","minimum":1,"maximum":20}},"required":["id","labelByLocale","publicPromptHintByLocale"]}},"memberCheck":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"allowCorrection":{"default":true,"type":"boolean"}}},"validation":{"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"fieldIds":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"}},"itemsPerRespondent":{"default":4,"type":"integer","minimum":1,"maximum":20},"assignmentVersion":{"default":"v1","type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"}}},"codebook":{"type":"object","properties":{"version":{"type":"string","minLength":1,"maxLength":100},"codes":{"default":[],"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"codeType":{"default":"theme","type":"string","enum":["theme","pain_point","emotional_signal","workaround","revealed_behavior","contradiction"]},"labelByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":500}},"descriptionByLocale":{"type":"object","propertyNames":{"type":"string","minLength":2,"maxLength":10},"additionalProperties":{"type":"string","minLength":1,"maxLength":2000}}},"required":["id","labelByLocale"]}},"allowEmergentCodes":{"default":true,"type":"boolean"}},"required":["version"]},"policy":{"default":{"maxExchanges":10,"maxFollowups":4,"targetFollowups":2,"maxQuestionCharacters":280,"sessionTtlMinutes":1440,"context":{"recentMessageCount":6,"summaryAfterMessages":10}},"type":"object","properties":{"maxExchanges":{"default":10,"type":"integer","minimum":1,"maximum":50},"maxFollowups":{"default":4,"type":"integer","minimum":0,"maximum":30},"targetFollowups":{"default":2,"type":"integer","minimum":0,"maximum":30},"maxQuestionCharacters":{"default":280,"type":"integer","minimum":40,"maximum":2000},"sessionTtlMinutes":{"default":1440,"type":"integer","minimum":5,"maximum":43200},"context":{"default":{"recentMessageCount":6,"summaryAfterMessages":10},"type":"object","properties":{"recentMessageCount":{"default":6,"type":"integer","minimum":1,"maximum":50},"summaryAfterMessages":{"default":10,"type":"integer","minimum":2,"maximum":100}}}}},"emergentExtraction":{"default":{"enabled":true,"captureTypes":["pain_point","motivation","barrier","preference","emotion","unexpected_topic"],"relatednessPolicy":{"onlyIfRelatedToFieldOrTopic":false,"allowNovelTheme":true,"requireEvidenceSpan":true},"followupPolicy":{"allowEmergentFollowup":false,"maxEmergentFollowupsPerSession":0}},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"captureTypes":{"default":["pain_point","motivation","barrier","preference","emotion","unexpected_topic"],"maxItems":11,"type":"array","items":{"type":"string","enum":["pain_point","motivation","barrier","preference","emotion","context","constraint","risk","contradiction","unexpected_topic","quote"]}},"relatednessPolicy":{"default":{"onlyIfRelatedToFieldOrTopic":false,"allowNovelTheme":true,"requireEvidenceSpan":true},"type":"object","properties":{"onlyIfRelatedToFieldOrTopic":{"default":false,"type":"boolean"},"allowNovelTheme":{"default":true,"type":"boolean"},"requireEvidenceSpan":{"default":true,"type":"boolean"}}},"followupPolicy":{"default":{"allowEmergentFollowup":false,"maxEmergentFollowupsPerSession":0},"type":"object","properties":{"allowEmergentFollowup":{"default":false,"type":"boolean"},"maxEmergentFollowupsPerSession":{"default":0,"type":"integer","minimum":0,"maximum":10}}}}},"experience":{"default":{"liveProfile":true,"progress":true,"allowRestart":false,"motion":"full"},"type":"object","properties":{"theme":{"type":"string","maxLength":40},"backgroundImageUrl":{"type":"string","maxLength":2000},"backgroundScrim":{"type":"number","minimum":0,"maximum":1},"liveProfile":{"default":true,"type":"boolean"},"progress":{"default":true,"type":"boolean"},"allowRestart":{"default":false,"type":"boolean"},"motion":{"default":"full","type":"string","enum":["full","reduced"]}}}}},"Form":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"slug":{"type":"string"},"status":{"type":"string","enum":["draft","published"]},"kind":{"type":"string","enum":["classic","interview"]},"draftRevision":{"type":"integer"},"draftDefinition":{"description":"Parsed by kind: classic forms expose FormDefinition, interview forms expose InterviewDefinition. Null means stored legacy drift could not be parsed.","oneOf":[{"$ref":"#/components/schemas/FormDefinition"},{"$ref":"#/components/schemas/InterviewDefinition"},{"type":"null"}]},"settings":{"$ref":"#/components/schemas/FormSettings"},"settingsSignature":{"type":["string","null"],"pattern":"^sha256:[0-9a-f]{64}$","description":"Fixed-length opaque settings digest used for optimistic concurrency. Null means stored settings drift could not be parsed."},"currentVersionId":{"type":["string","null"],"format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"FormVersionSummary":{"type":"object","description":"Metadata for one immutable published snapshot. Fetch the detail resource to read its definition.","properties":{"id":{"type":"string","format":"uuid"},"formId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["classic","interview"]},"version":{"type":"integer","minimum":1},"publishedAt":{"type":"string","format":"date-time"}},"required":["id","formId","kind","version","publishedAt"]},"FormVersionListPage":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/FormVersionSummary"}},"nextCursor":{"type":["string","null"],"description":"Opaque descending-version cursor for the next page."}},"required":["items","nextCursor"]},"FormVersion":{"type":"object","description":"One immutable published snapshot. Classic includes document-mode presentation when present; legacy interview definitions are exposed as InterviewDefinition V2. An unreadable legacy snapshot degrades to null instead of failing the whole read.","properties":{"id":{"type":"string","format":"uuid"},"formId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["classic","interview"]},"version":{"type":"integer","minimum":1},"publishedAt":{"type":"string","format":"date-time"},"definition":{"oneOf":[{"$ref":"#/components/schemas/FormDefinition"},{"$ref":"#/components/schemas/InterviewDefinition"},{"type":"null"}]}},"required":["id","formId","kind","version","publishedAt","definition"]},"PresentedOrder":{"type":"object","description":"The exact IDs shown to one respondent after choice and question randomization.","properties":{"choices":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"groups":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["choices","groups"]},"ResponsePresentation":{"type":"object","description":"Immutable presentation assignment used to render this response.","properties":{"assignmentId":{"type":"string","format":"uuid"},"order":{"$ref":"#/components/schemas/PresentedOrder"}},"required":["assignmentId","order"]},"RespondentEstimate":{"type":"object","description":"Form-scoped browser continuity estimate. The short ID is not verified identity and can be bypassed.","properties":{"id":{"type":"string","description":"Eight-character display prefix, not a global ID."},"confidence":{"type":"string","enum":["deterministic","probable","weak"]},"responseCount":{"type":"integer","minimum":1},"repeatCount":{"type":"integer","minimum":0}},"required":["id","confidence","responseCount","repeatCount"]},"Response":{"type":"object","description":"A full classic response. Request projection=full to include answers and file metadata.","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["partial","completed"]},"answers":{"type":"object","additionalProperties":true,"description":"응답 값 맵 — 키는 입력 블록 id, 값은 블록 type 에 따라 다음 형태다. 문자열: short_text·long_text·email·phone·url, 단일 선택(multiple_choice·dropdown, 값=선택지 id; 국가 dropdown=ISO 코드), privacy_consent(동의=`y`; agree_or_decline 모드 블록은 비동의=`n` 도 저장), 날짜/시간(date·datetime·time, ISO 8601 문자열). 숫자: number·rating(1..scale, 또는 zeroBased 시 0..scale-1 NPS형), 그리고 계산 필드(calculated_field, 서버 계산). 문자열 배열: checkboxes·다중 선택(선택지 id 들), ranking(1순위부터 정렬된 선택지 id 완전순열), file_upload(스토리지 object key 들; 파일 id/다운로드 URL은 Response.files 참조), date_range([시작ISO, 끝ISO]), address([우편번호, 도로명 주소, 상세 주소] 고정 3튜플). 행렬(matrix)은 행마다 별도 자식 블록이라 각 행의 id 가 개별 키로 나타난다."},"files":{"type":"array","description":"Metadata for committed uploaded files referenced by file_upload answer keys. Following downloadUrl requires scope `files:read`.","items":{"$ref":"#/components/schemas/UploadedFile"}},"formVersionId":{"type":"string","format":"uuid"},"translationSetId":{"type":["string","null"],"format":"uuid","description":"Immutable translation revision shown to the respondent, or null for a base-language response."},"responseLocale":{"type":["string","null"],"enum":["en","ko","ja",null],"description":"Locale shown when the response was submitted, or null when multilingual presentation was not used."},"completedAt":{"type":"string","format":"date-time"},"respondent":{"$ref":"#/components/schemas/RespondentEstimate"},"presentation":{"description":"Actual presentation order. Present on detail reads; null for responses without randomization.","oneOf":[{"$ref":"#/components/schemas/ResponsePresentation"},{"type":"null"}]}},"required":["id","status","answers","files","formVersionId","translationSetId","responseLocale","completedAt"]},"ClassicResponseCompact":{"type":"object","description":"Default classic response list projection. Answer values and files are intentionally omitted.","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["partial","completed"]},"formVersionId":{"type":"string","format":"uuid"},"translationSetId":{"type":["string","null"],"format":"uuid"},"responseLocale":{"type":["string","null"],"enum":["en","ko","ja",null]},"completedAt":{"type":"string","format":"date-time"},"answerCount":{"type":"integer","minimum":0},"respondent":{"$ref":"#/components/schemas/RespondentEstimate"}},"required":["id","status","formVersionId","translationSetId","responseLocale","completedAt","answerCount"]},"InterviewQuality":{"type":"object","properties":{"completionReason":{"type":["string","null"]},"exchangeCount":{"type":"integer","minimum":0},"followupCount":{"type":"integer","minimum":0}},"required":["completionReason","exchangeCount","followupCount"]},"InterviewResponseCompact":{"type":"object","description":"Default interview list projection. It never includes transcript text.","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["partial","completed"]},"formVersionId":{"type":"string","format":"uuid"},"translationSetId":{"type":["string","null"],"format":"uuid"},"responseLocale":{"type":["string","null"],"enum":["en","ko","ja",null]},"completedAt":{"type":"string","format":"date-time"},"respondent":{"$ref":"#/components/schemas/RespondentEstimate"},"interview":{"type":"object","properties":{"summary":{"type":"string"},"sentiment":{"type":"string","enum":["positive","neutral","negative"]},"transcriptCount":{"type":"integer","minimum":0},"extractedFieldCount":{"type":"integer","minimum":0},"analysisStatus":{"type":"string","enum":["pending","completed","partial","failed"]},"quality":{"$ref":"#/components/schemas/InterviewQuality"}},"required":["transcriptCount","extractedFieldCount","analysisStatus","quality"]}},"required":["id","status","formVersionId","translationSetId","responseLocale","completedAt","interview"]},"InterviewResponse":{"type":"object","description":"A full interview response. Conversational answers live under `interview`; transcript text appears only in an explicit full projection or response detail read.","properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["partial","completed"]},"formVersionId":{"type":"string","format":"uuid"},"translationSetId":{"type":["string","null"],"format":"uuid"},"responseLocale":{"type":["string","null"],"enum":["en","ko","ja",null]},"completedAt":{"type":"string","format":"date-time"},"respondent":{"$ref":"#/components/schemas/RespondentEstimate"},"interview":{"type":"object","properties":{"summary":{"type":"string"},"sentiment":{"type":"string","enum":["positive","neutral","negative"]},"keyInfo":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"},"evidenceMessageIds":{"type":"array","items":{"type":"string","format":"uuid"}}}}},"insights":{"type":"array","items":{"type":"object","additionalProperties":true}},"transcript":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["assistant","user"]},"content":{"type":"string"},"blockId":{"type":"string"},"turnId":{"type":"string"}}}},"extractedFields":{"type":"object","additionalProperties":true},"transcriptCount":{"type":"integer","minimum":0},"analysisStatus":{"type":"string","enum":["pending","completed","partial","failed"]},"quality":{"$ref":"#/components/schemas/InterviewQuality"}},"required":["transcriptCount","analysisStatus","quality","transcript"]}},"required":["id","status","formVersionId","translationSetId","responseLocale","completedAt","interview"]},"ResponseListPage":{"type":"object","properties":{"items":{"type":"array","items":{"anyOf":[{"$ref":"#/components/schemas/ClassicResponseCompact"},{"$ref":"#/components/schemas/InterviewResponseCompact"},{"$ref":"#/components/schemas/Response"},{"$ref":"#/components/schemas/InterviewResponse"}]}},"nextCursor":{"type":["string","null"],"description":"Opaque keyset cursor for the next page."}},"required":["items","nextCursor"]},"UploadedFile":{"type":"object","properties":{"key":{"type":"string","description":"Storage object key stored in the corresponding answer."},"id":{"type":"string","format":"uuid"},"filename":{"type":"string"},"downloadUrl":{"type":"string","format":"uri","description":"API route that redirects to a short-lived presigned URL. Requires `files:read`."}},"required":["key","id","filename","downloadUrl"]},"QuestionSummary":{"description":"A kind-discriminated classic-form question aggregate.","oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"choice"},"blockId":{"type":"string"},"label":{"type":"string"},"answered":{"type":"integer","minimum":0},"choices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0},"percent":{"type":"number","minimum":0,"maximum":100},"isOther":{"type":"boolean","const":true}},"required":["id","label","count","percent"]}}},"required":["kind","blockId","label","answered","choices"]},{"type":"object","properties":{"kind":{"type":"string","const":"numeric"},"blockId":{"type":"string"},"label":{"type":"string"},"answered":{"type":"integer","minimum":0},"average":{"type":"number"},"min":{"type":"number"},"max":{"type":"number"}},"required":["kind","blockId","label","answered","average","min","max"]},{"type":"object","properties":{"kind":{"type":"string","const":"text"},"blockId":{"type":"string"},"label":{"type":"string"},"answered":{"type":"integer","minimum":0},"samples":{"type":"array","items":{"type":"string"}}},"required":["kind","blockId","label","answered","samples"]},{"type":"object","properties":{"kind":{"type":"string","const":"ranking"},"blockId":{"type":"string"},"label":{"type":"string"},"answered":{"type":"integer","minimum":0},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"avgRank":{"type":"number","minimum":1},"count":{"type":"integer","minimum":0}},"required":["id","label","avgRank","count"]}}},"required":["kind","blockId","label","answered","items"]},{"type":"object","properties":{"kind":{"type":"string","const":"matrix"},"groupId":{"type":"string"},"title":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"]}},"rows":{"type":"array","items":{"type":"object","properties":{"blockId":{"type":"string"},"rowLabel":{"type":"string"},"answered":{"type":"integer","minimum":0},"counts":{"type":"object","additionalProperties":{"type":"integer","minimum":0}}},"required":["blockId","rowLabel","answered","counts"]}}},"required":["kind","groupId","title","columns","rows"]}]},"AnalyticsSummary":{"type":"object","properties":{"views":{"type":"integer","minimum":0},"submits":{"type":"integer","minimum":0},"partials":{"type":"integer","minimum":0},"bounceRate":{"type":"number","minimum":0,"maximum":1},"completionRate":{"type":"number","minimum":0,"maximum":1},"abandonmentRate":{"type":"number","minimum":0,"maximum":1},"avgDurationMs":{"type":["number","null"],"minimum":0},"deviceBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/CountBreakdown"}},"refererBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/CountBreakdown"}},"utmBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/CountBreakdown"}},"trendWindowDays":{"type":"integer","enum":[7,30]},"trend":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"views":{"type":"integer","minimum":0},"submits":{"type":"integer","minimum":0},"partials":{"type":"integer","minimum":0}},"required":["day","views","submits","partials"]}},"questionFunnel":{"type":["object","null"],"description":"Classic/document reach and drop-off from partials plus completes. Randomized responses expose arm-separated, actual-position segments instead of being folded into authored order."}},"required":["views","submits","partials","bounceRate","completionRate","abandonmentRate","avgDurationMs","deviceBreakdown","refererBreakdown","utmBreakdown","trendWindowDays","trend","questionFunnel"]},"CountBreakdown":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["label","count"]},"CrosstabAxis":{"type":"object","properties":{"blockId":{"type":"string"},"label":{"type":"string"},"type":{"type":"string"},"values":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}},"required":["id","label"]}},"multiSelect":{"type":"boolean"}},"required":["blockId","label","values","multiSelect"]},"Crosstab":{"type":"object","description":"Distinct-response crosstab. Multi-select responses count once in each selected category.","properties":{"baseN":{"type":"integer","minimum":0},"rowAxis":{"$ref":"#/components/schemas/CrosstabAxis"},"bannerAxis":{"$ref":"#/components/schemas/CrosstabAxis"},"rowBases":{"type":"object","additionalProperties":{"type":"integer","minimum":0}},"columnBases":{"type":"object","additionalProperties":{"type":"integer","minimum":0}},"cells":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"count":{"type":"integer","minimum":0},"rowPercent":{"type":"number","minimum":0},"columnPercent":{"type":"number","minimum":0},"smallSample":{"type":"boolean"}},"required":["count","rowPercent","columnPercent","smallSample"]}}},"multiSelectRule":{"type":"string","enum":["single_membership","responses_count_in_each_selected_category"]},"queryMs":{"type":"number","minimum":0}},"required":["baseN","rowAxis","bannerAxis","rowBases","columnBases","cells","multiSelectRule","queryMs"]},"ClassicResponseReport":{"type":"object","properties":{"kind":{"type":"string","const":"classic"},"summaries":{"type":"array","items":{"$ref":"#/components/schemas/QuestionSummary"}},"sampled":{"type":"integer","minimum":0},"analytics":{"oneOf":[{"$ref":"#/components/schemas/AnalyticsSummary"},{"type":"null"}]},"analyticsEnabled":{"type":"boolean"},"crosstab":{"oneOf":[{"$ref":"#/components/schemas/Crosstab"},{"type":"null"}]},"qualitativeCodes":{"type":"array","maxItems":100,"items":{"type":"object","properties":{"codebookEntryId":{"type":["string","null"]},"codeType":{"type":"string","enum":["theme","pain_point","emotional_signal","workaround","revealed_behavior","contradiction"]},"label":{"type":"string"},"count":{"type":"integer","minimum":0},"avgConfidence":{"type":["number","null"],"minimum":0,"maximum":1}},"required":["codebookEntryId","codeType","label","count","avgConfidence"]}},"qualitativeCodesTruncated":{"type":"boolean"},"respondentContinuity":{"type":"object","description":"Estimated form-scoped browser continuity for the selected response cohort, not verified identity.","properties":{"basis":{"type":"string","const":"estimated_form_scoped_browser_continuity"},"retentionDays":{"type":"integer","const":90},"trackedResponses":{"type":"integer","minimum":0},"estimatedRespondents":{"type":"integer","minimum":0},"repeatResponses":{"type":"integer","minimum":0},"byConfidence":{"type":"object","properties":{"deterministic":{"type":"integer","minimum":0},"probable":{"type":"integer","minimum":0},"weak":{"type":"integer","minimum":0}},"required":["deterministic","probable","weak"]},"caveat":{"type":"string"}},"required":["basis","retentionDays","trackedResponses","estimatedRespondents","repeatResponses","byConfidence","caveat"]}},"required":["kind","summaries","sampled","analytics","analyticsEnabled","crosstab","qualitativeCodes","qualitativeCodesTruncated"]},"InterviewFunnel":{"type":"object","description":"Session funnel cohort, using interview session createdAt within windowDays.","properties":{"started":{"type":"integer","minimum":0},"completed":{"type":"integer","minimum":0},"abandoned":{"type":"integer","minimum":0},"expired":{"type":"integer","minimum":0},"blocked":{"type":"integer","minimum":0},"inProgress":{"type":"integer","minimum":0},"completionRate":{"type":"number","minimum":0,"maximum":1},"avgExchanges":{"type":"number","minimum":0},"avgCompleted":{"type":"number","minimum":0},"avgAbandoned":{"type":"number","minimum":0},"completionReasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["reason","count"]}},"dropoff":{"type":"array","items":{"type":"object","properties":{"bucket":{"type":"string"},"count":{"type":"integer","minimum":0}},"required":["bucket","count"]}}},"required":["started","completed","abandoned","expired","blocked","inProgress","completionRate","avgExchanges","avgCompleted","avgAbandoned","completionReasons","dropoff"]},"InterviewResponseReport":{"type":"object","properties":{"kind":{"type":"string","const":"interview"},"windowDays":{"type":"integer","enum":[1,7,30,90]},"funnel":{"$ref":"#/components/schemas/InterviewFunnel"},"analysis":{"type":"object","description":"Analysis lifecycle cohort for completed response rows whose completedAt is within windowDays. It is intentionally distinct from the session-start funnel cohort.","properties":{"total":{"type":"integer","minimum":0},"completed":{"type":"integer","minimum":0},"partial":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"pending":{"type":"integer","minimum":0}},"required":["total","completed","partial","failed","pending"]},"qualitativeCodes":{"type":"array","description":"Codes attached to completed response rows whose completedAt is within windowDays.","maxItems":100,"items":{"type":"object","properties":{"codeType":{"type":"string","enum":["theme","pain_point","emotional_signal","workaround","revealed_behavior","contradiction"]},"label":{"type":"string"},"count":{"type":"integer","minimum":0},"avgConfidence":{"type":["number","null"],"minimum":0,"maximum":1}},"required":["codeType","label","count","avgConfidence"]}},"qualitativeCodesTruncated":{"type":"boolean"}},"required":["kind","windowDays","funnel","analysis","qualitativeCodes","qualitativeCodesTruncated"]},"ResponseReport":{"oneOf":[{"$ref":"#/components/schemas/ClassicResponseReport"},{"$ref":"#/components/schemas/InterviewResponseReport"}]},"InsightCandidate":{"type":"object","description":"A clustered classic-response AI insight proposed for promotion to a real field.","properties":{"key":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","description":"Number of completed responses contributing this key."},"avgConfidence":{"type":"number","description":"Mean extraction confidence across contributing responses."},"examples":{"type":"array","items":{"type":"string"},"description":"Up to 5 example extracted values."},"auto":{"type":"boolean","description":"True when frequency and average confidence cross the auto-promotion threshold."}},"required":["key","label","count","avgConfidence","examples","auto"]}}},"paths":{"/capabilities":{"get":{"summary":"Discover API authoring capabilities","x-auth-only":true,"description":"Returns the calling key's scopes and the workspace-evaluated form kinds, render modes, block types, and allowlisted authoring features. A valid key is sufficient; each mutation still enforces its own scope and feature gates.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Capabilities"}},"required":["data"]}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/usage":{"get":{"summary":"API usage for the calling key's workspace","x-auth-only":true,"description":"Any valid key (no specific scope). Returns the key's scopes, the current per-minute rate-limit budget (same values as the X-RateLimit-* response headers), and workspace request counts over the last 24h/7d.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Usage"}}}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms":{"get":{"summary":"List forms","x-scope":"forms:read","description":"Workspace forms returned as `{ items, nextCursor }`, ordered by updatedAt/id descending. Search matches title or slug; kind and status are optional exact filters.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","description":"Case-insensitive title or slug search.","schema":{"type":"string","maxLength":200}},{"name":"kind","in":"query","schema":{"type":"string","enum":["classic","interview"]}},{"name":"status","in":"query","schema":{"type":"string","enum":["draft","published"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FormListPage"}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create a form","x-scope":"forms:write","description":"`kind` selects classic (default) or interview; `definition` is validated against the matching schema (FormDefinition for classic, InterviewDefinition for interview). `definition`/`settings` are optional; omitting them starts an empty draft of that kind. A classic definition that uses a feature not enabled for the workspace (file_upload/ranking/matrix) is rejected with 422.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"kind":{"type":"string","enum":["classic","interview"],"default":"classic"},"definition":{"oneOf":[{"$ref":"#/components/schemas/FormDefinition"},{"$ref":"#/components/schemas/InterviewDefinition"}]},"settings":{"$ref":"#/components/schemas/FormSettings"}}},"example":{"title":"Contact us","definition":{"schemaVersion":1,"blocks":[{"id":"blk_fullname01","type":"short_text","label":"What's your name?","required":true,"options":{}},{"id":"blk_useremail1","type":"email","label":"Your email","required":true,"options":{}},{"id":"blk_message001","type":"long_text","label":"How can we help?","required":false,"options":{}}],"logic":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Form"}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"summary":"Get a form","x-scope":"forms:read","description":"Single form with its draft definition and settings. Supports both kinds; `draftDefinition` is a FormDefinition (classic) or InterviewDefinition (interview).","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Form"}}}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Update a form draft","x-scope":"forms:write","description":"Optimistic concurrency. Classic forms use FormDefinition; interview forms use InterviewDefinition. Returns 409 on revision conflict.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["definition","baseRevision"],"properties":{"definition":{"oneOf":[{"$ref":"#/components/schemas/FormDefinition"},{"$ref":"#/components/schemas/InterviewDefinition"}]},"baseRevision":{"type":"integer"},"title":{"type":"string"}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"summary":"Delete a form","x-scope":"forms:write","description":"Soft delete.","responses":{"204":{"description":"Deleted"},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/versions":{"get":{"summary":"List published form versions","x-scope":"forms:read","description":"Bounded immutable publication history returned as `{ items, nextCursor }` and ordered by version descending. Definitions are omitted; fetch a version detail by id to read its snapshot.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FormVersionListPage"}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/versions/{versionId}":{"get":{"summary":"Get a published form version","x-scope":"forms:read","description":"Returns the immutable definition used by responses pinned to this formVersionId.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/FormVersion"}}}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/duplicate":{"post":{"summary":"Duplicate a form","x-scope":"forms:write","x-additional-scopes":["forms:read"],"description":"Requires both forms:write and forms:read. Creates a draft of the same kind after reapplying the canonical schema, current workspace feature gates, settings gates, and image-ownership checks. Legacy readable drafts are canonicalized before the new write.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Form"}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/publish":{"post":{"summary":"Publish a form","x-scope":"forms:publish","description":"Supports both kinds. Empty forms (classic without input blocks, interview without content) return 422.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedDraftRevision":{"type":"integer","minimum":0,"description":"draftRevision returned by the latest form read."}},"required":["expectedDraftRevision"]}}}},"responses":{"200":{"description":"Published","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"versionId":{"type":"string","format":"uuid"},"version":{"type":"integer","minimum":1},"publishedAt":{"type":"string","format":"date-time"}},"required":["versionId","version","publishedAt"]}}}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/unpublish":{"post":{"summary":"Unpublish a form","x-scope":"forms:publish","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedDraftRevision":{"type":"integer","minimum":0,"description":"draftRevision returned by the latest form read."}},"required":["expectedDraftRevision"]}}}},"responses":{"200":{"description":"Unpublished"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/slug":{"patch":{"summary":"Change the public slug","x-scope":"forms:write","description":"Requires the `forms.custom-slug` feature.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/settings":{"patch":{"summary":"Replace form settings","x-scope":"forms:write","description":"Replaces theme, completion, submission, and document settings using optimistic concurrency. Pass the settingsSignature returned by GET /forms/{id} or the preceding successful write.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["settings","expectedSettingsSignature"],"properties":{"settings":{"$ref":"#/components/schemas/FormSettings"},"expectedSettingsSignature":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$","maxLength":71,"description":"Opaque digest from the latest settings read or write."}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"settings":{"$ref":"#/components/schemas/FormSettings"},"settingsSignature":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["settings","settingsSignature"]}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Settings changed concurrently. error.details.settingsSignature contains the current signature when the form still exists.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"error":{"type":"object","properties":{"code":{"type":"string","const":"conflict"},"message":{"type":"string"},"details":{"type":"object","properties":{"settingsSignature":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"}},"required":["settingsSignature"]}},"required":["code","message"]}},"required":["ok","error"]}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/assets":{"post":{"summary":"Upload an authoring image asset","x-scope":"assets:write","description":"Uploads one image for this form. The server validates PNG, JPEG, GIF, or WebP by magic bytes and caps the file at 5 MiB. The returned key may be used by image blocks, choice images, logos, and document covers.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"PNG, JPEG, GIF, or WebP; maximum 5 MiB."}},"required":["file"]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"key":{"type":"string","pattern":"^form-images/"}},"required":["key"]}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/responses":{"get":{"summary":"List responses","x-scope":"responses:read","description":"Kind-aware, filtered keyset page returned as `{ items, nextCursor }`. Compact is the default and never includes interview transcript text; use projection=full for answers/files or transcript. status=partial additionally requires `responses:partial:read` and the partial-submissions feature. Partial responses are a live mutable view, so cursor traversal is best-effort rather than snapshot-isolated.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"projection","in":"query","schema":{"type":"string","enum":["compact","full"],"default":"compact"}},{"name":"status","in":"query","schema":{"type":"string","enum":["completed","partial"],"default":"completed"}},{"name":"from","in":"query","description":"Inclusive start date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Inclusive end date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"tz","in":"query","description":"Client UTC offset in minutes, east positive (KST=540). Used only with from/to, clamped to -840..840, and ignored by interview reports.","schema":{"type":"integer","minimum":-840,"maximum":840,"default":0}},{"name":"q","in":"query","description":"Case-insensitive answer search. Response lists search classic answers or interview summary/extracted fields, never transcript; classic aggregate endpoints search answers and interview reports ignore q.","schema":{"type":"string","maxLength":200}},{"name":"segmentBlock","in":"query","description":"Classic-only stable block ID used by an answer segment. Requires at least one segmentValue.","schema":{"type":"string","maxLength":128}},{"name":"segmentValue","in":"query","description":"Classic-only stable stored answer code. Repeat to match any supplied value.","schema":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":500}},"style":"form","explode":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ResponseListPage"}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/reports":{"get":{"summary":"Get a kind-aware response report","x-scope":"responses:read","description":"Classic forms return per-question and forms.scoring score summaries plus optional analytics.basic aggregates. Interview forms return the current V2 funnel, analysis coverage, and qualitative-code aggregates. Classic text summaries can contain recent answer samples for responses:read clients; interview reports never contain transcript text. The q filter applies to classic question summaries, while analytics remains the selected date cohort.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"days","in":"query","description":"Interview lookback window. Ignored by classic reports.","schema":{"type":"integer","enum":[1,7,30,90],"default":30}},{"name":"from","in":"query","description":"Inclusive start date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Inclusive end date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"tz","in":"query","description":"Client UTC offset in minutes, east positive (KST=540). Used only with from/to, clamped to -840..840, and ignored by interview reports.","schema":{"type":"integer","minimum":-840,"maximum":840,"default":0}},{"name":"q","in":"query","description":"Case-insensitive answer search. Response lists search classic answers or interview summary/extracted fields, never transcript; classic aggregate endpoints search answers and interview reports ignore q.","schema":{"type":"string","maxLength":200}},{"name":"segmentBlock","in":"query","description":"Classic-only stable block ID used by an answer segment. Requires at least one segmentValue.","schema":{"type":"string","maxLength":128}},{"name":"segmentValue","in":"query","description":"Classic-only stable stored answer code. Repeat to match any supplied value.","schema":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":500}},"style":"form","explode":true},{"name":"row","in":"query","description":"Classic-only crosstab row-axis block ID or score:<scoreId>. Must be supplied with banner.","schema":{"type":"string","maxLength":128}},{"name":"banner","in":"query","description":"Classic-only crosstab banner-axis block ID or score:<scoreId>. Must be supplied with row.","schema":{"type":"string","maxLength":128}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ResponseReport"}},"required":["data"]}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/responses/summary":{"get":{"summary":"Response summary","x-scope":"responses:read","description":"Per-question aggregates plus numeric score summaries when forms.scoring is enabled. Classic forms only; interview forms return 409 (use GET /forms/{id}/reports or /forms/{id}/interview-analytics for Interview V2).","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"from","in":"query","description":"Inclusive start date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Inclusive end date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"tz","in":"query","description":"Client UTC offset in minutes, east positive (KST=540). Used only with from/to, clamped to -840..840, and ignored by interview reports.","schema":{"type":"integer","minimum":-840,"maximum":840,"default":0}},{"name":"q","in":"query","description":"Case-insensitive answer search. Response lists search classic answers or interview summary/extracted fields, never transcript; classic aggregate endpoints search answers and interview reports ignore q.","schema":{"type":"string","maxLength":200}},{"name":"segmentBlock","in":"query","description":"Classic-only stable block ID used by an answer segment. Requires at least one segmentValue.","schema":{"type":"string","maxLength":128}},{"name":"segmentValue","in":"query","description":"Classic-only stable stored answer code. Repeat to match any supplied value.","schema":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":500}},"style":"form","explode":true}],"responses":{"200":{"description":"OK"},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/responses/{responseId}":{"get":{"summary":"Get a response","x-scope":"responses:read","description":"Classic forms return a Response; interview forms return an InterviewResponse.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"responseId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/Response"},{"$ref":"#/components/schemas/InterviewResponse"}]}}}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/responses.csv":{"get":{"summary":"Export responses as CSV","x-scope":"responses:read","description":"Exports completed responses. Classic forms export stable block-id variables and support label/code values, forms.scoring adds stable numeric score_<id> variables, wide/long layout, and a conservative deidentified projection. File link columns point to the API file download route; following those links requires `files:read`. Interview forms export conversation summary, extracted fields, qualitative themes, and transcript.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"values","in":"query","schema":{"type":"string","enum":["labels","codes"]},"description":"Classic forms only. Use stable stored codes instead of display labels."},{"name":"layout","in":"query","schema":{"type":"string","enum":["wide","long"]},"description":"Classic forms only. Long layout emits one row per response variable."},{"name":"privacy","in":"query","schema":{"type":"string","enum":["full","deidentified"]},"description":"Classic forms only. Deidentified exports remove direct identifiers and mask quasi-identifiers."},{"name":"from","in":"query","description":"Inclusive start date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","description":"Inclusive end date in the client's local calendar. Applies to response lists and classic aggregate endpoints; interview reports use days.","schema":{"type":"string","format":"date"}},{"name":"tz","in":"query","description":"Client UTC offset in minutes, east positive (KST=540). Used only with from/to, clamped to -840..840, and ignored by interview reports.","schema":{"type":"integer","minimum":-840,"maximum":840,"default":0}},{"name":"q","in":"query","description":"Case-insensitive answer search. Response lists search classic answers or interview summary/extracted fields, never transcript; classic aggregate endpoints search answers and interview reports ignore q.","schema":{"type":"string","maxLength":200}},{"name":"segmentBlock","in":"query","description":"Classic-only stable block ID used by an answer segment. Requires at least one segmentValue.","schema":{"type":"string","maxLength":128}},{"name":"segmentValue","in":"query","description":"Classic-only stable stored answer code. Repeat to match any supplied value.","schema":{"type":"array","maxItems":50,"items":{"type":"string","maxLength":500}},"style":"form","explode":true}],"responses":{"200":{"description":"CSV stream","content":{"text/csv":{}}},"422":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/insights":{"get":{"summary":"Classic response insight candidates","x-scope":"responses:read","description":"Aggregates AI-extracted insights from completed classic responses into field-promotion candidates (frequency × confidence). `auto` candidates have crossed the auto-promotion threshold. classic forms only — interview forms return 409.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"candidates":{"type":"array","items":{"$ref":"#/components/schemas/InsightCandidate"}},"truncated":{"type":"boolean","description":"True when the completed-response scan hit its row cap and the aggregate may be partial."}},"required":["candidates","truncated"]}}}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/interview-analytics":{"get":{"summary":"Get the live Interview V2 response report","x-scope":"responses:read","description":"Breaking v1 contract: computes the current Interview V2 funnel, analysis coverage, and qualitative-code aggregates from authoritative tables. It does not read the retired legacy aggregate projection, trigger analysis jobs, or return transcripts. Classic forms return 409.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"days","in":"query","description":"Lookback window in days.","schema":{"type":"integer","enum":[1,7,30,90],"default":30}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/InterviewResponseReport"}},"required":["data"]}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forms/{id}/files/{fileId}":{"get":{"summary":"Download an uploaded file","x-scope":"files:read","description":"Redirects (302) to a short-lived presigned URL.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"302":{"description":"Redirect to file"},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}