ExoVoIPDeveloper guide

SDKs

Official SDKs for TypeScript/JavaScript, PHP and Python, generated from the API's OpenAPI document. Every API operation has a matching method, grouped by area: pbx.extensions.create(...), pbx.calendars.force(...), pbx.live.stream(...).

Download

LanguageRequirementsArchive
TypeScript / JavaScriptNode.js 18+ or modern browsers, no dependenciestypescript.zip
PHPPHP 8.1+, curl and json extensions, no dependenciesphp.zip
PythonPython 3.10+, httpxpython.zip

Each archive contains sources, a README, ready-to-run examples and tests. Current version: 1.0.0.

Installation

# Nessuna installazione: cURL e la chiave API in una variabile d'ambiente
export EXOPBX_API_KEY="exo_live_..."
  • TypeScript: npm install ./exopbx-sdk-typescript (the archive includes the build in dist/ with types).
  • PHP: with Composer, add the folder as a path repository and require exobyte/exopbx-sdk; without Composer, a PSR-4 autoload of the src/ folder is enough (namespace Exobyte\ExoPBX).
  • Python: pip install ./exopbx-sdk-python.

Common features

FeatureTypeScriptPHPPython
API key (X-API-Key)apiKeyapiKeyapi_key / EXOPBX_API_KEY
API addressbaseUrlbaseUrlbase_url
Tenant (X-Tenant-Id)tenantIdtenantIdtenant_id
Retries on 429 and transient errorsmaxRetriesmaxRetriesmax_retries
Paginationpbx.paginate(...)$pbx->paginate(...)pbx.paginate(...)
Automatic Idempotency-Key on POSTyesyesyes
Typed errorsExoPBXErrorApiExceptionExoPBXError
SSE events with reconnectionpbx.live.stream()$pbx->live->stream()pbx.live.stream()
WebSocket eventspbx.live.websocket()——
Webhook signature verificationconstructWebhookEvent()Webhook::constructEvent()construct_event()

The default address is defined in a single constant per SDK (DEFAULT_BASE_URL in TypeScript and Python, Defaults::BASE_URL in PHP), currently https://centralino.exovoip.it/api.

export EXOPBX_BASE_URL="https://centralino.exovoip.it/api"
curl -s "$EXOPBX_BASE_URL/health"

Method names

  • TypeScript and PHP: group.operation in camelCase, as in the "SDK method" column of the guides (pbx.ringGroups.create, $pbx->ringGroups->create).
  • Python: the same names in snake_case (pbx.ring_groups.create); query parameters are keyword arguments (pbx.cdr.list(from_="2026-11-01", limit=100)).
  • Path parameters (:id, :extensionId) come first, then the body (or filters), and finally the per-request options.

Types (TypeScript)

All request bodies and responses are typed from the API schemas: your editor suggests fields and allowed values and flags errors before you run the code. Types are also exported as Schemas:

import type { Schemas } from '@exobyte/exopbx-sdk';

type Extension = Schemas.ExtensionsGetResponse['extension'];

Updates

The SDKs are regenerated with every API change. Download the new version from this page; existing methods remain compatible within version v1 of the API.