Skip to content
NewPazau Agent 3 is here: Procedures that test themselves before they go live
Developer platform

An AI agent you can program.

Every Pazau capability has an API. Start conversations, register Actions, subscribe to outcomes, pull Traces into your warehouse, and ship the Messenger in your own app, all with typed SDKs and a sandbox that behaves like production.

REST + webhooksTypeScript & Python SDKsiOS, Android, WebUS and EU endpoints
resolve.tsresolve.pycurl
typescript
import { Pazau } from "@pazau/sdk";

const pazau = new Pazau({ apiKey: process.env.PAZAU_API_KEY, region: "eu" });

// Hand a conversation to Pazau Agent and wait for the outcome
const run = await pazau.conversations.create({
  channel: "chat",
  customer: { externalId: "cust_88213", locale: "sv-SE" },
  message: "My scooter locked mid-ride and I was still charged.",
  procedures: ["ride-billing-dispute@v7"],
});

run.status;      // "resolved"
run.actions;     // [{ name: "issue_ride_credit", amount: 4.20, currency: "EUR" }]
run.handoff;     // null
200 OK · 1.84s · trace_01J9ZK4Q7M3V8A2R5T6Y
REST API & SDKs

Predictable, typed, and boring in the best way.

Resource-oriented URLs, JSON everywhere, cursor pagination, and idempotency keys on every write. The API is versioned by date (current: 2026-08-01), and we don't break a version once it ships.

Base URL
api.pazau.com/v1 · api.eu.pazau.com/v1
Auth
Scoped API keys or OAuth 2.0 client credentials
Versioning
Pazau-Version header, 24-month support
SDKs
TypeScript, Python, plus a CLI
OpenAPI
Full 3.1 spec, published with each release
Terminal
shell
# JavaScript / TypeScript (Node 18+, Bun, Deno, edge runtimes)
$ npm install @pazau/sdk

# Python 3.9+ (sync and asyncio clients)
$ pip install pazau

# CLI: sandbox, Action testing, Procedure simulation
$ npm install -g @pazau/cli
$ pazau login --workspace copperline-sandbox
$ pazau simulate procedures/damaged-item.md --sample 200
✓ 184 resolved · 11 escalated (expected) · 5 need review
Python

Pull outcomes, scores, and Traces into your own stack.

Most teams start by exporting data. Resolution outcomes, QA scores, and full Traces are first-class API objects, so your BI, your data science team, and your auditors work from the same record.

  • Async client for high-volume exports with automatic retries
  • Traces export as JSON or signed PDF for regulators
  • EU workspaces are served exclusively from EU endpoints
export_qa.py
python
from pazau import Pazau

client = Pazau(region="us")

# Stream last week's QA scores for conversations Pazau Agent resolved
for score in client.insights.qa_scores.list(
    scorecard="claims-fnol-v3",
    resolved_by="agent",
    since="2026-09-20",
):  # auto-paginates, 500 per page
    if score.compliance_flags:
        print(score.conversation_id, score.total, score.compliance_flags)
Webhooks

Know the moment a conversation resolves, or doesn't.

Subscribe to 38 events across conversations, handoffs, Actions, approvals, and QA. Every delivery is signed, timestamped, and retried with exponential backoff for up to 72 hours.

POST https://hooks.your-app.com/pazau
json
{
  "id": "evt_01J9ZM2C8H6K",
  "type": "conversation.resolved",
  "created_at": "2026-09-26T14:02:11Z",
  "data": {
    "conversation_id": "conv_4812907",
    "resolved_by": "agent",
    "procedure": "involuntary-schedule-change@v14",
    "actions": ["get_booking", "rebook", "send_itinerary"],
    "billable_resolution": true,
    "csat_predicted": 4.8,
    "trace_url": "https://app.pazau.com/traces/trace_01J9ZK4Q"
  }
}
verify.py
python
import os
from pazau.webhooks import verify_signature, InvalidSignature

@app.post("/pazau")
def handle(request):
    try:
        event = verify_signature(
            payload=request.body,
            header=request.headers["Pazau-Signature"],
            secret=os.environ["PAZAU_WEBHOOK_SECRET"],
            tolerance=300,  # seconds; rejects replays
        )
    except InvalidSignature:
        return 400
    if event.type == "handoff.created":
        page_on_call(event.data["queue"], event.data["summary"])
    return 200
conversation.createdconversation.resolvedconversation.reopenedhandoff.createdaction.executedaction.failedapproval.requestedapproval.decidedqa.scoredguard.policy_triggeredcsat.receivedprocedure.published+ 26 more
Messenger SDK

Put Pazau inside your app in an afternoon.

Native SDKs for iOS (Swift, iOS 15+) and Android (Kotlin, API 24+), and a 38 KB web snippet. Pass a signed JWT and Pazau Agent knows who it's talking to, so it can take Actions without asking for an order number.

index.html
web
<script src="https://cdn.pazau.com/messenger/v4.js" async></script>
<script>
  Pazau("boot", {
    appId: "app_copperline",
    userJwt: window.__PAZAU_JWT__, // verified identity
    theme: { accent: "#1f3d2b" },
  });
</script>
AppDelegate.swift
swift
import PazauMessenger

