Start with the hosted kendr.org API.
Kendr is documented here as a hosted integration surface, not a source installation. This guide walks through the first public reads, the quickest auth path, how to fetch credits, and how to send the first authenticated query against https://kendr.org.
What you need
All public examples target https://kendr.org.
Use an API key for server-side integrations, or use X-Kendr-Session or OAuth when the request is tied to a signed-in customer.
The wallet needs a positive balance before live queries can succeed. Fetch the balance from the dashboard payload and top up with a package when needed.
Use GET /api/catalog and GET /api/openapi.json before hardcoding route or surface assumptions.
Read the public contract first
The two public discovery endpoints tell you what is currently available on kendr.org without requiring authentication.
Catalog
curl https://kendr.org/api/catalog
OpenAPI
curl https://kendr.org/api/openapi.json
- /api/catalog returns active packages, enabled surfaces, provider metadata, and the published docs metadata.
- /api/openapi.json returns the machine-readable contract for route-level tooling.
Get authenticated
The quickest customer-scoped path is app login, because it returns a session token directly in JSON. Once the customer is signed in, you can read the dashboard, purchase credits, and create API keys.
Login and receive X-Kendr-Session
curl https://kendr.org/api/app/auth/login \
-X POST \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "supersecret123"
}'
Key response fields
{
"ok": true,
"authenticated": true,
"user": {
"id": 12,
"email": "user@example.com",
"credit_balance": 250
},
"session": {
"token": "SESSION_TOKEN",
"header_name": "X-Kendr-Session",
"expires_at": "2026-04-24T12:00:00Z"
}
}
If you already have a customer API key, you can skip the session flow and call the query route directly with Authorization: Bearer kndr_live_....
Fetch wallet state and credits
The customer dashboard is the main place to fetch the live balance and related customer state.
Curl
curl https://kendr.org/api/me/dashboard \ -H "X-Kendr-Session: $KENDR_SESSION"
Returned sections
{
"ok": true,
"user": {
"credit_balance": 250
},
"packages": [...],
"api_keys": [...],
"purchases": [...],
"ledger": [...],
"surfaces": [...]
}
- Read user.credit_balance for the current wallet balance.
- Read packages for the active package list and pricing.
- Read purchases and ledger for top-up and usage history.
Make the first query
The main execution route is POST /api/v1/query. Send a surface, a query, and any optional provider-compatible fields inside params.
Curl with app session
curl https://kendr.org/api/v1/query \
-X POST \
-H "X-Kendr-Session: $KENDR_SESSION" \
-H "Content-Type: application/json" \
-d '{
"surface": "google_search",
"query": "best llm observability tools",
"params": {
"gl": "us",
"hl": "en",
"page": 1
}
}'
Curl with API key
curl https://kendr.org/api/v1/query \
-X POST \
-H "Authorization: Bearer $KENDR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"surface": "google_search",
"query": "best llm observability tools",
"params": {
"gl": "us",
"hl": "en",
"page": 1
}
}'
The response includes provider, credits_charged, remaining_credits, the provider payload in data, and any failed fallback attempts in provider_attempts.
Where to go next
Once the first request is working, move into the route reference, auth guide, and billing guide for production integration details.