Skip to the content

Door

Reference

Every path the door answers, rendered from the document it publishes at build and refresh time: never a second, hand-kept copy of the same facts.

partner

GET /partner/v1/fighters/search

Resolve a fighter: up to 10 candidates with a confidence band and the anchors that matched

Parameters

NameInRequiredType
namequeryRequiredstring
hometownqueryOptionalstring
divisionqueryOptionalstring
disciplinequeryOptionalstring (enum)

Responses

200 OK

Response schema

  • response object (SearchResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • query object · Required
      • name string
      • hometown string
      • division string
      • discipline string
    • candidates array · Required
      • item object (SearchCandidate)
        • id string (uuid) · Required
        • slug string · Required
        • name string · Required
        • hometown object (Hometown) · Required

          The tree stops here: this branch repeats a schema already open above it.

        • disciplines array · Required
          • item string · One of: BOXING, MMA, MUAY_THAI, KICKBOXING, BARE_KNUCKLE, SLAP, OTHER
        • commissions array · Required
          • item string
        • boutsOnFile integer · Required

          A count of verified bouts on file — never a record.

        • lastBoutDate string (date), nullable · Required
        • confidence string · Required · One of: high, medium, low
        • matched array · Required
          • item string · One of: name_exact, name_alias, name_partial, hometown, region, discipline, division

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

GET /partner/v1/claimed/lookup

Batched lookup of claimed subjects by name-hash prefix or kind:handle pair (up to 200 of each): the record-level flag, the name and the page link

A client never sends a name: it sends the first 5 hex characters of sha256 of the folded display name in `p`, and/or `kind:handle` pairs in `h`, and matches the full hash locally. At least one of the two is required; each takes up to 200 items on a key (the tier is the only difference from the public route). `matches` holds only published, offerable subjects; `handles` echoes the asked pairs IN ORDER, with `found: false` byte-identical for an unknown, an unpublished, a taken-down, a reserved and an ill-shaped handle. A keyed answer is nobody's page: the class guard marks it private and not to be stored (the PUBLIC route at `/claimed/lookup` is the one a shared cache may keep, for 60 seconds). A store that cannot answer is a 503 for the WHOLE answer: an outage is never read as an absent record.

Parameters

NameInRequiredType
hqueryOptionalstring
pqueryOptionalstring

Responses

200 OK

Response schema

  • response object (ClaimedLookupView)

    The batched lookup answer. Not an envelope: this route answers the lookup shape, the same on both tiers. A cut list is never signalled — treat a batch answer as complete.

    • prefixLength integer · Required

      How many hex characters of the hash a `p` item carries.

    • matches array · Required
      • item object (ClaimedLookupMatch)

        One published subject whose name hash starts with an asked prefix. The flag, the name and the link: no fact list.

        • hash string · Required

          sha256 of the folded display name, 64 lower-case hex — match your own hash against this.

        • kind string · Required · One of: person, organization
        • handle string · Required
        • displayName string · Required
        • url string · Required

          The record's public page.

        • recordStatus object (ClaimedRecordStatus) · Required

          The tree stops here: this branch repeats a schema already open above it.

    • handles array · Required
      • item object (ClaimedLookupHandle)

        An asked (kind, handle) pair, echoed in the asked order. `found: false` is ONE shape — byte for byte — for an unknown, an unpublished, a taken-down, a reserved and an ill-shaped handle.

        • kind string · Required · One of: person, organization
        • handle string · Required
        • found boolean · Required
        • displayName string

          Present only when found.

        • url string

          Present only when found.

        • recordStatus object

          Present only when found.

          • status string · Required · One of: verified, reported, subject_confirmed, subject_corrected, disputed
          • label string · Required

            The status in words, as the page says it.

          • lastReviewed string (date-time), nullable · Required
          • document object, nullable · Required

            The tree stops here: this branch repeats a schema already open above it.

    • checkedAt string (date-time) · Required

      When this answer was read: every badge says when it was checked.

400 Give hash prefixes of five hex characters, or kind:handle pairs, within the batch size of your tier.

Response schema

No response body.

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

503 The store could not answer. The WHOLE answer is 503 — never a partial list and never an empty `matches`.

Response schema

No response body.

GET /partner/v1/fighters/{id}

Identity + the verified record (and the reported grade when released), never summed; with the signed record-status link

Parameters

NameInRequiredType
idpathRequiredstring
cursorqueryOptionalstring

Responses

200 OK

Response schema

  • response object (FighterRecordResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • fighter object · Required
      • id string (uuid)
      • slug string
      • pagePath string
      • name string
      • aliases array
        • item string
      • hometown object (Hometown)
        • city string, nullable
        • region string, nullable
        • country string, nullable
      • division object, nullable
        • value string
        • publisher string
      • disciplines array
        • item string
      • claimedHandle string, nullable
    • record object · Required
      • status object · Required

        The status of the record as a whole: disputed if any fight is, else corrected if any fight is, else confirmed if the athlete is on file for the record, else verified.

        • status string · Required · One of: verified, reported, subject_confirmed, subject_corrected, disputed

          verified: read from the commission's own document. reported: compiled from the open web (the reported grade only). subject_confirmed: the athlete who claimed the record confirmed it. subject_corrected: a correction the athlete asked for was accepted. disputed: a dispute is open.

        • label string · Required

          The status in words, as a page says it.

        • lastReviewed string (date-time), nullable · Required

          The newest review on file: when the document was read, when the athlete confirmed the fight, when the athlete filed a correction that is still open, when an operator ruled on a correction (accepted or dismissed — a dismissal changes no status and is still a review); on a record, also when the athlete was put on file for it. Null when none is on file.

        • document object, nullable · Required

          The document the status rests on; null for a grade that has none. At record level, the newest document on the record.

          • url string · Required

            Relative to the base URL; streams the commission's own document.

          • sha256 string · Required
      • verified object · Required
        • tally object (VerifiedTally)
          • wins integer · Required
          • losses integer · Required
          • draws integer · Required
          • nc integer · Required
          • onFileFrom string (date), nullable · Required
          • label string · Required
          • bouts integer · Required
        • bouts array
          • item object (VerifiedBout)

            The tree stops here: this branch repeats a schema already open above it.

        • nextCursor string, nullable
      • reported object

        Present only when the reported grade is released on the server. Never summed into verified.

        • count integer
        • bouts array
          • item object (ReportedBout)

            The tree stops here: this branch repeats a schema already open above it.

      • statusLink object, nullable

        Additive: the signed receipt for `status`, so a row you store carries a token any holder of the published key can check offline. Null (never an error) when the signing key is unavailable or the page cannot be followed — the record is returned either way. A sandbox key answers null.

        • slug string · Required

          The LIVE slug the link was issued for (a page that moved is followed once).

        • fighterId string (uuid) · Required
        • recordStatus object (RecordStatusFlag) · Required

          The record status: DERIVED at read time from what is on file — the commission's document, the athlete's own confirmation, a correction the athlete filed and an operator accepted, a dispute that is open. It says only THAT a record or a fight is confirmed, corrected or disputed — never why, and never by whom. A dispute never removes the fact: a disputed fight stays in the list with its document. A value is never renamed or reused.

          • status string · Required · One of: verified, reported, subject_confirmed, subject_corrected, disputed

            verified: read from the commission's own document. reported: compiled from the open web (the reported grade only). subject_confirmed: the athlete who claimed the record confirmed it. subject_corrected: a correction the athlete asked for was accepted. disputed: a dispute is open.

          • label string · Required

            The status in words, as a page says it.

          • lastReviewed string (date-time), nullable · Required

            The newest review on file: when the document was read, when the athlete confirmed the fight, when the athlete filed a correction that is still open, when an operator ruled on a correction (accepted or dismissed — a dismissal changes no status and is still a review); on a record, also when the athlete was put on file for it. Null when none is on file.

          • document object, nullable · Required

            The tree stops here: this branch repeats a schema already open above it.

        • token string · Required

          The compact JWS: header.claims.signature, base64url.

        • expiresAt string (date-time) · Required
        • pageUrl string · Required

          Absolute: the subject's public page, carrying the token.

        • badgePath string · Required

          RELATIVE to the base URL: the SVG badge for this token.

        • vocabulary string · Required

          What the status value is a term of.

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

GET /partner/v1/fighters/{id}/bouts

The next page of verified bouts (cursor, ≤ 50)

Parameters

NameInRequiredType
idpathRequiredstring
cursorqueryOptionalstring

Responses

200 OK

Response schema

  • response object (BoutsPageResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • fighterId string
    • bouts array
      • item object (VerifiedBout)
        • date string (date) · Required
        • opponent object, nullable · Required
          • id string, nullable
          • slug string, nullable
          • name string
        • result string · Required · One of: W, L, D, NC, SCHEDULED, UNKNOWN
        • method string, nullable · Required
        • rounds object · Required
          • ended integer, nullable
        • discipline string · Required
        • amateur boolean · Required
        • commission string · Required
        • event object · Required
          • name string, nullable
          • city string, nullable
          • region string, nullable
          • date string (date)
        • document object · Required
          • url string

            Relative to the base URL; streams the commission's own document.

          • sha256 string
        • recordStatus object · Required

          This fight's record status. Its document is the same reference as `document`.

          • status string · Required · One of: verified, reported, subject_confirmed, subject_corrected, disputed

            verified: read from the commission's own document. reported: compiled from the open web (the reported grade only). subject_confirmed: the athlete who claimed the record confirmed it. subject_corrected: a correction the athlete asked for was accepted. disputed: a dispute is open.

          • label string · Required

            The status in words, as a page says it.

          • lastReviewed string (date-time), nullable · Required

            The newest review on file: when the document was read, when the athlete confirmed the fight, when the athlete filed a correction that is still open, when an operator ruled on a correction (accepted or dismissed — a dismissal changes no status and is still a review); on a record, also when the athlete was put on file for it. Null when none is on file.

          • document object, nullable · Required

            The tree stops here: this branch repeats a schema already open above it.

    • nextCursor string, nullable

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

GET /partner/v1/fighters/{id}/clearance

What our sources say: suspensions on file, last bout, coverage, and a state — facts, not advice

Parameters

NameInRequiredType
idpathRequiredstring
regionqueryOptionalstring

Responses

200 OK

Response schema

  • response object (ClearanceResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • fighterId string · Required
    • state string · Required · One of: suspension_on_file, no_suspension_on_file, insufficient_coverage
    • suspensions array · Required
      • item object (Suspension)
        • until string (date)
        • reasonAsPrinted string, nullable
        • commission string
        • sourceDocument object
          • url string
          • sha256 string
        • readAt string (date-time)
        • bout object
          • date string (date)
          • opponentName string, nullable
        • current boolean
    • lastBout object, nullable · Required
      • date string
      • result string
      • method string, nullable
      • commission string
    • daysSinceLastBout integer, nullable · Required
    • koLossWithin90Days boolean · Required
    • coverage array · Required
      • item object (CoverageRow)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
        • earliest string (date), nullable
        • latest string (date), nullable
        • bouts integer
    • regionAsked object, nullable · Required
      • region string
      • covered boolean
    • recordStatus object · Required

      The status of the fighter's record as a whole — the same answer `GET /fighters/{id}` gives in `record.status`.

      • status string · Required · One of: verified, reported, subject_confirmed, subject_corrected, disputed

        verified: read from the commission's own document. reported: compiled from the open web (the reported grade only). subject_confirmed: the athlete who claimed the record confirmed it. subject_corrected: a correction the athlete asked for was accepted. disputed: a dispute is open.

      • label string · Required

        The status in words, as a page says it.

      • lastReviewed string (date-time), nullable · Required

        The newest review on file: when the document was read, when the athlete confirmed the fight, when the athlete filed a correction that is still open, when an operator ruled on a correction (accepted or dismissed — a dismissal changes no status and is still a review); on a record, also when the athlete was put on file for it. Null when none is on file.

      • document object, nullable · Required

        The document the status rests on; null for a grade that has none. At record level, the newest document on the record.

        • url string · Required

          Relative to the base URL; streams the commission's own document.

        • sha256 string · Required

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

GET /partner/v1/providers/{npi}/clearance

What NPPES and OIG LEIE say about a provider: exclusions on file, name-only candidates, and deactivation — facts, not advice

Parameters

NameInRequiredType
npipathRequiredstring

Responses

200 OK

Response schema

  • response object (ProviderClearanceResponse)

    The provider clearance answer: what NPPES and OIG LEIE say about one provider, as of the sources read. asOf/sources/notice are the envelope's own fields (asOf is this read's own time; sources names each source in the PartnerSource shape). listDate is the OIG LEIE file's own published date, the date `excluded` is answered as of. provenance lists the NPPES and OIG LEIE source files this answer was built from (issuer, file name, sha256 digest, publish date). receipt is minted over this response body (receipt itself excluded from what it digests).

    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • npi string · Required
    • excluded oneOf · Required

      true when at least one NPI-matched exclusion is in force as of listDate (this read's date when listDate is null) — no reinstatement date, or one after it; "possible" when none is but at least one in-force name-only candidate is listed in possibleExclusions; false otherwise.

      • option 1 boolean
      • option 2 string · One of: possible
    • deactivated boolean · Required
    • exclusions array · Required
      • item object (ProviderExclusion)
        • grade string · Required · One of: published
        • lastName string, nullable · Required
        • firstName string, nullable · Required
        • middleName string, nullable · Required
        • businessName string, nullable · Required
        • general string, nullable · Required
        • specialty string, nullable · Required
        • npi string, nullable · Required
        • city string, nullable · Required
        • state string, nullable · Required
        • zip string, nullable · Required
        • exclusionType string, nullable · Required
        • exclusionDate string (date), nullable · Required
        • reinstatementDate string (date), nullable · Required
        • waiverDate string (date), nullable · Required
        • waiverState string, nullable · Required
    • possibleExclusions array · Required

      OIG LEIE rows with no NPI on file whose printed name matches this provider, listed only while in force as of listDate. A doubt, never a finding.

      • item object (ProviderPossibleExclusion)
        • grade string · Required · One of: possible
        • lastName string, nullable · Required
        • firstName string, nullable · Required
        • middleName string, nullable · Required
        • businessName string, nullable · Required
        • general string, nullable · Required
        • specialty string, nullable · Required
        • npi string, nullable · Required
        • city string, nullable · Required
        • state string, nullable · Required
        • zip string, nullable · Required
        • exclusionType string, nullable · Required
        • exclusionDate string (date), nullable · Required
        • reinstatementDate string (date), nullable · Required
        • waiverDate string (date), nullable · Required
        • waiverState string, nullable · Required
        • note string · Required

          Always the constant sentence 'A name match, not an NPI match. Check the list.' A name-only candidate is a separate array, never merged into `exclusions`: a candidate that may be someone else never removes what the list prints about this NPI.

    • listDate string (date), nullable · Required

      The OIG LEIE file's own published date, YYYY-MM-DD, or null when that source has never finished loading. The date `excluded` is answered as of.

    • provenance array · Required
      • item object (ProviderProvenance)
        • issuer string · Required · One of: NPPES, OIG_LEIE
        • fileName string · Required
        • sha256 string · Required
        • publishedAt string (date), nullable · Required

          The source file's own published date, YYYY-MM-DD, or null when that source has never finished loading.

    • receipt object (ClearanceReceipt) · Required
      • id string (uuid) · Required
      • issuedAt string (date-time) · Required
      • digest string · Required

        sha256 hex of the canonical (recursively key-sorted) JSON of the answer, with `receipt` itself omitted.

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

404 No provider with this NPI on file, an NPI that is not 10 Luhn-valid digits, or the route is not yet open. A bare 404, no body.

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

503 The register could not be read right now. Retry later; an outage is never read as a clean answer.

Response schema

No response body.

POST /partner/v1/bouts

Submit a made bout (idempotent on partnerRef); stored as a partner-graded row, never in the verified record

Responses

201 OK

Response schema

  • response object (IntakeResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • id string
    • partnerRef string
    • status string · One of: proposed, confirmed, cancelled, result
    • corners object
      • a string, nullable
      • b string, nullable
    • outcome string · One of: created, updated, validated
    • matched object, nullable
      • boutId string
      • leadDays integer, nullable
    • evidenceHash string

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

GET /partner/v1/usage

The caller's own budgets and this month's usage

Responses

200 OK

Response schema

  • response object (UsageResponse)
    • asOf string (date-time) · Required
    • sources array · Required
      • item object (PartnerSource)
        • key string · Required
        • name string · Required
        • country string · Required
        • region string, nullable · Required
    • notice string · Required
    • key object
      • prefix string
      • sandbox boolean
      • scopes array
        • item string
    • partner object
      • name string
      • status string
    • budgets object
      • perMinute integer
      • monthlyQuota integer
      • global boolean
    • usage object
      • month string
      • calls integer
      • errors integer
      • byRoute array
        • item object
          • route string
          • calls integer
          • errors integer

401 No key, malformed, unknown or revoked key

Response schema

No response body.

403 Scope missing or partner suspended

Response schema

No response body.

429 Per-minute limit or monthly quota reached; honour Retry-After

Response schema

No response body.

corpora

GET /corpora

The open registry of record corpora: kind, description, search hint, an id example and what each kind holds, visible kinds only

Responses

200 OK

Response schema

  • response object (CorporaListResponse)
    • corpora array · Required
      • item object (CorpusDescription)
        • kind string · Required
        • description string · Required
        • searchHint string · Required
        • idExample string · Required
        • noun string, nullable

          Plural, lower-case, service-worded: "claimed people", "claimed organizations", "fighter records", "parcels". Null when the adapter names none.

        • count integer, nullable

          CHEAP: a pg_class.reltuples estimate, or an hourly-cached exact count. Never a live count(*) over parcels.

        • exact boolean

          false = count is an estimate (countWords then begins "about").

        • countWords string, nullable

          "about 18.8 million parcels" · "885 fighter records" · "no claimed organizations" — the service words it, the web prints it verbatim. Null when count or noun is null.

        • since string, nullable

          YYYY-MM-DD: the day the corpus's first row landed.

        • updatedAt string, nullable

          YYYY-MM-DD: the newest row's day.

        • homeUrl string, nullable

          Where that corpus's own page set lives.

        • browseUrl string, nullable

          A directory page of that corpus, if it has one; else null.

        • gap object, nullable

          CORPUS GAP INDEX R1 — this corpus's own scatter-risk and correction index, per CORPUS, never per record. Null when the index could not be computed this request.

          • kind string · Required

            The door kind this index describes (a GET /corpora kind) — per corpus, never per record.

          • risk object · Required

            The tree stops here: this branch repeats a schema already open above it.

          • correction object · Required

            The tree stops here: this branch repeats a schema already open above it.

          • asOf string · Required

            ISO timestamp this corpus's index was computed — per corpus, never per record.

GET /corpora/gap

The per-corpus scatter-risk and correction index, plus the rulings file that produced it — per CORPUS, never per record or subject

Responses

200 OK

Response schema

  • response object (CorporaGapResponse)

    GET /corpora/gap — every visible corpus's scatter-risk and correction index, plus the rulings file that produced them. Per CORPUS, never per record or subject.

    • asOf string · Required

      ISO timestamp this index was computed.

    • rulings object · Required

      gap-rulings.yaml, parsed, verbatim — the owner's own hand-edited defaults; one edit plus a deploy changes every corpus's own numbers below.

    • formula object · Required
      • risk string · Required

        How each corpus's risk.value is computed, in words.

      • achieved string · Required

        gap-rulings.yaml's own correction.achieved formula string.

      • achievable string · Required

        gap-rulings.yaml's own correction.achievable formula string.

    • kinds array · Required

      One GapIndex per visible corpus kind, per CORPUS, never per record.

      • item object (GapIndex)

        CORPUS GAP INDEX R1 — a scatter-risk and correction index computed per CORPUS, never per record or subject.

        • kind string · Required

          The door kind this index describes (a GET /corpora kind) — per corpus, never per record.

        • risk object · Required
          • level string · Required · One of: minimal, low, medium, high, critical

            The published risk word for this corpus — the highest gap-rulings.yaml threshold its risk value clears, per corpus, never per record.

          • severity integer · Required · One of: 1, 2, 3, 4, 5

            Harm when a record of this corpus is missed, on the owner's 1-5 scale (gap-rulings.yaml severity.by_kind) — per corpus, never per record.

          • weight number · Required

            This corpus's severity level's own weight (gap-rulings.yaml severity.weights) — per corpus, never per record.

          • keepers integer · Required

            Distinct publishers holding this corpus's own catalogue entries — the fragmentation count, per corpus, never per record.

          • bucket integer · Required · One of: 0, 1, 2, 3, 4

            The fragmentation bucket this corpus's keepers count falls into (gap-rulings.yaml fragmentation.buckets) — per corpus, never per record.

          • value number · Required

            weight x (1 + bucket) for this corpus — the risk value its level word is read off, per corpus, never per record.

        • correction object · Required
          • achievable number · Required

            The share of this corpus's catalogue entries whose terms are already open or non_commercial (0..1) — per corpus, never per record.

          • achieved number · Required

            loaded share x (0.5 + 0.25 if a cross-register join exists + 0.25 if a correction rail exists); a fraction 0..1 — per corpus, never per record.

          • loadedShare number · Required

            Loaded entries over total family entries for this corpus (0..1) — per corpus, never per record.

          • publishableShare number · Required

            Entries with an open or non_commercial terms verdict over total family entries for this corpus (0..1) — per corpus, never per record.

          • joined boolean · Required

            Whether this corpus is cross-referenced against another held corpus (gap-rulings.yaml registration metadata) — per corpus, never per record.

          • rail boolean · Required

            Whether this corpus has a correction rail (a claim, dispute or flag path) today — per corpus, never per record.

        • asOf string · Required

          ISO timestamp this corpus's index was computed — per corpus, never per record.

503 Gap index temporarily unavailable.

Response schema

No response body.

GET /corpora/{kind}/keys

Per-corpus keyset key discovery — every key a kind holds, paged, for a sitemap or an IndexNow walk

`after` is the last key already read (absent = from the start); `limit` defaults to 1000 and clamps at 5000 (a non-integer or a value under 1 is a 400). A kind with no keyset discovery of its own answers a typed 501.

Parameters

NameInRequiredType
kindpathRequiredstring
limitqueryOptionalinteger
afterqueryOptionalstring

Responses

200 OK

Response schema

  • response object (CorpusKeysPage)

    GET corpora/:kind/keys's own page — keyset, ORDER BY key ascending.

    • keys array · Required
      • item object
        • key string · Required
        • updatedAt string (date-time), nullable · Required

          The current row's created_at — null only when the row genuinely carries none.

    • next string, nullable · Required

      The last key of this page when it came back full (there may be more); null when this was the last page.

400 limit must be a positive integer.

Response schema

No response body.

404 No such kind. GET corpora lists them.

Response schema

No response body.

501 This kind has no keyset key discovery: { unsupported: true, kind } — never a 500.

Response schema

No response body.

503 Lookup temporarily unavailable.

Response schema

No response body.

GET /corpora/{kind}/sources

Every stored source file for a kind's register, newest first — the manifest behind each fetch

`limit` defaults to 50 and clamps at 200 (a non-integer or a value under 1 is a 400). A kind with no source listing of its own answers a typed 501.

Parameters

NameInRequiredType
kindpathRequiredstring
limitqueryOptionalinteger

Responses

200 OK

Response schema

  • response object (CorpusSourcesPage)

    GET corpora/:kind/sources's own page — every provenance row for the kind's register, newest first (fetched_at DESC, id DESC); no cursor this round.

    • kind string · Required
    • sources array · Required
      • item object (SourceManifest)

        SOURCE RETENTION R1 — one stored (or store-refused) source. retained is true only when the bytes are on disk under their hash; retainedAt/staleAfter are omitted (never null) when there is nothing to say.

        • register string · Required
        • publisher string · Required
        • homeUrl string
        • sourceUrl string · Required
        • fileName string · Required
        • sha256 string · Required
        • bytes integer · Required
        • publishedAt string, nullable · Required
        • fetchedAt string · Required
        • terms object (RecordProvenanceTerms) · Required

          The tree stops here: this branch repeats a schema already open above it.

        • retained boolean · Required

          True only when the bytes behind sha256 are actually on disk under their hash.

        • retainedAt string (date-time)
        • staleAfter string (date-time)
        • supersedingPending boolean · Required

400 limit must be a positive integer.

Response schema

No response body.

404 No such kind. GET corpora lists them.

Response schema

No response body.

501 This kind has no source listing: { unsupported: true, kind } — never a 500.

Response schema

No response body.

503 Lookup temporarily unavailable.

Response schema

No response body.

records

GET /records/search

Search every visible corpus, grouped and faceted — the REST answer the web reads

A query under 3 code points answers an empty list (no adapter is called); over 200 is a 400. `kind`, when given, must be a kind `GET corpora` lists (a visible kind) or the answer is a 404. The search order is the same as the MCP connector's `search` tool on the public tier, for the same query; this document additionally carries each result's `kind` and, where the adapter has one, a one-line `meta`, plus per-kind `facets` — the MCP tool's own bytes are unchanged.

Parameters

NameInRequiredType
kindqueryOptionalstring
qqueryOptionalstring

Responses

200 OK

Response schema

  • response object (RecordsSearchDocument)
    • results array · Required
      • item object (RecordsSearchResult)
        • id string · Required
        • title string · Required
        • url string · Required
        • kind string · Required

          The id's kind word (before the first colon), so the web groups results without parsing ids.

        • meta string

          An OPTIONAL one line, at most 160 characters, cheaply known about this hit (a fighter's disciplines and place, a parcel's jurisdiction and apn, a person's or an organization's handle). Absent when the adapter has nothing cheap to say.

    • notice string

      Present only when one source could not be searched: the other results stand, and this says so.

    • facets array · Required

      One entry per visible kind the fan-out searched (registry order), including a kind with zero hits. A kind whose adapter was unavailable this call is absent (named in `notice` instead).

      • item object (RecordsSearchFacet)
        • kind string · Required
        • hits integer · Required

          Results of this kind returned (at most cap).

        • cap integer · Required

          The registry's per-adapter cap (today 5).

400 Give a search of at most 200 characters.

Response schema

No response body.

404 No such kind. GET corpora lists them.

Response schema

No response body.

503 Lookup temporarily unavailable.

Response schema

No response body.

GET /records/answer

A plain-language answer composed and walled over the visible corpora — the record, in a sentence

A query under 3 code points answers an idle document (no build, no call); over 200 is a 400. `kind`, when given, must be a kind `GET corpora` lists (a visible kind) or the answer is a 404. Every sentence carries the record ids it rests on; a code checker drops anything the cited records did not print before this document is ever built — the model is a renderer, never a source; what the register does NOT hold is stated by the service, never the model. `unavailable` (a spent budget, a resting renderer, or part of the register that could not be read) still carries the grouped evidence, so the web's list of records renders regardless.

Parameters

NameInRequiredType
kindqueryOptionalstring
qqueryOptionalstring

Responses

200 OK

Response schema

  • response object (AnswerDocument)

    GET /records/answer's whole response — the record, in a sentence. Every sentence carries the record ids it rests on; a code checker drops anything the cited records did not print before this document is ever built.

    • query string · Required

      Trimmed, as searched.

    • state string · Required · One of: idle, answered, holdings_only, unavailable
    • sentences array · Required
      • item object (AnswerSentence)
        • text string · Required
        • ids array · Required

          Record ids from evidenceIds this sentence rests on — at least one, except the service-worded absence sentence's [] (it cites the holdings, not a record; always the last sentence).

          • item string
    • notFound array · Required

      Visible kinds the search returned nothing for, registry order.

      • item string
    • holdings array · Required

      The live holdings the absence clause was written from.

      • item object (AnswerHolding)
        • kind string · Required
        • noun string · Required
        • countWords string, nullable · Required

          "about 18.8 million parcels" · "885 fighter records" — the service words it, the web prints it verbatim. Null when GET corpora's own countWords would be.

    • renderer object, nullable · Required

      Null when no model call was made or the call failed (no items at all, a spent budget, a partial search, or a renderer outage); present on an unavailable answer whose call returned nothing the checker kept.

      • provider string · Required
      • model string · Required
    • evidenceIds array · Required

      Every record id in the evidence set, registry order, top-ranked first.

      • item string
    • evidence array · Required

      What the web needs to render each id as a link — no facts on the wire.

      • item object (AnswerEvidence)
        • id string · Required
        • kind string · Required
        • title string · Required
        • url string · Required
        • grade string · Required · One of: verified, reported, declared, published

          What the web needs to render this id as a link — no facts on the wire.

    • unavailable object, nullable · Required
      • reason string · Required · One of: budget, renderer, search
      • sentence string · Required

        A plain sentence, never a 5xx — the grouped results above still render on the web.

    • cached boolean · Required
    • checker object · Required

      Counts for this answer; reasons stay in the log, never on the wire.

      • rendered integer · Required

        Non-blank lines the model rendered for this answer (kept + rejected) — not the number kept alone.

      • rejected integer · Required

        Of those, the ones the checker dropped. Reasons stay in the log, never on the wire.

400 Give a search of at most 200 characters.

Response schema

No response body.

404 No such kind. GET corpora lists them.

Response schema

No response body.

503 Lookup temporarily unavailable.

Response schema

No response body.

GET /records/{id}

One record by an id `GET records/search` returned — the same answer the MCP connector's `fetch` tool gives, as REST

The id is `<kind>:<ref>`; a ref may itself carry `/` (present raw or percent-encoded, both open the same record). An ill-shaped or dark-kind id is a 400 naming the visible kinds; an unknown id is a 404 in the adapter's own words.

Parameters

NameInRequiredType
idpathRequiredstring
acceptheaderOptionalstring
viewqueryOptionalstring (enum)

Responses

200 OK — ConnectorDocument (the plain document) when ?view is absent or not "fields"/"provenance"; RecordFieldsView when ?view=fields; RecordProvenanceView (the verify door) when ?view=provenance. On ?view=provenance, an Accept header naming application/vnd.pansofica.receipt+json answers that Content-Type instead of the default application/json.

Response schema

  • response oneOf
    • option 1 object (ConnectorDocument)
      • id string · Required
      • title string · Required
      • text string · Required
      • url string · Required
      • metadata object, open-ended · Required

        Adapter-specific beyond `kind`; the three built-in kinds carry recordStatus/citeAs/lastReviewed.

        • kind string · Required
    • option 2 object (RecordFieldsView)

      GET records/{id}?view=fields's own document — the door's structured record view, built by the adapter's EXISTING view builder, never a second derivation.

      • id string · Required
      • kind string · Required
      • key string · Required
      • title string · Required
      • url string · Required
      • status string
      • citeAs string · Required
      • fields array · Required
        • item object (RecordViewField)

          PUBLIC RECORD PAGES R1 — one row of RecordFieldsView.fields; the same EvidenceFact grade vocabulary facts() already carries, source dropped.

          • label string · Required
          • value string · Required
          • grade string · One of: verified, reported, declared, published
      • provenance object (RecordViewProvenance) · Required

        Ruling 1's provenance object. fileName/sha256 (and every other key besides register/publisher/fetchedAt) are optional — Ruling 3 allows an adapter with no single file/digest behind its record (fighter, claimed person/organization) to omit them rather than invent a value. sourceUrl/retainedAt/staleAfter (SOURCE RETENTION R1) are additive, omitted (never null) when unknown.

        • register string · Required
        • publisher string · Required
        • homeUrl string
        • fileName string
        • sha256 string
        • bytes oneOf
          • option 1 number
          • option 2 string
        • publishedAt string, nullable
        • fetchedAt string · Required
        • terms string
        • sourceUrl string

          Where the published file was fetched from. Present for every connector/spec corpus.

        • retainedAt string (date-time)

          When the write-once copy of the bytes behind sha256 was stamped — present only when the copy actually succeeded.

        • staleAfter string (date-time)

          fetchedAt plus the register's own refresh cadence — present only when the register states a cadence.

      • links array
        • item object (RecordViewLink)

          One link the record view names beside its fields.

          • label string · Required
          • url string · Required
    • option 3 object (RecordProvenanceView)

      GET records/{id}?view=provenance's own document — a SourceManifest (register, publisher, homeUrl?, sourceUrl, fileName, sha256, bytes, publishedAt, fetchedAt, terms, retained, retainedAt?, staleAfter?, supersedingPending) plus the record's id/kind/key and the verify recipe. download is null this round by design (serving bytes needs a public object store); the key is present so a client can feature-detect.

      • id string · Required
      • kind string · Required
      • key string · Required
      • register string · Required
      • publisher string · Required
      • homeUrl string
      • sourceUrl string · Required
      • fileName string · Required
      • sha256 string · Required
      • bytes integer · Required
      • publishedAt string, nullable · Required
      • fetchedAt string · Required
      • terms object (RecordProvenanceTerms) · Required

        SOURCE RETENTION R1 — the register's own reuse terms, as quoted in the spec. url/readOn are optional for a future adapter with no terms page of its own; every connector/spec corpus carries all three.

        • text string · Required
        • url string
        • readOn string

          YYYY-MM-DD — the date the terms were read.

      • retained boolean · Required

        True only when the bytes behind sha256 are actually on disk under their hash.

      • retainedAt string (date-time)
      • staleAfter string (date-time)
      • supersedingPending boolean · Required
      • verify object · Required
        • method string · Required · One of: sha256 of the published file
        • command string · Required

          curl -sL <sourceUrl> | sha256sum, with the record's own sourceUrl substituted.

      • download string, nullable · Required · One of:

        Always null this round — present so a client can feature-detect once serving bytes ships.

400 The registry's id-shape sentence, listing the visible kinds' id examples.

Response schema

No response body.

404 The adapter's own not-found sentence

Response schema

No response body.

501 ?view=fields or ?view=provenance on a kind whose adapter has no structured view / no verify door: { unsupported: true, id, kind } — never a 500.

Response schema

  • response object (RecordViewUnsupported)

    GET records/{id}?view=fields's 501 body: a kind whose adapter has no structured view — never a 500.

    • unsupported boolean · Required · One of:
    • id string · Required
    • kind string · Required

      The corpus kind the id parsed to.

503 Lookup temporarily unavailable.

Response schema

No response body.

receipts

GET /receipts/spec

The Receipt Specification v1 schema door

version the receipt object itself never carries; schema the emitted JSON Schema (draft 2020-12) a validator reads directly; document the human-readable specification page.

Responses

200 OK

Response schema

  • response object (ReceiptSpecDocument)

    GET receipts/spec's own answer: the Receipt Specification v1 schema door. version the receipt object itself never carries; schema the emitted JSON Schema (draft 2020-12, served verbatim); document the human-readable specification page.

    • version string · Required · One of: 1
    • schema object, open-ended · Required

      The Receipt Specification v1 JSON Schema (draft 2020-12), byte-identical to the committed libs/connector/src/receipt/receipt.schema.json.

    • document string (uri) · Required

      The human-readable specification page.

POST /receipts/validate

Validate a receipt, by URL (fetched, bounded, guarded) or given inline

Exactly one of `url` or `receipt`. Checks: the Receipt Specification v1 schema; sha256 is 64 lowercase hex; every date is RFC 3339 or, where the spec allows it, a plain date; fetchedAt on or after publishedAt (warning); terms.text non-empty; for a `.receipt.json` sidecar URL, the named sourceUrl's Content-Length against bytes (warning). The validator never downloads the published file and stores nothing it is given or fetches.

Responses

200 OK

Response schema

  • response object (ReceiptValidationResponse)

    POST receipts/validate's own answer. valid is true exactly when no finding is severity:error.

    • valid boolean · Required
    • version string · Required · One of: 1
    • findings array · Required
      • item object (ReceiptFinding)

        One thing the validator checked and found wrong (error) or worth a second look (warning).

        • path string · Required

          The dotted path into the receipt this finding is about; empty string for the receipt as a whole.

        • rule string · Required

          schema | sha256-hex | date-format | terms-text | record-binding | fetched-after-published | source-length | source-length-unknown | fetch

        • message string · Required
        • severity string · Required · One of: error, warning
    • checked object · Required
      • schema boolean · Required

        Whether the schema check ran at all; false only when a {url} fetch never produced an object to check.

      • hashRecomputed boolean · Required

        Always false in v1: the validator never downloads the published file.

400 Neither or both of url/receipt were given, or the body is over 256 KB

Response schema

No response body.

GET /receipts/mark/{register}.svg

A register's trust mark: an SVG badge naming its latest valid receipt

Answers an SVG badge reading "Receipted · YYYY-MM-DD" (the UTC date of the register's latest completed receipt's fetchedAt), with a second line "bytes kept" when that receipt has retained:true. A register with no valid receipt (unknown register, no rows, or an invalid manifest) answers 404, never a grey badge. `theme` is `light` or `dark` (default dark); any other value is a 400.

Parameters

NameInRequiredType
registerpathRequiredstring
themequeryOptionalstring (enum)

Responses

200 An SVG badge, cached one hour

Response schema

No response body.

400 theme must be light or dark: { error: "invalid_theme" }

Response schema

No response body.

404 Unknown register, or no valid receipt yet: { error: "no_valid_receipt", register }

Response schema

No response body.

observatory

GET /observatory/refreshes

The refresh log: every source file this door has fetched, newest first — corpus and register only, never a subject or a person

`since` is an ISO lower bound on fetchedAt (a value that fails to parse is treated as absent). `kind` filters by the register’s own corpus kind (a kind no register declares answers an empty page). `limit` defaults to 100 and clamps at 500 (never a 400). `before` is the previous page’s own `next`, opaque; a malformed cursor is a 400.

Parameters

NameInRequiredType
beforequeryOptionalstring
limitqueryOptionalinteger
kindqueryOptionalstring
sincequeryOptionalstring

Responses

200 OK

Response schema

  • response object (ObservatoryRefreshesResponse)

    GET /observatory/refreshes — the refresh log, newest first, keyset-paged.

    • items array · Required
      • item object (ObservatoryRefreshItem)

        OBSERVATORY R1 — one connector_provenance row: a register and a file, never a subject or a person.

        • kind string, nullable · Required

          The spec registry's register -> subject kind; null when the register is unknown to the registry.

        • register string · Required
        • fileName string · Required
        • fetchedAt string (date-time) · Required
        • publishedAt string (date-time), nullable · Required
        • sha256 string · Required
        • bytes integer · Required
        • changed boolean · Required

          sha256 differs from the immediately preceding row of the same register; the first row of a register is always true.

        • retained boolean · Required

          source_stored_at IS NOT NULL — the fetched bytes are kept under the content-addressed store.

        • supersedingPending boolean · Required
    • next string, nullable · Required

      Opaque keyset cursor for the next page; null when this is the last page.

400 Malformed `before` cursor: `{ error }`.

Response schema

No response body.

503 Refresh log temporarily unavailable.

Response schema

No response body.

GET /observatory/corrections

The corrections log: flags, claims and disputes, by month and corpus kind — counts only, never an id, a subject or a person

`since` is a `YYYY-MM` lower bound (a value that fails to parse falls back to the default 12-month window). `kind` filters the merged rows by corpus kind. A `(month, kind)` row is included only when at least one count is non-zero.

Parameters

NameInRequiredType
kindqueryOptionalstring
sincequeryOptionalstring

Responses

200 OK

Response schema

  • response object (ObservatoryCorrectionsResponse)

    GET /observatory/corrections — the corrections log, by month and corpus kind.

    • months array · Required
      • item object (ObservatoryCorrectionsMonth)

        OBSERVATORY R1 — one (month, kind) bucket of aggregate counts only: never an id, a subject or a person.

        • month string · Required
        • kind string · Required
        • flagsOpened integer · Required
        • flagsResolved integer · Required
        • claimsPublished integer · Required
        • disputesOpened integer · Required
        • disputesResolved integer · Required

503 Corrections log temporarily unavailable.

Response schema

No response body.

GET /observatory/state/latest

The newest frozen issue of The State of the Public Record

Served verbatim from the minted file — never recomputed. 404 when no issue has been minted yet.

Responses

200 OK

Response schema

  • response object (ObservatoryIssue)

    GET /observatory/state/latest and GET /observatory/state/{issue} — one frozen issue of The State of the Public Record, minted by a CLI and served verbatim; never recomputed at request time.

    • issue string · Required
    • issuedAt string (date-time) · Required
    • title string · Required
    • methodology object · Required
      • gap string · Required
      • gapRulingsSha256 string · Required
      • refresh string · Required
      • corrections string · Required
      • catalog string · Required
    • door object · Required
      • corpora integer · Required
      • records integer · Required
    • gap object (CorporaGapResponse) · Required

      GET /corpora/gap — every visible corpus's scatter-risk and correction index, plus the rulings file that produced them. Per CORPUS, never per record or subject.

      • asOf string · Required

        ISO timestamp this index was computed.

      • rulings object · Required

        gap-rulings.yaml, parsed, verbatim — the owner's own hand-edited defaults; one edit plus a deploy changes every corpus's own numbers below.

      • formula object · Required
        • risk string · Required

          How each corpus's risk.value is computed, in words.

        • achieved string · Required

          gap-rulings.yaml's own correction.achieved formula string.

        • achievable string · Required

          gap-rulings.yaml's own correction.achievable formula string.

      • kinds array · Required

        One GapIndex per visible corpus kind, per CORPUS, never per record.

        • item object (GapIndex)

          The tree stops here: this branch repeats a schema already open above it.

    • catalogue object · Required
      • cataloged integer · Required
      • public integer · Required
      • loadedDark integer · Required
      • specWritten integer · Required
      • probed integer · Required
      • candidate integer · Required
      • refused integer · Required
      • termsVerdicts object · Required
        • open integer · Required
        • non_commercial integer · Required
        • unknown integer · Required
        • refused integer · Required
      • openedSince array · Required
        • item object
          • register string · Required
          • publisher string · Required
          • on string (date) · Required
          • status string · Required
    • refresh object · Required
      • windowDays integer · Required
      • last30d object · Required
        • runs integer · Required
        • changed integer · Required
        • unchanged integer · Required
        • bytesRetained integer · Required
        • registers integer · Required
    • corrections object · Required
      • windowDays integer · Required
      • last30d object · Required
        • flagsOpened integer · Required
        • flagsResolved integer · Required
        • claimsPublished integer · Required
        • disputesOpened integer · Required
        • disputesResolved integer · Required
    • sources object · Required
      • gap string · Required
      • coverage string · Required
      • refreshes string · Required
      • corrections string · Required

404 No issue has been minted yet: `{ error: "no issue" }`.

Response schema

No response body.

GET /observatory/state/{issue}

One frozen issue of The State of the Public Record, by id

Served verbatim from the minted file — never recomputed. 404 when the id is not YYYY-MM, or no such issue was minted.

Parameters

NameInRequiredType
issuepathRequiredstring

Responses

200 OK

Response schema

  • response object (ObservatoryIssue)

    GET /observatory/state/latest and GET /observatory/state/{issue} — one frozen issue of The State of the Public Record, minted by a CLI and served verbatim; never recomputed at request time.

    • issue string · Required
    • issuedAt string (date-time) · Required
    • title string · Required
    • methodology object · Required
      • gap string · Required
      • gapRulingsSha256 string · Required
      • refresh string · Required
      • corrections string · Required
      • catalog string · Required
    • door object · Required
      • corpora integer · Required
      • records integer · Required
    • gap object (CorporaGapResponse) · Required

      GET /corpora/gap — every visible corpus's scatter-risk and correction index, plus the rulings file that produced them. Per CORPUS, never per record or subject.

      • asOf string · Required

        ISO timestamp this index was computed.

      • rulings object · Required

        gap-rulings.yaml, parsed, verbatim — the owner's own hand-edited defaults; one edit plus a deploy changes every corpus's own numbers below.

      • formula object · Required
        • risk string · Required

          How each corpus's risk.value is computed, in words.

        • achieved string · Required

          gap-rulings.yaml's own correction.achieved formula string.

        • achievable string · Required

          gap-rulings.yaml's own correction.achievable formula string.

      • kinds array · Required

        One GapIndex per visible corpus kind, per CORPUS, never per record.

        • item object (GapIndex)

          The tree stops here: this branch repeats a schema already open above it.

    • catalogue object · Required
      • cataloged integer · Required
      • public integer · Required
      • loadedDark integer · Required
      • specWritten integer · Required
      • probed integer · Required
      • candidate integer · Required
      • refused integer · Required
      • termsVerdicts object · Required
        • open integer · Required
        • non_commercial integer · Required
        • unknown integer · Required
        • refused integer · Required
      • openedSince array · Required
        • item object
          • register string · Required
          • publisher string · Required
          • on string (date) · Required
          • status string · Required
    • refresh object · Required
      • windowDays integer · Required
      • last30d object · Required
        • runs integer · Required
        • changed integer · Required
        • unchanged integer · Required
        • bytesRetained integer · Required
        • registers integer · Required
    • corrections object · Required
      • windowDays integer · Required
      • last30d object · Required
        • flagsOpened integer · Required
        • flagsResolved integer · Required
        • claimsPublished integer · Required
        • disputesOpened integer · Required
        • disputesResolved integer · Required
    • sources object · Required
      • gap string · Required
      • coverage string · Required
      • refreshes string · Required
      • corrections string · Required

404 Not YYYY-MM, or no such issue: `{ error: "unknown issue" }`.

Response schema

No response body.

door

GET /door/status

The service's own self-measured availability: per-target availability and latency, corpus freshness, and incident runs

The service probes itself through the public load balancer every 5 minutes (leader node only) and records the result. Availability is a 0-100 percentage with two decimals, or null when a window held zero checks — never 100 by default. Latency percentiles are over the last 24h; incidents are runs of 2 or more consecutive failed checks over the last 30 days. The whole body is cached in-process for 60 seconds.

Responses

200 OK

Response schema

  • response object (DoorStatusResponse)

    GET /door/status — the service's own self-measured availability: per-target availability and latency, corpus freshness, and incident runs. Cached in-process 60s.

    • asOf string (date-time) · Required
    • targets object · Required
      • corpora object (DoorTargetStatus) · Required
        • availability object (DoorTargetAvailability) · Required

          The tree stops here: this branch repeats a schema already open above it.

        • latency object (DoorTargetLatency) · Required

          The tree stops here: this branch repeats a schema already open above it.

      • search object (DoorTargetStatus) · Required
        • availability object (DoorTargetAvailability) · Required

          The tree stops here: this branch repeats a schema already open above it.

        • latency object (DoorTargetLatency) · Required

          The tree stops here: this branch repeats a schema already open above it.

      • provenance object (DoorTargetStatus) · Required
        • availability object (DoorTargetAvailability) · Required

          The tree stops here: this branch repeats a schema already open above it.

        • latency object (DoorTargetLatency) · Required

          The tree stops here: this branch repeats a schema already open above it.

    • corpora array · Required
      • item object (DoorCorpusStatus)

        DOOR DEPTH R1 — one visible kind: its holdings (same as GET corpora) plus its connector freshness, when it has a connector register at all.

        • kind string · Required
        • count integer, nullable · Required
        • updatedAt string (date-time), nullable · Required
        • staleAfter string (date-time), nullable · Required

          null when the register states no cadence, or there is no connector register for this kind at all.

        • fresh boolean, nullable · Required

          null when staleAfter is null.

        • lastRefresh object, nullable · Required

          null for a corpus with no connector register (fighter, parcel, ...).

          • at string (date-time) · Required
          • changed boolean · Required
    • incidents array · Required
      • item object (DoorIncident)

        DOOR DEPTH R1 — a run of >= 2 consecutive failed checks of one target, within the last 30 days.

        • from string (date-time) · Required
        • to string (date-time), nullable · Required

          null when the run is still open.

        • target string · Required · One of: corpora, search, provenance

503 Status temporarily unavailable.

Response schema

No response body.

GET /door/openapi

The Partner OpenAPI document, parsed, as JSON

The committed, generated docs/partner-api/openapi.yaml, parsed and served verbatim.

Responses

200 OK

Response schema

No response body.

503 OpenAPI document temporarily unavailable.

Response schema

No response body.

GET /door/changelog

The repo's own changelog, generated from every merge note, newest first

docs/changelog/CHANGELOG.json, generated by scripts/changelog-from-merge-notes.ts from every docs/features/*-MERGE-NOTE.md (title, date, and the "what shipped" summary), sorted newest first. Committed, never hand-edited. Cached in-process for the process lifetime: it only changes with a deploy.

Responses

200 OK

Response schema

  • response object (DoorChangelogResponse)

    GET /door/changelog — docs/changelog/CHANGELOG.json verbatim: every merge note's title/date/summary, newest first.

    • generatedAt string (date-time) · Required
    • count integer · Required
    • entries array · Required
      • item object (DoorChangelogEntry)

        DOOR DEPTH R1 — one docs/features/*-MERGE-NOTE.md, reduced to its title, date and "what shipped" summary.

        • title string · Required
        • date string (date) · Required

          YYYY-MM-DD, the first such date found anywhere in the note, read top-down.

        • summary string · Required

          Collapsed to one line, cut at 600 characters on a sentence boundary. Empty when the note yielded no summary.

        • note string · Required

          The merge note's own file basename — the site names the note, links nothing.

503 Changelog temporarily unavailable.

Response schema

No response body.