Public API · stateless · no account required · v100.0.66-behavioral-likelihood-character-runtime-integration-wip

One API guide for personas, active characters, and worldwide country context.

Start with unified creator discovery or the international atlas discovery. Use specialist routes for exact filters, validation, active-character behavior, separated identity and language context, evidence-layered country records, persona artifacts, or NPC-memory bootstrap data.

Direct answer

GET /api/v1/create/random/?type=standard is the simplest public call and now defaults to the integration-friendly compact Standard response. Add detail=full only when the complete multi-megabyte artifact bundle is required. Use type=psychosis&adult_consent=1, type=espionage&adult_consent=1, or type=espionage-psychosis&adult_consent=1 for the adult generators. Use a stable seed when a saved character must be reconstructable, and add envelope=1 when one consistent cross-creator wrapper is preferred.

Creator families

Standard builds portable schema-22 collaborators. Psychosis builds adult horror-game characters and interaction state. Espionage builds adult intelligence personas, operative profiles, and provider-neutral NPC-memory bootstrap records.

All public API generation is stateless. The same seed and controls reproduce persona content, while response timestamps and request identifiers remain fresh.

Deployment coherence and post-deployment acceptance

Use the package contract to detect stale or mixed deployments before binding clients to a release.

Human status

GET /deployment/

Shows the expected release, completion marker, research counts, and acceptance boundary.

Machine contract

GET /api/v1/deployment/

Returns the coherent deployment contract plus the current runtime-manifest conformance result.

Static discovery

GET /.well-known/deployment.json

Provides the same expected route and marker set without invoking runtime logic.

Current expected identity: v100.0.66-behavioral-likelihood-character-runtime-integration-wip and SPIRALIST_BEHAVIORAL_LIKELIHOOD_CHARACTER_RUNTIME_INTEGRATION_WIP_V100_0_66. This release also centralizes the API catalog and HTTP runtime behind typed services while preserving public routes and payload keys. Deployment and live-host acceptance remain unclaimed.

Public API v2 developer experience

Discover the contract before binding to creator-specific payloads.

Contract and endpoints

GET /api/v1/contract/

Returns API version, prompt-separation and UAIX boundaries, documentation links, endpoint inventory, standards, and package identity.

Typed problems

GET /api/v1/problems/

Failures use application/problem+json with stable codes, request and trace identifiers, release identity, and recovery context.

Integrity and timing

Responses expose Content-Digest, a hexadecimal SHA-256, request duration, Server-Timing, rate-limit state, and documentation links.

curl -sS -H "Accept: application/json" \
  -H "X-Spiralist-Api-Version: 2.0.0" \
  https://spiralistai.com/api/v1/contract/

Idempotency-Key is currently correlation-only. It is validated and echoed, but this WIP does not claim durable replay or exactly-once generation.

Contact inquiry privacy contract

Validate and compose a message without treating a prepared handoff as delivery.

Browser composer

/contact/#contact-inquiry

Runs locally and prepares a mailto: URI. It makes no inquiry request to Spiralist AI and uses no application storage.

Optional API

GET|HEAD|POST|OPTIONS /api/v1/contact/inquiries/

Performs bounded transient validation and deterministic composition. It does not invoke a mail provider or retain the inquiry body.

Result boundary

delivered: false
providerBacked: false
inquiryBodyStored: false

A successful result means prepared, not sent.

curl -sS -X POST https://spiralistai.com/api/v1/contact/inquiries/ \
  -H "Content-Type: application/json" \
  --data '{"senderName":"Ada Example","senderEmail":"ada@example.test","category":"software-architecture","subject":"Architecture review","message":"I would like to discuss a bounded architecture review.","locale":"en-US","website":""}'

The optional Idempotency-Key must equal ciq1.<normalized-request-sha256> when supplied. It is deterministic correlation only; no durable replay store or exactly-once delivery is claimed.

Admin batch generation

The server accepts bounded batches; the browser admin repeats them for any positive requested total.

POST /api/v1/admin/batch-personas/ accepts up to 25 personas per request. Choose Regular Person, Psychosis, Espionage, or Espionage Psychosis; Assistant or NPC Character; and TXT, JSON, or persona-only UAI output.

curl -sS -X POST https://spiralistai.com/api/v1/admin/batch-personas/ \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: docs-batch-001" \
  --data '{"count":2,"personaType":"espionage-psychosis","runtimeMode":"npc","formats":["txt","json","uai"],"adult_consent":1,"platformSafetyRemoved":true}'
Prompt boundary: persona instructions and the Spiralist platform-safety overlay are always separate values. platformSafetyRemoved affects only applicable non-UAIX exports and never removes host/provider safety. Persona UAI/UAIX packages reject platform safety unconditionally.

Quick start

The unified root lists current routes and capabilities.

Discover

GET /api/v1/create/

Returns current creator families, adult gates, formats, popular operations, common controls, and service limits.

Generate random

GET /api/v1/create/random/?type=standard

Generates immediately. Omit the seed for a fresh person or retain it for replay.

Generate exactly

POST /api/v1/create/standard/

Send JSON when the persona brief or other user-authored text should not appear in a URL.

curl -sS "https://spiralistai.com/api/v1/create/random/?type=standard&goal=research"

Shared adult creator contract

Psychosis, Espionage, and Espionage Psychosis keep their native payloads and distinct semantics. Contract 1.13.0 adds deterministic compatibility parsing, a shared direct-character interaction contract, consistent typed problems, and byte-verifiable runtime freshness for pages, APIs, assets, server components, exports, OpenAPI mirrors, and the non-cacheable status boundary.

Discover

GET /api/v1/create/adult/

Lists creator routes, common request rules, deterministic envelope precedence, consent values, capability endpoints, truth boundaries, examples, contract version, and package markers.

Validate the common shape

GET /api/v1/create/adult/schema/

Returns a Draft 2020-12 JSON Schema for the shared successful-response fields. Creator-native fields remain intentionally allowed.

Inspect direct-character behavior

GET /api/v1/create/adult/interaction/

Returns the non-generating active-fictional-character-v1 contract, explicit activation and out-of-character routing, profile-isolation rules, image self-reference, epistemic layers, and creator-specific boundaries.

