Skip to content

Content Access Capability

  • Capability Name: dev.ucap.content.access

The primary capability — fetching content with automatic entitlement verification. When an agent requests content, the server checks the agent's entitlements and returns either the full content (200) or subscription offers (402).

Endpoints

Method Path Description
GET /v1/content/{publisher_id}/{post_id} Fetch content by publisher and post ID
GET /v1/content?url={original_url} Fetch content by original URL

Operations

Fetch Content

Retrieve a single piece of content. The server verifies the agent's identity and entitlements before returning the content.

GET /v1/content/{publisher_id}/{post_id} HTTP/1.1
Host: api.example.com
Signature-Agent: {agent_id}
Signature: sig=:{base64_signature}:
Signature-Input: sig=("@method" "@path" "host" "date");keyid="{agent_id}"
Date: Wed, 04 Feb 2026 12:00:00 GMT
UCAP-Purpose: read
Authorization: Bearer {user_token}

The Authorization header is OPTIONAL — it is only required for identity-linked requests where an agent acts on behalf of a specific user.

{
  "content": {
    "html": "<article>Full post content...</article>",
    "text": "Plain text version...",
    "format": "html"
  },
  "metadata": {
    "id": "post-123",
    "title": "Premium Article Title",
    "author": "Creator Name",
    "published_at": "2026-02-01T10:00:00Z",
    "updated_at": "2026-02-02T15:30:00Z",
    "tier": "premium",
    "word_count": 2500,
    "reading_time_minutes": 10
  },
  "publisher": {
    "id": "my-newsletter",
    "name": "My Newsletter",
    "url": "https://example.com/my-newsletter"
  },
  "attribution": {
    "required": true,
    "format": "Source: [My Newsletter](https://example.com/my-newsletter/post-123)"
  }
}
{
  "error": {
    "code": "payment_required",
    "message": "This content requires a subscription"
  },
  "teaser": {
    "title": "Premium Article Title",
    "excerpt": "First 200 characters of the article...",
    "text": "The leaked GPT-5 benchmarks reveal significant jumps in reasoning, code generation, and multi-step planning. In this deep dive, we analyze what the numbers actually mean, compare them to Claude 4 and Gemini Ultra, and explore what this signals for the broader AI industry...",
    "word_count": 150,
    "format": "text",
    "author": "Creator Name",
    "published_at": "2026-02-01T10:00:00Z"
  },
  "offers": [
    {
      "tier_id": "premium",
      "tier_name": "Premium",
      "price": {
        "amount": 1500,
        "currency": "USD",
        "interval": "month"
      },
      "features": [
        "Full access to all premium posts",
        "Early access to new content"
      ],
      "checkout_url": "https://example.com/checkout/session_abc123"
    },
    {
      "tier_id": "supporter",
      "tier_name": "Supporter",
      "price": {
        "amount": 500,
        "currency": "USD",
        "interval": "month"
      },
      "features": [
        "Access to members-only posts"
      ],
      "checkout_url": "https://example.com/checkout/session_def456"
    }
  ],
  "publisher": {
    "id": "my-newsletter",
    "name": "My Newsletter"
  }
}

Response Fields

Content Object

Field Type Description
html string Full content in HTML format
text string Plain text version of the content
format string Content format (html, markdown, text)

Metadata Object

Field Type Description
id string Post identifier
title string Post title
author string Author name
published_at string Publication timestamp (RFC 3339)
updated_at string Last update timestamp (RFC 3339)
tier string Content tier ID
word_count integer Content word count
reading_time_minutes integer Estimated reading time in minutes

Attribution Object

Field Type Description
required boolean Whether attribution is required
license string Content license (e.g., CC-BY-4.0)
format string Suggested attribution format string

Teaser Object (402 Response)

Field Type Description
title string Post title
excerpt string Short preview blurb (1–2 sentences)
text string Publisher-authored preview content (see Teasers)
word_count integer Number of words in the teaser text
format string Teaser text format: text, html, markdown
author string Author name
published_at string Publication timestamp (RFC 3339)

The text field provides a substantial publisher-authored preview that gives agents enough context to evaluate the content's relevance. See Publisher Teasers for details on how publishers configure teasers.

Offer Object (402 Response)

Field Type Description
tier_id string Subscription tier identifier
tier_name string Human-readable tier name
price object Price with amount (cents), currency, interval
features string[] List of tier features
checkout_url string URL for the human to complete payment

Status Codes

Status Meaning
200 OK Content returned — agent is entitled
402 Payment Required Subscription needed — offers returned
403 Forbidden Agent not authenticated or invalid signature
404 Not Found Post does not exist
429 Too Many Requests Rate limit exceeded

Guidelines

For UCAP Servers

  • Servers MUST verify HTTP Message Signatures (RFC 9421) before returning content
  • Servers MUST return 402 with at least one offer for paywalled content
  • Servers SHOULD include a teaser with title, excerpt, and publisher-authored preview text in 402 responses
  • Servers SHOULD include attribution requirements in 200 responses
  • Servers MAY support content access by original URL via the ?url= query parameter

For Agents

  • Agents MUST sign all requests per RFC 9421
  • Agents MUST handle 402 responses gracefully
  • Agents MUST present checkout URLs to humans — not auto-purchase
  • Agents SHOULD include the UCAP-Purpose header
  • Agents SHOULD respect attribution requirements when displaying content