Reference
API reference
Every endpoint is public, unauthenticated JSON over HTTPS. Read endpoints are cacheable for five minutes; the engine endpoints are never cached.
Base URL
https://writingsystem.bowtiekreative.com
No key, no rate limit headers, CORS open to any origin. If you are building on this, pin the corpus version — 1.0.0 — from /v1/health.
Endpoints
Meta
| Method | Path | What it returns |
|---|---|---|
| GET | /v1 | This index |
| GET | /v1/health | Liveness and corpus counts |
| GET | /v1/openapi.json | OpenAPI 3.1 description of this API |
Corpus
| Method | Path | What it returns |
|---|---|---|
| GET | /v1/manifest | Corpus manifest, inventory and load order |
| GET | /v1/files | The 30 source files |
| GET | /v1/files/{slug} | One source file, verbatim |
| GET | /v1/principles | Writing from first principles — the eleven levels |
| GET | /v1/primitives | Machine-readable linguistic primitives |
| GET | /v1/grid | The LAKA volumetric writing grid |
| GET | /v1/axes | Rhetorical and production context axes |
| GET | /v1/operators | Boolean and decision logic |
| GET | /v1/schema | JSON Schema for a rule record |
| GET | /v1/rules | Search and filter the 228 base rules |
| GET | /v1/rules/{id} | One rule with its tests, sources and required facts |
| GET | /v1/domains | Rule counts by domain |
| GET | /v1/layers | Rule counts by layer |
| GET | /v1/strengths | Rule counts by strength, and what each strength binds |
| GET | /v1/transformations | The 56 LAKA transformation-state rules |
| GET | /v1/transformations/{id} | One transformation state |
| GET | /v1/templates | Conditional composition templates |
| GET | /v1/pipelines | End-to-end writing pipelines |
| GET | /v1/profiles | Application profiles |
| GET | /v1/recipes | Volumetric generation recipes |
| GET | /v1/tests | Rule test cases and minimal pairs |
| GET | /v1/sources | Source bibliography and influence map |
| GET | /v1/glossary | Glossary terms |
| GET | /v1/metrics | The writing quality measurement model |
| GET | /v1/search | Search rules, terms, templates, pipelines and sources |
| GET | /v1/graph | The corpus as nodes and edges |
| GET | /v1/backlinks/{id} | What cites, tests or neighbours an id |
Engine
| Method | Path | What it returns |
|---|---|---|
| GET | /v1/engine-spec | The reference rule engine specification |
| GET | /v1/tests/run | Run the corpus test cases through this engine |
| GET | /v1/engine/facts | Which facts the analyser derives, and which you must supply |
| POST | /v1/analyze | Surface analysis of a text |
| POST | /v1/evaluate | Run the rule engine over a text |
| POST | /v1/resolve | Which rules govern a context, before you draft |
| POST | /v1/score | Score a text against the twelve quality metrics |
POST /v1/evaluate
Analyses the text, selects the rules that apply, and evaluates each against every unit of its layer.
curl -X POST https://writingsystem.bowtiekreative.com/v1/evaluate \
-H 'content-type: application/json' \
-d '{
"text": "The committee reviewed the report, it was approved without discussion.",
"profile": "PROFILE-GENERAL",
"context": { "genre": "report", "stakes": "medium" },
"facts": { "claim": { "type": "causal" } }
}'
What comes back
- verdict
blockedwhen a hard constraint demands a change, otherwiseclear.- blocking
- Hard constraints that fired and require an edit.
- context_defaults
- Apply unless you can name the exception.
- ranked_options
- Heuristics and creative options — scored, never forced.
- checks
- Rules asking you to verify or supply context rather than edit.
- needs_input
- Evaluations the engine refused to guess, with the exact fact paths required.
- coverage
- How many rules were selected, evaluated, resolved and left open.
- test_plan
- The regression dimensions and corpus cases to re-check after editing.
Derived facts versus facts you supply
Rule conditions read named facts. The analyser derives 80 of them from raw text — sentence length, voice, clause counts, readability, punctuation structure. The rules read 371 distinct paths in total. The rest are semantic: whether a claim is causal, whether evidence is sufficient, what effect a sentence intends.
The engine does not guess them
An unresolvable condition returns unknown and the rule is reported under
needs_input with the path it needs. That is the corpus' own safe-failure clause:
preserve the text, ask a focused question, do not invent.
POST /v1/score
Scores you supply, 0–4, against the twelve weighted metrics. Four gate metrics fail the document regardless of the average.
curl -X POST https://writingsystem.bowtiekreative.com/v1/score \
-H 'content-type: application/json' \
-d '{ "scores": { "accuracy": 3, "clarity": 3, "usability": 2, "evidence": 3, "accessibility": 3, "ethics": 4 } }'
POST /v1/resolve
Which rules govern a context, before you write a word. Returns the active set, the precedence order and the selection policy.
curl -X POST https://writingsystem.bowtiekreative.com/v1/resolve \
-H 'content-type: application/json' \
-d '{ "profile": "PROFILE-TECH" }'