Registry API
Seed/1.0 — 2026

Any domain that implements the four endpoints below is a conforming Seed registry. The registry is the “plant” target and the “grow” source: publishers upload seeds and receive stable URLs; recipients fetch those URLs and the capsule bytes are returned verbatim. The protocol places no constraints on storage, billing, or discovery — only on the HTTP contract.

1.Authentication

Mutation operations (PATCH, DELETE) require an edit_key in the request body. Edit keys are opaque strings returned by POST /seeds and are never stored in the capsule. They are the sole authorization mechanism for updating or deleting a seed.

Registries MAY implement API key authentication (e.g. Authorization: Bearer sk_...) for extended features such as named seeds, higher rate limits, or permanent TTLs. API key handling is outside the scope of this specification.

2.Endpoints
POST /seeds

Plant a seed. The registry stores the capsule bytes, assigns an ID, and returns a stable URL and an edit key. The edit key is returned exactly once; the registry MUST NOT store or expose it again.

Request body (JSON)
// Content-Type: application/json "content": "...seed capsule bytes..." // required "prompt": "Publisher instruction." // optional "unlisted": false // optional; longer ID, shorter TTL "name": "dot.separated.name" // optional; permanent, paid
Response (201 Created)
"id": "abc12" "url": "https://registry.example/seeds/abc12" "edit_key": "ek_..." // returned once; store securely "expires_at": 1234567890 // unix timestamp; null if permanent

Content MUST be a conforming Seed/1.0 capsule. Maximum content size is implementation-defined; seed.show caps at 1 MB.

GET /seeds/:id

Grow a seed. Returns the raw capsule bytes. The response MUST set Content-Type: text/plain; charset=utf-8. Registries MAY return seed metadata in response headers (X-Seed-Name, X-Seed-Type). Browser requests MAY receive an HTML share page instead; use Accept: text/plain to request the raw capsule explicitly.

Response (200 OK)
// Content-Type: text/plain; charset=utf-8 ...raw seed capsule bytes...
PATCH /seeds/:id

Replant. Update the seed’s content or prompt. Requires the edit key issued at plant time.

Request body (JSON)
"edit_key": "ek_..." // required "content": "...new capsule bytes..." // optional "prompt": "Updated instruction." // optional
Response (200 OK)
"url": "https://registry.example/seeds/abc12" "updated_at": 1234567890
DELETE /seeds/:id

Uproot. Permanently removes the seed. The URL immediately returns 404. Requires the edit key.

Request body (JSON)
"edit_key": "ek_..."
Response
// 204 No Content
3.ID Formats

Registries MAY support multiple ID shapes with different TTL and discoverability properties. The following shapes are defined by seed.show and SHOULD be adopted by conforming registries.

Standard
abc12
5 chars, alphanumeric. Public. Default TTL (7–30 days).
Unlisted
X7kPqN2mRvBc4wZ9...
22 chars. Not indexed. Short TTL (1–24 hours). For one-off transfers.
Named
gmail.inbox.analyze
Dot-separated, lowercase. Permanent. Paid tier.
4.TTL Model

Registries SHOULD expire seeds after a reasonable period to prevent unbounded storage growth. The following TTLs are recommended.

Standard
7–30 days
Default for all seeds.
Unlisted
1–24 hours
Short-lived; for direct transfers.
Named
Permanent
No expiry; billing relationship assumed.

The expires_at field in the plant response MUST be a Unix timestamp in seconds, or null for permanent seeds. Registries MUST NOT return stale seeds after the expiry timestamp.

5.Conformance

A conforming registry MUST implement all four endpoints with the request and response shapes above. It MUST return seed bytes verbatim at GET /seeds/:id. It MUST NOT modify the capsule content. It SHOULD validate that planted content is a conforming Seed/1.0 capsule before storing.

6.Reference Implementation

seed.show is the reference Seed registry. It implements all four endpoints, three ID formats, the TTL model, and optional API-key authentication for the paid tier. Source: Cloudflare Workers + KV storage.