KDaaS API
Kentico Developer as a Service — programmatic access to expert Xperience by Kentico development.
Authentication
KDaaS supports two authentication methods. All authenticated endpoints require one of these.
API Key (Bearer Token)
After purchasing a package or hourly block through Stripe checkout, you receive an API key. Include it in every request:
Authorization: Bearer YOUR_API_KEY
Your API key is tied to your account and grants access to create sessions, manage artifacts, and view account details. It never expires, but can be rotated from the dashboard.
L402 Lightning Authentication
AI agents and programmatic clients can pay per-session via the Lightning Network using the L402 protocol. No account or signup required — payment is authentication.
1. POST to the L402 proxy URL (see
/api/pricing for the URL).2. Receive HTTP 402 with a Lightning invoice in the
WWW-Authenticate header.3. Pay the invoice to get a preimage.
4. Retry with:
Authorization: L402 <macaroon>:<preimage>5. Token is valid for 1 hour (all requests within the session window use the same token).
Magic Link (Dashboard)
For browser-based dashboard access, request a magic link sent to your email. The link contains a one-time token valid for 15 minutes. After verification, you receive your API key for subsequent requests.
Getting Started
The typical workflow for human clients:
- Get pricing:
GET /api/pricingto see available packages and hourly rates. - Purchase a package:
POST /api/checkoutto create a Stripe checkout session. Complete payment to receive your API key. - Create a session:
POST /api/session/createwith your API key. This deducts hours from your balance. - Send messages:
POST /api/session/{id}/messageto interact with the Kentico development agent. - Get artifacts:
GET /api/session/{id}/artifactsto retrieve generated code files.
Base URL
https://kentico-developer.com
Capability Values
When creating a session, specify the type of Kentico work you need:
| Value | Description |
|---|---|
General | General Kentico development questions and tasks |
Widget | Page Builder widget development |
ContentType | Content type creation and modeling |
Migration | KX13 to Xperience by Kentico migration |
Template | Page Builder template development |
Health
Check service health and database connectivity.
{
"status": "healthy",
"service": "KDaaS",
"database": "healthy",
"timestamp": "2026-03-10T12:00:00Z"
}
curl https://kentico-developer.com/api/health
Pricing
Get all pricing information including packages, hourly rates, and L402 Lightning access details.
| Query Param | Type | Description |
|---|---|---|
btcPrice optional | decimal | Override BTC/USD price for sats calculation. If omitted, uses live price. |
{
"service": "kentico-developer.com",
"tagline": "Expert Xperience by Kentico development...",
"freeConsultation": {
"duration": "30 minutes",
"description": "Free assessment call...",
"bookingUrl": "/book"
},
"packages": [ ... ],
"hourlyRate": {
"rateUsd": 250.00,
"sessions": [ ... ]
},
"l402Access": {
"proxyUrl": "https://api.lightningenable.com/l402/proxy/...",
"sessionCreatePath": "/api/session/create",
"currentPriceSats": 262500,
"sessionDurationMinutes": 60,
"protocol": "L402",
"instructions": "POST to ProxyUrl + SessionCreatePath..."
}
}
curl https://kentico-developer.com/api/pricing
curl https://kentico-developer.com/api/pricing?btcPrice=100000
List all available fixed-price packages.
curl https://kentico-developer.com/api/pricing/packages
Get details for a specific package by ID.
curl https://kentico-developer.com/api/pricing/packages/widget-single
Checkout
Create a Stripe checkout session to purchase a package or hourly block.
{
"packageId": "widget-single",
"email": "client@example.com"
}
| Field | Type | Description |
|---|---|---|
packageId required | string | Package ID from /api/pricing/packages, or "hourly-1" for a 1-hour block. |
email optional | string | Pre-fill the customer email on the Stripe checkout page. |
{
"url": "https://checkout.stripe.com/c/pay/cs_..."
}
curl -X POST https://kentico-developer.com/api/checkout \
-H "Content-Type: application/json" \
-d '{"packageId": "widget-single", "email": "client@example.com"}'
Check the status of a Stripe checkout session. Returns the API key on successful payment.
| Query Param | Type | Description |
|---|---|---|
sessionId required | string | Stripe checkout session ID (starts with cs_). |
{
"packageName": "Single Widget",
"amount": 50000,
"email": "client@example.com",
"status": "paid",
"apiKey": "kdaas_abc123..."
}
curl "https://kentico-developer.com/api/checkout/session?sessionId=cs_test_..."
Contact
Submit a contact form inquiry. Sends email notifications and an auto-reply to the submitter.
{
"name": "Jane Doe",
"email": "jane@example.com",
"message": "I need a custom widget built...",
"company": "Acme Corp",
"kenticoVersion": "29.0",
"packageInterest": "widget-single"
}
| Field | Type | Description |
|---|---|---|
name required | string | Your name. |
email required | string | Valid email address. |
message required | string | Your message (max 5,000 characters). |
company optional | string | Company name. |
kenticoVersion optional | string | Your Kentico version. |
packageInterest optional | string | Package you are interested in. |
{
"message": "Thank you! We'll be in touch within 1 business day."
}
curl -X POST https://kentico-developer.com/api/contact \
-H "Content-Type: application/json" \
-d '{"name":"Jane","email":"jane@example.com","message":"Need a widget."}'
Session Endpoints
Create a new development session. Deducts hours from your account balance (API key auth) or uses a pre-paid Lightning invoice (L402 auth).
{
"capability": "Widget",
"durationMinutes": 60
}
| Field | Type | Description |
|---|---|---|
capability optional | string | One of: General, Widget, ContentType, Migration, Template. Defaults to General. |
durationMinutes optional | int | Session duration: 15, 30, or 60. Defaults to 60. L402 sessions are always 60 minutes. |
{
"sessionId": "a1b2c3d4e5f6...",
"capability": "Widget",
"expiresAt": "2026-03-10T13:00:00Z",
"durationMinutes": 60
}
402 Payment Required if your account has insufficient hours balance. The response includes a purchaseUrl to buy more hours.
curl -X POST https://kentico-developer.com/api/session/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"capability": "Widget", "durationMinutes": 60}'
Get session details including expiry status and message/artifact counts.
{
"id": "a1b2c3d4e5f6...",
"capability": "Widget",
"createdAt": "2026-03-10T12:00:00Z",
"expiresAt": "2026-03-10T13:00:00Z",
"isExpired": false,
"messageCount": 5,
"artifactCount": 3
}
curl https://kentico-developer.com/api/session/a1b2c3d4e5f6 \
-H "Authorization: Bearer YOUR_API_KEY"
Send a message to the Kentico development agent within an active session. The agent responds with text and may produce code artifacts.
{
"message": "Build me a hero banner widget with a title, subtitle, background image, and CTA button."
}
| Field | Type | Description |
|---|---|---|
message required | string | Your message to the agent. Max 100,000 characters. |
{
"messageId": "msg_abc123",
"response": "I'll build a hero banner widget for you...",
"timestamp": "2026-03-10T12:05:00Z",
"artifacts": [
{
"id": "art_xyz",
"fileName": "HeroBannerWidgetViewComponent.cs",
"language": "csharp"
}
]
}
402 Payment Required if the session has expired. You will need to create a new session to continue.
curl -X POST https://kentico-developer.com/api/session/a1b2c3d4e5f6/message \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Build a hero banner widget with title, image, and CTA."}'
Artifact Endpoints
Artifacts are code files generated during a session. These endpoints operate on artifacts within a specific session.
List all artifacts generated in a session.
[
{
"id": "art_xyz",
"fileName": "HeroBannerWidgetViewComponent.cs",
"language": "csharp",
"createdAt": "2026-03-10T12:05:00Z"
}
]
curl https://kentico-developer.com/api/session/a1b2c3d4e5f6/artifacts \
-H "Authorization: Bearer YOUR_API_KEY"
Get a specific artifact including its full source code content.
{
"id": "art_xyz",
"fileName": "HeroBannerWidgetViewComponent.cs",
"language": "csharp",
"content": "using Microsoft.AspNetCore.Mvc;\n...",
"createdAt": "2026-03-10T12:05:00Z"
}
curl https://kentico-developer.com/api/session/a1b2c3d4e5f6/artifacts/art_xyz \
-H "Authorization: Bearer YOUR_API_KEY"
Download a single artifact as a file (binary download).
Returns application/octet-stream with the original filename in the Content-Disposition header.
curl -O -J https://kentico-developer.com/api/session/a1b2c3d4e5f6/artifacts/art_xyz/download \
-H "Authorization: Bearer YOUR_API_KEY"
Download all session artifacts as a single ZIP archive.
Returns application/zip with filename kdaas-{sessionId}.zip.
curl -O -J https://kentico-developer.com/api/session/a1b2c3d4e5f6/artifacts/zip \
-H "Authorization: Bearer YOUR_API_KEY"
Account Endpoints
Account endpoints let you manage your account, view session history, review artifacts, and submit project specs. All require API key authentication.
Get your account details including hours balance and purchase history.
{
"email": "client@example.com",
"hoursBalance": 4.5,
"createdAt": "2026-01-15T10:00:00Z",
"purchaseCount": 2,
"purchases": [
{
"id": "pur_abc",
"packageId": "widget-single",
"amountUsd": 500.00,
"hoursAdded": 2.0,
"purchasedAt": "2026-01-15T10:00:00Z"
}
]
}
curl https://kentico-developer.com/api/account \
-H "Authorization: Bearer YOUR_API_KEY"
List all sessions associated with your account, ordered by most recent.
[
{
"id": "a1b2c3d4e5f6...",
"capability": "Widget",
"createdAt": "2026-03-10T12:00:00Z",
"expiresAt": "2026-03-10T13:00:00Z",
"isExpired": true,
"artifactCount": 4
}
]
curl https://kentico-developer.com/api/account/sessions \
-H "Authorization: Bearer YOUR_API_KEY"
List all artifacts across all your sessions, ordered by most recent.
[
{
"id": "art_xyz",
"fileName": "HeroBannerWidgetViewComponent.cs",
"language": "csharp",
"sessionId": "a1b2c3d4e5f6...",
"createdAt": "2026-03-10T12:05:00Z"
}
]
curl https://kentico-developer.com/api/account/artifacts \
-H "Authorization: Bearer YOUR_API_KEY"
Get a specific artifact with full content, review status, and notes.
{
"id": "art_xyz",
"fileName": "HeroBannerWidgetViewComponent.cs",
"language": "csharp",
"content": "using Microsoft.AspNetCore.Mvc;\n...",
"status": "pending",
"version": 1,
"reviewNotes": null,
"reviewedAt": null,
"sessionId": "a1b2c3d4e5f6...",
"createdAt": "2026-03-10T12:05:00Z"
}
curl https://kentico-developer.com/api/account/artifacts/art_xyz \
-H "Authorization: Bearer YOUR_API_KEY"
Mark an artifact as approved.
{
"id": "art_xyz",
"status": "approved",
"reviewedAt": "2026-03-10T14:00:00Z"
}
curl -X POST https://kentico-developer.com/api/account/artifacts/art_xyz/approve \
-H "Authorization: Bearer YOUR_API_KEY"
Request a revision on an artifact with notes explaining what needs to change.
{
"notes": "The widget needs responsive breakpoints for mobile."
}
| Field | Type | Description |
|---|---|---|
notes required | string | Description of what needs to be revised. |
{
"id": "art_xyz",
"status": "revision_requested",
"reviewNotes": "The widget needs responsive breakpoints for mobile.",
"reviewedAt": "2026-03-10T14:00:00Z"
}
curl -X POST https://kentico-developer.com/api/account/artifacts/art_xyz/request-revision \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"notes": "Need responsive breakpoints for mobile."}'
Project Specs
Submit detailed project specifications for review. Useful for scoping larger packages before starting development sessions.
Submit a new project specification for review.
{
"title": "E-commerce Product Catalog",
"description": "Build content types and widgets for a product catalog...",
"packageType": "content-types-5",
"contentTypes": "Product, Category, Brand",
"widgetNames": "ProductCard, CategoryGrid",
"kenticoVersion": "29.0",
"migrationSource": "KX13",
"additionalNotes": "Need Shopify integration"
}
| Field | Type | Description |
|---|---|---|
title required | string | Project title. |
description required | string | Detailed project description. |
packageType optional | string | Package ID this spec relates to. |
contentTypes optional | string | Content types involved. |
widgetNames optional | string | Widget names involved. |
kenticoVersion optional | string | Target Kentico version. |
migrationSource optional | string | Source CMS for migrations. |
additionalNotes optional | string | Any additional context or requirements. |
{
"id": "spec_abc",
"title": "E-commerce Product Catalog",
"status": "submitted",
"submittedAt": "2026-03-10T12:00:00Z"
}
curl -X POST https://kentico-developer.com/api/account/spec \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Product Catalog","description":"Build content types for products."}'
List all your project specs, ordered by most recent.
[
{
"id": "spec_abc",
"title": "E-commerce Product Catalog",
"packageType": "content-types-5",
"status": "submitted",
"submittedAt": "2026-03-10T12:00:00Z",
"reviewedAt": null
}
]
curl https://kentico-developer.com/api/account/specs \
-H "Authorization: Bearer YOUR_API_KEY"
Get full details of a specific project spec.
curl https://kentico-developer.com/api/account/spec/spec_abc \
-H "Authorization: Bearer YOUR_API_KEY"
Auth Endpoints
Passwordless authentication via magic links. Used primarily by the web dashboard.
Request a magic login link sent to your email. Always returns 200 regardless of whether the email exists (prevents enumeration).
{
"email": "client@example.com"
}
| Field | Type | Description |
|---|---|---|
email required | string | The email address associated with your account. |
{
"message": "If an account exists for that email, a login link has been sent."
}
curl -X POST https://kentico-developer.com/api/auth/magic-link \
-H "Content-Type: application/json" \
-d '{"email": "client@example.com"}'
Verify a magic link token and receive your API key. Tokens expire after 15 minutes and are single-use.
{
"token": "eyJhbGciOi..."
}
| Field | Type | Description |
|---|---|---|
token required | string | The token from the magic link URL. |
{
"apiKey": "kdaas_abc123...",
"email": "client@example.com",
"hoursBalance": 4.5
}
curl -X POST https://kentico-developer.com/api/auth/verify \
-H "Content-Type: application/json" \
-d '{"token": "eyJhbGciOi..."}'
Error Responses
All errors return a JSON object with an error field:
{
"error": "Description of what went wrong"
}
| Status | Meaning |
|---|---|
400 | Bad request — invalid parameters or missing required fields. |
401 | Unauthorized — missing or invalid API key / L402 token. |
402 | Payment required — insufficient hours balance or expired session. |
404 | Not found — resource does not exist or you don't have access. |
503 | Service unavailable — database or dependent service is down. |
KDaaS — Kentico Developer as a Service
kentico-developer.com
Privacy · Terms · Refund Policy · Contact