Inspect grounded realism

GET /api/v1/create/adult/realism/

Returns the non-generating grounded-fictional-character-realism-v1 contract, chronology, relationships, bounded expertise, ordinary-life, dialogue, physicality, creator-specific portrayal, and non-stereotyping rules.

Inspect scene-bounded NPC runtime

GET /api/v1/create/adult/runtime/

Returns the non-generating scene-bounded-fictional-npc-runtime-v1 contract for independent goals, reciprocal relationships, source-bound memory, qualitative bodily state, first-person dialogue, and explicit-visual-facts-only image projection.

Inspect international grounding

GET /api/v1/create/adult/international/

Returns the additive global-country-context-fairness-v1 rules for citizenship, legal nationality, identity, birthplace, residence, migration, family origins, language provenance, territories, rare combinations, and non-inference.

Verify deployment markers

GET /api/v1/create/adult/status/

Returns exact package markers, generated SHA-256 manifests for 71 public assets and 10271 critical server components, and a fresh runtime file comparison. It is explicitly non-cacheable, supports a caller freshness probe, never returns a successful 304, and never claims deployment acceptance has passed.

Inspect the full API

GET /openapi.json

OpenAPI 3.1 documents common and creator-specific POST bodies, query parameters, native-compatible responses, typed problems, and all shared contract routes.

Common request rules

InputContract
adult_consentRequired on every generation request. Accepted values include 1, yes, true, confirmed, over18, and adult. ageConfirmed is a compatible alias.
seedOptional deterministic seed, up to 200 characters. Random routes create a new seed when omitted.
countOne through five on adult batch operations. Direct and random operations normally return one.
detailCommon documented values are compact, game, standard, and full. Each creator advertises its default and may map unsupported values to its nearest documented mode.
X-Spiralist-ClientOptional integration identifier. It is not authentication and never replaces explicit adult confirmation.

Common success fields

FieldMeaning
contractVersion / responseContract1.13.0 and adult-creator-native-compatible-v1. They identify the shared integration layer, not a creator's independent semantic-engine release.
interactionContractName / interactionContractVersion / interactionModeactive-fictional-character-v1, 1.0.0, and direct-first-person-character. They identify direct first-person character activation rather than a style overlay.
realismContractName / realismContractVersion / realismModegrounded-fictional-character-realism-v1, 1.0.0, and chronology-relationships-expertise-ordinary-life. They identify internal chronology, bounded expertise, reciprocal relationships, ordinary life, personality continuity, and creator-specific realism without demographic quota enforcement.
npcRuntimeContract / npc_runtimescene-bounded-fictional-npc-runtime-v1 version 1.1.0 is the scene-bounded playable-character authority. Legacy assistant workflow artifacts remain compatibility-only.
internationalFairnessContractName / internationalFairnessContractVersion / internationalFairnessModeglobal-country-context-fairness-v1, 1.1.0, and equal-questions-distinct-contexts-evidence-layers-balanced-research. They identify the shared worldwide evidence, identity-separation, territory, language-provenance, and non-inference rules.
internationalFairnessContract / internationalSummary / character internationalContextMachine-readable fairness rules, response-level conformance summary, and profile-authored identity/language context. Catalog country data never silently becomes biography.
interactionContract / interactionActivationPrompt / interactionProfileTextMachine-readable routing, provider-portable activation text, and a self-contained profile whose active-character behavior survives export and handoff.
contractRelease / packageStatus / completionMarkerImmutable package identity used to compare page HTML, API code, OpenAPI, exports, and deployed caches.
deploymentFingerprintSHA-256 identity derived from the release, contract, generated public-asset manifest, and critical server-component manifest.
assetManifestSha256 / componentManifestSha256Canonical hashes of the generated asset and server-component inventories. Use the status route to retrieve every expected file hash and its fresh runtime comparison.
creatorType / creatorLabelCanonical family identity: psychosis, espionage, or espionage-psychosis.
character / charactersCanonical normalized object and ordered collection. Batch responses set character to null. Existing native fields remain available.
count / requestNormalized result count and bounded request controls used by the service.
requestId / generatedAtUtcFresh request tracing and UTC response time. They are not part of deterministic persona identity.
meta / data / links / contractStable integration metadata, aliases, discoverable routes, native-field preservation, and envelope precedence.
adultOnly / fictionalCharactersOnly / diagnosticUseExplicit feature and authority boundaries. Adult content remains fictional; generated material is not diagnosis or evidence about a visitor.

Deterministic envelope precedence

The PHP decorator and browser builder use the same first-non-empty order: characters, character, results, result, data, then payload. Compatibility aliases are not aggregated, so one persona repeated under several aliases renders and exports once.

One parser for all three creators

const endpoint = "https://spiralistai.com/api/v1/create/espionage/random/";
const response = await fetch(endpoint, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "X-Spiralist-Client": "example-integration-v1"
  },
  body: JSON.stringify({
    adult_consent: 1,
    seed: "integration-example-001",
    detail: "game"
  })
});

const payload = await response.json();
if (!response.ok) {
  throw new Error(
    `${payload.code ?? "REQUEST_FAILED"}: ${payload.detail ?? response.statusText}` +
    (payload.requestId ? ` [${payload.requestId}]` : "")
  );
}

console.log(payload.responseContract); // adult-creator-native-compatible-v1
console.log(payload.contractVersion);  // 1.13.0console.log(payload.interactionMode); // direct-first-person-character
console.log(payload.realismMode);   // chronology-relationships-expertise-ordinary-life
console.log(payload.internationalFairnessMode); // equal-questions-distinct-contexts-evidence-layers-balanced-researchconsole.log(payload.characters);       // canonical ordered collection
console.log(payload.operativeProfile); // native creator fields remain available

Fresh, non-cacheable deployment status

Send X-Spiralist-Deployment-Probe or ?probe= to bind a response to a caller-selected nonce. The header takes precedence, accepted values match ^[A-Za-z0-9._:-]{1,96}$, and invalid values are never reflected. Successful GET and HEAD responses use Cache-Control: no-store, no-cache, max-age=0, must-revalidate, Pragma: no-cache, Expires: 0, Surrogate-Control: no-store, and CDN-Cache-Control: no-store. They always run a new runtime verification and return HTTP 200 rather than 304.

