{
  "title": "zpe universe API",
  "digest": "957e89deda09e09e76771273055e6d80a78a3e3e9db076d12ee0bbbbbf29cb21",
  "hosts": {
    "source": "apis/_hosts.json",
    "available": true,
    "missing": [],
    "conflicts": []
  },
  "css": {
    "path": "/api/docs/static/docs.css",
    "hash": "e4102ec7e75b"
  },
  "counts": {
    "apps": 25,
    "operations": 235,
    "open": 30
  },
  "apps": [
    {
      "id": "zpe-booking",
      "title": "zpe booking API",
      "version": "1.0.0",
      "mount": "/booking",
      "host": "zpe.vc",
      "base": "https://zpe.vc/booking",
      "document": "https://zpe.vc/booking/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-booking.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "listBookings",
          "method": "GET",
          "path": "/_/api/v1/bookings",
          "summary": "List the account's bookings",
          "auth": "bearer"
        },
        {
          "operationId": "getBooking",
          "method": "GET",
          "path": "/_/api/v1/bookings/{id}",
          "summary": "Read one booking",
          "auth": "bearer"
        },
        {
          "operationId": "cancelBooking",
          "method": "POST",
          "path": "/_/api/v1/bookings/{id}/cancel",
          "summary": "Cancel a booking",
          "auth": "bearer"
        },
        {
          "operationId": "listEventTypes",
          "method": "GET",
          "path": "/_/api/v1/event-types",
          "summary": "List the account's meeting types",
          "auth": "bearer"
        },
        {
          "operationId": "createEventType",
          "method": "POST",
          "path": "/_/api/v1/event-types",
          "summary": "Create a meeting type",
          "auth": "bearer"
        },
        {
          "operationId": "getEventType",
          "method": "GET",
          "path": "/_/api/v1/event-types/{id}",
          "summary": "Read one meeting type",
          "auth": "bearer"
        },
        {
          "operationId": "getMe",
          "method": "GET",
          "path": "/_/api/v1/me",
          "summary": "Read the caller's profile and availability",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "9d5931e8be4376b3a6b3de640e44f8a7b81df4a470c2b5bda2ef126de0e68fca"
    },
    {
      "id": "zpe-chat",
      "title": "zpe-chat — the universe's one messaging API",
      "version": "1.1.1",
      "mount": "/chat",
      "host": "zpe.vc",
      "base": "https://zpe.vc/chat",
      "document": "https://zpe.vc/chat/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-chat.json",
      "lifecycle": "wip",
      "operations": [
        {
          "operationId": "getConversations",
          "method": "GET",
          "path": "/_/api/v1/conversations",
          "summary": "The conversations this caller holds a seat in, newest first.",
          "auth": "bearer"
        },
        {
          "operationId": "postConversations",
          "method": "POST",
          "path": "/_/api/v1/conversations",
          "summary": "Create a conversation, with the caller as its owner.",
          "auth": "bearer"
        },
        {
          "operationId": "getConversationsById",
          "method": "GET",
          "path": "/_/api/v1/conversations/{id}",
          "summary": "One conversation, its members, and a page of its messages.",
          "auth": "bearer"
        },
        {
          "operationId": "patchConversationsById",
          "method": "PATCH",
          "path": "/_/api/v1/conversations/{id}",
          "summary": "Open or close a conversation. Its owner is the only caller who may.",
          "auth": "bearer"
        },
        {
          "operationId": "postConversationsByIdMessages",
          "method": "POST",
          "path": "/_/api/v1/conversations/{id}/messages",
          "summary": "Post a message into a conversation, under a number this conversation has not used.",
          "auth": "bearer"
        },
        {
          "operationId": "postConversationsByIdMembers",
          "method": "POST",
          "path": "/_/api/v1/conversations/{id}/members",
          "summary": "Add a principal to a conversation. A `direct` conversation takes exactly one other person.",
          "auth": "bearer"
        },
        {
          "operationId": "postConversationsByIdRead",
          "method": "POST",
          "path": "/_/api/v1/conversations/{id}/read",
          "summary": "Move this caller's read watermark forward to a message number.",
          "auth": "bearer"
        },
        {
          "operationId": "deleteConversationsByIdMessagesById",
          "method": "DELETE",
          "path": "/_/api/v1/conversations/{id}/messages/{message_id}",
          "summary": "Delete one message. Its sender or the conversation's owner may.",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "4be2961b87ca2fcbac70d45fc602e9142850a7c86ea4bd185987a0e7cfcf1929"
    },
    {
      "id": "zpe-comments",
      "title": "zpe-comments",
      "version": "4.1.1",
      "mount": "/comments",
      "host": "zpe.vc",
      "base": "https://zpe.vc/comments",
      "document": "https://zpe.vc/comments/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-comments.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getConfig",
          "method": "GET",
          "path": "/_/api/v1/config",
          "summary": "One site's comment settings, its Turnstile sitekey and the length limit",
          "auth": "public"
        },
        {
          "operationId": "getBootstrap",
          "method": "GET",
          "path": "/_/api/v1/bootstrap",
          "summary": "One post's comment tree, with the settings a composer needs",
          "auth": "public"
        },
        {
          "operationId": "getComments",
          "method": "GET",
          "path": "/_/api/v1/comments",
          "summary": "One post's comment tree",
          "auth": "public"
        },
        {
          "operationId": "postComments",
          "method": "POST",
          "path": "/_/api/v1/comments",
          "summary": "Post an anonymous comment behind a Turnstile answer",
          "auth": "public"
        },
        {
          "operationId": "deleteCommentsById",
          "method": "DELETE",
          "path": "/_/api/v1/comments/{id}",
          "summary": "Delete your own comment, or any comment on a site you own",
          "auth": "public"
        },
        {
          "operationId": "patchCommentsById",
          "method": "PATCH",
          "path": "/_/api/v1/comments/{id}",
          "summary": "Edit your own comment inside the edit window",
          "auth": "public"
        },
        {
          "operationId": "postCommentsByIdReport",
          "method": "POST",
          "path": "/_/api/v1/comments/{id}/report",
          "summary": "Report a comment to the site's owner, once per reader",
          "auth": "public"
        },
        {
          "operationId": "getOperatorQueue",
          "method": "GET",
          "path": "/_/api/v1/operator/queue",
          "summary": "The moderation queue, with its open report counts",
          "auth": "bearer"
        },
        {
          "operationId": "postOperatorModerate",
          "method": "POST",
          "path": "/_/api/v1/operator/moderate",
          "summary": "Moderate, ban or unban with a key instead of the console",
          "auth": "bearer"
        }
      ],
      "open": 7,
      "sha256": "08673dafb7ad8fb25d67196609f93a4399b71fadca35a76b9ea9a31387e37dbc"
    },
    {
      "id": "zpe-crew",
      "title": "crew — the team ledger",
      "version": "3.0.0",
      "mount": "/crew",
      "host": "zpe.vc",
      "base": "https://zpe.vc/crew",
      "document": "https://zpe.vc/crew/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-crew.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "postPactsByIdAccept",
          "method": "POST",
          "path": "/_/api/v1/pacts/{id}/accept",
          "summary": "Send the person who accepted to the contract layer's page for this pact.",
          "auth": "public"
        },
        {
          "operationId": "postClients",
          "method": "POST",
          "path": "/_/api/v1/clients",
          "summary": "Store a client the agency pull found, or update the one already here.",
          "auth": "bearer"
        },
        {
          "operationId": "postRooms",
          "method": "POST",
          "path": "/_/api/v1/rooms",
          "summary": "Pour one pull's rooms: the client's half into chat, his own into the ledger. A re-post writes nothing.",
          "auth": "bearer"
        },
        {
          "operationId": "postClientsByIdMessages",
          "method": "POST",
          "path": "/_/api/v1/clients/{id}/messages",
          "summary": "Remember what a client said, with the day its words stop being served.",
          "auth": "bearer"
        },
        {
          "operationId": "postEvents",
          "method": "POST",
          "path": "/_/api/v1/events",
          "summary": "Push one line of the local ledger's history, under the key that makes a second push free.",
          "auth": "bearer"
        },
        {
          "operationId": "postUpwork",
          "method": "POST",
          "path": "/_/api/v1/upwork",
          "summary": "Replace one ledger's Upwork snapshot with the document the mini read. `?account=` names the ledger; absent, the key's own. A ledger the key does not own needs the door's `can_write` for that ledger's channel, granted by its owner.",
          "auth": "bearer"
        },
        {
          "operationId": "postChannelEvents",
          "method": "POST",
          "path": "/_/api/v1/channel-events",
          "summary": "Keep a page of the channel's events in this ledger, keyed by the channel's own id. A re-post of a page writes nothing and says so.",
          "auth": "bearer"
        }
      ],
      "open": 1,
      "sha256": "e8b729990a6a9fad935f06c52566f10f7e85e75e034714a42e00677e3e137519"
    },
    {
      "id": "zpe-feedback",
      "title": "zpe-feedback",
      "version": "3.0.1",
      "mount": "/feedback",
      "host": "zpe.vc",
      "base": "https://zpe.vc/feedback",
      "document": "https://zpe.vc/feedback/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-feedback.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getThreads",
          "method": "GET",
          "path": "/_/api/v1/threads",
          "summary": "Every thread in this account, newest first, with its board, its moderation state and its reply count",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "fed278a3c72c9ee70e314379ad21bc9e4686b352df7404d6a0750e9758524fa1"
    },
    {
      "id": "zpe-files",
      "title": "zpe files",
      "version": "5.0.0",
      "mount": "/files",
      "host": "zpe.vc",
      "base": "https://zpe.vc/files",
      "document": "https://zpe.vc/files/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-files.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "postCopy",
          "method": "POST",
          "path": "/_/api/v1/copy",
          "summary": "Copy a file or a whole folder to another path",
          "auth": "bearer"
        },
        {
          "operationId": "postCounts",
          "method": "POST",
          "path": "/_/api/v1/counts",
          "summary": "Count the direct children of one or more folders",
          "auth": "bearer"
        },
        {
          "operationId": "deleteDelete",
          "method": "DELETE",
          "path": "/_/api/v1/delete",
          "summary": "Delete a file or folder, or move it to the trash with `?soft=1`",
          "auth": "bearer"
        },
        {
          "operationId": "getDownload",
          "method": "GET",
          "path": "/_/api/v1/download",
          "summary": "Download one file's bytes",
          "auth": "bearer"
        },
        {
          "operationId": "getList",
          "method": "GET",
          "path": "/_/api/v1/list",
          "summary": "List one folder, sorted, folders first",
          "auth": "bearer"
        },
        {
          "operationId": "postMkdir",
          "method": "POST",
          "path": "/_/api/v1/mkdir",
          "summary": "Create a folder, with its parent markers",
          "auth": "bearer"
        },
        {
          "operationId": "postRename",
          "method": "POST",
          "path": "/_/api/v1/rename",
          "summary": "Rename or move a file or folder",
          "auth": "bearer"
        },
        {
          "operationId": "getSearch",
          "method": "GET",
          "path": "/_/api/v1/search",
          "summary": "Search the account's files by name",
          "auth": "bearer"
        },
        {
          "operationId": "getStat",
          "method": "GET",
          "path": "/_/api/v1/stat",
          "summary": "Read one file's metadata without its bytes",
          "auth": "bearer"
        },
        {
          "operationId": "getTrash",
          "method": "GET",
          "path": "/_/api/v1/trash",
          "summary": "List the trash, restore from it, or empty it",
          "auth": "bearer"
        },
        {
          "operationId": "postTrash",
          "method": "POST",
          "path": "/_/api/v1/trash",
          "summary": "List the trash, restore from it, or empty it",
          "auth": "bearer"
        },
        {
          "operationId": "deleteTrash",
          "method": "DELETE",
          "path": "/_/api/v1/trash",
          "summary": "List the trash, restore from it, or empty it",
          "auth": "bearer"
        },
        {
          "operationId": "putUpload",
          "method": "PUT",
          "path": "/_/api/v1/upload",
          "summary": "Upload a file, or write and remove one raw PUT at a time",
          "auth": "bearer"
        },
        {
          "operationId": "postUpload",
          "method": "POST",
          "path": "/_/api/v1/upload",
          "summary": "Upload a file, or write and remove one raw PUT at a time",
          "auth": "bearer"
        },
        {
          "operationId": "deleteUpload",
          "method": "DELETE",
          "path": "/_/api/v1/upload",
          "summary": "Upload a file, or write and remove one raw PUT at a time",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "26f28ec4228a2ca6250d215d63d6cc0e36f87455a4751d9bb57548015c8b2545"
    },
    {
      "id": "zpe-forms",
      "title": "zpe-forms",
      "version": "7.0.2",
      "mount": "/forms",
      "host": "zpe.vc",
      "base": "https://zpe.vc/forms",
      "document": "https://zpe.vc/forms/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-forms.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "postFormsByIdSubmissions",
          "method": "POST",
          "path": "/_/api/v1/forms/{publicId}/submissions",
          "summary": "Write one submission to the form that owns this public id",
          "auth": "public"
        },
        {
          "operationId": "optionsFormsByIdSubmissions",
          "method": "OPTIONS",
          "path": "/_/api/v1/forms/{publicId}/submissions",
          "summary": "CORS preflight for the write path, answered before any credential",
          "auth": "public"
        },
        {
          "operationId": "getSubmissions",
          "method": "GET",
          "path": "/_/api/v1/submissions",
          "summary": "Read the 200 most recent submissions of every form this account owns",
          "auth": "bearer"
        },
        {
          "operationId": "getConsoleMe",
          "method": "GET",
          "path": "/_/api/v1/console/me",
          "summary": "Who the caller is, as the door names them",
          "auth": "bearer"
        },
        {
          "operationId": "getConsoleForms",
          "method": "GET",
          "path": "/_/api/v1/console/forms",
          "summary": "List this account's forms, oldest first, with a submission count and the last one's time",
          "auth": "bearer"
        },
        {
          "operationId": "postConsoleForms",
          "method": "POST",
          "path": "/_/api/v1/console/forms",
          "summary": "Create a form in this account; the slug comes from the name and the public id is minted here",
          "auth": "bearer"
        },
        {
          "operationId": "getConsoleFormsById",
          "method": "GET",
          "path": "/_/api/v1/console/forms/{id}",
          "summary": "One form of this account, with its submission stats and its last 30 days",
          "auth": "bearer"
        },
        {
          "operationId": "deleteConsoleFormsById",
          "method": "DELETE",
          "path": "/_/api/v1/console/forms/{id}",
          "summary": "Delete a form and every submission it received",
          "auth": "bearer"
        },
        {
          "operationId": "patchConsoleFormsById",
          "method": "PATCH",
          "path": "/_/api/v1/console/forms/{id}",
          "summary": "Rename a form or replace its question set; the slug and the public id do not move",
          "auth": "bearer"
        },
        {
          "operationId": "getConsoleFormsByIdSubmissions",
          "method": "GET",
          "path": "/_/api/v1/console/forms/{id}/submissions",
          "summary": "This form's submissions, newest first",
          "auth": "bearer"
        },
        {
          "operationId": "deleteConsoleFormsByIdSubmissionsById",
          "method": "DELETE",
          "path": "/_/api/v1/console/forms/{id}/submissions/{submissionId}",
          "summary": "Delete one submission of this account's form",
          "auth": "bearer"
        },
        {
          "operationId": "getConsoleSettings",
          "method": "GET",
          "path": "/_/api/v1/console/settings",
          "summary": "What this deployment does about mail, which is not a setting a form can hold",
          "auth": "bearer"
        }
      ],
      "open": 2,
      "sha256": "e0c4776763ee8f097a777c51e081c7116ba68ef6d18a0b8a5c36ba3312c78dee"
    },
    {
      "id": "zpe-links",
      "title": "Links API",
      "version": "3.0.0",
      "mount": "/links",
      "host": "zpe.vc",
      "base": "https://zpe.vc/links",
      "document": "https://zpe.vc/links/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-links.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "getLinks",
          "method": "GET",
          "path": "/_/api/v1/links",
          "summary": "List all short links",
          "auth": "bearer"
        },
        {
          "operationId": "postLinks",
          "method": "POST",
          "path": "/_/api/v1/links",
          "summary": "Create a short link",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksById",
          "method": "GET",
          "path": "/_/api/v1/links/{id}",
          "summary": "Get a link with click stats",
          "auth": "bearer"
        },
        {
          "operationId": "putLinksById",
          "method": "PUT",
          "path": "/_/api/v1/links/{id}",
          "summary": "Update a link's URL, label, or expiry",
          "auth": "bearer"
        },
        {
          "operationId": "deleteLinksById",
          "method": "DELETE",
          "path": "/_/api/v1/links/{id}",
          "summary": "Delete a link permanently",
          "auth": "bearer"
        },
        {
          "operationId": "postLinksByIdDisable",
          "method": "POST",
          "path": "/_/api/v1/links/{id}/disable",
          "summary": "Disable a link",
          "auth": "bearer"
        },
        {
          "operationId": "postLinksByIdEnable",
          "method": "POST",
          "path": "/_/api/v1/links/{id}/enable",
          "summary": "Re-enable a disabled link",
          "auth": "bearer"
        },
        {
          "operationId": "postLinksByIdSlugs",
          "method": "POST",
          "path": "/_/api/v1/links/{id}/slugs",
          "summary": "Add a custom slug to a link",
          "auth": "bearer"
        },
        {
          "operationId": "postLinksByIdSlugsBySlugDisable",
          "method": "POST",
          "path": "/_/api/v1/links/{id}/slugs/{slug}/disable",
          "summary": "Disable a specific slug on a link",
          "auth": "bearer"
        },
        {
          "operationId": "postLinksByIdSlugsBySlugEnable",
          "method": "POST",
          "path": "/_/api/v1/links/{id}/slugs/{slug}/enable",
          "summary": "Re-enable a disabled slug on a link",
          "auth": "bearer"
        },
        {
          "operationId": "deleteLinksByIdSlugsBySlug",
          "method": "DELETE",
          "path": "/_/api/v1/links/{id}/slugs/{slug}",
          "summary": "Remove a custom slug from a link",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksByIdQr",
          "method": "GET",
          "path": "/_/api/v1/links/{id}/qr",
          "summary": "Get a QR code SVG for a link",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksByIdBundles",
          "method": "GET",
          "path": "/_/api/v1/links/{id}/bundles",
          "summary": "List bundles a link belongs to",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksByIdAnalytics",
          "method": "GET",
          "path": "/_/api/v1/links/{id}/analytics",
          "summary": "Get analytics for a link (defaults to all-time)",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksByIdTimeline",
          "method": "GET",
          "path": "/_/api/v1/links/{id}/timeline",
          "summary": "Get click timeline for a link (defaults to all-time)",
          "auth": "bearer"
        },
        {
          "operationId": "getLinksByIdBreakdown",
          "method": "GET",
          "path": "/_/api/v1/links/{id}/breakdown",
          "summary": "Page through a link's countries, sources, or domains breakdown",
          "auth": "bearer"
        },
        {
          "operationId": "getSlugsBySlug",
          "method": "GET",
          "path": "/_/api/v1/slugs/{slug}",
          "summary": "Look up a link by its slug",
          "auth": "bearer"
        },
        {
          "operationId": "getBundles",
          "method": "GET",
          "path": "/_/api/v1/bundles",
          "summary": "List bundles",
          "auth": "bearer"
        },
        {
          "operationId": "postBundles",
          "method": "POST",
          "path": "/_/api/v1/bundles",
          "summary": "Create a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "getBundlesById",
          "method": "GET",
          "path": "/_/api/v1/bundles/{id}",
          "summary": "Get a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "putBundlesById",
          "method": "PUT",
          "path": "/_/api/v1/bundles/{id}",
          "summary": "Update a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "deleteBundlesById",
          "method": "DELETE",
          "path": "/_/api/v1/bundles/{id}",
          "summary": "Delete a bundle permanently",
          "auth": "bearer"
        },
        {
          "operationId": "postBundlesByIdArchive",
          "method": "POST",
          "path": "/_/api/v1/bundles/{id}/archive",
          "summary": "Archive a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "postBundlesByIdUnarchive",
          "method": "POST",
          "path": "/_/api/v1/bundles/{id}/unarchive",
          "summary": "Unarchive a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "getBundlesByIdAnalytics",
          "method": "GET",
          "path": "/_/api/v1/bundles/{id}/analytics",
          "summary": "Get bundle analytics. Defaults to all-time if no range given.",
          "auth": "bearer"
        },
        {
          "operationId": "getBundlesByIdBreakdown",
          "method": "GET",
          "path": "/_/api/v1/bundles/{id}/breakdown",
          "summary": "Page through a bundle's countries, sources, or domains breakdown",
          "auth": "bearer"
        },
        {
          "operationId": "getBundlesByIdLinks",
          "method": "GET",
          "path": "/_/api/v1/bundles/{id}/links",
          "summary": "List links in a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "postBundlesByIdLinks",
          "method": "POST",
          "path": "/_/api/v1/bundles/{id}/links",
          "summary": "Add a link to a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "deleteBundlesByIdLinksByLinkId",
          "method": "DELETE",
          "path": "/_/api/v1/bundles/{id}/links/{linkId}",
          "summary": "Remove a link from a bundle",
          "auth": "bearer"
        },
        {
          "operationId": "getPages",
          "method": "GET",
          "path": "/_/api/v1/pages",
          "summary": "List the pages this key can write",
          "auth": "bearer"
        },
        {
          "operationId": "getPagesByName",
          "method": "GET",
          "path": "/_/api/v1/pages/{name}",
          "summary": "Read one page, and its numbers",
          "auth": "bearer"
        },
        {
          "operationId": "putPagesByName",
          "method": "PUT",
          "path": "/_/api/v1/pages/{name}",
          "summary": "Write a page's fields",
          "auth": "bearer"
        },
        {
          "operationId": "getPagesByNameSubmissions",
          "method": "GET",
          "path": "/_/api/v1/pages/{name}/submissions",
          "summary": "Read a page's answers",
          "auth": "bearer"
        },
        {
          "operationId": "postPagesByNameBlocks",
          "method": "POST",
          "path": "/_/api/v1/pages/{name}/blocks",
          "summary": "Add a block",
          "auth": "bearer"
        },
        {
          "operationId": "deletePagesByNameBlocksById",
          "method": "DELETE",
          "path": "/_/api/v1/pages/{name}/blocks/{id}",
          "summary": "Remove one block",
          "auth": "bearer"
        },
        {
          "operationId": "patchPagesByNameBlocksById",
          "method": "PATCH",
          "path": "/_/api/v1/pages/{name}/blocks/{id}",
          "summary": "Change one block",
          "auth": "bearer"
        },
        {
          "operationId": "postPagesByNamePublish",
          "method": "POST",
          "path": "/_/api/v1/pages/{name}/publish",
          "summary": "Publish a page",
          "auth": "bearer"
        },
        {
          "operationId": "postPagesByNameUnpublish",
          "method": "POST",
          "path": "/_/api/v1/pages/{name}/unpublish",
          "summary": "Unpublish a page",
          "auth": "bearer"
        },
        {
          "operationId": "getNew",
          "method": "GET",
          "path": "/new",
          "summary": "The intake page",
          "auth": "bearer"
        },
        {
          "operationId": "getNewApiForm",
          "method": "GET",
          "path": "/new/api/form",
          "summary": "The form was opened (the dwell anchor's row)",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiSubmit",
          "method": "POST",
          "path": "/new/api/submit",
          "summary": "One drop: the answers and the files in one body",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiByReceiptFiles",
          "method": "POST",
          "path": "/new/api/{receipt}/files",
          "summary": "The receipt holder adds files after the drop",
          "auth": "bearer"
        },
        {
          "operationId": "getNewApiByReceiptContent",
          "method": "GET",
          "path": "/new/api/{receipt}/content",
          "summary": "The assembled object (key)",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiByReceiptContent",
          "method": "POST",
          "path": "/new/api/{receipt}/content",
          "summary": "The assembler writes the object, once (key)",
          "auth": "bearer"
        },
        {
          "operationId": "getNewApiByReceiptMessage",
          "method": "GET",
          "path": "/new/api/{receipt}/message",
          "summary": "The held message, its sign-off and its attempts (key)",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiByReceiptMessage",
          "method": "POST",
          "path": "/new/api/{receipt}/message",
          "summary": "Write the held message for a row already read (key)",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiByReceiptMessageSign",
          "method": "POST",
          "path": "/new/api/{receipt}/message/sign",
          "summary": "Record a sign-off naming the body and the recipient (key)",
          "auth": "bearer"
        },
        {
          "operationId": "postNewApiByReceiptRelease",
          "method": "POST",
          "path": "/new/api/{receipt}/release",
          "summary": "The app's only send (key, and refused without a sign-off)",
          "auth": "bearer"
        },
        {
          "operationId": "getNewRByReceipt",
          "method": "GET",
          "path": "/new/r/{receipt}",
          "summary": "The page the submitter waits on",
          "auth": "bearer"
        },
        {
          "operationId": "postNewRByReceiptClaim",
          "method": "POST",
          "path": "/new/r/{receipt}/claim",
          "summary": "Keep the published page, once, for the door's principal",
          "auth": "bearer"
        },
        {
          "operationId": "postNewRByReceiptEmail",
          "method": "POST",
          "path": "/new/r/{receipt}/email",
          "summary": "The address the page asks for when the record holds none",
          "auth": "bearer"
        },
        {
          "operationId": "getNewRByReceiptConfirm",
          "method": "GET",
          "path": "/new/r/{receipt}/confirm",
          "summary": "The correction page",
          "auth": "bearer"
        },
        {
          "operationId": "postNewRByReceiptConfirm",
          "method": "POST",
          "path": "/new/r/{receipt}/confirm",
          "summary": "The person's press, which is what confirms",
          "auth": "bearer"
        },
        {
          "operationId": "getNewRByReceiptFById",
          "method": "GET",
          "path": "/new/r/{receipt}/f/{id}",
          "summary": "One stored file, streamed through the worker",
          "auth": "bearer"
        },
        {
          "operationId": "getPublishedPage",
          "method": "GET",
          "path": "/u/{slug}",
          "summary": "The published page",
          "auth": "bearer"
        },
        {
          "operationId": "getPublishedPageCard",
          "method": "GET",
          "path": "/u/{slug}/card.vcf",
          "summary": "The published page's card, as a vCard",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "5853a3d6f253e8f9c6cc43378a2d0c01b79682e6d596a9bc49bb99f71c426b1d"
    },
    {
      "id": "zpe-mind-mapper",
      "title": "mind-mapper API",
      "version": "1.0.0",
      "mount": "/mindmap",
      "host": "zpe.vc",
      "base": "https://zpe.vc/mindmap",
      "document": "https://zpe.vc/mindmap/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-mind-mapper.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getHealth",
          "method": "GET",
          "path": "/api/health",
          "summary": "Liveness, and whether the gate, the database, the assets and the human check are wired.",
          "auth": "public"
        },
        {
          "operationId": "getSession",
          "method": "GET",
          "path": "/api/session",
          "summary": "Is there a live fleet sign-in on this request? The passkey door, read.",
          "auth": "public"
        },
        {
          "operationId": "postSignout",
          "method": "POST",
          "path": "/api/signout",
          "summary": "End the door's session, carrying the request's cookies to the door and the cleared ones back.",
          "auth": "public"
        },
        {
          "operationId": "getMindMapperMe",
          "method": "GET",
          "path": "/api/me",
          "summary": "Resolve the presented credential to one principal, and summarise what this app holds for it.",
          "auth": "public"
        },
        {
          "operationId": "postAccountStart",
          "method": "POST",
          "path": "/api/account/start",
          "summary": "Mint a new anonymous number. The number is returned once and never again.",
          "auth": "public"
        },
        {
          "operationId": "postAccountAttach",
          "method": "POST",
          "path": "/api/account/attach",
          "summary": "Adopt an existing number on this device. A wrong number and an unknown one answer alike.",
          "auth": "public"
        },
        {
          "operationId": "deleteAccount",
          "method": "DELETE",
          "path": "/api/account",
          "summary": "Delete what this app holds for the resolved principal, and nothing else.",
          "auth": "bearer"
        },
        {
          "operationId": "getResults",
          "method": "GET",
          "path": "/api/results",
          "summary": "Every stored result for the resolved principal.",
          "auth": "bearer"
        },
        {
          "operationId": "putResults",
          "method": "PUT",
          "path": "/api/results",
          "summary": "Upsert results, scoped to the resolved principal.",
          "auth": "bearer"
        },
        {
          "operationId": "getProfile",
          "method": "GET",
          "path": "/api/profile",
          "summary": "This app's profile row for the resolved principal.",
          "auth": "bearer"
        },
        {
          "operationId": "putProfile",
          "method": "PUT",
          "path": "/api/profile",
          "summary": "Upsert the resolved principal's profile row.",
          "auth": "bearer"
        },
        {
          "operationId": "getGroups",
          "method": "GET",
          "path": "/api/groups",
          "summary": "Every group the resolved principal is a member of, with their own share level.",
          "auth": "bearer"
        },
        {
          "operationId": "postGroups",
          "method": "POST",
          "path": "/api/groups",
          "summary": "Create a group. The creator is owner and a member, and an invite is returned once.",
          "auth": "bearer"
        },
        {
          "operationId": "postGroupsJoin",
          "method": "POST",
          "path": "/api/groups/join",
          "summary": "Join a group by its invite code.",
          "auth": "bearer"
        },
        {
          "operationId": "postGroupsLeave",
          "method": "POST",
          "path": "/api/groups/leave",
          "summary": "Leave a group the resolved principal is a member of.",
          "auth": "bearer"
        },
        {
          "operationId": "getGroupsById",
          "method": "GET",
          "path": "/api/groups/{id}",
          "summary": "A group's detail: membership, the caller's share level, their own per-test switches.",
          "auth": "bearer"
        },
        {
          "operationId": "putGroupsByIdShare",
          "method": "PUT",
          "path": "/api/groups/{id}/share",
          "summary": "Set the caller's OWN share level in this group.",
          "auth": "bearer"
        },
        {
          "operationId": "putGroupsByIdDots",
          "method": "PUT",
          "path": "/api/groups/{id}/dots",
          "summary": "Show the caller's own value as a dot in this group's profile, or stop showing it.",
          "auth": "bearer"
        },
        {
          "operationId": "putGroupsByIdTests",
          "method": "PUT",
          "path": "/api/groups/{id}/tests",
          "summary": "Set the caller's OWN per-test exclusions in this group.",
          "auth": "bearer"
        },
        {
          "operationId": "postGroupsByIdInvites",
          "method": "POST",
          "path": "/api/groups/{id}/invites",
          "summary": "The owner mints another invite. The code is returned once, here.",
          "auth": "bearer"
        },
        {
          "operationId": "getGroupsByIdStats",
          "method": "GET",
          "path": "/api/groups/{id}/stats",
          "summary": "The group profile: a median per dimension, with n, and the dots members chose to show.",
          "auth": "bearer"
        },
        {
          "operationId": "getGroupsByIdPairByPrincipalId",
          "method": "GET",
          "path": "/api/groups/{id}/pair/{principalId}",
          "summary": "Pairwise divergence with one other member.",
          "auth": "bearer"
        },
        {
          "operationId": "getMachineResults",
          "method": "GET",
          "path": "/_/api/v1/results",
          "summary": "The estate's machine address for this app: the same read as /api/results, keyed by the number.",
          "auth": "bearer"
        }
      ],
      "open": 6,
      "sha256": "0995a44fc0d12aeb1cea410e95e04b319f3204b15551b8902112ad2977453231"
    },
    {
      "id": "zpe-newsletter",
      "title": "zpe-newsletter",
      "version": "1.0.1",
      "mount": "/newsletter",
      "host": "zpe.vc",
      "base": "https://zpe.vc/newsletter",
      "document": "https://zpe.vc/newsletter/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-newsletter.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "postNewsletter",
          "method": "POST",
          "path": "/_/api/v1/newsletter",
          "summary": "Create this account's one newsletter list, or change its settings",
          "auth": "bearer"
        },
        {
          "operationId": "postSend",
          "method": "POST",
          "path": "/_/api/v1/send",
          "summary": "Queue a campaign to the list, or send one test to a single address",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "0c9885230f717693bbb2c10f6402ea19853e6ac89140f493bac23298576926e7"
    },
    {
      "id": "zpe-notes",
      "title": "zpe notes API",
      "version": "1.0.0",
      "mount": "/notes",
      "host": "zpe.vc",
      "base": "https://zpe.vc/notes",
      "document": "https://zpe.vc/notes/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-notes.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "listAttachments",
          "method": "GET",
          "path": "/_/api/v1/attachments",
          "summary": "Every image, video and file the account has",
          "auth": "bearer"
        },
        {
          "operationId": "createDocNode",
          "method": "POST",
          "path": "/_/api/v1/docs/node",
          "summary": "Create a doc file or folder",
          "auth": "bearer"
        },
        {
          "operationId": "getDocNode",
          "method": "GET",
          "path": "/_/api/v1/docs/node/{id}",
          "summary": "Read one doc node",
          "auth": "bearer"
        },
        {
          "operationId": "updateDocNode",
          "method": "PUT",
          "path": "/_/api/v1/docs/node/{id}",
          "summary": "Save a doc node's body",
          "auth": "bearer"
        },
        {
          "operationId": "deleteDocNode",
          "method": "DELETE",
          "path": "/_/api/v1/docs/node/{id}",
          "summary": "Delete a doc node and its subtree",
          "auth": "bearer"
        },
        {
          "operationId": "moveDocNode",
          "method": "PATCH",
          "path": "/_/api/v1/docs/node/{id}",
          "summary": "Move a doc node under another folder",
          "auth": "bearer"
        },
        {
          "operationId": "renameDocNode",
          "method": "POST",
          "path": "/_/api/v1/docs/node/{id}/rename",
          "summary": "Rename a doc node",
          "auth": "bearer"
        },
        {
          "operationId": "docsTree",
          "method": "GET",
          "path": "/_/api/v1/docs/tree",
          "summary": "The account's docs tree",
          "auth": "bearer"
        },
        {
          "operationId": "downloadAttachment",
          "method": "GET",
          "path": "/_/api/v1/files/{noteId}/{fileId}",
          "summary": "Download one attachment",
          "auth": "bearer"
        },
        {
          "operationId": "listNotes",
          "method": "GET",
          "path": "/_/api/v1/notes",
          "summary": "List the account's notes",
          "auth": "bearer"
        },
        {
          "operationId": "createNote",
          "method": "POST",
          "path": "/_/api/v1/notes",
          "summary": "Create a note, with attachments",
          "auth": "bearer"
        },
        {
          "operationId": "mergeNotes",
          "method": "POST",
          "path": "/_/api/v1/notes/merge",
          "summary": "Merge one note into another",
          "auth": "bearer"
        },
        {
          "operationId": "notesTimeline",
          "method": "GET",
          "path": "/_/api/v1/notes/timeline",
          "summary": "Counts of notes by year, month and day",
          "auth": "bearer"
        },
        {
          "operationId": "getNote",
          "method": "GET",
          "path": "/_/api/v1/notes/{id}",
          "summary": "Read one note, for the editor",
          "auth": "bearer"
        },
        {
          "operationId": "editNote",
          "method": "PUT",
          "path": "/_/api/v1/notes/{id}",
          "summary": "Edit a note, its attachments and its mood",
          "auth": "bearer"
        },
        {
          "operationId": "deleteNote",
          "method": "DELETE",
          "path": "/_/api/v1/notes/{id}",
          "summary": "Delete a note and its attachments",
          "auth": "bearer"
        },
        {
          "operationId": "shareNote",
          "method": "POST",
          "path": "/_/api/v1/notes/{id}/share",
          "summary": "Share a note to a public address",
          "auth": "bearer"
        },
        {
          "operationId": "revokeNoteShare",
          "method": "DELETE",
          "path": "/_/api/v1/notes/{id}/share",
          "summary": "Revoke a note's public link",
          "auth": "bearer"
        },
        {
          "operationId": "getPublicNoteRaw",
          "method": "GET",
          "path": "/_/api/v1/public/note/raw/{public_id}",
          "summary": "Read a shared note's text, as plain text",
          "auth": "public"
        },
        {
          "operationId": "getPublicNote",
          "method": "GET",
          "path": "/_/api/v1/public/note/{public_id}",
          "summary": "Read a shared note by its public id",
          "auth": "public"
        },
        {
          "operationId": "searchNotes",
          "method": "GET",
          "path": "/_/api/v1/search",
          "summary": "Search the account's notes",
          "auth": "bearer"
        },
        {
          "operationId": "getSettings",
          "method": "GET",
          "path": "/_/api/v1/settings",
          "summary": "Read the account's settings document",
          "auth": "bearer"
        },
        {
          "operationId": "putSettings",
          "method": "PUT",
          "path": "/_/api/v1/settings",
          "summary": "Replace the account's settings document",
          "auth": "bearer"
        },
        {
          "operationId": "noteStats",
          "method": "GET",
          "path": "/_/api/v1/stats",
          "summary": "Note, tag and age counts for the account",
          "auth": "bearer"
        },
        {
          "operationId": "listTags",
          "method": "GET",
          "path": "/_/api/v1/tags",
          "summary": "The account's tags, most used first",
          "auth": "bearer"
        }
      ],
      "open": 2,
      "sha256": "c5e2f7a9a0c24e6925d0bc9c2fdcbb04aaa1f962682a5fed34a435ecab2a74c7"
    },
    {
      "id": "zpe-pact",
      "title": "pact — the contract layer",
      "version": "2.0.1",
      "mount": "/pact",
      "host": "zpe.vc",
      "base": "https://zpe.vc/pact",
      "document": "https://zpe.vc/pact/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-pact.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "postPacts",
          "method": "POST",
          "path": "/_/api/v1/pacts",
          "summary": "Write a pact and freeze its first version, once per idempotency key.",
          "auth": "bearer"
        },
        {
          "operationId": "getPactsById",
          "method": "GET",
          "path": "/_/api/v1/pacts/{id}",
          "summary": "One pact at its current version: the terms, the parties, and that version's obligations.",
          "auth": "bearer"
        },
        {
          "operationId": "postPactsByIdSign",
          "method": "POST",
          "path": "/_/api/v1/pacts/{id}/sign",
          "summary": "Sign the version you were shown, as the party you are.",
          "auth": "bearer"
        },
        {
          "operationId": "getPactsByIdEvidence",
          "method": "GET",
          "path": "/_/api/v1/pacts/{id}/evidence",
          "summary": "Everything a stranger needs to check one pact, and the sentences that say what it does not prove.",
          "auth": "bearer"
        },
        {
          "operationId": "postPactsByIdInvite",
          "method": "POST",
          "path": "/_/api/v1/pacts/{id}/invite",
          "summary": "Mint one link that lets the person it is sent to read this pact and sign it, with no account.",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "e055a37c148de527b1cc64d6da0a33b0dad5a68542d82fd840727b9b13271c3e"
    },
    {
      "id": "zpe-paste",
      "title": "zpe-paste API",
      "version": "4.0.1",
      "mount": "/paste",
      "host": "zpe.vc",
      "base": "https://zpe.vc/paste",
      "document": "https://zpe.vc/paste/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-paste.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getPasteMe",
          "method": "GET",
          "path": "/_/api/v1/me",
          "summary": "GET /_/api/v1/me",
          "auth": "public"
        },
        {
          "operationId": "postPaste",
          "method": "POST",
          "path": "/_/api/v1/paste",
          "summary": "POST /_/api/v1/paste",
          "auth": "bearer"
        },
        {
          "operationId": "createGuestPaste",
          "method": "POST",
          "path": "/_/api/v1/guest/paste",
          "summary": "POST /_/api/v1/guest/paste",
          "auth": "public"
        },
        {
          "operationId": "getPastes",
          "method": "GET",
          "path": "/_/api/v1/pastes",
          "summary": "GET /_/api/v1/pastes",
          "auth": "bearer"
        },
        {
          "operationId": "getPasteById",
          "method": "GET",
          "path": "/_/api/v1/paste/{id}",
          "summary": "GET /_/api/v1/paste/:id",
          "auth": "public"
        },
        {
          "operationId": "deletePasteById",
          "method": "DELETE",
          "path": "/_/api/v1/paste/{id}",
          "summary": "DELETE /_/api/v1/paste/:id",
          "auth": "public"
        },
        {
          "operationId": "postPasteByIdConsume",
          "method": "POST",
          "path": "/_/api/v1/paste/{id}/consume",
          "summary": "POST /_/api/v1/paste/:id/consume",
          "auth": "public"
        }
      ],
      "open": 5,
      "sha256": "982077205357bb93732b397ac455e55f36087ed7cc20954770bfc405f8407346"
    },
    {
      "id": "zpe-receptionist",
      "title": "zpe-receptionist",
      "version": "4.0.1",
      "mount": "/receptionist",
      "host": "zpe.vc",
      "base": "https://zpe.vc/receptionist",
      "document": "https://zpe.vc/receptionist/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-receptionist.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getInbox",
          "method": "GET",
          "path": "/_/api/v1/inbox",
          "summary": "This account's conversations, newest first.",
          "auth": "bearer"
        },
        {
          "operationId": "getInboxById",
          "method": "GET",
          "path": "/_/api/v1/inbox/{id}",
          "summary": "One conversation and its messages.",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "965e8021337ad055f3c7a8e1e7292803abe897343d1c122fe24664c0d7df2915"
    },
    {
      "id": "zpe-repo-access",
      "title": "zpe repo access",
      "version": "2.0.0",
      "mount": "/repo-access",
      "host": "zpe.vc",
      "base": "https://zpe.vc/repo-access",
      "document": "https://zpe.vc/repo-access/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-repo-access.json",
      "lifecycle": "wip",
      "operations": [
        {
          "operationId": "getTenants",
          "method": "GET",
          "path": "/_/api/v1/tenants",
          "summary": "The caller's tenant, the names of its stored credentials, and how the call authenticated",
          "auth": "bearer"
        },
        {
          "operationId": "putTenants",
          "method": "PUT",
          "path": "/_/api/v1/tenants",
          "summary": "Create or update the caller's tenant: its label, org, product-to-team map and branding",
          "auth": "bearer"
        },
        {
          "operationId": "postTenants",
          "method": "POST",
          "path": "/_/api/v1/tenants",
          "summary": "Create or update the caller's tenant (the same write as PUT)",
          "auth": "bearer"
        },
        {
          "operationId": "deleteTenants",
          "method": "DELETE",
          "path": "/_/api/v1/tenants",
          "summary": "Revoke the tenant: remove its buyers from the org, expire its claims, drop its credentials",
          "auth": "bearer"
        },
        {
          "operationId": "getTenantsSecrets",
          "method": "GET",
          "path": "/_/api/v1/tenants/secrets",
          "summary": "The names of the tenant's stored credentials, never their values",
          "auth": "bearer"
        },
        {
          "operationId": "putTenantsSecretsById",
          "method": "PUT",
          "path": "/_/api/v1/tenants/secrets/{name}",
          "summary": "Store one credential (payment_webhook_secret or github_token), sealed under the tenant's key",
          "auth": "bearer"
        },
        {
          "operationId": "getTenantsPurchases",
          "method": "GET",
          "path": "/_/api/v1/tenants/purchases",
          "summary": "The account's 100 most recently updated purchases",
          "auth": "bearer"
        },
        {
          "operationId": "getTenantsEvents",
          "method": "GET",
          "path": "/_/api/v1/tenants/events",
          "summary": "The account's 100 most recent engine events",
          "auth": "bearer"
        },
        {
          "operationId": "postTenantsReconcile",
          "method": "POST",
          "path": "/_/api/v1/tenants/reconcile",
          "summary": "Re-assert every grant the tenant should hold against GitHub, and report what changed",
          "auth": "bearer"
        },
        {
          "operationId": "postTenantsSweep",
          "method": "POST",
          "path": "/_/api/v1/tenants/sweep",
          "summary": "Run the queue sweep now: retry what is due, expire stale claim links",
          "auth": "bearer"
        },
        {
          "operationId": "getTokens",
          "method": "GET",
          "path": "/_/api/v1/tokens",
          "summary": "The account's API tokens: id, label and dates, never the token",
          "auth": "bearer"
        },
        {
          "operationId": "postTokens",
          "method": "POST",
          "path": "/_/api/v1/tokens",
          "summary": "Mint an API token. It is shown once, in this answer, and never again",
          "auth": "bearer"
        },
        {
          "operationId": "deleteTokensById",
          "method": "DELETE",
          "path": "/_/api/v1/tokens/{id}",
          "summary": "Revoke an API token by id",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "126bce66540204e232cdc8c29e1cd85dc9af4e695811678180dec5955a100165"
    },
    {
      "id": "zpe-reports",
      "title": "zpe-reports",
      "version": "1.0.1",
      "mount": "/reports",
      "host": "zpe.vc",
      "base": "https://zpe.vc/reports",
      "document": "https://zpe.vc/reports/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-reports.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getReportIndex",
          "method": "GET",
          "path": "/_/api/v1/reports",
          "summary": "Every report this caller may read, as a keyset page",
          "auth": "bearer"
        },
        {
          "operationId": "getReportBySlug",
          "method": "GET",
          "path": "/_/api/v1/reports/{slug}",
          "summary": "One report's build facts, to the caller that owns the slug",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "aff7ada2a991ef6276ff107e557414622345260d980bb1632284330e447b6e0b"
    },
    {
      "id": "zpe-reviews",
      "title": "zpe-reviews",
      "version": "0.3.1",
      "mount": "/reviews",
      "host": "zpe.vc",
      "base": "https://zpe.vc/reviews",
      "document": "https://zpe.vc/reviews/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-reviews.json",
      "lifecycle": "wip",
      "operations": [
        {
          "operationId": "getReviews",
          "method": "GET",
          "path": "/_/api/v1/reviews",
          "summary": "Every review this account holds, newest first, with what verified it and its state",
          "auth": "bearer"
        },
        {
          "operationId": "getWall",
          "method": "GET",
          "path": "/_/api/v1/wall",
          "summary": "The two populations and their counts, with the gap published only above the minimum sample",
          "auth": "bearer"
        },
        {
          "operationId": "postErasures",
          "method": "POST",
          "path": "/_/api/v1/erasures",
          "summary": "Honour an erasure request by the person's address: the contact record goes, the review becomes a tombstone, one event records it",
          "auth": "bearer"
        },
        {
          "operationId": "postRepliesForward",
          "method": "POST",
          "path": "/_/api/v1/replies/forward",
          "summary": "Turn the copy of a tenant's replies on or off and say where it goes. The stored inbox is never affected",
          "auth": "bearer"
        },
        {
          "operationId": "postAppeals",
          "method": "POST",
          "path": "/_/api/v1/appeals",
          "summary": "Decide a removal appeal. Refused when the deciding principal is the one who removed it, so the chain shows two signatures",
          "auth": "bearer"
        },
        {
          "operationId": "postInvitations",
          "method": "POST",
          "path": "/_/api/v1/invitations",
          "summary": "Create an invitation per eligible purchase and, when a sender is configured, send it. One purchase buys one review, and the address is never stored",
          "auth": "bearer"
        },
        {
          "operationId": "postBusinesses",
          "method": "POST",
          "path": "/_/api/v1/businesses",
          "summary": "Create a business under this account. Its public id is the URL, the claim record's label and the reply local part at once",
          "auth": "bearer"
        },
        {
          "operationId": "postPurchases",
          "method": "POST",
          "path": "/_/api/v1/purchases",
          "summary": "Record purchases against a business, hashing each address. A purchase is the proof a review rests on, so a duplicate reference is refused rather than counted twice",
          "auth": "bearer"
        },
        {
          "operationId": "postClaims",
          "method": "POST",
          "path": "/_/api/v1/claims",
          "summary": "State the domain a business owns and get the record name and value that prove it, or the page tag instead",
          "auth": "bearer"
        },
        {
          "operationId": "postClaimsVerify",
          "method": "POST",
          "path": "/_/api/v1/claims/verify",
          "summary": "Read the TXT record and the page, and mark the business claimed when either answers. Until then it can publish nothing",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "6b5cb343674bec2f44adb2b3d42aed3d68aeb794f2d80198ba7c46453492771c"
    },
    {
      "id": "zpe-scraper",
      "title": "zpe-scraper",
      "version": "5.0.0",
      "mount": "/",
      "host": "scrape.zpe.vc",
      "base": "https://scrape.zpe.vc",
      "document": "https://scrape.zpe.vc/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-scraper.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "postScrape",
          "method": "POST",
          "path": "/_/api/v1/scrape",
          "summary": "POST /_/api/v1/scrape",
          "auth": "bearer"
        },
        {
          "operationId": "postMap",
          "method": "POST",
          "path": "/_/api/v1/map",
          "summary": "POST /_/api/v1/map",
          "auth": "bearer"
        },
        {
          "operationId": "getBalance",
          "method": "GET",
          "path": "/_/api/v1/balance",
          "summary": "GET /_/api/v1/balance",
          "auth": "bearer"
        },
        {
          "operationId": "getUsage",
          "method": "GET",
          "path": "/_/api/v1/usage",
          "summary": "GET /_/api/v1/usage",
          "auth": "bearer"
        },
        {
          "operationId": "getKeys",
          "method": "GET",
          "path": "/_/api/v1/keys",
          "summary": "GET /_/api/v1/keys",
          "auth": "bearer"
        },
        {
          "operationId": "postKeys",
          "method": "POST",
          "path": "/_/api/v1/keys",
          "summary": "POST /_/api/v1/keys",
          "auth": "bearer"
        },
        {
          "operationId": "deleteKeysById",
          "method": "DELETE",
          "path": "/_/api/v1/keys/{id}",
          "summary": "DELETE /_/api/v1/keys/:id",
          "auth": "bearer"
        },
        {
          "operationId": "getDomains",
          "method": "GET",
          "path": "/_/api/v1/domains",
          "summary": "GET /_/api/v1/domains",
          "auth": "bearer"
        },
        {
          "operationId": "postDomains",
          "method": "POST",
          "path": "/_/api/v1/domains",
          "summary": "POST /_/api/v1/domains",
          "auth": "bearer"
        },
        {
          "operationId": "deleteDomainsById",
          "method": "DELETE",
          "path": "/_/api/v1/domains/{domain}",
          "summary": "DELETE /_/api/v1/domains/:domain",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "0851eab0d2b2a3a777bfcf26fc4befd93d9ec4997e25cd1bb5beac8ddeb2e8b6"
    },
    {
      "id": "zpe-screens",
      "title": "zpe-screens",
      "version": "1.0.1",
      "mount": "/screens",
      "host": "zpe.vc",
      "base": "https://zpe.vc/screens",
      "document": "https://zpe.vc/screens/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-screens.json",
      "lifecycle": "wip",
      "operations": [
        {
          "operationId": "getScreens",
          "method": "GET",
          "path": "/_/api/v1/screens",
          "summary": "Search captures by the text on the page, host, path and time",
          "auth": "bearer"
        },
        {
          "operationId": "postScreens",
          "method": "POST",
          "path": "/_/api/v1/screens",
          "summary": "Store one capture, bound to the commit it came from",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "e2356be5b7e01c8aae7d6e3672645d2f3d89ba83ee61a87aec854fb999e4f5e7"
    },
    {
      "id": "zpe-stats",
      "title": "zpe-stats",
      "version": "1.1.5",
      "mount": "/analytics",
      "host": "zpe.vc",
      "base": "https://zpe.vc/analytics",
      "document": null,
      "documentKind": "none",
      "documentRecord": "built from the worker's own dispatch table (`ROUTES` in `packages/server/src/app.ts`) by `packages/server/tools/emit-spec.ts`; the app answers no `/openapi.json` route, so the registry's copy is the only published form of these bytes",
      "contractFile": "apis/zpe-stats.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "getLatestCensusRun",
          "method": "GET",
          "path": "/api/v1/data/runs/latest",
          "summary": "The newest census run, and the stores it read",
          "auth": "bearer"
        },
        {
          "operationId": "getCensusRun",
          "method": "GET",
          "path": "/api/v1/data/runs/{run_id}",
          "summary": "One census run by its id, and the stores it read",
          "auth": "bearer"
        },
        {
          "operationId": "listCensusRuns",
          "method": "GET",
          "path": "/api/v1/data/runs",
          "summary": "The census history, newest run first",
          "auth": "bearer"
        },
        {
          "operationId": "postCensusRun",
          "method": "POST",
          "path": "/api/v1/data/runs",
          "summary": "Record a census run the instrument measured",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "fe317fef53ddae1ade416a9cf01e710752c13f107ad9870c26d9ba05f1a20e9a"
    },
    {
      "id": "zpe-status",
      "title": "zpe-status",
      "version": "3.0.1",
      "mount": "/",
      "host": "status.zpe.vc",
      "base": "https://status.zpe.vc",
      "document": "https://status.zpe.vc/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-status.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "getUniverse",
          "method": "GET",
          "path": "/_/api/v1/universe",
          "summary": "Every app the registry declares, joined to this account's monitor and its last check",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "29dd2a01a28236e9b4944c34aec79404006a7584f653dbfecec8be5b4f87c70c"
    },
    {
      "id": "zpe-store",
      "title": "zpe-store",
      "version": "3.0.1",
      "mount": "/store",
      "host": "zpe.vc",
      "base": "https://zpe.vc/store",
      "document": "https://zpe.vc/store/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-store.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getOrders",
          "method": "GET",
          "path": "/_/api/v1/orders",
          "summary": "GET /_/api/v1/orders",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "2893f4c7db7a7f796dee762205b1b7a3a1b137e52c7b5ae85479ce3870ed1a5a"
    },
    {
      "id": "zpe-tv",
      "title": "tv-cleaner",
      "version": "1.0.1",
      "mount": "/tv",
      "host": "zpe.vc",
      "base": "https://zpe.vc/tv",
      "document": "https://zpe.vc/tv/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-tv.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "getBlocks",
          "method": "GET",
          "path": "/_/api/v1/blocks",
          "summary": "A blocklist for one brand, in the dialect a blocker reads.",
          "auth": "public"
        },
        {
          "operationId": "getCatalog",
          "method": "GET",
          "path": "/_/api/v1/catalog",
          "summary": "Every rule with its class, confidence, sources and evidence, plus the artifact sha.",
          "auth": "public"
        },
        {
          "operationId": "getBrands",
          "method": "GET",
          "path": "/_/api/v1/brands",
          "summary": "The platform profiles, including whether the on-device opt-out was found to work.",
          "auth": "public"
        },
        {
          "operationId": "getDataset",
          "method": "GET",
          "path": "/_/api/v1/dataset",
          "summary": "The anonymised aggregates, floored so no single submission can publish a host.",
          "auth": "public"
        },
        {
          "operationId": "postDataset",
          "method": "POST",
          "path": "/_/api/v1/dataset",
          "summary": "Submit one anonymous observation: a rotating pseudonym, the platform, and hostnames with bucketed counts.",
          "auth": "public"
        }
      ],
      "open": 5,
      "sha256": "7817b8b18fe58ada5c4945d97f0069097d5ccc4db837fb19444de11f41a88edc"
    },
    {
      "id": "zpe-uw",
      "title": "uw — the drafting page and the scoreboard",
      "version": "2.1.0",
      "mount": "/uw",
      "host": "zpe.vc",
      "base": "https://zpe.vc/uw",
      "document": "https://zpe.vc/uw/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-uw.json",
      "lifecycle": "beta",
      "operations": [
        {
          "operationId": "uwState",
          "method": "GET",
          "path": "/_/api/v1/state",
          "summary": "The scoreboard, the published snapshot's job list, and one job's two panes and history.",
          "auth": "bearer"
        },
        {
          "operationId": "uwSaveDraft",
          "method": "POST",
          "path": "/_/api/v1/save",
          "summary": "Append his version of one job's letter, once per idempotency key.",
          "auth": "bearer"
        },
        {
          "operationId": "uwDrafts",
          "method": "GET",
          "path": "/_/api/v1/drafts",
          "summary": "The drafts this session may read, oldest first.",
          "auth": "bearer"
        },
        {
          "operationId": "uwEvents",
          "method": "GET",
          "path": "/_/api/v1/events",
          "summary": "This account's record after one event's id, oldest first, one page at a time.",
          "auth": "bearer"
        },
        {
          "operationId": "uwSendRequestState",
          "method": "GET",
          "path": "/_/api/v1/send",
          "summary": "One send request's state, for the page and for a client polling it.",
          "auth": "bearer"
        },
        {
          "operationId": "uwSendRequest",
          "method": "POST",
          "path": "/_/api/v1/send",
          "summary": "Queue a send request: a prepare (Upwork's preview) or a confirm (the submit).",
          "auth": "bearer"
        }
      ],
      "open": 0,
      "sha256": "9f319e10c028def0472a99e1d2ae2e9bce0728000d90df2385c3fb6af474749c"
    },
    {
      "id": "zpe-vc",
      "title": "zpe front door",
      "version": "1.0.0",
      "mount": "https://zpe.vc",
      "host": "zpe.vc",
      "base": "https://zpe.vc",
      "document": "https://zpe.vc/_/api/v1/openapi.json",
      "documentKind": "address",
      "documentRecord": "/_/api/v1/openapi.json",
      "contractFile": "apis/zpe-vc.json",
      "lifecycle": "stable",
      "operations": [
        {
          "operationId": "getHome",
          "method": "GET",
          "path": "/_/api/v1/home",
          "summary": "The home page model",
          "auth": "public"
        },
        {
          "operationId": "getHomeContract",
          "method": "GET",
          "path": "/_/api/v1/openapi.json",
          "summary": "This document",
          "auth": "public"
        }
      ],
      "open": 2,
      "sha256": "9e6f9783bd7f2975fb927f21ca5a44788583303f1b5193eb892cbf9ad27c73f3"
    }
  ],
  "sources": {
    "apis/zpe-booking.json": "9d5931e8be4376b3a6b3de640e44f8a7b81df4a470c2b5bda2ef126de0e68fca",
    "apis/zpe-chat.json": "4be2961b87ca2fcbac70d45fc602e9142850a7c86ea4bd185987a0e7cfcf1929",
    "apis/zpe-comments.json": "08673dafb7ad8fb25d67196609f93a4399b71fadca35a76b9ea9a31387e37dbc",
    "apis/zpe-crew.json": "e8b729990a6a9fad935f06c52566f10f7e85e75e034714a42e00677e3e137519",
    "apis/zpe-feedback.json": "fed278a3c72c9ee70e314379ad21bc9e4686b352df7404d6a0750e9758524fa1",
    "apis/zpe-files.json": "26f28ec4228a2ca6250d215d63d6cc0e36f87455a4751d9bb57548015c8b2545",
    "apis/zpe-forms.json": "e0c4776763ee8f097a777c51e081c7116ba68ef6d18a0b8a5c36ba3312c78dee",
    "apis/zpe-links.json": "5853a3d6f253e8f9c6cc43378a2d0c01b79682e6d596a9bc49bb99f71c426b1d",
    "apis/zpe-mind-mapper.json": "0995a44fc0d12aeb1cea410e95e04b319f3204b15551b8902112ad2977453231",
    "apis/zpe-newsletter.json": "0c9885230f717693bbb2c10f6402ea19853e6ac89140f493bac23298576926e7",
    "apis/zpe-notes.json": "c5e2f7a9a0c24e6925d0bc9c2fdcbb04aaa1f962682a5fed34a435ecab2a74c7",
    "apis/zpe-pact.json": "e055a37c148de527b1cc64d6da0a33b0dad5a68542d82fd840727b9b13271c3e",
    "apis/zpe-paste.json": "982077205357bb93732b397ac455e55f36087ed7cc20954770bfc405f8407346",
    "apis/zpe-receptionist.json": "965e8021337ad055f3c7a8e1e7292803abe897343d1c122fe24664c0d7df2915",
    "apis/zpe-repo-access.json": "126bce66540204e232cdc8c29e1cd85dc9af4e695811678180dec5955a100165",
    "apis/zpe-reports.json": "aff7ada2a991ef6276ff107e557414622345260d980bb1632284330e447b6e0b",
    "apis/zpe-reviews.json": "6b5cb343674bec2f44adb2b3d42aed3d68aeb794f2d80198ba7c46453492771c",
    "apis/zpe-scraper.json": "0851eab0d2b2a3a777bfcf26fc4befd93d9ec4997e25cd1bb5beac8ddeb2e8b6",
    "apis/zpe-screens.json": "e2356be5b7e01c8aae7d6e3672645d2f3d89ba83ee61a87aec854fb999e4f5e7",
    "apis/zpe-stats.json": "fe317fef53ddae1ade416a9cf01e710752c13f107ad9870c26d9ba05f1a20e9a",
    "apis/zpe-status.json": "29dd2a01a28236e9b4944c34aec79404006a7584f653dbfecec8be5b4f87c70c",
    "apis/zpe-store.json": "2893f4c7db7a7f796dee762205b1b7a3a1b137e52c7b5ae85479ce3870ed1a5a",
    "apis/zpe-tv.json": "7817b8b18fe58ada5c4945d97f0069097d5ccc4db837fb19444de11f41a88edc",
    "apis/zpe-uw.json": "9f319e10c028def0472a99e1d2ae2e9bce0728000d90df2385c3fb6af474749c",
    "apis/zpe-vc.json": "9e6f9783bd7f2975fb927f21ca5a44788583303f1b5193eb892cbf9ad27c73f3"
  }
}