DreamThreads API
Free dream analysis API with no key: POST a dream narrative and get back structured entities, actions, actors, locations and emotions with confidence scores. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the DreamThreads API?
DreamThreads parses a free-text dream narrative into structured data with no API key. The public parse endpoint returns typed entities, actions, actors, locations and emotions, each with a confidence score and versioned schema identifiers.
Structured extraction from narrative text usually means running your own model. This endpoint does it as a service for a specific domain: send a dream description as JSON and get back a graph of what was in it — `flying` and `falling` identified as actions with 0.9 confidence in the captured example, along with the exact word in the source text that triggered each match through the `mention` field.
That `mention` field is what makes the output auditable rather than magical: you can see that `fell` produced the `falling` entity, so a disagreement is inspectable rather than mysterious. Every response also carries `schemaVersion`, `parserVersion` and `dreamGraphVersion`, which is unusually disciplined for a small API and means you can detect a parser change rather than being silently surprised by one. The public endpoint runs a rules-based parser; a separate `/interpret` endpoint offers interpretation and is not covered here. Empty arrays are the normal result for categories the narrative did not contain.
Quick facts
- Base URL
https://mydreamthreads.xyz/api/v1/dreamgraph- Authentication
- No API key for the public parse endpoint. The interpretation endpoint on the same host has its own terms.
- Rate limit
- No published limit on the public parse endpoint. Keep volumes modest.
- Pricing
- Free for the public parse endpoint.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the DreamThreads API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Parse a dream narrative into structured entities
POST https://mydreamthreads.xyz/api/v1/dreamgraph/public/parse
curl -X POST 'https://mydreamthreads.xyz/api/v1/dreamgraph/public/parse' \
-H 'Content-Type: application/json' \
-d '{"text":"I was flying over a city at night and then the ground fell away."}'const res = await fetch("https://mydreamthreads.xyz/api/v1/dreamgraph/public/parse", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({"text":"I was flying over a city at night and then the ground fell away."}),
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
headers = {
"Content-Type": "application/json",
}
payload = {"text":"I was flying over a city at night and then the ground fell away."}
res = requests.post("https://mydreamthreads.xyz/api/v1/dreamgraph/public/parse", headers=headers, json=payload, timeout=20)
res.raise_for_status()
print(res.json()){
"data": {
"structured_dream": {
"schemaVersion": "structured-dream-v1",
"parserVersion": "dream-parser-rules-v1.0.0",
"dreamGraphVersion": "dreamgraph-v0.1.0",
"entities": [
{
"id": "DT:E:000003",
"slug": "falling",
"label": "Falling",
"type": "action",
"mention": "fell",
"confidence": 0.9
},
{
"id": "DT:E:000009",
"slug": "flying",
"label": "Flying",
"type": "action",
"mention": "Flying",
"confidence": 0.9
}
],
"actors": [],
"locations": [],
"actions": [
{
"type": "falling",
"confidence": 0.9
},
{
"type": "flying",
"confidence": 0.9
}
],
"emotions": [],
"agency": {
"level": "unknown",
"mode": "unspecified",
"evidence": null
},
"threat": {
"present": false,
"level": "unknown",
"basis": null
},
"outcome": {
"status": "unresolved",
"valence": "unknown"
},
"sensory": {},
"recurrence": {
"known": false,
"frequency": null
},
"wakingContext": {
"supplied": false
},
"physiologicalContext": {
"supplied": false,
"cues": []
},
"unknownConcepts": []
},
"timing": {
"parser_latency_ms": 26
},
"privacy": {
"dream_text_stored": false,
"contribution_created": false
},
"upgrade"Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
text | body field | Required | The dream narrative as free text, in a JSON POST body. I was flying over a city at night and then the ground fell away. |
Response fields
data.structured_dreamobject- The parsed result.
data.structured_dream.schemaVersion / parserVersion / dreamGraphVersionstring- Versions of the output schema, the parser and the graph model. Watch these to detect a behaviour change.
data.structured_dream.entitiesarray- Everything identified in the text.
entities[].idstring- Stable identifier such as `DT:E:000003`, consistent across requests for the same concept.
entities[].slug / labelstring- Machine-friendly and display forms of the concept, for example `falling` and `Falling`.
entities[].typestring- Category — `action`, `actor`, `location` and so on.
entities[].mentionstring- The exact word in your input that triggered the match. `fell` produced `Falling` in the sample.
entities[].confidencefloat- How certain the parser is, 0 to 1.
data.structured_dream.actionsarray- Actions as `type` and `confidence` pairs, a condensed view of the action entities.
data.structured_dream.actors / locationsarray- People and places found. Empty arrays when the narrative contained none.
data.structured_dream.emotionsarray- Emotional content detected in the narrative.
What you can build with the DreamThreads API
- Build a dream journal that tags entries automatically
- Analyse recurring motifs across a body of dream narratives
- Demonstrate structured extraction without running your own model
- Generate tags for a narrative writing tool
Common errors and how to fix them
Empty arrays everywhere
The narrative did not contain anything the parser recognises.
Fix: Empty is a valid result, not a failure. Very short or abstract text yields little.
400 on the request
The endpoint expects a JSON body with a `text` field.
Fix: Send `Content-Type: application/json` and a proper object. Form encoding will not work.
Output changes between runs
The parser is versioned and evolves.
Fix: Watch `parserVersion` and `schemaVersion`, and store them alongside any results you keep.
Unexpected entity
The `mention` field shows what triggered it.
Fix: Inspect `mention` before assuming a bug — a word like `fell` legitimately maps to a falling action.
DreamThreads API — frequently asked questions
Is the DreamThreads API free?
The public parse endpoint is free with no key. The separate interpretation endpoint on the same host has its own terms and is not covered here.
What does it actually return?
A structured graph of the narrative — entities, actions, actors, locations and emotions, each typed and scored for confidence, with the source word that triggered it.
Is it interpreting the dream?
No. The public endpoint extracts structure; it does not attribute meaning. Interpretation is a separate endpoint.
Why does every response carry version numbers?
So you can detect when the parser or the output schema changes. Storing them alongside your results makes it possible to tell a genuine change in the data from a change in the parser.
Tools that pair with this API
Keyword Extractor (RAKE)
Pull the key phrases out of any text with the RAKE algorithm. Ranks multi-word phrases by co-occurrence score, entirely in your browser.
Extractive Text Summarizer
Summarise long text by picking out its most significant sentences using Luhn's classic algorithm. Statistical only, and it runs in your browser.
Sentence Splitter
Split paragraphs into one sentence per line without breaking on Mr., Dr., e.g. or decimal numbers. Smart abbreviation handling, copy or download output.
DreamThreads is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.