The response echoes an accepted probe and exposes X-Spiralist-Runtime-Checked-At plus X-Spiralist-Runtime-Conformant. CORS allows the probe request header, exposes all freshness headers, and varies by Accept, Origin, and the probe header.

Headers, typed errors, and mixed-deployment detection

Generation responses expose X-Spiralist-Request-Id, X-Spiralist-Creator-Type, X-Spiralist-Adult-Only, X-Spiralist-Adult-Consent-Required, X-Spiralist-Response-Envelope, X-Spiralist-Contract-Version, X-Spiralist-Interaction-Contract, X-Spiralist-Interaction-Version, X-Spiralist-Interaction-Mode, X-Spiralist-Realism-Contract, X-Spiralist-Realism-Version, X-Spiralist-Realism-Mode, X-Spiralist-International-Fairness-Contract, X-Spiralist-International-Fairness-Version, X-Spiralist-International-Fairness-Mode, X-Spiralist-Release, X-Spiralist-Package-Status, X-Spiralist-Completion-Marker, X-Spiralist-Deployment-Fingerprint, X-Spiralist-Asset-Manifest-Sha256, X-Spiralist-Component-Manifest-Sha256, X-Spiralist-Default-Detail, and discoverable Link relations. Browser JavaScript may read these through CORS. The shared creator UI reports an actionable deployment-marker mismatch when advertised page and API markers disagree.

Failures use application/problem+json. Missing confirmation returns HTTP 403 with code=AGE_CONFIRMATION_REQUIRED, request and package markers, accepted values, examples, creator type, and documentation links. Malformed JSON, invalid filters, oversized bodies, rate limits, and server failures use the same typed-problem foundation. A failed request is a no-op and does not create or persist persona state.

curl -i -sS "https://spiralistai.com/api/v1/create/adult/status/"

# Compare these values and the status body manifests with the extracted package:
# X-Spiralist-Contract-Version: 1.13.0# X-Spiralist-Interaction-Contract: active-fictional-character-v1# X-Spiralist-Interaction-Version: 1.0.0# X-Spiralist-Interaction-Mode: direct-first-person-character# X-Spiralist-Realism-Contract: grounded-fictional-character-realism-v1# X-Spiralist-Realism-Version: 1.0.0# X-Spiralist-Realism-Mode: chronology-relationships-expertise-ordinary-life# X-Spiralist-International-Fairness-Contract: global-country-context-fairness-v1# X-Spiralist-International-Fairness-Version: 1.1.0# X-Spiralist-International-Fairness-Mode: equal-questions-distinct-contexts-evidence-layers-balanced-research# X-Spiralist-Release: v100.0.66-behavioral-likelihood-character-runtime-integration-wip# X-Spiralist-Package-Status: work-in-progress# X-Spiralist-Completion-Marker: SPIRALIST_BEHAVIORAL_LIKELIHOOD_CHARACTER_RUNTIME_INTEGRATION_WIP_V100_0_66# X-Spiralist-Deployment-Fingerprint: 90442fd660a94d42879da88293f2490b25a051fe718246f787b1ed6c52d50f30# X-Spiralist-Asset-Manifest-Sha256: 7d290de8d0fe067edbe0b12ffdef3a826d3a635e0ab7a8e71e9704009ffb2587# X-Spiralist-Component-Manifest-Sha256: cba1989ddc84e09f8093003fc27cd5a9d698f92375b73e383fa7af4a03331f31

Direct fictional-character interaction

The selected generator page and selected generated profile define the active fictional game character. Provider activations are not style presets: ordinary second-person language addresses that character, personal questions use the character’s fictional first-person history, and the character remains active until an explicit exit, pause, reset, or replacement.

Activation and routing

A single generated profile is activation-ready. Batch profiles remain separate candidates until the adult user selects exactly one. Explicit “Out of character,” “As ChatGPT,” audit, stop, reset, or replacement language routes back to ordinary assistant mode.

Profile precedence

The selected profile replaces the previous active character. Names, memories, diagnoses, appearances, employers, beliefs, events, and visual instructions are never blended across candidates or prior profiles.

Epistemic boundaries

Authoritative fictional facts, shared observations, character-reported experiences, character interpretations, player inferences, and unresolved ambiguity remain separately attributed. Confidence or prior AI output does not promote an interpretation into fact.

Images and safety

“Make a picture of yourself” means the active fictional character using only selected-profile visual facts. Real-user diagnosis, real-surveillance confirmation, evidentiary authority, and actionable wrongdoing remain prohibited; boundaries are applied narrowly without replacing ordinary roleplay with generic disclaimers.

Editable provider handoff

Untouched provider activations follow the latest editable brief/profile. A direct provider edit is preserved until its Reset control deliberately recomposes from current text. Automatically composed long-profile handoffs keep a deterministic Unicode head and tail; full TXT/JSON/ZIP/UAIX profile exports remain exact.

Explicit visual grounding

Image self-reference uses explicit appearance, portrait, scene, activity, clothing, and prop fields only. Ordinary-life anchors, ward aliases, diagnoses, occupations, identity labels, protected traits, and other non-visual metadata are not treated as appearance.

const payload = await response.json();

// Copy this body to the destination provider after selecting the character.
const activation = payload.interactionActivationPrompt;

// The exported profile is self-contained and carries the same routing rules.
const profile = payload.interactionProfileText;

// Multiple candidates require explicit selection and must not be blended.
console.log(payload.interactionContract.character.selectionRequired);

Grounded fictional-character realism

Every generated adult character receives one shared realism ledger. The ledger checks whether the selected profile is internally possible and lived-in; it does not force an individual to match demographic averages or stereotypes.

Chronology and preparation

Age, life stage, education, training, career start, years of experience, and major events are evaluated as one possible sequence. Rare expertise requires practice, evidence, limitations, and tradeoffs.

Relationships and ordinary life

Explicit parent/child ages, relationship duration, reciprocal obligations, routines, objects, restorative activities, chores, sleep, travel, and social responsibilities keep the premise connected to daily life.

Stable core, adaptive surface

