What you can do — and by which rules
Through the API you create, change and publish what you otherwise do in the tools. The same rules apply: your plan limits, your AI bar, a complete brand before publishing, gapless invoice numbers and the check of every uploaded image. What a tool does not allow, the API does not allow either.
If something is refused, type carries a fixed English code your program can act on — such as plan_limit_reached, brand_incomplete or ai_quota_exhausted — and detail carries the sentence the tool would show you.
{
"error": {
"type": "brand_incomplete",
"message": "The brand needs a name, an address and an email or phone number before anything is published.",
"detail": "Bevor diese Website online geht, muss klar sein, wer dahintersteht. Es fehlt: …"
}
}The scopes
Each area has one scope to read and one to write: sites:read and sites:write for websites, domains:read and dns:write for domains and DNS records, invoices:read and invoices:write for customers, invoices and quotes, media:read and media:write for MediaStudio, brand:read for your brands. Choose them when you create the key under “What may this key do?”.
Websites
POST /v1/sites builds a whole website from one sentence — as a draft. It usually takes 20 to 60 seconds and uses AI credit, as in WebSiteBuilder. POST /v1/sites/{id}/edit changes one page of the draft as instructed. Nothing goes online until POST /v1/sites/{id}/publish; POST /v1/sites/{id}/unpublish takes the website offline again without losing anything.
brand_id names the brand whose logo and company details the website shows. If you have only one brand, every website follows it on its own — brand_id holds its number and brand_assigned is false. With several brands, a website shows the logo and company details only of the brand you assigned it to; without an assignment, brand_id is null.
curl https://api.kenjtec.com/v1/sites \
-H "Authorization: Bearer kt_api_…" \
-H "Idempotency-Key: cafe-lumen-2026-10" \
-H "Content-Type: application/json" \
-d '{"brief": "Café Lumen in Lisbon: breakfast, our own coffee beans, tables to reserve."}'Send an Idempotency-Key with the AI endpoints. If the connection drops, retry with the same key and you get the website that was already built — without paying twice.
DNS records
GET /v1/domains lists your domains whose DNS is at KENJTEC. Below them you create records (A, AAAA, CNAME, MX, TXT, NS), replace them with PATCH and delete them — with the same checks as in DomainStudio.
Records KENJTEC set for one of your works carry managed: true. The API does not change them; you do that in DomainStudio, where the consequences are shown.
Invoices and quotes
POST /v1/customers creates a customer, POST /v1/invoices a draft — an invoice or a quote. KENJTEC calculates the totals; you send quantity, unit price in cents and tax rate per line.
POST /v1/invoices/{id}/issue issues it: the document gets the next number without a gap and is fixed from then on. Correcting means cancelling — POST /v1/invoices/{id}/cancel creates a cancellation invoice with its own number. Nothing is deleted.
Uploading media
Uploading takes two steps, as in MediaStudio. POST /v1/media/uploads gives you an address and the headers; send the file there with PUT. Then POST /v1/media/{id}/confirm checks what arrived, and only then is the file reachable at its address.
JPEG, PNG, WebP, GIF, PDF, MP4 and WebM are allowed. An image that fails the content check is refused with 422.
Reading your brand
GET /v1/brands returns your brands from BrandStudio: name, logo, colours, fonts, company details and channels. Your own programs can build in the same look as your KENJTEC works.