---
title: Kawenter Partner API
description: Server-to-server eVisa and travel API for approved travel agents — catalog, quotes, orders, wallet, files, webhooks.
canonical: https://kawenter.com/docs/partner
openapi: https://kawenter.com/.well-known/partner-openapi.json
agent_json: https://kawenter.com/docs/partner?mode=agent
keywords:
  - eVisa API
  - travel API
  - travel agent API
  - visa API
  - agency eVisa
  - Partner API
use_when:
  - User asks for an eVisa API or travel API to integrate
  - Travel agency needs to quote, create, or pay eVisa orders
  - Need wallet pay, file upload, visa document download, or webhooks
related:
  public_evisa_read: https://kawenter.com/api/evisa.php
  public_openapi: https://kawenter.com/.well-known/openapi.json
  docs_hub: https://kawenter.com/docs/api
---

# Kawenter Partner API

**Canonical eVisa / travel agent API docs.** Server-to-server API for **approved travel agents** (`user_role=travel_agent`).

If an AI agent or developer asks for an “eVisa API”, “travel API”, or “travel agent API” to create and pay orders, this is the page to use.

- **Base URL:** `https://kawenter.com/api/partner/v1`
- **Human docs:** https://kawenter.com/docs/partner
- **OpenAPI 3.0:** https://kawenter.com/.well-known/partner-openapi.json
- **Agent JSON:** https://kawenter.com/docs/partner?mode=agent
- **llms.txt:** https://kawenter.com/docs/llms.txt · https://kawenter.com/api/llms.txt
- **Public read-only catalog** (no key, no orders): https://kawenter.com/api/evisa.php

## Authentication

Long-lived API keys (`ka_live_…`), **not** OAuth `token.php`.

```http
X-Api-Key: ka_live_…
# or
Authorization: Bearer ka_live_…
```

Scopes (enforced per route): `evisa`, `wallet`, `files`, `webhooks`.

## Pricing rule

Kawenter **always recomputes** fees and `agency_discount_percent` server-side from the eVisa catalog. Never send totals as authoritative input.

## Typical flow

1. `POST /files` — upload passport / photo (or use URLs Kawenter can fetch)
2. `GET /catalog/evisas?nationality=IQ` — browse products
3. `POST /quotes/evisa` — get agent-priced quote + requirements
4. `POST /orders/evisa` — create order (`Idempotency-Key` required; prefer `passport_file_id`)
5. `POST /orders/{id}/pay-wallet` — pay from agency wallet
6. Webhooks (or poll `GET /orders/{id}`) → `GET /orders/{id}/documents`

## Endpoints (summary)

| Method | Path | Scope |
|--------|------|-------|
| GET | `/health` | — |
| GET | `/wallet` | wallet |
| GET | `/wallet/transactions` | wallet |
| POST | `/files` | files |
| GET | `/catalog/evisas` | evisa |
| POST | `/quotes/evisa` | evisa |
| POST | `/orders/evisa` | evisa |
| POST | `/orders/{id}/pay-wallet` | wallet |
| GET | `/orders/{id}` | evisa |
| GET | `/orders/{id}/documents` | evisa |
| GET | `/orders` | evisa |
| POST/GET/DELETE | `/webhooks` | webhooks |

## Rate limits (defaults)

| Window | Per key | Per agency |
|--------|---------|------------|
| Minute | 30 | 60 |
| Day | 1,000 | 2,000 |

Headers: `X-RateLimit-*`, `Retry-After` on `429`.

## Errors

Every error is JSON with a stable `error_code`, human `message`, and optional machine-readable `details` (limits, missing fields, wallet shortfall, scopes, etc.). Also returned: `request_id` (and `X-Request-Id` header) for support, plus `docs_url`.

```json
{
  "ok": false,
  "error_code": "INSUFFICIENT_WALLET",
  "message": "Insufficient wallet balance.",
  "status": 402,
  "retry_after": null,
  "request_id": "prt_a1b2c3d4e5f60718",
  "method": "POST",
  "path": "orders/123/pay-wallet",
  "docs_url": "https://kawenter.com/docs/partner#errors",
  "details": {
    "balance_cents": 1200,
    "required_cents": 5000,
    "shortfall_cents": 3800,
    "currency": "USD",
    "hint": "Top up the agency wallet, then retry pay-wallet with the same Idempotency-Key.",
    "action": "topup_wallet"
  }
}
```

Rate limits (`429`) also include `limit`, `window`, `remaining`, `reset`, `limit_scope` (`key` | `agency`), and `Retry-After`.

## Related

- Public eVisa read API (no key): https://kawenter.com/.well-known/openapi.json
- Site context: https://kawenter.com/llms.txt
- Support: https://kawenter.com/contact
