{
  "format": "bisbe-api/1",
  "product": "Bisbe — the written-down manual, as the API describes it",
  "exportedAt": "2026-08-06T14:20:00.000Z",
  "contract": {
    "shape": "The resources our API returns — not the tables underneath them.",
    "describedIn": "docs/integration/BISBE/",
    "note": "These are the records as our interface hands them to a screen: one business, plain field names, a conversation carrying its own messages. How any of it is stored is ours to change without changing this, and is deliberately not described here."
  },
  "business": {
    "id": "org_atlantica",
    "name": "Atlantica",
    "world": "demo",
    "isDemo": true,
    "live": false
  },
  "totals": {
    "collections": 8,
    "records": 111,
    "fingerprint": "5845017851406e232d285c7c0e170a95bf1d774bbdbb223ce739310fc7ed4060"
  },
  "scope": {
    "saw": "all",
    "meaning": "Everything in this business's records. You are the owner of it, or this is the shared demo world, which has no private half.",
    "omitted": []
  },
  "files": [
    {
      "file": "resources/01-roles.json",
      "collection": "roles",
      "what": "Who the manual is organised for — owner, rep, office, books, customer, partner.",
      "records": 6,
      "fields": [
        "kind",
        "id",
        "label",
        "blurb"
      ],
      "fingerprint": "1cfc54f4e3334193127b0fac28ec9475596f414a54fc3aaad2517d82d140c730",
      "fencedBy": "this business's own set"
    },
    {
      "file": "resources/02-procedures.json",
      "collection": "procedures",
      "what": "The manual. One record per written-down procedure, with its body and its version history.",
      "records": 29,
      "fields": [
        "kind",
        "id",
        "title",
        "section",
        "roles",
        "audience",
        "pageKind",
        "version",
        "confirmedAt",
        "confirmedBy",
        "status",
        "body",
        "history",
        "keywords",
        "covers"
      ],
      "fingerprint": "034cee03137337c35e595fbb27bc4875c9460aadc9f5c96435a70c3854603474",
      "fencedBy": "this business's manual"
    },
    {
      "file": "resources/03-rules.json",
      "collection": "rules",
      "what": "Rules the owner stated in plain words, and Bisbe's read-back of each one.",
      "records": 1,
      "fields": [
        "kind",
        "id",
        "said",
        "heard",
        "statedAt",
        "statedByRole"
      ],
      "fingerprint": "cc7fcbdd66f50133a498e44073612ab23b1b77f16b9188c93c0e46708f0c1818",
      "fencedBy": "stated inside this business"
    },
    {
      "file": "resources/04-conversations.json",
      "collection": "conversations",
      "what": "Somebody asked, and this is where the answer happened. Each conversation carries its own messages.",
      "records": 30,
      "fields": [
        "kind",
        "id",
        "channel",
        "askerName",
        "about",
        "askerUserId",
        "askerRole",
        "subject",
        "openedAt",
        "messages",
        "state",
        "ownerNotified",
        "learnedProcedureId",
        "etaAt",
        "etaSetAt",
        "ownerUserId",
        "workType",
        "workSource",
        "workSourceRef",
        "customerFacing",
        "customerVisibleFields",
        "notes",
        "needsAttention",
        "feedbackSubtype",
        "doneAt",
        "doneBy",
        "droppedAt",
        "droppedReason",
        "droppedBy",
        "reopenedAt",
        "reopenedBy"
      ],
      "fingerprint": "feb308b0366bf8cad8f59ef5d3e4aa023ec18323592ace3cfbc5ef17ed3c0476",
      "fencedBy": "opened inside this business"
    },
    {
      "file": "resources/05-links.json",
      "collection": "links",
      "what": "What taught what — which rule updated which page, which conversation taught which page.",
      "records": 3,
      "fields": [
        "from",
        "to",
        "kind",
        "at"
      ],
      "fingerprint": "124e1b121bc29509a2dab5d217da503c50d4f0e7b50ff635e65bef6a4eeea68a",
      "fencedBy": "both ends are records of this business"
    },
    {
      "file": "resources/06-pending-changes.json",
      "collection": "pendingChanges",
      "what": "Changes waiting on the owner's say-so. Nothing enters the manual un-released.",
      "records": 6,
      "fields": [
        "id",
        "targetProcedureId",
        "targetTitle",
        "targetSection",
        "targetRoles",
        "targetAudience",
        "targetPageKind",
        "changeKind",
        "fromVersion",
        "toVersion",
        "draftLines",
        "summary",
        "sourceKind",
        "sourceId",
        "coversTriggers",
        "status",
        "modifyNotes",
        "revision",
        "queuedAt",
        "releasedAt",
        "releasedBy",
        "releasedByDutyId",
        "etaAt",
        "etaSetAt",
        "ownerUserId"
      ],
      "fingerprint": "32f1e33b65355f9fc8553aa8ada72120078b57027a2fbb1c08e277a55f01afdb",
      "fencedBy": "queued against this business's manual"
    },
    {
      "file": "resources/07-notifications.json",
      "collection": "notifications",
      "what": "What Bisbe told somebody, and whether they have read it yet.",
      "records": 32,
      "fields": [
        "id",
        "at",
        "audience",
        "kind",
        "threadId",
        "text",
        "read"
      ],
      "fingerprint": "f69753625e417fc40150fd1326e48b79f18f69ef4ae5f64aa54cfe87cc9349ce",
      "fencedBy": "addressed to people in this business"
    },
    {
      "file": "resources/08-escalations.json",
      "collection": "escalations",
      "what": "Questions that always go to a person, never to an answer. Committed data, not a judgment.",
      "records": 4,
      "fields": [
        "id",
        "phrases",
        "reason"
      ],
      "fingerprint": "7e017e07d64e2c26ffe2c87f8b709926e9539fec895591e1c1b62a2c55a51933",
      "fencedBy": "this business's own guards"
    }
  ],
  "nestedShapes": {
    "messages": [
      "id",
      "at",
      "from",
      "text",
      "systemEvent",
      "authorName",
      "authorUserId",
      "receipts",
      "escalationReason"
    ],
    "receipts": [
      "procedureId",
      "title",
      "version",
      "confirmedAt",
      "stale"
    ],
    "procedureVersions": [
      "version",
      "at",
      "note",
      "learnedFromThreadId",
      "fromRuleId",
      "fromProposalId",
      "byUserId",
      "byDutyId"
    ],
    "subject": [
      "type",
      "id"
    ]
  },
  "notes": [
    "One business. This download holds the firm you were working in when you asked for it, and nothing from any other firm you can reach.",
    "These are the records in the shape our interface reads them, which is the shape a published API would return. How they are stored underneath is not described here, and is free to change without changing this.",
    "A conversation carries its own messages, because that is how the API hands one to a screen.",
    "A field that has no value is left out rather than written as empty. An empty list is [], not missing.",
    "Suggestions your assistant made — the ones waiting on your word, and the ones you have already approved or rejected — are not in this bundle. They are decisions taken inside one firm, and they stay there.",
    "These are invented records — the demonstration business, not a live one. The SHAPE is identical to a real download; the contents are fiction.",
    "This is the shared demo world. Everyone looking at the demo is looking at this same one, so anything you typed into it may appear in somebody else's download too. Nothing here is real, and nothing here is private.",
    "Customers (the other half of Bisbe) keeps its own records and has its own download. This one is the manual and the conversations about it."
  ]
}
