Authentication
Two layers (see Authentication):X-API-Key: krnl_...— your provider key, which must have theagent_api_accessfeature enabled. Required on every call.X-Verified-Session: <token>— a short-lived session obtained via the verify flow, required on the endpoints marked verified below.
Endpoints
GET /partner/agent/customers/search
Query params:q (min 2 chars, required), limit (1–100, default 25). Returns masked matches;
when ambiguous is true, ask for the service address/unit, append to q, and search again.
GET /partner/agent/customers/
RequiresX-Verified-Session. Returns the slim CustomerProfile — no Stripe IDs, operator
notes, MAC or user_id.
POST /partner/agent/verify/issue
channel is email (default) or sms. SMS is delivered via Twilio and is inert until
configured (503 dependency_unconfigured).
POST /partner/agent/verify/check
(provider, customer) pair.
GET /partner/agent/customers//billing-summary
RequiresX-Verified-Session.
GET /partner/agent/customers//payments
RequiresX-Verified-Session. Derived from paid invoices (no separate payments table).
GET /partner/agent/customers//network-health
RequiresX-Verified-Session.
POST /partner/agent/customers//notes
RequiresX-Verified-Session. Adds an internal, operator-visible note (attributed to the AI).
PATCH /partner/agent/customers//contact
RequiresX-Verified-Session. contact_type is contract (default) or invoice; only the
fields you send change. Triggers the change-confirmation email (see Overview).
POST /partner/agent/customers//password-reset
RequiresX-Verified-Session. action is password_reset (default, 15-min token) or
resend_activation (72-h token).
POST /partner/agent/customers//plan-change/preview
RequiresX-Verified-Session.
POST /partner/agent/customers//plan-change
RequiresX-Verified-Session. Must include confirm: true (call /plan-change/preview first).
Phase 1.5 — enabled for GA once the quote_token / Idempotency-Key / rollback controls land.
POST /partner/agent/tickets
Not verification-gated (so escalation works for unverified callers). Providecustomer_id
(own provider) or contact_email.
priority is low | normal | high; transcript is stored as an internal note.
Rate limits
Exceeding a limit returns
429 (standard rate-limit response; back off and retry).
Errors
Normalized envelope with a stablecode and a request_id: