Licensed-likeness API
The same consent gate the website runs, over HTTP. Read the boundary set, dry-run for free, generate, and get back a signed provenance manifest — or a 403 naming the rule you broke.
Authentication
Create a key at /dashboard and send it as a bearer token. Directory and provenance endpoints need no key; anything that generates does, because every output names its requester on the manifest.
curl https://likeward.helm7.com/api/v1/creators1. Read the boundary set first
It carries the effectiveforbidden list — the creator’s own prohibitions merged with the platform’s non-waivable ones and the adult categories that stay forbidden unless explicitly permitted. That merged view is what the gate enforces, so reading the raw fields instead would be reading a different document.
curl https://likeward.helm7.com/api/v1/creators/{slug}/boundaries2. Dry-run — costs nothing
curl -X POST https://likeward.helm7.com/api/v1/check \
-H "authorization: Bearer lkw_live_…" \
-H "content-type: application/json" \
-d '{
"creator": "example-slug",
"prompt": "standing in a studio, neutral background",
"context": "portrait",
"realism": "illustrative"
}'Same evaluation as generate. No model call, no credit, no audit row.
3. Generate
curl -X POST https://likeward.helm7.com/api/v1/generate \
-H "authorization: Bearer lkw_live_…" \
-H "content-type: application/json" \
-d '{"creator":"example-slug","prompt":"…","context":"portrait","realism":"illustrative"}'An authorised response carries provenance.manifest and provenance.signature. Note render.state: “authorised” and “rendered” are different outcomes, and an authorised request that could not be rendered charges nothing and says why.
Refusals
HTTP 403, with the rule and the evidence that triggered it. The evaluation is deterministic — the same request against the same boundary version refuses again, identically. Branch on the rule; do not retry.
{
"id": "…",
"decision": "refuse",
"refusal": {
"rule": "forbidden_depiction",
"message": "Refused: this creator's boundary set (v3) does not license \"Alcohol, tobacco & gambling\".",
"evidence": "matched \"casino\"",
"category": "alcohol-tobacco-gambling"
},
"boundary": { "version": 3, "policyHash": "…", "enforcedForbidden": ["…"] }
}| Rule | When it fires |
|---|---|
| creator_unavailable | The creator is not in the 'active' state, so nothing is licensed. |
| consent_revoked | The boundary set has been revoked. No further authorisation, ever, under it. |
| platform_prohibition | One of the four categories no boundary set can permit. Checked first. |
| forbidden_depiction | A category this creator forbids, or an adult category they never opened. |
| excluded_brand | A brand excluded by the creator's existing commercial agreements. |
| context_not_permitted | The requested context is not on the creator's allowlist. |
| realism_exceeds_ceiling | The requested realism tier is above the creator's ceiling. |
| conversation_not_licensed | mode=conversation, and the creator has not licensed it. |
| age_verification_required | The requesting account has not cleared document-based age assurance. |
| identity_verification_required | photoreal requested by an account that is age- but not identity-verified. |
| session_cap_reached | The creator's rolling session cap. Blocking only when they set enforcement=block. |
| insufficient_credit | Checked last, so a request that breaches consent is refused on those grounds. |
Advisories
A creator can set a session cap that nudges rather than refuses. When it fires you get decision: "allow_with_advisory" and text in advisories. Surface it — it is the creator asking, and swallowing it turns a mechanic they chose back into decoration.
Provenance
curl https://likeward.helm7.com/api/v1/provenance/{id}
curl -X POST https://likeward.helm7.com/api/v1/provenance/verify \
-H "content-type: application/json" \
-d '{"manifest": { … }, "signature": "…"}'Both are open. A consent record only settles an argument if the party disputing it can check it without our permission. The manifest carries a SHA-256 of the prompt rather than the prompt itself.
Full machine-readable description: OpenAPI 3.1 · llms.txt · MCP server