API Reference
Complete REST API documentation for Archivist. All endpoints require the x-api-key header unless noted.
New to Archivist? Start with Core Concepts and the Data Models.
Supported Methods
Quick reference for HTTP methods supported by each resource.
| Resource | GET | POST | PUT | PATCH | DELETE |
|---|---|---|---|---|---|
| Campaigns | ✓ | ✓ | — | ✓ | ✓ |
| Characters | ✓ | ✓ | — | ✓ | ✓ |
| Sessions | ✓ | — | — | ✓ | — |
| Beats | ✓ | ✓ | — | ✓ | ✓ |
| Moments | ✓ | ✓ | — | ✓ | ✓ |
| Factions | ✓ | ✓ | — | ✓ | ✓ |
| Locations | ✓ | ✓ | — | ✓ | ✓ |
| Items | ✓ | ✓ | — | ✓ | ✓ |
| Lore Files | ✓ | ✓ | ✓ | — | ✓ |
| Links | ✓ | ✓ | — | ✓ | ✓ |
| Ask (RAG) | — | ✓ | — | — | — |
Health
/healthHealth check for the API service (no auth required).
Request Example
curl https://api.myarchivist.ai/healthResponses
{
"status": "healthy",
"service": "archivist-api",
"version": "1.0.0",
"environment": "production",
"port": 8000,
"timestamp": "2025-01-15T10:30:00.123456Z"
}Ask (RAG)
/v1/askRAG chat endpoint for campaign questions. Supports chat history and streaming.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
campaign_id*— ID of your campaignmessages*— Chat messages: [{ role, content }]stream— Return a streaming responseRequest Example
curl -X POST \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": "your-campaign-id",
"messages": [ {"role": "user", "content": "Who is Cassius Traven?"} ]
}' \
https://api.myarchivist.ai/v1/askResponses
{
"answer": "Cassius Traven is a shadowy information broker who operates in the city's underground...",
"monthlyTokensRemaining": 12345,
"hourlyTokensRemaining": 6789
}{
"detail": "messages is required"
}{
"detail": "Invalid API key"
}{
"detail": "Monthly token limit exceeded"
}Campaigns
/v1/campaignsList your campaigns.
Headers
x-api-key*— Your API keyQuery Params
page— Page numbersize— Page sizeRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/campaigns?page=1&size=10"Responses
{
"data": [
{
"id": "camp_abc123",
"title": "Shadows of Elyndor",
"description": "A dark fantasy campaign",
"system": "D&D 5e",
"public": false,
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 1,
"page": 1,
"size": 20,
"pages": 1
}{
"detail": "Invalid API key"
}/v1/campaigns/{campaign_id}Get a specific campaign by ID.
Headers
x-api-key*— Your API keyRequest Example
curl -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/campaigns/abc123Responses
{
"id": "camp_abc123",
"title": "Shadows of Elyndor",
"description": "A dark fantasy campaign",
"system": "D&D 5e",
"public": false,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Campaign not found"
}{
"detail": "Invalid API key"
}/v1/campaignsCreate a new campaign.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
title*— Campaign titledescription— Campaign descriptionsystem— Game system (e.g. D&D 5e)Request Example
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "My Epic Campaign",
"description": "A thrilling adventure",
"system": "D&D 5e"
}' \
https://api.myarchivist.ai/v1/campaignsResponses
{
"id": "camp_new123",
"title": "My Epic Campaign",
"description": "A thrilling adventure",
"system": "D&D 5e",
"public": false,
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "title is required"
}{
"detail": "Invalid API key"
}/v1/campaigns/{campaign_id}Update a campaign.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
title— Campaign titledescription— Campaign descriptionRequest Example
curl -X PATCH \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Updated Campaign Name"}' \
https://api.myarchivist.ai/v1/campaigns/abc123Responses
{
"id": "camp_abc123",
"title": "Updated Campaign Name",
"description": "A dark fantasy campaign",
"system": "D&D 5e",
"public": false,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Campaign not found"
}{
"detail": "Invalid API key"
}/v1/campaigns/{campaign_id}Permanently delete a campaign. This action cannot be undone.
Headers
x-api-key*— Your API keyRequest Example
curl -X DELETE -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/campaigns/abc123Responses
(no content){
"detail": "Campaign not found"
}{
"detail": "Invalid API key"
}/v1/campaigns/{campaign_id}/statsGet campaign statistics (character count, session count, etc).
Headers
x-api-key*— Your API keyRequest Example
curl -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/campaigns/abc123/statsResponses
{
"campaignId": "camp_abc123",
"characters": 12,
"sessions": 24,
"moments": 156,
"beats": 48,
"factions": 5,
"locations": 18,
"items": 32
}{
"detail": "Campaign not found"
}/v1/campaigns/{campaign_id}/linksList links between entities in a campaign. Supports filtering by source/target entities and alias.
Headers
x-api-key*— Your API keyQuery Params
page— Page numbersize— Page sizefrom_id— Filter by source entity IDfrom_type— Filter by source entity type (Character, Location, etc.)to_id— Filter by target entity IDto_type— Filter by target entity typealias— Filter by relationship label/aliasRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/campaigns/abc123/links?from_id=char_456&from_type=Character"Responses
{
"data": [
{
"id": "link_123",
"campaign_id": "camp_abc123",
"from_id": "char_456",
"from_type": "Character",
"to_id": "char_789",
"to_type": "Character",
"alias": "friends",
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 25,
"page": 1,
"size": 20,
"pages": 2
}/v1/campaigns/{campaign_id}/linksCreate a link between two entities.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
from_id*— Source entity IDfrom_type*— Source entity type (Character, Location, etc)to_id*— Target entity IDto_type*— Target entity typealias— Relationship labelResponses
{
"id": "link_new123",
"campaign_id": "camp_abc123",
"from_id": "char_456",
"from_type": "Character",
"to_id": "loc_789",
"to_type": "Location",
"alias": "home",
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "from_id and to_id are required"
}/v1/campaigns/{campaign_id}/links/{link_id}Update a link.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
alias— Updated relationship labelResponses
{
"id": "link_123",
"campaign_id": "camp_abc123",
"from_id": "char_456",
"from_type": "Character",
"to_id": "loc_789",
"to_type": "Location",
"alias": "updated label",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Link not found"
}/v1/campaigns/{campaign_id}/links/{link_id}Delete a link.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Link not found"
}Characters
/v1/charactersList characters filtered by campaign.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDsearch— Search by namecharacter_type— PC, NPC, etc.approved_only— Filter approved (default true)with_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/characters?campaign_id=abc123"Responses
{
"data": [
{
"id": "char_123",
"campaign_id": "camp_abc123",
"character_name": "Thorin Ironforge",
"player_name": "John Smith",
"description": "A brave dwarf warrior",
"type": "PC",
"approved": true,
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 1,
"page": 1,
"size": 20,
"pages": 1
}{
"detail": "campaign_id is required"
}{
"detail": "Invalid API key"
}/v1/characters/{character_id}Get a specific character by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/characters/char-123Responses
{
"id": "char_123",
"campaign_id": "camp_abc123",
"character_name": "Thorin Ironforge",
"player_name": "John Smith",
"description": "A brave dwarf warrior",
"type": "PC",
"approved": true,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Character not found"
}/v1/charactersCreate a new character.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
character_name*— Character namecampaign_id*— Campaign IDplayer_name— Player namedescription— Character descriptiontype— PC, NPC, etc.image— HTTPS image URL (max 2048 chars)Request Example
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"character_name": "Thorin Ironforge",
"player_name": "John Smith",
"description": "A brave dwarf warrior",
"type": "PC",
"campaign_id": "abc123"
}' \
https://api.myarchivist.ai/v1/charactersResponses
{
"id": "char_new456",
"campaign_id": "camp_abc123",
"character_name": "Thorin Ironforge",
"player_name": "John Smith",
"description": "A brave dwarf warrior",
"type": "PC",
"approved": false,
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "character_name and campaign_id are required"
}{
"detail": "image must be an HTTPS URL"
}{
"detail": "Campaign not found"
}/v1/characters/{character_id}Update a character.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
character_name— Character namedescription— Character descriptionimage— HTTPS image URL (max 2048 chars)Responses
{
"id": "char_123",
"campaign_id": "camp_abc123",
"character_name": "Thorin Ironforge the Bold",
"player_name": "John Smith",
"description": "A brave dwarf warrior with a legendary magic axe",
"type": "PC",
"approved": true,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Character not found"
}/v1/characters/{character_id}Delete a character.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Character not found"
}Sessions
/v1/sessionsList sessions in a campaign.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDsession_type— audioUpload, playByPost, discordVoice, etc.public_only— Show only public sessionswith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/sessions?campaign_id=abc123"Responses
{
"data": [
{
"id": "session_123",
"campaign_id": "camp_abc123",
"type": "audioUpload",
"title": "The Lost Mines of Phandelver",
"summary": "The party explored the ancient mines...",
"session_date": "2024-01-20T19:00:00Z",
"public": false,
"created_at": "2024-01-20T22:30:00Z"
}
],
"total": 24,
"page": 1,
"size": 20,
"pages": 2
}{
"detail": "campaign_id is required"
}/v1/sessions/{session_id}Get a specific session by ID.
Headers
x-api-key*— Your API keyQuery Params
include_beats— Include related beatsinclude_moments— Include related momentswith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/sessions/session-123?include_beats=true"Responses
{
"id": "session_123",
"campaign_id": "camp_abc123",
"type": "audioUpload",
"title": "The Lost Mines of Phandelver",
"summary": "The party explored the ancient mines...",
"session_date": "2024-01-20T19:00:00Z",
"public": false,
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Session not found"
}/v1/sessions/{session_id}Update a session (title, summary, or session_date only).
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
title— Session titlesummary— Session summarysession_date— ISO datetimeResponses
{
"id": "session_123",
"campaign_id": "camp_abc123",
"type": "audioUpload",
"title": "Updated Session Title",
"summary": "Updated summary...",
"session_date": "2024-01-20T19:00:00Z",
"public": false,
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Session not found"
}Beats
/v1/beatsList beats in a campaign (ordered by index).
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDpage— Page numbersize— Page sizewith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/beats?campaign_id=abc123"Responses
{
"data": [
{
"id": "beat_123",
"campaign_id": "camp_abc123",
"game_session_id": "session_456",
"label": "The Final Battle",
"type": "major",
"description": "The party confronts the dark lord",
"index": 1,
"parent_id": null,
"created_at": "2024-01-20T22:30:00Z"
}
],
"total": 48,
"page": 1,
"size": 20,
"pages": 3
}{
"detail": "campaign_id is required"
}/v1/beats/{beat_id}Get a specific beat by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/beats/beat-123Responses
{
"id": "beat_123",
"campaign_id": "camp_abc123",
"game_session_id": "session_456",
"label": "The Final Battle",
"type": "major",
"description": "The party confronts the dark lord",
"index": 1,
"parent_id": null,
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Beat not found"
}/v1/beatsCreate a new beat.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
label*— Beat labeltype*— major, minor, or stepcampaign_id*— Campaign IDgame_session_id— Session IDdescription— Beat descriptionindex— Position within siblingsparent_id— Parent beat ID (for minor/step)Request Example
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"label": "The Final Battle",
"type": "major",
"campaign_id": "abc123",
"game_session_id": "session-123"
}' \
https://api.myarchivist.ai/v1/beatsResponses
{
"id": "beat_new789",
"campaign_id": "camp_abc123",
"game_session_id": "session_456",
"label": "The Final Battle",
"type": "major",
"description": null,
"index": 1,
"parent_id": null,
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "label, type, and campaign_id are required"
}/v1/beats/{beat_id}Update a beat (uses JSON Merge Patch).
Headers
x-api-key*— Your API keyContent-Type*— application/merge-patch+jsonRequest Body
label— Beat labeldescription— Beat descriptionindex— Position within siblingsparent_id— Parent beat IDResponses
{
"id": "beat_123",
"campaign_id": "camp_abc123",
"game_session_id": "session_456",
"label": "Updated Beat Label",
"type": "major",
"description": "Updated description",
"index": 2,
"parent_id": null,
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Beat not found"
}/v1/beats/{beat_id}Delete a beat (with hierarchy rules).
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Beat not found"
}Moments
/v1/momentsList moments in a campaign or session.
Headers
x-api-key*— Your API keyQuery Params
campaign_id— Campaign IDsession_id— Session IDwith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/moments?campaign_id=abc123"Responses
{
"data": [
{
"id": "moment_123",
"campaign_id": "camp_abc123",
"session_id": "session_456",
"label": "Epic Quote",
"content": "I am Thorin, son of Thrain...",
"created_at": "2024-01-20T22:30:00Z"
}
],
"total": 156,
"page": 1,
"size": 20,
"pages": 8
}/v1/moments/{moment_id}Get a specific moment by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupResponses
{
"id": "moment_123",
"campaign_id": "camp_abc123",
"session_id": "session_456",
"label": "Epic Quote",
"content": "I am Thorin, son of Thrain...",
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Moment not found"
}/v1/momentsCreate a new moment.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
label*— Moment labelcampaign_id*— Campaign IDsession_id— Session IDcontent— Moment contentResponses
{
"id": "moment_new999",
"campaign_id": "camp_abc123",
"session_id": "session_456",
"label": "Epic Quote",
"content": "I am Thorin...",
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "label and campaign_id are required"
}/v1/moments/{moment_id}Update a moment.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonResponses
{
"id": "moment_123",
"campaign_id": "camp_abc123",
"session_id": "session_456",
"label": "Updated Label",
"content": "Updated content...",
"created_at": "2024-01-20T22:30:00Z"
}{
"detail": "Moment not found"
}/v1/moments/{moment_id}Delete a moment.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Moment not found"
}Factions
/v1/factionsList factions in a campaign.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDwith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/factions?campaign_id=abc123"Responses
{
"data": [
{
"id": "faction_123",
"campaign_id": "camp_abc123",
"name": "The Shadow Thieves",
"description": "A guild of thieves operating in the shadows",
"type": "guild",
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 5,
"page": 1,
"size": 20,
"pages": 1
}{
"detail": "campaign_id is required"
}/v1/factions/{faction_id}Get a specific faction by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupResponses
{
"id": "faction_123",
"campaign_id": "camp_abc123",
"name": "The Shadow Thieves",
"description": "A guild of thieves operating in the shadows",
"type": "guild",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Faction not found"
}/v1/factionsCreate a new faction.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name*— Faction namecampaign_id*— Campaign IDdescription— Faction descriptiontype— Faction typeimage— HTTPS image URL (max 2048 chars)Responses
{
"id": "faction_new456",
"campaign_id": "camp_abc123",
"name": "The Iron Brotherhood",
"description": "A mercenary company",
"type": "guild",
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "name and campaign_id are required"
}/v1/factions/{faction_id}Update a faction.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name— Faction namedescription— Faction descriptiontype— Faction typeimage— HTTPS image URL (max 2048 chars)Responses
{
"id": "faction_123",
"campaign_id": "camp_abc123",
"name": "Updated Faction Name",
"description": "Updated description",
"type": "guild",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Faction not found"
}/v1/factions/{faction_id}Delete a faction.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Faction not found"
}Locations
/v1/locationsList locations in a campaign.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDwith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/locations?campaign_id=abc123"Responses
{
"data": [
{
"id": "loc_123",
"campaign_id": "camp_abc123",
"name": "The Prancing Pony",
"description": "A cozy inn in Bree",
"type": "tavern",
"parent_id": "loc_456",
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 18,
"page": 1,
"size": 20,
"pages": 1
}{
"detail": "campaign_id is required"
}/v1/locations/{location_id}Get a specific location by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupResponses
{
"id": "loc_123",
"campaign_id": "camp_abc123",
"name": "The Prancing Pony",
"description": "A cozy inn in Bree",
"type": "tavern",
"parent_id": "loc_456",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Location not found"
}/v1/locationsCreate a new location.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name*— Location namecampaign_id*— Campaign IDdescription— Location descriptiontype— Location typeparent_id— Parent location IDimage— HTTPS image URL (max 2048 chars)Responses
{
"id": "loc_new789",
"campaign_id": "camp_abc123",
"name": "Rivendell",
"description": "The Last Homely House",
"type": "city",
"parent_id": null,
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "name and campaign_id are required"
}/v1/locations/{location_id}Update a location.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name— Location namedescription— Location descriptiontype— Location typeparent_id— Parent location IDimage— HTTPS image URL (max 2048 chars)Responses
{
"id": "loc_123",
"campaign_id": "camp_abc123",
"name": "Updated Location Name",
"description": "Updated description",
"type": "tavern",
"parent_id": "loc_456",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Location not found"
}/v1/locations/{location_id}Delete a location.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Location not found"
}Items
/v1/itemsList items in a campaign.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign IDwith_links— Preserve wikilink markupRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/items?campaign_id=abc123"Responses
{
"data": [
{
"id": "item_123",
"campaign_id": "camp_abc123",
"name": "Sting",
"description": "An elven blade that glows blue near orcs",
"type": "weapon",
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 32,
"page": 1,
"size": 20,
"pages": 2
}{
"detail": "campaign_id is required"
}/v1/items/{item_id}Get a specific item by ID.
Headers
x-api-key*— Your API keyQuery Params
with_links— Preserve wikilink markupResponses
{
"id": "item_123",
"campaign_id": "camp_abc123",
"name": "Sting",
"description": "An elven blade that glows blue near orcs",
"type": "weapon",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Item not found"
}/v1/itemsCreate a new item.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name*— Item namecampaign_id*— Campaign IDdescription— Item descriptiontype— Item type (weapon, armor, etc)image— HTTPS image URL (max 2048 chars)Responses
{
"id": "item_new456",
"campaign_id": "camp_abc123",
"name": "Anduril",
"description": "The Flame of the West",
"type": "weapon",
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "name and campaign_id are required"
}/v1/items/{item_id}Update an item.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
name— Item namedescription— Item descriptiontype— Item type (weapon, armor, etc)image— HTTPS image URL (max 2048 chars)Responses
{
"id": "item_123",
"campaign_id": "camp_abc123",
"name": "Updated Item Name",
"description": "Updated description",
"type": "weapon",
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Item not found"
}/v1/items/{item_id}Delete an item.
Headers
x-api-key*— Your API keyResponses
(no content){
"detail": "Item not found"
}Lore Files
/v1/loreList lore files in a campaign. Returns summaries without full content. Worlds have a 500,000 token cap across all lore files.
Headers
x-api-key*— Your API keyQuery Params
campaign_id*— Campaign ID (world_id)page— Page numbersize— Page sizeRequest Example
curl -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/lore?campaign_id=abc123"Responses
{
"data": [
{
"id": "lore_123",
"world_id": "camp_abc123",
"sub_type": "worldHistory",
"file_name": "world_history.txt",
"original_name": "World History.txt",
"file_type": "text/plain",
"size": 15234,
"token_count": 3245,
"created_at": "2024-01-15T10:30:00Z"
}
],
"total": 8
}{
"detail": "campaign_id is required"
}{
"detail": "Invalid API key"
}/v1/lore/{lore_id}Get a specific lore file by ID including full content.
Headers
x-api-key*— Your API keyRequest Example
curl -H "x-api-key: YOUR_API_KEY" https://api.myarchivist.ai/v1/lore/lore_123Responses
{
"id": "lore_123",
"world_id": "camp_abc123",
"sub_type": "worldHistory",
"content": "In the beginning, the gods created the world of Aetheria...",
"file_name": "world_history.txt",
"original_name": "World History.txt",
"file_type": "text/plain",
"size": 15234,
"token_count": 3245,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Lore file not found"
}{
"detail": "Invalid API key"
}/v1/loreCreate a new lore file. Content is chunked (1000 tokens, 100 overlap) and embedded for RAG. Maximum 2,000,000 characters per request. World must stay under 500,000 token cap. The sub_type must be one of the valid LORE_SUBTYPES (see valid values below) or the request will be rejected.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
world_id*— Campaign IDsub_type*— Lore subtype - must match a valid key (see Valid Subtypes below)content*— Plain text content (max 2M chars)file_name— File nameoriginal_name— Original file namefile_type— MIME type (text/plain, text/markdown, etc.)size— File size in bytesRequest Example
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"world_id": "camp_abc123",
"sub_type": "worldHistory",
"content": "In the beginning, the gods created the world of Aetheria...",
"file_name": "world_history.txt",
"file_type": "text/plain"
}' \
https://api.myarchivist.ai/v1/lore
Valid Subtypes (sub_type must match one of these keys):
• worldHistory, timeline, calendar, geography, climate, cosmology, magic, technology
• pantheon, religion, mythology, culture, languages, customs, festivals
• politics, nobility, guilds, laws, trade, currency
• wars, disasters, discoveries, inventions, dynasties
• races, monsters, wildlife, dragons
• artifacts, weapons, items, treasures
• prophecies, secrets, lore, research, spells, alchemy
• adventure, plots, npcs, rules, references
• otherResponses
{
"id": "lore_new456",
"world_id": "camp_abc123",
"sub_type": "worldHistory",
"content": "In the beginning, the gods created the world of Aetheria...",
"file_name": "world_history.txt",
"file_type": "text/plain",
"token_count": 3245,
"created_at": "2024-01-25T16:45:00Z"
}{
"detail": "world_id, sub_type, and content are required; sub_type must be a valid key"
}{
"detail": "Content exceeds 2,000,000 character limit"
}{
"detail": "World would exceed 500,000 token cap"
}/v1/loreUpdate an existing lore file. If content is provided, embeddings are regenerated. Subject to same limits as POST. If updating sub_type, it must match a valid LORE_SUBTYPE key or the request will be rejected.
Headers
x-api-key*— Your API keyContent-Type*— application/jsonRequest Body
id*— Lore file IDcontent— Updated content (triggers re-embedding)file_name— Updated file namesub_type— Updated subtype - must match a valid key (see POST for valid values)Request Example
curl -X PUT \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "lore_123",
"content": "Updated lore content...",
"file_name": "world_history_v2.txt"
}' \
https://api.myarchivist.ai/v1/loreResponses
{
"id": "lore_123",
"world_id": "camp_abc123",
"sub_type": "worldHistory",
"content": "Updated lore content...",
"file_name": "world_history_v2.txt",
"token_count": 3456,
"created_at": "2024-01-15T10:30:00Z"
}{
"detail": "Lore file not found"
}{
"detail": "id is required; sub_type must be a valid key if provided"
}{
"detail": "Content exceeds 2,000,000 character limit"
}/v1/loreDelete a lore file and its associated embeddings.
Headers
x-api-key*— Your API keyQuery Params
id*— Lore file IDRequest Example
curl -X DELETE -H "x-api-key: YOUR_API_KEY" "https://api.myarchivist.ai/v1/lore?id=lore_123"Responses
(no content){
"detail": "Lore file not found"
}{
"detail": "Invalid API key"
}