Claim a kubbi

Consumer routes use the claim_token from the claim URL. No API key required. The claim URL is the credential.


GET/r/:claim_token

Preview a kubbi. Returns metadata plus a claim object with the URL and method to claim. Does not count as a retrieval.

Auth: None (claim URL is the credential)

Single-content response 200· json
{
  "status": "active",
  "content_type": "text/plain",
  "max_retrievals": 1,
  "retrieval_count": 0,
  "metadata": null,
  "created_at": "...",
  "expires_at": "...",
  "claim": {
    "url": "https://api.kubbi.ai/r/abc123xyz/claim",
    "method": "POST",
    "description": "Send a POST request to retrieve the content. This will count as a retrieval."
  }
}
Package response 200· json
{
  "type": "kubbi_package",
  "status": "active",
  "kubbi_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "file_count": 3,
  "total_size_bytes": 1234,
  "max_retrievals": 2,
  "retrieval_count": 0,
  "remaining_reads": 2,
  "metadata": null,
  "files": [
    { "name": "config.json", "content_type": "application/json", "size_bytes": 128, "role": "config" },
    { "name": "data.csv",    "content_type": "text/csv",         "size_bytes": 856, "role": "data" },
    { "name": "image.png",   "content_type": "image/png",        "size_bytes": 250, "role": "attachment" }
  ],
  "created_at": "...",
  "expires_at": "...",
  "claim": {
    "url": "https://api.kubbi.ai/r/pkg456xyz/claim",
    "method": "POST",
    "message": "This kubbi contains 3 files. POST to claim and retrieve contents."
  }
}
GET/r/:claim_token/inspect

Inspect a kubbi. Same as the preview endpoint above, but without the claim object. Does not count as a retrieval.

Auth: None (claim URL is the credential)

POST/r/:claim_token/claim

Claim a kubbi. Returns the decrypted content. No request body needed (empty POST). Counts as a retrieval. If this is the last allowed retrieval, the payload is permanently wiped.

Auth: None (claim URL is the credential)

Single-content response 200· json
{
  "content": "sensitive data here",
  "content_type": "text/plain",
  "metadata": null,
  "created_at": "...",
  "expires_at": "..."
}

For application/json, content is parsed JSON (an object or array). For text/plain, text/markdown, and text/csv, it is a string.

Package response 200· json
{
  "type": "kubbi_package",
  "file_count": 3,
  "metadata": null,
  "files": [
    {
      "name": "config.json",
      "content_type": "application/json",
      "size_bytes": 128,
      "role": "config",
      "content": "{\"env\":\"prod\"}"
    },
    {
      "name": "image.png",
      "content_type": "image/png",
      "size_bytes": 4096,
      "role": "attachment",
      "content": "iVBORw0KGgo...",
      "encoding": "base64"
    }
  ],
  "created_at": "...",
  "expires_at": "..."
}

Text files (text/* and application/json) have content as a UTF-8 string with no encoding field. Binary files have content as base64 with "encoding": "base64".