Last updated 2026-10-25

API reference

Base URL https://kinsy.ai/v1. All responses are JSON; errors use the envelope. The machine-readable version of this page is /v1/openapi.json.

Resources at a glance

Build options

FieldValuesMeaning
slides4–25, default 10Target slide count. The deck follows the material, so the final count can land near rather than on the target; the credit band is charged on the target.
intakeauto (default), skipauto: the builder asks its own questions and fills any you did not answer. skip: build straight from the brief and your answers.
answersobjectYour answers to intake questions by key (audience, tone, …). Yours always win.
researchauto (default), on, offauto turns live research on when the brief depends on recent events.
theme, templateids from the cataloguesVisual theme and deck template; omitted means Kinsy chooses from the content.
brand_kit_ididA brand kit uploaded in the web app.

Status fields

status is queued, running, done or error. While running, phase, progress (0–1), slides_rendered and slides_total move. On done, artifacts.pptx and artifacts.pdf carry url, filename and expires_at, and watermark says whether the free-plan mark is on the slides. On error, error is a short plain-English sentence.

Reference

Generated from the OpenAPI document. Every call except the catalogues and the spec needs Authorization: Bearer ksy_live_….

POST /v1/auth/device

Start a device sign-in (what `kinsy login` calls)

No key needed.

Request body (application/json)

FieldType
clientstringThe tool asking, e.g. cli/0.1.0.
hostnamestringThe machine asking to sign in; shown on the approval page.

Response 200

FieldType
device_code requiredstringSecret; poll with it. Never shown to the person.
expires_in requiredintegerSeconds until the codes expire (600).
interval requiredintegerMinimum seconds between polls.
user_code requiredstringEight characters the person types in, shown as XXXX-XXXX.
verification_uri requiredstring
verification_uri_complete requiredstringverification_uri with the code pre-filled.

Errors use the envelope.

POST /v1/auth/device/token

Poll for the key once the sign-in is approved in the browser

No key needed.

Request body (application/json)

FieldType
device_code requiredstring

Response 200

FieldType
api_keystring | nullOnly on the single approved answer; the key is created at that moment.
emailstring | null
interval requiredintegerSeconds to wait before the next poll (grows on slow_down).
key_hintstring | null
key_idstring | null
status required`pending` · `slow_down` · `approved` · `denied` · `expired` · `claimed`approved carries the key exactly once; afterwards the code reads claimed.

Errors use the envelope.

POST /v1/decks

Create a deck (answers in under two seconds; poll the status URL)

Parameters

NameInType
Idempotency-Keyheaderstring | null
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Request body (application/json)

FieldType
answersobject
brand_kit_idstring | null
briefstringWhat the deck should say and who it is for.
callback_urlstring | nullReserved.
intake`auto` · `skip`
research`auto` · `on` · `off`
slidesinteger | nullTarget slide count (default 10).
sourcesarray of SourceDocuments the deck is built from (text already extracted).
templatestring | null
themestring | null

Source

FieldType
name requiredstring
text requiredstring

Response 202

FieldType
created_at requiredstring
credits_chargedinteger
deck_id requiredstring
status`queued`
status_url requiredstring

Errors use the envelope.

GET /v1/decks

Your decks, newest first

Parameters

NameInType
limitqueryinteger
cursorquerystring | null
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Response 200

FieldType
decks requiredarray of DeckSummary
next_cursorstring | null

DeckSummary

FieldType
clientstring | null
created_atstring | null
deck_id requiredstring
status requiredstring
titlestring | null
updated_atstring | null

Errors use the envelope.

GET /v1/decks/{deck_id}

Status of a deck build, and the files once it is done

Parameters

NameInType
deck_id requiredpathstring
includequerystringComma list: slides, quality
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Response 200

FieldType
artifactsDeckArtifacts | null
clientstring | null
created_atstring | null
deck_id requiredstring
errorstring | null
phasestring | null
progressnumber
qualityQualitySummary | null
slidesarray of SlideInfo | null
slides_renderedinteger
slides_totalinteger | null
status requiredstring
titlestring | null
updated_atstring | null
watermarkboolean | null

DeckArtifacts

FieldType
pdfDeckArtifact | null
pptxDeckArtifact | null

DeckArtifact

FieldType
expires_at requiredstring
filename requiredstring
url requiredstring

QualitySummary

FieldType
available requiredboolean
fact_claimsinteger
findingsarray of QualityFinding
flaggedinteger
missing_topicsarray of string

QualityFinding

FieldType
claimstring
fixstring
fixedboolean
slideinteger | null
verdictstring

Errors use the envelope.

POST /v1/decks/{deck_id}/edits

Rewrite one slide from an instruction

Parameters

NameInType
deck_id requiredpathstring
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Request body (application/json)

FieldType
instruction requiredstring
slide requiredinteger1-based slide number.

Response 200

FieldType
clarifystring | null
credits_chargedinteger
deck_id requiredstring
images_generatedinteger
layout_changedboolean
slideSlideInfo | null
titlestring

SlideInfo

FieldType
headlinestring | null
layout requiredstring
num requiredinteger
png_urlstring

Errors use the envelope.

GET /v1/decks/{deck_id}/files/{kind}

Download a finished deck (pptx, pdf or png zip)

Parameters

NameInType
deck_id requiredpathstring
kind requiredpathstring
redirectquerybooleanfalse → return the link as JSON
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Response 200

FieldType
expires_at requiredstring
filename requiredstring
url requiredstring

Errors use the envelope.

POST /v1/files

Extract the text of a document to use as a source

Parameters

NameInType
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Request body (multipart/form-data)

FieldType
file requiredstring

Response 200

FieldType
char_count requiredinteger
name requiredstring
text requiredstring
truncated requiredboolean

Errors use the envelope.

POST /v1/intake

The questions the builder would ask about a brief

Parameters

NameInType
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Request body (application/json)

FieldType
briefstring
sourcesarray of Source

Source

FieldType
name requiredstring
text requiredstring

Response 200

FieldType
questions requiredarray of IntakeQuestionV1
research_availableboolean
time_sensitiveboolean
time_sensitive_reasonstring

IntakeQuestionV1

FieldType
key requiredstring
question requiredstring
suggestedarray of string
whystring

Errors use the envelope.

GET /v1/me

Who am I and what can I spend

Parameters

NameInType
authorizationheaderstring | null
x-kinsy-clientheaderstring | null

Response 200

FieldType
client requiredstring
credits requiredCreditBalance
emailstring | null
email_verified requiredboolean
keyKeyInfo | null
plan requiredstring
target_max requiredinteger
uid requiredstring
watermark requiredboolean

CreditBalance

FieldType
degradedboolean
extra requiredinteger
monthly_grant requiredinteger
period_remaining requiredinteger
period_used requiredinteger
resets_atstring | null
total requiredinteger

KeyInfo

FieldType
created_at requiredstring
hint requiredstring
key_id requiredstring
label requiredstring
last_used_atstring | null
src requiredstring

Errors use the envelope.

GET /v1/templates

List the deck templates

No key needed.

Response 200

Errors use the envelope.

GET /v1/themes

List the slide themes

No key needed.

Response 200

Errors use the envelope.