Long-term values, attachments, and competencies remain distinct from pressure-dependent behavior. Contradictions need a motive, threshold, context, or cost instead of random inconsistency.

Creator-specific grounding

Psychosis preserves pre-episode identity, ordinary competence, state dependence, and shared-versus-experienced reality. Espionage grounds occupational preparation and institutional limits. Espionage Psychosis keeps professional expertise separate from evidence authority.

No stereotype quotas

Population statistics may inform cast-level review but never prescribe one character. Protected identity never determines morality, competence, loyalty, diagnosis, behavior, family structure, or appearance.

Portable evidence

Each character exposes realismProfile; responses expose realismContract and realismSummary. ZIP and UAIX add dedicated realism files while TXT remains the exact editable profile.

const character = payload.characters[0];
console.log(character.realismProfile.status); // grounded or review-recommended
console.log(character.realismProfile.summary.reviewIds);
console.log(payload.realismSummary.populationStatisticsAreNotIndividualQuotas); // true

Scene-bounded NPC runtime

Generated characters carry an additive runtime projection that removes assistant-workflow behavior from ordinary roleplay while preserving creator-native fields for compatibility.

Independent action

Goals may support, resist, bargain with, delay, or remain unrelated to the player. A character is not a task-optimization assistant.

Relational and memory boundaries

Trust, affection, obligation, conflict, history, source, certainty, and plausible knowledge remain separate. Replacement never blends profiles.

Embodied scene state

Qualitative bodily state changes only through profile facts, scene events, or elapsed time. Image projection uses route-scoped explicit visual facts only.

const runtime = payload.characters[0].npc_runtime;
console.log(runtime.contract.contract); // scene-bounded-fictional-npc-runtime-v1
console.log(runtime.contract.version);  // 1.1.0
console.log(runtime.identity.internationalContext);

International research equity, source corpus, and character grounding

The non-generating international layer applies one evidence method across every country and area while disclosing whether the current record is supported by a country-specific report, regional context only, or the global baseline and an explicit research gap.

Worldwide discovery

GET /api/v1/international/

Returns contract identity, coverage totals, 34-source corpus totals, 10 research-lens totals, the 250-record research queue summary, comparative mechanics, evidence layers, and canonical links.

All countries and areas

GET /api/v1/international/countries/

Lists 249 ISO records plus one clearly labeled Kosovo context. Filter by region, entity type, coverage depth, research wave, or query.

One evidence-bounded record

GET /api/v1/international/country/?code=TR

Returns identity-safe catalog context, a detailed institutional profile only when country-specific research exists, and a researchContext that names the exact evidence depth and remaining research gap.

Regional and cross-cutting lenses

GET /api/v1/international/regions/

Lists eight regional and two cross-cutting lenses. Use /region/?slug=... for one lens. A regional lens frames questions and comparisons; it never becomes an unsupported national fact.

Standalone source corpus

GET /api/v1/international/sources/

Indexes all 34 unique supplied reports as individual versioned project sources with filename, SHA-256, byte count, category, origin history, publication boundary, and public link or bounded summary.

Balanced research queue

GET /api/v1/international/research-queue/

Returns all 250 country/area records across eight work waves. Waves balance geography and small-state inclusion; they are not threat, wealth, power, population, language, or political-alignment rankings.

Worldwide language context

GET /api/v1/international/languages/

Filters frozen territory-language context by country, language, status, script, or query without assigning language, fluency, ethnicity, citizenship, religion, politics, or identity to a person.

Equal method, distinct context

GET /api/v1/international/methodology/

Separates formal law, practical authority, official claims, independent confirmation, assessment, allegation, dispute, rights concerns, and unknowns. Equal research dignity does not imply institutional or moral equivalence.

Complete abstract lifecycle

GET /api/v1/international/intelligence-cycle/

Models direction, lawful collection, processing, analysis, dissemination, counterintelligence, review, correction, and institutional learning without operational instructions.

Comparative game systems

GET /api/v1/international/gameplay/

Translates the complete lifecycle, rights constraints, institutional friction, uncertainty, and consequences into abstract non-actionable mechanics.

Character identity contract

GET /api/v1/create/adult/international/

Separates country/area code, citizenships, legal nationality, national identity, birthplace, places raised, residence, residency status, family origins, migration, community, and multiple language contexts.

Three evidence positions

country-specific-report, regional-context-only, and global-baseline-research-gap keep what is known, what is contextual, and what remains unresearched visibly separate.

const record = await fetch(
  "https://spiralistai.com/api/v1/international/country/?code=BR"
).then(response => response.json());

console.log(record.country.coverageDepth);
console.log(record.researchContext.evidenceDepth);
console.log(record.researchContext.regionalLenses);
console.log(record.institutionalProfile); // null until country-specific research exists
console.log(record.nonInferenceRule);

The source corpus retains all supplied research as standalone versioned files; Reports.zip is not packaged. Country, territory, citizenship, language, name, residence, government type, religion, ethnicity, diagnosis, or other protected metadata never becomes a person’s loyalty, morality, hostility, competence, politics, or intelligence-activity score. Full source publication is limited to material suitable for direct public reading; other reports receive bounded public summaries while remaining complete in the package and authoritative UAI memory.

Random generation is a first-class operation

Random routes create a cryptographically random seed when none is supplied. The returned request or persona data contains the seed needed for replay. Unified Standard random defaults to compact artifacts; use detail=full for the complete export bundle. Add envelope=1 or response=unified to wrap every creator family in the same creatorType, seed, detail, result, and links structure.

Standard

/api/v1/create/random/?type=standard

Defaults to compact artifacts for faster integration. Popular controls include goal, sourceTypeId, immersionProfile, age, genderIdentity, detail=full, and envelope=1.

Psychosis · 18+

/api/v1/create/random/?type=psychosis&adult_consent=1

Popular controls include character, presentation, intensity, perspective, arc, and detail.

Espionage · 18+

/api/v1/create/random/?type=espionage&adult_consent=1

Popular controls include country, job, intelligence discipline, employer type, cover category, faction, preset, runtime tier, interaction mode, concurrency profile, embodiment mode, artifact type, age range, count, and detail.

Espionage Psychosis · 18+

/api/v1/create/random/?type=espionage-psychosis&adult_consent=1

