Developer experience
REST, TypeScript, Python, and CLI
The SDKs preserve problem details, retry metadata, idempotency, sandbox routing, and OAuth PKCE helpers. REST remains the source contract; SDK and CLI behavior is contract-tested against it.
- TypeScript
- @aune/sdk
- Python
- aune-sdk
- CLI
- @aune/cli
- Runtime
- Node.js 18+ / Python 3.9+
- Source contract
- /openapi.json
TypeScript
Sandbox client
import { randomUUID } from "node:crypto";
import { AuneClient } from "@aune/sdk";
const aune = new AuneClient({ sandbox: true });
const capabilities = await aune.capabilities();
const result = await aune.bookFirstSandboxOption({
search: {
vertical_id: "moving",
job_type_id: "moving_home",
description: "Synthetic sandbox move",
location: { country_code: "SE", postcode: "11122" },
destination_location: { country_code: "SE", postcode: "41256" },
timing: { preferred_time_text: "next available time" },
},
confirmation: {
customer: { name: "Sandbox User", phone: "+46700000000", email: "sandbox@example.invalid" },
service_location: { country_code: "SE", address: "Synthetic Origin 1", postcode: "11122" },
destination_location: { country_code: "SE", address: "Synthetic Destination 2", postcode: "41256" },
user_consent_confirmed: true,
booking_terms_accepted: true,
booking_terms_accepted_at: new Date().toISOString(),
idempotency_key: randomUUID(),
},
});Python
Sandbox client
from uuid import uuid4
from aune_sdk import AuneClient
aune = AuneClient(sandbox=True)
capabilities = aune.capabilities()
result = aune.book_first_sandbox_option(
search={
"vertical_id": "moving",
"job_type_id": "moving_home",
"description": "Synthetic sandbox move",
"location": {"country_code": "SE", "postcode": "11122"},
"destination_location": {"country_code": "SE", "postcode": "41256"},
"timing": {"preferred_time_text": "next available time"},
},
confirmation={
"customer": {"name": "Sandbox User", "phone": "+46700000000", "email": "sandbox@example.invalid"},
"service_location": {"country_code": "SE", "address": "Synthetic Origin 1", "postcode": "11122"},
"destination_location": {"country_code": "SE", "address": "Synthetic Destination 2", "postcode": "41256"},
"user_consent_confirmed": True,
"booking_terms_accepted": True,
"booking_terms_accepted_at": "2099-01-15T08:01:00.000Z",
"idempotency_key": str(uuid4()),
},
)Complete client surface
- Booking: capabilities, search, confirmation, redacted status, cancellation, and rescheduling.
- Fallback: consented provider-follow-up request creation without upgrading it into booking truth.
- Webhooks: list, create, delete, and replay with OAuth scope `aune.webhooks.manage`.
- OAuth: PKCE S256 pair and authorization URL helpers; token refresh remains under the integrating application's credential store.
- Errors: stable problem codes, safe next step, option-refresh signal, and Retry-After metadata.
Runnable source starters
Contract-tested examples
npx tsx starters/typescript-sandbox/index.ts
npx tsx starters/mcp-jsonrpc/index.ts
npm run test:aune-startersRelease status
The packages are built and contract-tested in this repository. Public npm and PyPI publication, signed provenance, and registry ownership are release gates; do not assume a package is generally available until the changelog marks it published.
Client invariants
- Search before collecting street address or contact details.
- Treat option IDs as opaque and short-lived.
- Use OAuth scopes for user-delegated writes.
- Preserve payload and idempotency key across uncertain retries.
- Claim confirmation only from the four booking truth signals.