Skip to content

Create Entry

POST
/api/creative/lore/entries

Create a new lore entry.

LoreEntryCreate

Request to create a lore entry.

object
title
required
Title

Entry title

string
>= 1 characters <= 500 characters
content
Content

Entry content (may be empty for stub drafts)

string
""
summary
Any of:
string
categoryId
Any of:
string
entryType
LoreEntryType

Entry type

string
default: article
Allowed values: article character location item event faction concept species language religion legends plot custom
sourceFormat
LoreSourceFormat

Source format

string
default: markdown
Allowed values: markdown plain_text html obsidian world_anvil docx pdf rtf
sourceName
Any of:
string
tags
Tags

Tags

Array<string>
aliases
Aliases

Nicknames or alternate names

Array<string>
excerpt
Any of:
string
status
LoreEntryStatus

Publication status

string
default: draft
Allowed values: draft published archived trashed
author
Any of:
string
birthDateDisplay
Any of:
string
birthDateSortKey
Any of:
integer
deathDateDisplay
Any of:
string
deathDateSortKey
Any of:
integer
linkedEntityId
Any of:
string
portraitAssetId
Any of:
string
visualAssetIds
Visualassetids

Attached visual asset IDs

Array<string>
sections
Any of:
Array<object>
LoreSection

A structured section within a lore entry.

object
key
required
Key

Section identifier, e.g. ‘origins’

string
>= 1 characters
label
required
Label

Display label, e.g. ‘Origins’

string
>= 1 characters
content
Content

Markdown content

string
""
status
SectionStatus

In-world knowledge status

string
default: unknown
Allowed values: known unknown secret
sortOrder
Sortorder

Display order

integer
0
voiceProfile
Any of:
VoiceProfile

Voice profile for a character, faction, species, or document.

Defines intentional language deviations so WorldSpell can suppress grammar/spelling violations that are stylistic choices, not errors.

object
allowedWords
Allowedwords

Words that are intentional (lil, ya, ain’t, finna)

Array<string>
allowedPhrases
Allowedphrases

Multi-word phrases that are intentional

Array<string>
grammarExceptions
Grammarexceptions

LanguageTool rule IDs to suppress (e.g. DOUBLE_NEGATIVES)

Array<string>
voiceRegister
VoiceRegister

Language register

string
default: informal
Allowed values: formal informal aave dialectal archaic colloquial custom
customRegisterLabel
Any of:
string
examplePassages
Examplepassages

Reference text showing how this voice sounds

Array<string>
notes
Notes

Author notes about this voice

string
""
namingConventions
Any of:
NamingConventions

Cultural naming rules attached to faction/species/culture lore entries.

Structured fields describe concrete patterns; the free-text notes field captures anything that doesn’t fit a structured field.

object
syllableRange
Any of:
array
>= 2 items <= 2 items
commonPrefixes
Commonprefixes

Common name prefixes, e.g. [“Kha”, “Mor”]

Array<string>
commonSuffixes
Commonsuffixes

Common name suffixes, e.g. [“-born”, “-kel”]

Array<string>
surnamePattern
Any of:
SurnamePattern

How surnames are formed in a culture.

string
Allowed values: patronymic clan place-based title-based none
surnameExamples
Surnameexamples

Example surnames

Array<string>
genderedPatterns
Any of:
object
key
additional properties
string
forbiddenSounds
Forbiddensounds

Sound combinations to avoid

Array<string>
exampleNames
Examplenames

Canonical example names for this culture

Array<string>
notes
Any of:
string
autoCreateTimelineEvent
Autocreatetimelineevent

Auto-create a timeline event from this entry

boolean
targetTimelineId
Any of:
string

Successful Response

LoreEntryResponse

Response for a single lore entry.

object
id
required
Id
string
projectId
required
Projectid
string
title
required
Title
string
content
required
Content
string
summary
Any of:
string
categoryId
Any of:
string
entryType
required
Entrytype
string
sourceFormat
required
Sourceformat
string
sourceName
Any of:
string
tags
Tags
Array<string>
aliases
Aliases
Array<string>
wordCount
required
Wordcount
integer
anomalyScore
Any of:
number
clusterId
Any of:
string
clusterLabel
Any of:
string
excerpt
Any of:
string
status
Status
string
default: draft
author
Any of:
string
birthDateDisplay
Any of:
string
birthDateSortKey
Any of:
integer
deathDateDisplay
Any of:
string
deathDateSortKey
Any of:
integer
linkedEntityId
Any of:
string
portraitAssetId
Any of:
string
visualAssetIds
Visualassetids
Array<string>
sections
Sections
Array<object>
LoreSection