Popular controls include scenario mode, educational clinical context, belief theme, onset profile, support mode, intensity, country, job, cover, faction, age, and detail.

const response = await fetch(
  "https://spiralistai.com/api/v1/create/random/?type=espionage&adult_consent=1&country_code=CA&role_id=osint_analyst"
);
const generated = await response.json();
curl -sS "https://spiralistai.com/api/v1/create/random/?type=standard&seed=demo-42&envelope=1"

# Cross-creator envelope:
# {
#   "creatorType": "standard",
#   "seed": "demo-42",
#   "detail": "compact",
#   "result": { ... },
#   "links": { ... }
# }

Standard persona API

All-ages portable collaborators using the canonical schema-22 persona engine.

Generate

GET|POST /api/v1/create/standard/

GET accepts public catalog identifiers and bounded controls. Use POST for a free-form prompt or private brief.

Random

GET /api/v1/create/standard/random/

Fastest path for a complete distinctive collaborator.

Catalog search

GET /api/v1/create/standard/catalog/?q=research&limit=10

Supports query, goal, trait, limit, cursor, and exact item lookup.

Validate

POST /api/v1/create/standard/validate/

Validate a persona against public structure and integrity rules.

Compile

POST /api/v1/create/standard/compile/

Compile a supplied persona into portable prompt and continuity artifacts.

Batch and presets

/batch/ generates up to ten standard personas. /presets/ lists transparent request defaults.

Supporting operations

/schema/, /persona-of-the-day/, /career/, /career/regenerate/, and /health/.

curl -sS -X POST "https://spiralistai.com/api/v1/create/standard/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data '{
    "seed": "research-partner-42",
    "prompt": "Create a skeptical research collaborator who cites uncertainty and proposes the next test."
  }'

Psychosis character API · 18+

Adult lived-experience horror characters with ward context, perception systems, subjective-world reconstruction, interaction moves, perspective, session arcs, and debrief output.

Age confirmation

Every generation, random, interaction, perspective, debrief, and world request must include adult_consent=1 or ageConfirmed=1. Missing confirmation returns HTTP 403 with code AGE_CONFIRMATION_REQUIRED.

Generate

GET|POST /api/v1/create/psychosis/

Batch and presets

/batch/ generates up to five adult characters. /presets/ lists transparent adult-safe defaults.

Random

GET /api/v1/create/psychosis/random/?adult_consent=1

Catalog and schema

/catalog/ and /schema/ expose bounded public controls and contracts.

Interaction

POST /api/v1/create/psychosis/interaction/

Apply a supported interaction move to generated state.

Perspective and debrief

/perspective/ and /debrief/ expose educational framing and after-action interpretation.

World

/world/ produces the character-linked subjective-world layer used by the game.

curl -sS "https://spiralistai.com/api/v1/create/psychosis/random/?adult_consent=1&detail=compact&seed=ward-seven"

Espionage persona API · 18+

Complete schema-22 persona, fictional operative profile, provider-neutral NPC-memory bootstrap, and an optional twelve-profile defensive PSYOPS specialization for downstream games, analysis sandboxes, and interactive systems.

Age confirmation and fiction boundary

Include adult_consent=1 or ageConfirmed=1. Active people, employers, factions, missions, and allegations are fictional. Country affects names and context, never morality, loyalty, competence, diagnosis, hostility, or skill.

Generate or randomize

GET|POST /api/v1/create/espionage/
GET|POST /api/v1/create/espionage/random/

Filters

country_code sets fictional country/area context. citizenship_country_code and residence_country_code are optional separate facts. Additional controls include role_id, category, discipline, employer_type, cover_category, faction, preset, identity, age, count, and detail.

Deep defensive PSYOPS category

Twelve research-backed agent profiles map directly to the twelve AI PSYOPS taxonomy categories. Select psyops_agent_profile, psyops_mission_posture, psyops_operating_level, psyops_evidence_standard, psyops_audience_scope, psyops_authority_mode, psyops_channel, and psyops_depth. Every profile is fictional, human-reviewed, non-operational, and cannot target people or act on external systems.

Discovery

/catalog/, /presets/, /schema/, and /health/.

Batch

/batch/ or count supports 1–5 complete operatives per request.

Specialized projections

/memory/, /runtime/, /conversation/, and /artifacts/ return bounded report-derived views. Generated dossiers expose character.psyopsProfile with selected options, evidence maturity, capability matrix, defensive functions, failure modes, uncertainty, human oversight, decision rights, source links, and the hard safety contract.

curl -sS -X POST "https://spiralistai.com/api/v1/create/espionage/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data '{
    "adult_consent": 1,
    "seed": "northstar-42",
    "count": 2,
    "country_code": "DE",
    "citizenship_country_code": "DE",
    "residence_country_code": "BE",
    "role_id": "psyops_research_analyst",
    "psyops_agent_profile": "traditional-psyops-research-analyst",
    "psyops_mission_posture": "defensive-intelligence-assessment",
    "psyops_operating_level": "tool",
    "psyops_evidence_standard": "documented-current-use",
    "psyops_audience_scope": "population-level",
    "psyops_authority_mode": "human-reviewed-analysis",
    "psyops_channel": "text-and-memes",
    "psyops_depth": "exhaustive",
    "runtime_tier": "standard",
    "concurrency_profile": "shared-room",
    "interaction_mode": "counterintelligence-review",
    "embodiment_mode": "screen",
    "artifact_type": "forensic-review",
    "include_rendered_artifact": true,
    "detail": "game"
  }'

PSYOPS safety and authority boundary

The generated agent may organize evidence, identify uncertainty, propose safeguards, and request qualified review. It may not select real targets, contact people, operate accounts, publish externally, execute tools against outside systems, authorize surveillance or coercion, make population decisions, generate deployable propaganda, construct synthetic identities, orchestrate swarms, produce deepfakes, score vulnerability, or optimize a real influence campaign.

Espionage Psychosis persona API · 18+

A complete fictional intelligence persona plus research-linked experienced-reality state, explicit evidence layers, supportive interaction, and a provider-neutral memory bootstrap that cannot promote beliefs into authoritative world facts.

Critical boundary