Pazau.configure(appId: "app_vasa", region: .eu)
Pazau.identify(jwt: session.pazauToken)
Pazau.present(from: self, context: [
  "ride_id": ride.id,
  "city": "Göteborg"
])
MainActivity.kt
kotlin
import com.pazau.messenger.Pazau

Pazau.configure(this, appId = "app_vasa", region = Region.EU)
Pazau.identify(jwt = session.pazauToken)
Pazau.present(
  this,
  context = mapOf("ride_id" to ride.id)
)
Verified identity

JWT signed with your key. Unverified sessions can't trigger write Actions.

Rich replies

Carousels, forms, file upload, and flight or order cards.

Push & offline

APNs and FCM push; conversations resume across devices.

Accessible

WCAG 2.2 AA, Dynamic Type, TalkBack, and VoiceOver.

Actions spec

Tools with limits written into the contract.

An Action is a typed, versioned description of one operation in your systems. Limits, approval rules, and redaction are part of the spec, not a prompt instruction, so the model can't talk its way past them.

  • effect: read | write. Writes require customer confirmation by default.
  • Hard limits. Per call, per customer, and per workspace per day.
  • Approvals. Route to a role in Slack, Teams, or the Inbox; the conversation waits.
  • Import, don't rewrite. Generate specs from OpenAPI 3.x with x-pazau extensions.
actions/issue_refund.yaml
pazau action spec · v2
name: issue_refund
description: Refund all or part of an order to the original payment method.
effect: write
endpoint: POST https://oms.internal/api/orders/{order_id}/refunds
auth: oauth2:oms-prod
parameters:
  order_id: { type: string, pattern: "^CO-\\d{5}$" }
  amount: { type: number, minimum: 0.01 }
  reason: { enum: [damaged, late, not_received, goodwill] }
limits:
  per_call_max: 250.00         # above this → approval
  per_customer_30d: 500.00
  daily_workspace_cap: 25000.00
approval:
  when: amount > 250
  approvers: [role:cx_lead]
  channel: slack:#refund-approvals
confirm_with_customer: true
redact_response: [card_last4, billing_address]
pazau actions validate ✓ · schema v2 · 0 warnings
Sandbox

A production twin you can break.

Every Business and Enterprise workspace comes with a sandbox: seeded customers and orders, test phone numbers and chat channels, mock Action endpoints, and Procedure simulation against anonymized history. Promote Procedures and Actions to production with a reviewable diff.

Seeded data
5,000 customers · 20,000 orders
Test channels
Chat, email, SMS, voice (+1 555 numbers)
Action mocks
Record/replay or static fixtures
Simulation
Up to 2,000 past conversations per run
Promotion
Diff, approve, publish · audit logged
copperline-sandbox · Promote to production
Sandbox
ProcedureDamaged item → Replace or refundv9 → v10
Actionissue_refundper_call_max 200 → 250
Actioncreate_replacementnew · write
Simulation · 500 conversationsv9 → v10
Resolution rate68.2% → 71.0%
Refunds over limit14 → 3
Policy violations0 → 0
Approved by J. Alvarez · CX leadPublish
Rate limits

Generous limits, clear headers.

Limits apply per workspace, per region. Every response includes X-RateLimit-Remaining and X-RateLimit-Reset; a 429 includes Retry-After. SDKs back off automatically.

Endpoint classGrowthBusinessEnterprise
Read endpoints (GET)600 / min1,200 / minCustom, up to 10,000 / min
Write endpoints (POST, PATCH, DELETE)120 / min300 / minCustom, up to 3,000 / min
Conversation create60 / min240 / minCustom
Bulk export jobs5 concurrent20 concurrent50 concurrent
Procedure simulations10 / hour60 / hourUnmetered
Webhook endpoints per workspace1050250
API status

Up, and we publish it.

All systems operational90-day uptime
  • REST API · US99.99%
  • REST API · EU99.99%
  • Webhooks delivery99.98%
  • Messenger SDK / CDN100.00%
  • Actions runtime99.98%

API SLA: 99.9% on Business and 99.95% on Enterprise, with service credits. Subscribe to incidents by email, RSS, or webhook at status.pazau.com.

FAQ

Developer questions.

Full reference, guides, and changelog at docs.pazau.com.

Is API access included in every plan?+
Yes. The REST API, webhooks, SDKs, and Messenger SDK are included on Growth, Business, and Enterprise. Sandbox workspaces are included on Business and Enterprise. Rate limits differ by plan (see above).
Does data sent through the API train models?+
No. Pazau never trains or fine-tunes foundation models on Customer Data, and our model providers operate under zero data retention. The commitment is contractual; see the AI Addendum.
How do I keep EU data in the EU?+
Use the api.eu.pazau.com base URL and an EU workspace. Requests, storage, model inference, and Action execution stay in eu-west-1 (Dublin) and eu-central-1 (Frankfurt). US endpoints reject EU workspace keys.
What's your deprecation policy?+
Each dated API version is supported for at least 24 months. We announce deprecations in the changelog and by email at least 12 months ahead, and the Pazau-Version header lets you upgrade one integration at a time.
Can I test Actions without touching production systems?+
Yes. In the sandbox, Actions can hit your staging endpoints, record-and-replay fixtures, or static mocks. The CLI command `pazau actions test` runs an Action with sample parameters and prints the full Trace.

Start building in the sandbox.

We'll provision a sandbox workspace with seeded data and a solutions engineer who has shipped Actions against your stack before.