The Call Forwarding API lets you do from code everything the forwarding.edesy.in portal does: create and change forwarding rules, upload hold audio, turn forwarding off, list forwarded calls, fetch recordings and read usage stats. It is a JSON REST API at https://voice-api.edesy.in/v1, authenticated with a Bearer API key from your workspace.
Base URL and authentication#
https://voice-api.edesy.in/v1
Create an API key under API Keys in the portal. The key is shown once, so copy it somewhere safe. Send it on every request:
Authorization: Bearer sk_your_api_key
A key belongs to the workspace it was created in and can only set up forwarding on that workspace's numbers.
Response format#
Successful responses wrap the result in data, with meta:
{ "data": { "id": "3f2b8c1e-7d4a-4e59-9b21-6a0c5d8e1f47", "status": "active" }, "meta": { "timestamp": "2026-10-16T09:30:00Z" } }
Errors return an HTTP status and an error object:
{ "error": { "code": "not_found", "message": "Forwarding rule not found" } }
Endpoints#
| Method | Path | What it does |
|---|---|---|
| POST | /forwarding/rules |
Turn on forwarding for a number |
| GET | /forwarding/rules |
List your rules |
| GET | /forwarding/rules/:id |
Get one rule |
| PATCH | /forwarding/rules/:id |
Change a rule |
| POST | /forwarding/rules/:id/disable |
Turn off forwarding |
| DELETE | /forwarding/rules/:id |
Delete a rule |
| POST | /forwarding/rules/:id/hold-audio |
Upload hold audio |
| DELETE | /forwarding/rules/:id/hold-audio |
Remove hold audio |
| GET | /forwarding/call-logs |
List forwarded calls |
| GET | /forwarding/calls/:call_sid/recording |
Get a recording link |
| GET | /forwarding/stats |
Usage totals |
| GET | /forwarding/analytics |
Daily and per-number breakdown |
To find the numbers in your workspace, use GET/v1/phone-numbers.
Common errors#
| Status | Code | Meaning |
|---|---|---|
| 400 | validation_error |
A field is missing or out of range. The message names the field |
| 400 | targets_required |
No number to forward to |
| 401 | UNAUTHORIZED |
API key missing, mistyped or revoked |
| 404 | number_not_found |
The number is not in the workspace your key belongs to |
| 404 | not_found |
No rule with this id in your workspace |
| 409 | rule_exists |
Another account still has forwarding on this number. Contact support |
| 413 | file_too_large |
Hold audio over 8 MB |
| 502 | inbound_activation_failed |
The rule was saved but not switched on yet. Send the same request again |
| 502 | inbound_repoint_failed |
Forwarding is off, but handing the number back did not finish. Retry |