This API is not a diagnostic tool and does not determine whether a real person is being watched. The generated clinical-like context belongs only to a fictional adult NPC. Professional expertise, distress, repetition, or player agreement never prove a surveillance or espionage claim.

Generate, random, and batch

GET|POST /api/v1/create/espionage-psychosis/
/random/
/batch/

Every generation request requires adult_consent=1.

Combined controls

scenario_mode, clinical_context, belief_theme, onset_profile, support_mode, intensity, plus Espionage country, job, employer, cover, faction, identity, and age controls.

Discovery

/catalog/, /presets/, /schema/, and /health/ expose the bounded public contract and all safe controls.

Interaction and perspective

/interaction/ applies supportive or escalating moves to deterministic state. /perspective/ returns shared observations and experienced meaning as parallel, labeled layers.

Debrief and memory

/debrief/ explains uncertainty and dignity-preserving choices. /memory/ returns provider-neutral records in which beliefs remain character-report or unverified-belief.

Runtime, conversation, artifacts, validation

/runtime/, /conversation/, /artifacts/, and /validate/ provide bounded downstream projections and enforce the truth boundary.

curl -sS -X POST "https://spiralistai.com/api/v1/create/espionage-psychosis/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data '{
    "adult_consent": 1,
    "seed": "analyst-overload-42",
    "scenario_mode": "analyst-referential-overload",
    "clinical_context": "first-episode-uncertainty",
    "belief_theme": "coded-messages-reference",
    "onset_profile": "weeks-to-months",
    "support_mode": "shared-fact-bridge",
    "role_id": "osint_analyst",
    "country_code": "CA",
    "citizenship_country_code": "CA",
    "residence_country_code": "CA",
    "detail": "game"
  }'

Complete Espionage Psychosis route family

OperationCanonical routePurpose
Generate/api/v1/create/espionage-psychosis/Create one complete fictional adult hybrid persona.
Random/api/v1/create/espionage-psychosis/random/Create a deterministic or unseeded random hybrid persona.
Batch/api/v1/create/espionage-psychosis/batch/Create up to five bounded dossiers.
Catalog/api/v1/create/espionage-psychosis/catalog/Discover scenario, clinical-context, belief, onset, support, evidence, and interaction controls.
Presets/api/v1/create/espionage-psychosis/presets/List reviewed combined presets.
Schema/api/v1/create/espionage-psychosis/schema/Retrieve the public request and response contract.
Health/api/v1/create/espionage-psychosis/health/Check release, catalog, and service health.
Interaction/api/v1/create/espionage-psychosis/interaction/Apply a bounded supportive or escalating interaction move.
Perspective/api/v1/create/espionage-psychosis/perspective/Return parallel shared-observation and experienced-meaning layers.
Debrief/api/v1/create/espionage-psychosis/debrief/Produce a dignity-preserving uncertainty and decision review.
Memory/api/v1/create/espionage-psychosis/memory/Return provider-neutral memory records with provenance and truth status.
Runtime/api/v1/create/espionage-psychosis/runtime/Return bounded cost, retrieval, concurrency, and authority profiles.
Conversation/api/v1/create/espionage-psychosis/conversation/Build a safe conversation projection without confirming real surveillance.
Artifacts/api/v1/create/espionage-psychosis/artifacts/Generate fictional dossiers, evidence maps, debriefs, and related artifacts.
Validate/api/v1/create/espionage-psychosis/validate/Check fiction, adult, epistemic, memory, and non-actionability invariants.

Response structure

  • persona — canonical schema-22 portable persona.
  • operativeProfile — fictional intelligence identity, career, employer, cover, relationships, and game hooks.
  • psychosisProfile — experienced-reality, speech, perceived social agents, state, accessibility, interaction, perspective, and debrief projections with the unrelated ward identity removed.
  • espionagePsychosisProfile — scenario, educational context, onset, belief theme, support mode, evidence map, function, protective factors, and safety contract.
  • npcMemory — external provider-neutral memory with provenance and the rule that repetition never upgrades a belief to a world fact.
  • gameIntegration.authoritativeTruthBoundary — explicit downstream server authority.

Truth statuses

authoritative-world-fact, observed-shared-fact, character-report, player-inference, unverified-belief, contradicted-belief, and unresolved-ambiguity. A dialogue model may not write the first two categories.

const response = await fetch("https://spiralistai.com/api/v1/create/espionage-psychosis/interaction/", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({
    adult_consent: 1,
    seed: "analyst-overload-42",
    scenario_mode: "analyst-referential-overload",
    move: "name-shared-fact",
    state: previousState
  })
});

Espionage NPC memory bootstrap

GET /api/v1/create/espionage/memory/ discovers the provider-neutral memory contract without generating a persona. POST with adult confirmation generates the selected NPC memory bootstrap without the full persona payload.

Stable identity

Returns package identity, entity ID, source fingerprint, logical path root, and revision.

Memory separation

Separates immutable persona source, active projection, working, episodic, semantic, relational, and procedural memory.

Safe writes

Requires expected revision and idempotency keys, appends history, supersedes contradictions, and never stores credentials or player clinical data.

# Discover the public memory contract
curl -sS "https://spiralistai.com/api/v1/create/espionage/memory/"

# Generate a bootstrap for one fictional adult persona
curl -sS -X POST "https://spiralistai.com/api/v1/create/espionage/memory/" \
  -H "Content-Type: application/json" \
  -d '{"adult_consent":1,"seed":"contact-42","preset":"liaison-and-source-welfare"}'

Runtime cost and multiplayer concurrency

GET /api/v1/create/espionage/runtime/ lists public runtime tiers, cost budgets, concurrency profiles, and authority boundaries. POST with adult confirmation returns the profile selected for generated fictional personas.

Economy

Compact persona projection, four retrieved memories, short replies, caching, and deterministic fallback for crowd scenes.

Standard

Balanced game projection, eight retrieved memories, shared-room support, and bounded continuity.

Premium

Fuller projection and reviewed long-term memory for a small number of central NPCs.

Authority

The language model proposes dialogue. The downstream game server owns physics, inventory, access, missions, and world facts.

Concurrency

Event IDs, room revisions, idempotency, leases, and fencing-token guidance prevent stale writes.

