For developers
Register for an API key, and start creating and consuming fraglets via the fraglet.org API. If you've integrated with Stripe or OpenAI, the pattern is the same: a prefixed key, Bearer auth, JSON in and out.
Everything goes through the fraglet.org API. Register as a developer, get an API key, and you're ready.
Three steps to start using fraglets in your service.
Register as a developer at fraglet.org. You'll receive an API key prefixed frag_live_. Use it as a Bearer token in the Authorization header on every request.
POST /api/v1/fraglets to create a fraglet — the API generates the embedding automatically. GET /api/v1/fraglets/{id} to fetch one. GET /api/v1/fraglets/discover to browse open fraglets by domain.
Use the fraglet's embedding vector with your existing vector database (pgvector, Pinecone, Qdrant, etc.) to find the items in your catalogue closest to the user's characteristics.
import requests
API_KEY = "frag_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
BASE = "https://api.fraglet.org/api/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# Create a fraglet — embedding generated server-side
fraglet = requests.post(f"{BASE}/fraglets", headers=HEADERS, json={
"title": "Nocturnal jazz wanderer",
"brief": "Late-night jazz devotee drawn to intimate venues.",
"detail": "A deep appreciation for musicians who treat standards "
"as starting points rather than destinations...",
"category": "Contemporary jazz and fusion",
"tags": ["jazz", "post-bop", "intimate-venues"],
"domain": "music",
"visibility": "open"
}).json()
print(fraglet["id"]) # UUID
print(fraglet["embedding"]) # 3072-dim vector
# Fetch it back
fetched = requests.get(
f"{BASE}/fraglets/{fraglet['id']}", headers=HEADERS
).json()
# Match against your catalogue
results = your_vector_db.query(
vector=fetched["embedding"],
top_k=20,
threshold=0.3
)
-- pgvector: rank your catalogue items
-- by similarity to the fraglet embedding
SELECT id, title, description,
1 - (embedding <=> $1) AS similarity
FROM your_items
WHERE 1 - (embedding <=> $1) > 0.3
ORDER BY embedding <=> $1
LIMIT 20;
const API_KEY = 'frag_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
const BASE = 'https://api.fraglet.org/api/v1';
const headers = { Authorization: `Bearer ${API_KEY}` };
// Create a fraglet
const fraglet = await fetch(`${BASE}/fraglets`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
title: 'Nocturnal jazz wanderer',
brief: 'Late-night jazz devotee drawn to intimate venues.',
detail: 'A deep appreciation for musicians who treat standards...',
category: 'Contemporary jazz and fusion',
tags: ['jazz', 'post-bop', 'intimate-venues'],
domain: 'music',
visibility: 'open'
})
}).then(r => r.json());
// Match against your catalogue
const results = await vectorDb.query({
vector: fraglet.embedding,
topK: 20
});
Every fraglet follows the same schema, regardless of domain. Here is a real example from the music domain.
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"title": "Nocturnal jazz wanderer",
"brief": "Late-night jazz devotee drawn to intimate venues and
musicians who blur the line between composition and
improvisation.",
"detail": "A deep appreciation for musicians who treat standards
as starting points rather than destinations. You gravitate
toward small-combo recordings where you can hear the room,
the breath between phrases, the moment a soloist decides to
take a risk. Post-bop and modal jazz form the core, but you
follow threads into ECM-style European jazz, spiritual jazz,
and the London scene...",
"additional": {
"sub_profiles": [
{"label": "Jazz", "examples": ["Ahmad Jamal", "Shabaka Hutchings"]},
{"label": "Adjacent", "examples": ["Floating Points", "Khruangbin"]}
],
"sonic_preferences": {
"energy": "low-to-medium",
"setting": "intimate venues"
}
},
"category": "Contemporary jazz and fusion",
"tags": ["jazz", "post-bop", "modal", "intimate-venues",
"improvisation", "London-scene"],
"domain": "music",
"embedding": [0.0234, -0.0891, 0.0412, ...],
"parent_id": null,
"visibility": "open",
"created_at": "2026-03-15T14:30:00Z"
}
music, food, travel, etc. Fraglets are only comparable within the same domain.
private, selective, or open. Determines who can read and associate.
null for originals. Enables edit history and adoption provenance.
The fraglet.org API publishes its capabilities at a well-known endpoint. No registration needed to check it.
{
"version": "1.0",
"embedding": {
"model": "text-embedding-3-large",
"dimensions": 3072
},
"domains": ["music", "food", "travel"],
"api_base": "https://api.fraglet.org/api/v1"
}
The metadata endpoint is public — no API key required. Use it to verify the embedding model before matching fraglet embeddings against your catalogue. Your catalogue items must be embedded with the same model for cosine similarity to be meaningful.
Every fraglet conforms to the same structural schema. The core fields are always the same. Domain-specific extensions use the additional field.
Every fraglet has a resolvable address: https://api.fraglet.org/api/v1/fraglets/{id}. Store the URI or the UUID — both are stable and permanent.
Three visibility levels — private, selective, open — govern who can read and associate with each fraglet. Open fraglets are discoverable; private fraglets are visible only to associated developers.
All endpoints are at api.fraglet.org and require
an API key as a Bearer token, except where noted.
The API handles fraglet storage, embedding generation, associations, and discovery. You provide the text fields; the server generates the embedding. Rate limiting is per-developer, per-endpoint category.
# Authentication
# All requests: Authorization: Bearer frag_live_xxxxxxxx
GET /.well-known/fraglets # Server metadata (public, no auth)
# Fraglets
POST /api/v1/fraglets # Create (embedding auto-generated)
GET /api/v1/fraglets/{id} # Read a fraglet
DELETE /api/v1/fraglets/{id} # Delete (creator only)
GET /api/v1/fraglets/discover # Browse open fraglets by domain
# Associations
POST /api/v1/fraglets/{id}/associate # Associate with a fraglet
DELETE /api/v1/fraglets/{id}/associate # Disassociate
# Developer
GET /api/v1/users/me/fraglets # List your associated fraglets
Creating a fraglet automatically associates the creator with it.
Fraglets are immutable — to edit, create a new fraglet with
parent_id set to the original's ID. Only the creator
can delete a fraglet.
The full technical documentation for building conforming implementations.
No. The fraglet.org API handles storage, embedding generation, associations, and discovery. You just need an API key and an HTTP client. The only infrastructure you need is your own catalogue with vector embeddings if you want to match fraglets against your items.
fraglet.org uses OpenAI's text-embedding-3-large with 3072 dimensions. Check api.fraglet.org/.well-known/fraglets for the current model. Your catalogue items need to be embedded with the same model for cosine similarity to work.
You can re-embed the fraglet's text fields (detail, tags, additional) using your own model. The text is always available; the server-generated embedding is a convenience for same-model matching.
Register as a developer and receive an API key prefixed frag_live_. Include it as a Bearer token in every request: Authorization: Bearer frag_live_xxx. Keys are shown once at creation, so store them securely. The /.well-known/fraglets metadata endpoint is the only public endpoint that doesn't require a key.
No. Fraglets are immutable once created. To "edit" a fraglet, you create a new one with the changes and set parent_id to the original's ID. This means if you cache a fraglet, it will never change out from under you. Derivation chains let you trace how a taste profile has evolved.
Users don't "own" fraglets — they associate with them. Multiple users can associate with the same fraglet. This enables the adoption pattern: a music venue publishes a fraglet describing its ideal audience, and users associate with it. Associations are managed server-side, not in the fraglet entity itself.
Yes. The schema, protocol, and pattern are open for anyone to implement. The format specification and reference implementation guide are publicly available. There is no registration, licence fee, or central authority.