New — Guardian: one-tap online safety for every device. Free on every plan.
Giant Reseller API· v4.13

311 endpoints.
One key.

Order, manage, and support broadband, mobile, VoIP, leased lines, and hardware for your customers — from your own code. JSON in, JSON out, one response shape, real HTTP status codes.

311
endpoints
49
groups
5
product lines
Giant Reseller API · sandbox Sandbox key
GET/balance
$ 
200 OK· application/json · X-Sandbox: true

Account balance — the guide's first call

Simulated session · answers are the API spec's own examples
01Quick start

Nothing to first answer. Five minutes.

No code needed to start — the guide's own five steps, with everything you need to download right here.

  1. 01

    Get a sandbox key

    In your client area, open API keys and generate a sandbox key. It reads your real data but never changes anything.

  2. 02

    Install Postman

    Free, from postman.com — or use it in your browser.

  3. 03

    Import the API

    Import our ready-made collection below, or paste the OpenAPI spec URL into Postman's Import (Folder organisation: Tags).

  4. 04

    Add your key

    In the collection's Variables, set bearerToken to your key. Every request now sends Authorization: Bearer …

  5. 05

    Send a request

    Try Catalogue and account → Account balance. You get {"data": …} back. Swap in a live key when you're ready.

02Sandbox keys

Real reads. Simulated changes.

A sandbox key (test_…) works exactly like a live one — against your own real data — so you build and test against what you'll actually ship.

  • Reads are real

    Your actual products, balance, orders, and services.

  • Changes are simulated

    Every check runs as it would for real — payment method, product ids, that the service is yours and in the right state — then the answer says it worked. Nothing is ordered, invoiced, or changed.

  • Rehearse whole flows

    Sandbox orders get ids above 900000000, and every other endpoint accepts them — order, then manage, end to end.

  • Impossible to mistake

    Every sandbox answer carries meta.sandbox and an X-Sandbox: true header, and sandbox keys are refused by every other Giant API.

POST /orders · live key
{
"data": {
"order_id": 48213
}
}
POST /orders · sandbox key
{
"data": {
"order_id": 912345678,
"message": "Sandbox: the order passed validation. Nothing was created, invoiced or provisioned."
},
"meta": {
"sandbox": true
}
}
03One journey

Address to live line. Five calls.

Find the address, check what's available, place the order, track the install, confirm it's online — the whole journey your platform runs, rehearsed on a sandbox key.

Order journey · sandbox Sandbox key
GET/addresses
$ 
200 OK· application/json · X-Sandbox: true

Find the address — every UPRN at the postcode

Simulated session · answers are the API spec's own examples
04Hardware

The kit, too. Quoted and ordered in code.

8 hardware endpoints: browse the catalogue with live stock and tier pricing, price a basket, order it, and point a zero-touch handset at the right extension before it ships.

See the hardware endpoints →
Hardware · sandbox Sandbox key
GET/hardware/categories
$ 
200 OK· application/json · X-Sandbox: true

Browse the catalogue — categories and how many products in each

Simulated session · answers are the API spec's own examples
05Every endpoint

All 311. Search them.

Straight from the OpenAPI spec — refreshed hourly. Open any endpoint for its parameters, a copyable curl, and the spec's example answer where it has one.

311 of 311 endpoints
Catalogue and account3
Orders3
Service lifecycle5
Availability and pricing3
Leased line quotes4
Diagnostics and estate6
Broadband ordering1
Broadband services: status15
Broadband services: line and router control8
UnifiedRPS9
Invoices and payments6
Hardware: catalogue and quotes4
Hardware: orders4
Mobile services: status16
VoIP estate and 999 records13
Mobile services: SIM control16
VoIP: AI agents7
VoIP: Analytics3
VoIP: Phone system API access2
VoIP: Softphone app19
VoIP: Billing and usage3
VoIP: Blocked numbers5
VoIP: Call flow8
VoIP: Call logs and recordings6
VoIP: Outbound campaigns8
VoIP: Conference rooms4
VoIP: Custom destinations4
VoIP: Phones11
VoIP: Dial-in access (DISA)4
VoIP: Extensions8
VoIP: Fax3
VoIP: Feature codes4
VoIP: Lookups and setup8
VoIP: Integrations5
VoIP: IVR menus5
VoIP: Media files6
VoIP: Meetings9
VoIP: Music on hold5
VoIP: Phone numbers9
VoIP: Phone books6
VoIP: Number porting8
VoIP: Queues4
VoIP: Ring groups4
VoIP: Account settings2
VoIP: Short numbers4
VoIP: SMS2
VoIP: Time conditions6
VoIP: Voice agents3
VoIP: Voicemail10
06How it behaves

One shape. Every endpoint.

One thing
{
"data": {
"service_id": 2417,
"status": "Active",
"online": true
}
}
A list, with paging
{
"data": [
{
"service_id": 2417
},
{
"service_id": 2398
}
],
"meta": {
"total": 42,
"limit": 50,
"offset": 0
}
}
Something went wrong
{
"error": {
"code": "not_found",
"message": "No broadband service with that id on your account."
}
}
200 / 201Done — 201 when something was created.
204Done, nothing to return.
400The request is wrong: a missing or invalid field.
401No key, or an unknown or suspended key.
403The key may not do this — its permissions, allowed IPs, or the package lacks the feature.
404No such route, or no such service, SIM, or order on your account.
409Not in a state to do that, e.g. a suspended service.
422Understood but refused — the message says why.
429Too many calls; slow down.
5xxSomething failed our side or at a carrier. Retry later.
  • Auth: Authorization: Bearer YOUR_API_KEY, or X-API-Key where a tool can't set that header.
  • Requests: reads are GET; changes are POST, PUT, PATCH, or DELETE. Bodies are JSON. Ids sit in the path; names are snake_case everywhere.
  • Keys: each can use everything, or only the endpoints you pick — and only from the IPs you allow.
07In your language

The same call, three ways.

Every active broadband service on your account, ten at a time.

curl
curl "https://portal.giant.net.uk/partner/api/v1/broadband/services?status=Active&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
PHP
$ch = curl_init('https://portal.giant.net.uk/partner/api/v1/broadband/services?status=Active&limit=10');
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('GIANT_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);
foreach ($body['data'] as $service) {
  echo $service['service_id'], ' ', $service['status'], "\n";
}
JavaScript
const res = await fetch(
  "https://portal.giant.net.uk/partner/api/v1/broadband/services?status=Active&limit=10",
  { headers: { Authorization: `Bearer ${process.env.GIANT_API_KEY}` } },
);
const { data, meta } = await res.json();
for (const s of data) console.log(s.service_id, s.status);
08FAQ

Straight answers. From the guide.

Generate one yourself: in your client area, open API keys and create a sandbox key. It starts test_ and works exactly like a live key — reads are real, changes are simulated.

Build it on Giant.

Not a partner yet? Tell us what you're building and the wholesale team will get you set up.

Real customers

What people actually say.

5.0/5 from 84 customer reviews — same Giant team every one of them dealt with.

See all 84 reviews on Trustpilot

Or leave one of your own — opens Trustpilot in a new tab