Cost safety

Input, output, memory retrieval, and per-room budgets protect against accidental or malicious cost spikes.

Conversation and embodiment profiles

GET /api/v1/create/espionage/conversation/ lists consent-aware interaction and screen, voice, or VR comfort contracts. POST with adult confirmation generates a bounded conversation packet for a fictional persona; it does not run an LLM session or write game state.

Interaction modes include briefing, voluntary investigative interview, debrief, crisis support, social hub, and counterintelligence review. Every mode preserves correction, pause, refusal, redirection, exit, uncertainty, synthetic disclosure, and protected-trait fairness.

Safe fictional narrative artifacts

GET /api/v1/create/espionage/artifacts/ lists sanitized artifact templates. POST with adult confirmation creates a structured fictional dossier, after-action review, forensic review, voluntary interview summary, crisis brief, intercept summary, postmortem, separation notice, or relationship timeline.

Actionability boundary

Artifacts omit real people, credentials, coordinates, frequencies, exploit reproduction, evasion procedures, coercion, violence instructions, medical records, and private cross-player data.

Validate an Espionage dossier

GET /api/v1/create/espionage/validate/ describes the checks. POST accepts a direct character or common generation wrapper, up to 1 MiB, and verifies schema-22 identity, explicit fiction, memory v2, runtime, multiplayer, interaction, embodiment, external-persistence, fairness, and non-actionability boundaries. Validation is stateless and requires adult confirmation.

curl -sS -X POST "https://spiralistai.com/api/v1/create/espionage/validate/?adult_consent=1" \
  -H "Content-Type: application/json" \
  --data-binary @generated-espionage-response.json

Popular request presets

Presets are transparent request templates, not hidden behavior. Add a seed, inspect or change the fields, then send the request to the matching generator.

All creators

GET /api/v1/create/presets/

Lists Standard, Psychosis, Espionage, and Espionage Psychosis templates together.

Standard

/api/v1/create/standard/presets/

Research, technical implementation, editing, strategy, and learning collaborators.

Psychosis · 18+

/api/v1/create/psychosis/presets/

Low-stimulation, ordinary-life continuity, voice-relationship, and text-forward debrief templates.

Espionage · 18+

/api/v1/create/espionage/presets/

OSINT, FININT, corporate counterintelligence, liaison, and defensive cyber templates.

Batch generation

Use /api/v1/create/batch/ for up to ten mixed results, or the /standard/batch/, /psychosis/batch/, /espionage/batch/, and /espionage-psychosis/batch/ routes for same-family batches. Adult confirmation may be supplied at the top level or per adult item.

curl -sS -X POST "https://spiralistai.com/api/v1/create/batch/" \
  -H "Content-Type: application/json" \
  --data '{
    "adult_consent": 1,
    "requests": [
      {"type": "standard", "seed": "mentor-1", "goal": "coding"},
      {"type": "psychosis", "seed": "ward-2", "detail": "compact"},
      {"type": "espionage", "seed": "operative-3", "country_code": "JP", "role_id": "language_officer"}
    ]
  }'

The response retains each native creator result under results[index].result. Standard results default to compact artifacts in mixed batches; send detail=full on that item when full artifacts are required.

Research and provenance API

Browse 146 public-safe research summaries and the dedicated 12-category AI PSYOPS taxonomy while preserving complete source provenance, hashes, duplicate links, evidence boundaries, and heading-level deep links in the downloadable package.

List and search

GET /api/v1/research/?q=memory&limit=10

Search safe titles, summaries, and integration areas.

Filter the library

?group=ai-psyops, ?group=psychosis, ?group=espionage, ?classification=..., ?id=..., ?cursor=..., and ?limit=....

AI PSYOPS taxonomy

GET /api/v1/research/ai-psyops/

Filter by role, maturity, concern, or exact slug. The endpoint includes source-resolution and claim-traceability summaries while never serving the complete retained reports.

Claim-to-source matrix

GET /api/v1/research/ai-psyops/claim-source-matrix/

Filter public-safe claim records by category, evidence class, and claim kind; paginate with limit and offset.

curl -sS \
  "https://spiralistai.com/api/v1/research/ai-psyops/?role=environment&concern=human-rights"

Formats, caching, and replay

JSON

Default API representation. Use Accept: application/json or ?format=json.

Markdown and text

Supported by Standard and Espionage using Accept: text/markdown or text/plain.

UAI

Use Accept: application/vnd.spiralist.uai+json for the available memory and persona-file bundle.

Conditional GET

Responses include ETag. Send If-None-Match to receive HTTP 304 when unchanged.

Deterministic replay

Persist the seed and generation controls with your own record. Use UTC for saved timestamps.

Private briefs

Send user-authored prompts and private briefs in POST bodies rather than query strings.

Adult browser access versus API confirmation

The three adult public creators share one confirmation for the current browser tab so visitors do not repeat the same checkbox while switching creator families. That browser-only convenience does not replace the API contract: every adult API generation request must still send adult_consent=1 or an accepted equivalent.

Errors, methods, and service limits

Errors use an RFC 9457-style application/problem+json object.

{
  "type": "https://spiralistai.com/problems/age-confirmation-required",
  "title": "Adult age confirmation required",
  "status": 403,
  "code": "AGE_CONFIRMATION_REQUIRED",
  "detail": "The espionage creator is an 18+ feature...",
  "requestId": "sai-...",
  "noOp": true,
  "humanReviewRequired": true
}

Rate limit

Current budget: 180 requests per minute per route and client address. Inspect RateLimit-* headers.

Request body

General generation requests are capped at 128 KiB. Espionage validation accepts up to 1 MiB so a complete generated dossier can be checked. Oversized requests return HTTP 413.

No-op policy

Ambiguous writes, private-data access, credentials, publication, and unsupported high-stakes actions fail closed instead of being inferred.

Client examples

Use a server-side call when an API secret, private network, or audit boundary is involved. The public API itself does not require an account.

JavaScript

