{"openapi":"3.1.0","info":{"title":"Last Seen Alive API","description":"Evidence-first identification triage for unidentified archival film fragments.\n\nSend a fragment; get back a dossier: typed claims, the source behind each one,\nthe contradictions found against it, and a deterministic gate showing exactly\nwhich evidence thresholds passed. An abstention is a valid, successful outcome\nand returns HTTP 200.\n\n**Access.** `POST /v1/keys` with `{\"tier\":\"judge\"}` returns a 60-day key with no\nemail and no signup. Send it as `Authorization: Bearer <key>`.\n\n**Two ways in.** Run one of the ten public Library of Congress demo fragments\nvia `POST /v1/identify`, or send your own file to `POST /v1/investigate`.\n\n**What this is not.** It is not an attribution authority. Every identification\nrequires an archivist; the API can never return a confirmed identity.","version":"1.0.0"},"paths":{"/health":{"get":{"tags":["Health"],"summary":"Liveness","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/health/integrations":{"get":{"tags":["Health"],"summary":"Per-integration runtime status","description":"Reports whether each sponsor runtime is genuinely reachable from this service. A failing integration is reported as failing; nothing here is optimistic.","operationId":"health_integrations_health_integrations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Integrations Health Integrations Get"}}}}}}},"/v1/keys":{"post":{"tags":["Access"],"summary":"Mint an API key","description":"Returns a signed, stateless key. Judges need no email. The key is shown once and is never stored server-side; it verifies on every instance and survives restarts.","operationId":"create_key_v1_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Key V1 Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eval/latest":{"get":{"tags":["Evaluation"],"summary":"Latest frozen evaluation report","operationId":"latest_eval_v1_eval_latest_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Latest Eval V1 Eval Latest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stack":{"get":{"tags":["Health"],"summary":"Every sponsor service this product runs on","description":"Each entry names the module and function that calls the service, what it does, and whether it is reachable right now. This is what the stack ribbon on every page reads from.","operationId":"stack_v1_stack_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stack V1 Stack Get"}}}}}}},"/v1/presets":{"get":{"tags":["Presets"],"summary":"List the public demo fragments","description":"Ten 50-second fragments from the Library of Congress National Screening Room, all United States public domain. Five are runnable; five are sealed holdouts listed with their hashes so the set cannot be quietly changed.","operationId":"list_presets_v1_presets_get","parameters":[{"name":"split","in":"query","required":false,"schema":{"anyOf":[{"enum":["dev","holdout"],"type":"string"},{"type":"null"}],"title":"Split"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Presets V1 Presets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/presets/{case_id}":{"get":{"tags":["Presets"],"summary":"One demo fragment","operationId":"get_preset_v1_presets__case_id__get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Preset V1 Presets  Case Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/presets/{case_id}/media":{"get":{"tags":["Presets"],"summary":"Watch or download a demo fragment","description":"Serves the exact bytes whose SHA-256 is published in the manifest, with range requests supported so it can be scrubbed in a browser. Add `?download=1` for a file download. Held-out fragments return 423.","operationId":"preset_media_v1_presets__case_id__media_get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/example/dossier":{"get":{"tags":["Presets"],"summary":"A worked example of an investigation dossier","description":"Returns a complete dossier in the exact shape a real investigation returns, so the output can be read and integrated against before a live run is possible. **This is not a real investigation.** The fragment is invented, the candidate film does not exist, and every source is an RFC 2606 reserved domain that can never resolve. It is built by the same evidence builder and the same deterministic gate that serve a live run, so the schema and every threshold are genuinely computed, so the example cannot drift away from what the software actually does. `meta.example` and `data.example` are both `true`.","operationId":"example_dossier_v1_example_dossier_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Example Dossier V1 Example Dossier Get"}}}}}}},"/v1/eval/ablation":{"get":{"tags":["Evaluation"],"summary":"Control-arm result: what Gemini alone does with the same fragments","description":"A measured baseline. The same five development fragments given to Gemini with no web access, no citation checking and no gate, three samples each. It contradicted the assumption it was built to test: the model declined to name a film on both fragments whose evidence cannot support one, so false-confident identifications were zero. What it did instead was return a different title on each repeat, every one at high confidence and none with a citable source. See docs/ABLATION.md.","operationId":"evaluation_ablation_v1_eval_ablation_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluation Ablation V1 Eval Ablation Get"}}}}}}},"/v1/standards":{"get":{"tags":["Evaluation"],"summary":"Conformance to published archival cataloguing standards","description":"Seven requirements quoted from the FIAF Moving Image Cataloguing Manual and EN 15907, each with the page it comes from, how this system meets it, and the tests that check it. Five conform, two only partially, and one was failing until the exercise ran. No archivist has reviewed this system; conformance testing is weaker evidence than a practitioner review and is not offered as a substitute.","operationId":"standards_v1_standards_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Standards V1 Standards Get"}}}}}}},"/v1/eval/stability":{"get":{"tags":["Evaluation"],"summary":"How stable the verdict is when the input does not change","description":"The Arm C figures are a single pass. A second pass over the same five fragments disagreed with it on four of five verdicts and reproduced neither of its two correct identities. This reports every pass ever run on the development split, including the bad ones, so that a single flattering sample cannot be mistaken for a measurement. The property that did hold across every run: `probable` was never reached, because that threshold requires a human the API cannot supply.","operationId":"evaluation_stability_v1_eval_stability_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluation Stability V1 Eval Stability Get"}}}}}}},"/v1/eval/fix-comparison":{"get":{"tags":["Evaluation"],"summary":"What changed when the two defects found by the stability study were fixed","description":"The stability study found two defects: candidates that were not films, and hypotheses nothing ever opposed. Both were fixed. This reports the runs before and after, scored by the same scorer. One defect is gone; the other is not, and the second result is the more interesting one -- constraining the candidate type turned disguised failures into visible wrong answers rather than removing them. Sample sizes are small and the report says so.","operationId":"evaluation_fix_comparison_v1_eval_fix_comparison_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluation Fix Comparison V1 Eval Fix Comparison Get"}}}}}}},"/v1/practice":{"get":{"tags":["Evaluation"],"summary":"Published practitioner objections, and how this system answers them","description":"No archivist has reviewed this project. This is the nearest honest substitute: demands made in peer-reviewed studies of AI cataloguing, in the FIAF manual, and in the Library of Congress's own account of how it identifies unidentified film -- each quoted verbatim, cited, and paired with the mechanism here that answers it. Four entries are unanswered or only partly answered, including the missing archivist review itself. Nobody cited has seen this system or endorses it.","operationId":"practice_v1_practice_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Practice V1 Practice Get"}}}}}}},"/v1/dossiers":{"get":{"tags":["Evaluation"],"summary":"Complete dossiers from real runs on the development split","description":"The full output of an investigation takes minutes to produce. These are captured from real runs of this deployed service against the public demo fragments, unedited, so the product can be read without waiting for one. Held-out cases are never included.","operationId":"dossiers_v1_dossiers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dossiers V1 Dossiers Get"}}}}}}},"/v1/dossiers/{case_id}":{"get":{"tags":["Evaluation"],"summary":"One complete captured dossier","description":"The entire response from a real run, including every claim, every citation, which citations survived the live audit, and the seven gate thresholds.","operationId":"dossier_v1_dossiers__case_id__get","parameters":[{"name":"case_id","in":"path","required":true,"schema":{"type":"string","title":"Case Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dossier V1 Dossiers  Case Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/census/{findall_id}":{"get":{"tags":["Investigate"],"summary":"Collect a named-catalogue census","description":"An investigation commissions a Parallel FindAll census of the archives whose own catalogues list the leading candidate. That genuinely takes minutes to an hour, so the dossier does not block on it: it returns a handle and you collect the result here. Poll until `status` is no longer active.","operationId":"collect_census_v1_census__findall_id__get","parameters":[{"name":"findall_id","in":"path","required":true,"schema":{"type":"string","title":"Findall Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Collect Census V1 Census  Findall Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/eval/arm-c":{"get":{"tags":["Evaluation"],"summary":"Full-system result on the development split","description":"The third arm of the ablation, run once the Parallel credential was attached. Same five development fragments, all six Parallel surfaces live. Two of three identifiable cases were surfaced correctly against the sealed answer key, with zero false-confident identifications and one honest miss. The held-out split is untouched.","operationId":"evaluation_arm_c_v1_eval_arm_c_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluation Arm C V1 Eval Arm C Get"}}}}}}},"/v1/eval/corpus":{"get":{"tags":["Evaluation"],"summary":"Benchmark corpus state","operationId":"evaluation_corpus_v1_eval_corpus_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluation Corpus V1 Eval Corpus Get"}}}}}}},"/v1/eval/manifest":{"get":{"tags":["Evaluation"],"summary":"Download the full public manifest","description":"The unedited manifest, including each case's selection rationale, transforms and SHA-256. The site's own descriptions are written to avoid quoting the discriminating evidence; this file does not hold back.","operationId":"evaluation_manifest_v1_eval_manifest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/identify":{"post":{"tags":["Investigate"],"summary":"Investigate a public demo fragment","description":"Runs the full five-role workflow on one of the runnable presets. An abstention is a correct outcome and returns 200 with `meta.verdict = \"abstain\"`.","operationId":"identify_v1_identify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Identify V1 Identify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/investigate":{"post":{"tags":["Investigate"],"summary":"Investigate your own fragment","description":"Upload a short excerpt of an unidentified fragment (video or a single frame) and get the same dossier the presets produce.\n\nThe file is held in memory for the length of the request and is never written to disk, logged, or used to train anything. Excerpts of it do travel to Google Cloud (Gemini reads the frames) and text drawn from it travels to Parallel as search queries. That is what the investigation is. Do not upload material you are not free to send to those two services.\n\nLimits: 48 MB, and one of mp4, mov, webm, mkv, jpeg, png, webp.","operationId":"investigate_v1_investigate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_investigate_v1_investigate_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Investigate V1 Investigate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watch":{"post":{"tags":["Investigate"],"summary":"Leave a standing watch on an unidentified fragment","description":"Registers a Parallel Monitor on the verbatim strings visible in a fragment the evidence could not identify. An abstention is the right answer today and the wrong answer forever; archives digitise continuously. This is how the fragment gets looked at again.","operationId":"watch_v1_watch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Watch V1 Watch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_investigate_v1_investigate_post":{"properties":{"fragment":{"type":"string","contentMediaType":"application/octet-stream","title":"Fragment","description":"The fragment. A 30-60 second excerpt works best."},"provided_label":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Provided Label","description":"Any title your catalogue currently carries for this material, if it has one. Supplying it lets the workflow try to contradict it rather than inherit it. A catalogue title, not instructions: this text reaches the model, and it is capped and quoted rather than trusted."},"depth":{"type":"string","enum":["standard","deep"],"title":"Depth","default":"standard"}},"type":"object","required":["fragment"],"title":"Body_investigate_v1_investigate_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentifyRequest":{"properties":{"sample_id":{"type":"string","pattern":"^[DH][0-9]{2}$","title":"Sample Id","description":"Preset case id, e.g. `D02`. Held-out `H*` cases return 423.","examples":["D02"]},"depth":{"type":"string","enum":["standard","deep"],"title":"Depth","description":"`deep` additionally fans out one independent Parallel Task Group run per candidate whose only job is to disprove it. Slower, and much harder on a weak candidate.","default":"standard"}},"type":"object","required":["sample_id"],"title":"IdentifyRequest"},"KeyRequest":{"properties":{"tier":{"type":"string","enum":["evaluation","judge"],"title":"Tier","description":"`judge` mints a 60-day key with no email. `evaluation` requires an email.","default":"judge"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Required for the `evaluation` tier only."}},"type":"object","title":"KeyRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WatchRequest":{"properties":{"fragment_label":{"type":"string","maxLength":120,"title":"Fragment Label","description":"How this fragment is known in your catalogue.","examples":["Unidentified reel, can 41B"]},"rare_strings":{"items":{"type":"string"},"type":"array","maxItems":5,"minItems":1,"title":"Rare Strings","description":"Verbatim strings observed in the fragment. Take these from `cold_case.watchable_strings` on an investigation response."},"frequency":{"type":"string","enum":["daily","weekly","monthly"],"title":"Frequency","default":"weekly"}},"type":"object","required":["fragment_label","rare_strings"],"title":"WatchRequest"}}},"tags":[{"name":"Access","description":"Mint an API key. No signup, no email for judges."},{"name":"Health","description":"Liveness and per-integration runtime status."},{"name":"Presets","description":"Public demo fragments: metadata, media, and results."},{"name":"Investigate","description":"Run the agent workflow on a preset or your own file."},{"name":"Evaluation","description":"Benchmark corpus state and frozen results."}]}