Start Here

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.

Hosted API First auth flow First query

What you need

Base domain

All public examples target https://kendr.org.

Auth mode

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.

Credits

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.

Public contract

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"
  }
}
Alternative auth

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
    }
  }'
Successful response

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.