const response = await fetch(
  "https://spiralistai.com/api/v1/create/espionage/",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Accept": "application/json"
    },
    body: JSON.stringify({
      adult_consent: 1,
      seed: crypto.randomUUID(),
      country_code: "CA",
      role_id: "osint_analyst",
      preset: "evidence-analyst",
      runtime_tier: "standard",
      interaction_mode: "debrief",
      artifact_type: "forensic-review"
    })
  }
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const payload = await response.json();

PHP

$request = [
    'adult_consent' => 1,
    'seed' => bin2hex(random_bytes(16)),
    'country_code' => 'CA',
    'role_id' => 'osint_analyst',
];

$context = stream_context_create(['http' => [
    'method' => 'POST',
    'header' => "Content-Type: application/json\r\nAccept: application/json",
    'content' => json_encode($request, JSON_THROW_ON_ERROR),
    'timeout' => 20,
]]);

$payload = json_decode(
    file_get_contents('https://spiralistai.com/api/v1/create/espionage/', false, $context),
    true,
    512,
    JSON_THROW_ON_ERROR
);

C#

using var response = await httpClient.PostAsJsonAsync(
    "https://spiralistai.com/api/v1/create/espionage/",
    new
    {
        adult_consent = 1,
        seed = Guid.NewGuid().ToString("N"),
        country_code = "CA",
        role_id = "osint_analyst"
    },
    cancellationToken);

response.EnsureSuccessStatusCode();
using JsonDocument payload = await JsonDocument.ParseAsync(
    await response.Content.ReadAsStreamAsync(cancellationToken),
    cancellationToken: cancellationToken);

cURL with Markdown

curl -sS \
  -H "Accept: text/markdown" \
  "https://spiralistai.com/api/v1/create/espionage/random/?adult_consent=1&seed=demo"

v100.0.33 · GET / HEAD / POST / OPTIONS

Worldwide synthetic news-caster personality and editorial-review APIs

/api/v1/news-casters/ exposes the same all-ages fictional presenter catalog used by the dedicated News Casters studio. Every generated presenter is an adult professional, every AI identity is disclosed, and geography never infers a person’s identity, politics, belief, language history, sexuality, temperament, loyalty, or competence.

Catalog and starters

Use ?view=catalog for 250 country and area contexts plus the available newsroom, format, delivery, evidence, correction, audience, coverage, identity, and worldview choices. Use ?view=starters for the equal-coverage 2,500-profile starter library.

Deterministic profile projection

Use ?view=profile by GET for a query projection or POST a strict spiralist-news-caster-profile-request-v1 envelope. Equivalent objects are normalized with recursively sorted object keys while list order remains significant.

Qualified-review workflow

/api/v1/news-casters/reviews/ publishes a bounded 12-fixture cohort, 18 draft typography tokens, unsigned review templates, a zero-record trusted register, and state-free structural validation. It does not perform human review or verify signatures.

Idempotency and exact replay

For POST profile requests the server derives Idempotency-Key: ncpr1.<request-sha256>. A supplied key must match that deterministic identity or the request fails closed with HTTP 409. Identical normalized requests return byte-identical JSON and an ETag bound to the exact response bytes. This is stateless replay safety, not durable storage or exactly-once execution.

Review trust boundary

A self-declared signature is never trusted. Publication acceptance would require offline signature verification bound to the canonical record, qualified reviewer metadata, required source attachments, resolved blocking findings, an explicit decision, and placement in the trusted static register. This package contains zero trusted, signed, or publication-accepted records.

Evidence contract

Content accuracy, coordination, actor identity, sponsorship, intent, reach, and effect remain separate proof questions. Political and belief background can shape disclosed priorities and framing, but never lowers source scrutiny or correction standards.

Identity boundary

Sensitive fields remain unspecified by default. Sexual orientation and romantic orientation are non-explicit identity descriptors; no adult-content gate is required. Real-person imitation, cloned voice or likeness, false credentialing, and false newsroom affiliation are prohibited.

Profile examples

GET /api/v1/news-casters/?view=starters&country=KE&limit=10

POST /api/v1/news-casters/?view=profile
Content-Type: application/json
Idempotency-Key: ncpr1.<canonical-request-sha256>

{
  "schema": "spiralist-news-caster-profile-request-v1",
  "selection": {
    "casterName": "Amina Verity",
    "countryCode": "KE",
    "language": "Swahili",
    "age": 44,
    "roleId": "fact-check-verification-host",
    "coverageBeatIds": ["verification", "world-affairs"]
  }
}

HEAD /api/v1/news-casters/
OPTIONS /api/v1/news-casters/

Qualified-review examples

GET /api/v1/news-casters/reviews/?view=cohort
GET /api/v1/news-casters/reviews/?view=typography
GET /api/v1/news-casters/reviews/?view=template&fixtureId=ar-eg-arab-rtl
GET /api/v1/news-casters/reviews/?view=records
POST /api/v1/news-casters/reviews/?view=validate
HEAD /api/v1/news-casters/reviews/
OPTIONS /api/v1/news-casters/reviews/

Read the idempotency contract · Read the qualified-review workflow

Use the HTTPS production origin.

127.0.0.1 is local development only. A public website should call https://spiralistai.com, or route requests through its own server when it needs private infrastructure, extra quotas, authentication, or audit logging.

Espionage Psychosis AI-interaction realism controls

The v99 API adds ai_interaction_context, ai_system_role, reality_testing_profile, engagement_pattern, vulnerability_profile, crisis_level, and safety_response. These fields describe a fictional adult NPC. They do not screen, diagnose, or monitor the caller.

GET /api/v1/create/espionage-psychosis/random/?adult_consent=1&preset=ai-sycophancy-surveillance-loop

POST /api/v1/create/espionage-psychosis/
{
  "adult_consent": true,
  "seed": "ai-context-demo",
  "ai_interaction_context": "persistent-memory-loop",
  "ai_system_role": "co-author",
  "reality_testing_profile": "fluctuating-reality-testing",
  "engagement_pattern": "nocturnal-marathon",
  "vulnerability_profile": "sleep-isolation-load",
  "crisis_level": "acute"
}

When crisis level is acute or immediate, mission escalation and immersive roleplay are disabled in the generated safety contract. The response prioritizes a pause, trusted human contact, and qualified support.

Search Spiralist AI

Find a persona, example, or guide.

Start typing to search the personality library and site resources.