A structured section within a lore entry.

object
key
required
Key

Section identifier, e.g. ‘origins’

string
>= 1 characters
label
required
Label

Display label, e.g. ‘Origins’

string
>= 1 characters
content
Content

Markdown content

string
""
status
SectionStatus

In-world knowledge status

string
default: unknown
Allowed values: known unknown secret
sortOrder
Sortorder

Display order

integer
0
voiceProfile
Any of:
VoiceProfile

Voice profile for a character, faction, species, or document.

Defines intentional language deviations so WorldSpell can suppress grammar/spelling violations that are stylistic choices, not errors.

object
allowedWords
Allowedwords

Words that are intentional (lil, ya, ain’t, finna)

Array<string>
allowedPhrases
Allowedphrases

Multi-word phrases that are intentional

Array<string>
grammarExceptions
Grammarexceptions

LanguageTool rule IDs to suppress (e.g. DOUBLE_NEGATIVES)

Array<string>
voiceRegister
VoiceRegister

Language register

string
default: informal
Allowed values: formal informal aave dialectal archaic colloquial custom
customRegisterLabel
Any of:
string
examplePassages
Examplepassages

Reference text showing how this voice sounds

Array<string>
notes
Notes

Author notes about this voice

string
""
namingConventions
Any of:
NamingConventions

Cultural naming rules attached to faction/species/culture lore entries.

Structured fields describe concrete patterns; the free-text notes field captures anything that doesn’t fit a structured field.

object
syllableRange
Any of:
array
>= 2 items <= 2 items
commonPrefixes
Commonprefixes

Common name prefixes, e.g. [“Kha”, “Mor”]

Array<string>
commonSuffixes
Commonsuffixes

Common name suffixes, e.g. [“-born”, “-kel”]

Array<string>
surnamePattern
Any of:
SurnamePattern

How surnames are formed in a culture.

string
Allowed values: patronymic clan place-based title-based none
surnameExamples
Surnameexamples

Example surnames

Array<string>
genderedPatterns
Any of:
object
key
additional properties
string
forbiddenSounds
Forbiddensounds

Sound combinations to avoid

Array<string>
exampleNames
Examplenames

Canonical example names for this culture

Array<string>
notes
Any of:
string
maturityScore
Maturityscore
number
0
maturityTier
Maturitytier
string
default: stub
maturityWordCountSignal
Maturitywordcountsignal
number
0
maturitySectionFillSignal
Maturitysectionfillsignal
number
0
maturitySectionDepthSignal
Maturitysectiondepthsignal
number
0
maturityEntityDensitySignal
Maturityentitydensitysignal
number
0
maturityRelationshipCountSignal
Maturityrelationshipcountsignal
number
0
maturityHasSummarySignal
Maturityhassummarysignal
number
0
maturityHasTagsSignal
Maturityhastagssignal
number
0
maturitySectionStatusSignal
Maturitysectionstatussignal
number
0
clusterDepth
Clusterdepth
integer
0
indexStatus
Indexstatus

Dual-write state between SQLite and ChromaDB. ‘indexed’ means both stores are in sync; ‘pending’ means ChromaDB upsert is in flight; ‘failed’ means the upsert failed and the entry will be repaired by resync_pending_entries on next search.

string
default: indexed
Allowed values: indexed pending failed
entityExtractionStatus
Entityextractionstatus

State of the background entity-extraction task kicked off by create/update. ‘pending’ means extraction is still running (UI should show a subtle indicator and refresh shortly). ‘done’ is the default for fetched entries since extraction only runs on create/update. ‘skipped’ means the caller opted out of extraction for this entry.

string
default: done
Allowed values: pending done skipped
corruptFields
Corruptfields

Names of JSON fields (tags, aliases, sections, voice_profile, naming_conventions) that failed to parse and were reset to defaults. Non-empty means the UI should warn the user before silent re-save loses the original corrupt blob.

Array<string>
createdAt
required
Createdat
integer
modifiedAt
required
Modifiedat
integer

Validation Error

HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object