Developer API

Add a Call button to your own CRM (Cloudflare Workers, Node, PHP, Google Sheets)

Copy-ready recipes for putting a "Call" button next to every phone number in your own CRM, spreadsheet or booking system, safely.

Which plans include it

Included on Plus and above. On Free Trial, Entry you can add it on its own at £2.50 a month from Features & add-ons.

Free Trial
Add-on £2.50/mo
Entry
Add-on £2.50/mo
Plus
Included
Growth
Included
Pro
Included
Enterprise
Included

What it means

The safe pattern is always the same: the button in your page asks YOUR server to make the call, and your server calls Silux Call with the API key. The key never reaches the browser.

What it does

  • Your page: a Call button sends the number (and who is clicking) to your server.
  • Your server: adds the API key and sends POST /api/v1/calls.
  • Silux Call: rings the user's extension, then dials the number.

Every part of the page

Cloudflare Worker
Store the key with "wrangler secret put SILUX_API_KEY". In your Worker's route: const r = await fetch("https://www.siluxcall.co.uk/api/v1/calls", { method: "POST", headers: { Authorization: "Bearer " + env.SILUX_API_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ email: user.email, to: number }) }); return new Response(await r.text(), { status: r.status, headers: { "Content-Type": "application/json" } });
Node.js (Express)
app.post("/call", async (req, res) => { const r = await fetch("https://www.siluxcall.co.uk/api/v1/calls", { method: "POST", headers: { Authorization: "Bearer " + process.env.SILUX_API_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ email: req.user.email, to: req.body.to }) }); res.status(r.status).json(await r.json()); });
PHP
$ch = curl_init("https://www.siluxcall.co.uk/api/v1/calls"); curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("SILUX_API_KEY"), "Content-Type: application/json"], CURLOPT_POSTFIELDS => json_encode(["extension" => "1001", "to" => $number])]); $reply = curl_exec($ch);
Python
requests.post("https://www.siluxcall.co.uk/api/v1/calls", headers={"Authorization": "Bearer " + os.environ["SILUX_API_KEY"]}, json={"extension": "1001", "to": number})
Google Sheets (Apps Script)
function callNumber(to) { const key = PropertiesService.getScriptProperties().getProperty("SILUX_API_KEY"); UrlFetchApp.fetch("https://www.siluxcall.co.uk/api/v1/calls", { method: "post", contentType: "application/json", headers: { Authorization: "Bearer " + key }, payload: JSON.stringify({ email: Session.getActiveUser().getEmail(), to: to }) }); } — add a custom menu that calls callNumber() with the selected cell.
The button in your page
<button onclick="fetch('/call', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ to: '01632960123' }) })">Call</button> — it talks to YOUR server only, never to Silux Call directly.

How to use it

Cloudflare Workers + D1 CRM

  1. Create a key on the API page and run "wrangler secret put SILUX_API_KEY".
  2. Add a POST /call route to your Worker that checks the user is logged in to your CRM.
  3. In that route, read the phone number from your D1 table (or the request) and send it to /api/v1/calls with the user's email or extension.
  4. Add a Call button next to each number in your CRM page that posts to /call.
  5. Deploy with "wrangler deploy" and click a number to test.

Log the result back into your CRM

  1. For a live update as each call ends, add a Custom Webhook on the CRM Integration page pointing at a route in your system.
  2. Or every few minutes, ask GET /api/v1/calls?since=<last time> and save new calls against the matching contact.
  • ★Check in your server that the person clicking is allowed to make calls, before calling the API.
  • ★Send the user's email so each person rings their own extension.
  • ★Show the reply's "message" to the user.

Abbreviations on this page

API key
A secret password that lets one piece of software use another. Treat it like a password.
Example: Treat an API key like a password: anyone with it can use your account's API.
CRM — Customer Relationship Management
Software that holds your customer records, such as HubSpot, Salesforce, Zoho or Pipedrive.
Example: HubSpot, Salesforce and Zoho are CRMs.
Webhook
An automatic message our system sends to a web address you choose whenever something happens, such as a call ending. Used to connect other software.
Example: When a call ends, a webhook sends its details to your own system automatically.

Questions

Can I use a "tel:" link instead?+

A tel: link opens whatever phone app the computer chooses. The API is better for a CRM: it always rings the right Silux Call extension and uses your business number.

We use HubSpot, Salesforce, Zoho or Pipedrive.+

Their own workflow or custom-code tools can send the same request from their servers. For call logging into them, use the CRM Integration page.

Which plans include the API?+

It is part of the package on Plus, Growth, Pro and Enterprise at no extra cost. On Entry, add API access for £2.50 a month from Features & add-ons. The Free Trial does not include it. There is no per-call API fee.

All help topics

Getting started

Phone numbers

How calls are answered

Voicemail & greetings

Making & taking calls

Your team

Desk phones

Recording & reports

SMS & WhatsApp

Smart Voice

Safety & compliance

Account & billing

Developer API

Reseller portal

Plan guides