ask-campaign-tool
ChatGPTRAG ask endpoint for campaign questions.
bulk-link-maintenance-tool
ChatGPTTrigger campaign-wide wikilink maintenance for a target entity (Character/Faction/Location/Item/Moment). Operations: (1) add — introduce a new [[alias]] pointing at target_id in every text field currently containing that alias in plain form; (2) remove — unbracket every [[alias]] that resolves to target_id; (3) update — repoint every existing link to target_id to new_target_id, and/or rename its alias to new_alias. The request is accepted (202) and forwarded to a background webhook; the response contains a task_id you can use to correlate downstream logs. Only the campaign owner can trigger this and the account must have an active subscription tier.
complete-image-upload-tool
ChatGPTSTEP 2 of the direct-upload flow. Call after successfully PUTting bytes to the presigned upload_url returned by init_image_upload. The API validates the object (size cap, image signature) and runs the same NSFW moderation pipeline used by the product UI — flagged uploads are deleted and the tool returns an error. When attach is true (default), the entity's image field is set to the resulting public_url. Returns {url, attached}.
create-beat-tool
ChatGPTCreate a new story beat in a campaign. Beats organize the campaign timeline (major/minor/step) and can be attached to one or more sessions or nested under a parent beat. IMPORTANT: Like sessions, beat descriptions use the explicit-link contract — new [[wikilinks]] in description are silently dropped unless a matching Link already exists for this beat. To reference an entity, create the beat first, then call create_link with from_type="Beat", then update_beat to include [[alias]] in the description.
create-campaign-tool
ChatGPTCreate a new MyArchivist campaign. Title is required; description, system (e.g. "D&D 5e"), summary, language, and tone fields are optional. Campaign creation is limited by the account's subscription tier; if the tier limit is exceeded the API returns a 403 with the tier name and cap.
create-character-tool
ChatGPTCreate a new character (PC or NPC) in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.
create-faction-tool
ChatGPTCreate a new faction in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.
create-hero-award-tool
ChatGPTCreate a hero award attached to a session. Requires title and description. Optional character_name, player_name, style (default verdant), variant (default square-v2), tone_mode (default), award_mode (moment or theme), and custom_theme. Hero awards do not use wikilinks. Card images are rendered by the app, not uploaded via init_image_upload.
create-item-tool
ChatGPTCreate a new item in a campaign. After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.
create-journal-folder-tool
ChatGPTCreate a new journal folder in a campaign. Folders organize journal entries hierarchically; path is a "/"-separated string that must be unique within the campaign. Only campaign owners/admins can create folders.
create-journal-tool
ChatGPTCreate a new journal entry in a campaign. Returns {success, id} on success. content is plain text; content_rich accepts a ProseMirror-style JSON document. Journals participate in the wikilinks system on serialization only: [[wikilinks]] in stored content are rendered when you fetch with with_links=true, but on write the API does not create Link rows from the text automatically. Create Link rows explicitly with create_link (from_type="Journal", from_id=journal_id) if you want persistent link tracking. Setting is_public and status="published" can make the entry publicly visible.
create-link-tool
ChatGPTCreate a link (wikilink) between two entities in a campaign. Links represent relationships like a Character belonging to a Faction, a Location contained in another Location, or a Session referencing an Item. from_type may be Character/Faction/Location/Item/Moment/GameSession/Beat/Backstory/Journal/World; to_type must be Character/Faction/Location/Item/Moment. The alias is the display text that gets wrapped as [[alias]] in the source record's text. If a link with the same (from_type, from_id, aliasNorm) already exists it will be updated (upsert).
create-location-tool
ChatGPTCreate a new location in a campaign. Locations can nest (parent_id references another Location in the same campaign). After drafting description (and backstory for characters), before calling create: for each entity name referenced in the text, run list_characters/list_factions/list_locations/list_items with search=<candidate name>, read only character_name or name plus aliases from matches, wrap confirmed records per the markup rules below, then include the linked text in the create payload. Compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets.
create-moment-tool
ChatGPTCreate a Key Moment (Moment) attached to a session. For a Key Moment card, set categories=["key-moment"] and approved=true, pending=false. Optional image is a URL; to upload a file, create first then use init_image_upload with entity_type=moment. metadata holds presentation fields such as style, customTheme, and variant. IMPORTANT: Unlike Characters/Factions/Locations/Items, moment content does NOT auto-resolve new [[wikilinks]]. Only aliases that already have Link rows (created via create_link or authored during transcript upload) are wrapped in the stored content. To add a wikilink referring to an entity, first call create_link with from_type="Moment" and from_id set to the moment id, then update_moment to include [[alias]] in content.
create-quest-tool
ChatGPTCreate a new quest entry in a campaign's quest log. Objectives is a list of objects with {text, status} where status is pending/in-progress/completed/failed/blocked. related_characters/factions/locations/items are lists of entity ids or names. Quests use snake_case field names in their body. Quests do NOT participate in the wikilinks system: text fields (success_definition, failure_conditions, next_action, resolution) are stored verbatim without link syncing.
create-quote-tool
ChatGPTCreate a memorable quote attached to a session. Requires text. Optional speaker, character_name, context, style (default verdant), and custom_theme. A recap pipeline is created for the session if one does not exist. Quotes do not use wikilinks.
create-spotlight-tool
ChatGPTCreate a recap spotlight attached to a session. Requires title. Optional description, character_name, player_name, style (default verdant), custom_theme, and source_moment_id. A recap pipeline is created for the session if one does not exist. Spotlights do not use wikilinks. This is a GEMS card, not a session-handout spotlight.
delete-beat-tool
ChatGPTDelete a story beat. Child beats have their parent_id cleared. Any Link rows sourced from this beat are removed.
delete-character-tool
ChatGPTDelete a character. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup in every referring text field (Character descriptions, session summaries, beat descriptions, moment content, journal entries) so no dangling wikilinks remain.
delete-entity-image-tool
ChatGPTRemove an image within a campaign. Provide EITHER entity_type + entity_id (detaches the image from that record AND deletes the underlying object) OR a managed image_url (deletes just that object). Valid entity types: campaign, world, character, faction, location, item, moment, session, gamesession. Returns {removed: bool}.
delete-faction-tool
ChatGPTDelete a faction. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this faction in every referring text field.
delete-hero-award-tool
ChatGPTDelete a hero award.
delete-item-tool
ChatGPTDelete an item. The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this item in every referring text field.
delete-journal-folder-tool
ChatGPTDelete a journal folder. Journal entries in the folder are NOT deleted; their folder_id is set to null (they move to the campaign root).
delete-journal-tool
ChatGPTDelete a journal entry. Returns {success: true}. Vector embeddings for the entry are best-effort deleted alongside the row. Deleting a published public entry removes its publicly visible content.
delete-link-tool
ChatGPTDelete a single link between entities. This removes the Link record but does NOT rewrite the source record's text; any [[alias]] markup in the source description will remain until the source is next edited. Use bulk_link_maintenance with operation=remove if you also want the wikilink brackets stripped from all references to the target across the campaign.
delete-location-tool
ChatGPTDelete a location. Child locations are unlinked (their parent_id is cleared). The API cleans up all outgoing and inbound Link rows and unbrackets [[alias]] markup for this location in every referring text field.
delete-moment-tool
ChatGPTDelete a Key Moment (Moment). Any inbound/outbound Link rows for this moment are removed. Note: as a source of wikilinks, moments only appear as [[…]] in their own content (not in other entities' text), so no cross-record text rewriting is required.
delete-quest-tool
ChatGPTDelete a quest and its objectives / progress entries / related refs.
delete-quote-tool
ChatGPTDelete a session quote.
delete-spotlight-tool
ChatGPTDelete a recap spotlight.
get-beat-tool
ChatGPTGet a specific beat by ID.
get-campaign-stats-tool
ChatGPTGet statistics for a specific campaign: character count, session count, and more.
get-campaign-tool
ChatGPTGet a specific MyArchivist campaign by its ID.
get-character-tool
ChatGPTGet a specific character by ID including aliases, backstory, and speaker linkage.
get-faction-tool
ChatGPTGet a specific faction by ID.
get-hero-award-tool
ChatGPTGet a hero award by ID, including title, description, character/player names, card style, variant, and custom theme.
get-image-usage-tool
ChatGPTReturn the calling account's image feature quota for a campaign: used/limit counts for the current billing cycle, tier name, can_access flag, and cycle window. Call this when you want to reason about headroom before an image operation that could 403 on a depleted or tier-locked quota.
get-item-tool
ChatGPTGet a specific item by ID.
get-journal-folder-tool
ChatGPTGet a specific journal folder by ID.
get-journal-tool
ChatGPTGet a specific journal entry by ID including full content and the caller's effective permission level.
get-location-tool
ChatGPTGet a specific location by ID.
get-moment-tool
ChatGPTGet a specific moment by ID.
get-quest-tool
ChatGPTGet a fully expanded quest by ID, including objectives, progress log, related entity refs, and session provenance.
get-quote-tool
ChatGPTGet a session quote by ID, including speaker, text, context, character name, and card style.
get-session-cast-analysis-tool
ChatGPTGet the cast analysis for a game session, including talk-share breakdown and core session metrics.
get-session-handout-tool
ChatGPTGet the generated session handout for a game session, including summary, outlines, spotlights, and notable moments.
get-session-tool
ChatGPTGet a specific game session by ID. Optionally include related beats and moments.
get-session-transcript-tool
ChatGPTGet the cleaned transcript for a game session, including utterances, full text, and aggregate stats.
get-spotlight-tool
ChatGPTGet a recap spotlight by ID, including title, description, character/player names, and card style. This is a GEMS spotlight card, not a session-handout spotlight.
init-image-upload-tool
ChatGPTSTEP 1 of the direct-upload flow. Ask the API to reserve an object key for the entity and presign an S3 PUT URL. content_type must be image/* (jpeg, png, gif, webp, avif, heic, heif). Returns {object_key, upload_url, public_url, expires_in_seconds}. AFTER calling this, the client MUST issue an HTTP PUT to upload_url with the raw image bytes and the same Content-Type header before it expires (typically ~5 minutes). Once the PUT is complete, call complete_image_upload to finalize (moderate and optionally attach). Agents that cannot perform arbitrary HTTP PUTs should ask a human collaborator to do the PUT step.
list-beats-tool
ChatGPTList beats in a campaign, ordered by index. Beats represent story moments (major, minor, step).
list-campaigns-tool
ChatGPTList your MyArchivist campaigns. Returns a paginated list of campaigns.
list-characters-tool
ChatGPTList characters in a campaign. Optionally filter by name search, character type, and approval status.
list-factions-tool
ChatGPTList factions in a campaign. Optionally filter by name search. Factions represent guilds, organisations, or other groups.
list-hero-awards-tool
ChatGPTList hero awards in a campaign or session. Hero awards are player achievement cards (title, description, character, optional player name, card style). Filter by title/description/character search.
list-items-tool
ChatGPTList items in a campaign. Optionally filter by name search. Items include weapons, armour, artefacts, and other notable objects.
list-journal-folders-tool
ChatGPTList journal folders for a campaign. Folders are ordered by path and position for tree rendering.
list-journals-tool
ChatGPTList journal entries in a campaign. Results are filtered to entries the caller can see. Content is omitted from the list; use get_journal to fetch full content.
list-links-tool
ChatGPTList links between entities in a campaign. Supports filtering by source/target entity and relationship alias.
list-locations-tool
ChatGPTList locations in a campaign. Optionally filter by name search. Locations can be nested (cities, taverns, dungeons, etc.).
list-moments-tool
ChatGPTList moments in a campaign or session. Optionally filter by label search. Moments capture memorable quotes and events.
list-quests-tool
ChatGPTList quests in a campaign with pagination. Filter by status (planned, in-progress, blocked, failed, done, n/a) or category (main, side, faction, personal, n/a).
list-quotes-tool
ChatGPTList memorable session quotes in a campaign or session. Quotes are recap cards (speaker, text, context, style). Filter by text/speaker/context search.
list-sessions-tool
ChatGPTList game sessions in a campaign. Optionally filter by session type or public-only.
list-spotlights-tool
ChatGPTList recap spotlights in a campaign or session. These are GEMS spotlight cards (title, description, character/player), not session-handout spotlights. Filter by title/description/character search.
patch-session-tool
ChatGPTPartially update a game session (limited fields: title, session_date, summary, image). IMPORTANT: Sessions use the explicit-link contract, not the auto-resolve contract used by Character/Faction/Location/Item. On write, the API strips any [[alias]] markup whose alias does NOT already have a Link row for this session; new wikilinks in summary are silently dropped. To reference an entity, call create_link first with from_type="GameSession", then include [[alias]] in the summary. When editing summary, first fetch the session with get_session(with_links: true) to see current [[wikilinks]] and avoid losing them.
update-beat-tool
ChatGPTPartially update a story beat. IMPORTANT: Beats use the explicit-link contract. On write, [[alias]] markup in description is only preserved if a Link row already exists for this beat with that alias; new wikilinks are silently dropped. To add a wikilink, call create_link with from_type="Beat" first, then include [[alias]] in description. When editing existing description, first fetch the beat with get_beat(with_links: true) to see the current [[wikilinks]] and avoid losing them.
update-campaign-tool
ChatGPTPartially update a MyArchivist campaign. Only the campaign owner can update; only fields included in the request are changed. Cannot be used on archived campaigns.
update-character-tool
ChatGPTPartially update a character. Only the fields you include are changed. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.
update-faction-tool
ChatGPTPartially update a faction. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.
update-hero-award-tool
ChatGPTPartially update a hero award (title, description, character/player names, style, variant, tone_mode, award_mode, custom_theme, order_index).
update-item-tool
ChatGPTPartially update an item. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.
update-journal-folder-tool
ChatGPTUpdate a journal folder (PUT semantics). Only owners/admins may write. path must stay unique within the campaign; setting parent_id to the folder's own id is rejected.
update-journal-tool
ChatGPTUpdate an existing journal entry (PUT). Returns {success, id}. When editing content, first fetch the entry with get_journal(with_links: true) so you can see and preserve existing [[wikilinks]] — links are not auto-created from text, but existing [[…]] markup should be kept if you want them rendered as links on read. Changing is_public or status can publish or unpublish the entry.
update-link-tool
ChatGPTUpdate an existing link's alias. Only the alias field can be changed via this tool; to change the source or target of a link, delete it and create a new one, or use bulk_link_maintenance to rename an alias campaign-wide.
update-location-tool
ChatGPTPartially update a location. When editing description or backstory, follow this order: (1) fetch the entity with with_links: true; (2) list_links with from_id set to this entity's id and from_type matching its compendium type — store every returned alias in memory (writes delete Link rows whose alias no longer appears wrapped in the text); (3) draft the new prose; (4) re-wrap each stored alias as [[alias]] wherever that alias still appears (use [[Target|alias]] only if that link originally used a distinct display alias); (5) for other entity names in the draft, run list_characters/list_factions/list_locations/list_items with search=<candidate name> and read only character_name or name plus aliases from matches — ignore long description fields; (6) wrap confirmed campaign entities using the markup rules below; compendium writes auto-create Link rows. Wikilink markup rules: [[Target Name|Alias]] uses the left side only to resolve the entity; the right side becomes Link.alias (if omitted, both sides are the same string). The app renders links by matching bracket text to Link.alias — not by guessing from prose typography. Default to [[Exact Name From API]] with no pipe, copying character_name or name byte-for-byte from list_* results. Use [[Target Name|Alias]] only when the prose uses a shorter or different label than the entity name (e.g. [[Queen Whatsherface|the queen]]). Never write [[Name|Name]], never put the canonical name on the left and a prose variant on the right when both refer to the same entity, and never mix straight/curly apostrophes or other look-alike characters between sides. Re-wrapped aliases from list_links must match the stored alias string exactly inside the brackets. Then call this update tool.
update-moment-tool
ChatGPTPartially update a Key Moment (Moment), including image, categories, kind, and presentation metadata (merged into existing metadata so provenance keys are kept). IMPORTANT: Moments use the explicit-link contract, not the auto-resolve contract used by Character/Faction/Location/Item. On write, the API strips any [[alias]] markup whose alias does NOT already have a Link row for this moment; new wikilinks in content are silently dropped. To reference an entity, call create_link first with from_type="Moment", then include [[alias]] in the content on this update. When editing existing content, fetch the moment with get_moment(with_links: true) first to see the current [[wikilinks]] and avoid inadvertently losing them.
update-quest-tool
ChatGPTPartially update a quest. Any list you send replaces the corresponding list on the record (objectives, progress_log, related_characters, etc). Quests do NOT participate in the wikilinks system, so text fields are stored verbatim.
update-quote-tool
ChatGPTPartially update a session quote (text, speaker, character_name, context, style, custom_theme, order_index).
update-spotlight-tool
ChatGPTPartially update a recap spotlight (title, description, character/player names, style, custom_theme, order_index, source_moment_id).