Sample clients for Exotel vSIP / SIP trunking HTTP APIs. Use curl/ (bash), python/, go/, or postman/ — pick one workflow and ignore the rest.
Official reference: SIP Trunking APIs (developer.exotel.com)
| Folder | What it is |
|---|---|
curl/ |
Bash scripts; PSTN setup, manage/view, SIP digest credentials |
python/ |
Python 3 samples using shared _client.py |
go/ |
Go samples; exotel_client.go plus one *.go per operation |
postman/ |
Postman collection + environment + import guide |
Configuration template: copy .env.example → .env in the repo root (used by Python, Go, and the newer curl scripts that reference EXO_* variables).
| Account | Dashboard | API hostname (EXO_API_DOMAIN) |
|---|---|---|
| India | my.in.exotel.com | api.in.exotel.com |
| Global | my.exotel.com | api.exotel.com |
Use the API host that matches where the account was created.
cp .env.example .env
# Edit .env: EXO_AUTH_KEY, EXO_AUTH_TOKEN, EXO_ACCOUNT_SID, EXO_API_DOMAINSee curl/README.md. Older PSTN scripts use curl/env.example.txt (API_KEY, SUBDOMAIN, …). Scripts under curl/ that call SIP credentials / list endpoints expect the EXO_* variables from the root .env.
From the repository root (so python/ can import _client.py):
cd python
python3 list_trunks.pyFrom the go/ directory, pass exotel_client.go together with the script you want:
cd go
go run exotel_client.go list_trunks.goImport postman/Exotel_vSIP_API_Collection.json and postman/Exotel_vSIP_Environment.json, set environment variables, then run requests. Details: postman/POSTMAN_GUIDE.md.
For Voice AI / dynamic source IPs, use POST/GET/PUT/DELETE on .../trunks/{trunk_sid}/credentials. See the official API docs linked above.
| Setting | Value |
|---|---|
| Base URL | https://<EXO_API_DOMAIN> |
| Auth | HTTP Basic (<api_key>:<api_token>) |
| Content-Type | application/json |
| Rate limit | 200 requests/minute (typical) |
- Documentation: developer.exotel.com
- Email: support@exotel.com