Reference · 88 endpoints

Bulletproof.to API

The same REST API our client area uses. Anything you can click, you can script, or build your own panel on top.

Base URL

bulletproof.cx/api/v1

Auth

Authorization: Bearer umb_live_…. Create keys in the panel.

Limits

120 req/min per key. X-RateLimit-Remaining header.

# success
{ "data": { … } }

# error, HTTP 4xx/5xx
{ "error": { "code": "insufficient_balance", "message": "Balance €4.10 is lower than €9.90. Top up first." } }

Prices are server-side. You send the plan id; the API computes and charges the price. Clients can never set their own price.

CORS open for Bearer. Any origin can call with a key. Panel cookies are SameSite=Strict, so other sites can't ride a session.

Catalog

GET /catalog Plans, dedicated stock, hosting, TLDs, locations, OS images, coins (+ your price factor when logged in) public
curl -X GET https://bulletproof.cx/api/v1/catalog \
GET /domains/check Check availability of a name across all TLDs (?name=), live registry check public
curl -X GET https://bulletproof.cx/api/v1/domains/check \

Reseller

GET /storefront/{slug} Public storefront data for a reseller (brand + marked-up prices) public
curl -X GET https://bulletproof.cx/api/v1/storefront/{slug} \
GET /reseller Reseller status, storefront settings, customers and rebates scope: read
curl -X GET https://bulletproof.cx/api/v1/reseller \
  -H "Authorization: Bearer $API_KEY"
POST /reseller/apply Apply for the reseller program (staff review, usually within 24 h) scope: reseller
curl -X POST https://bulletproof.cx/api/v1/reseller/apply \
  -H "Authorization: Bearer $API_KEY"
PATCH /reseller Update storefront brand, slug, color, domain and markup (0 to 200 %) scope: reseller
curl -X PATCH https://bulletproof.cx/api/v1/reseller \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"brand":"Nightjar Cloud","markup":25,"color":"#7c5cff"}'
POST /reseller/customers Create an end-customer sub-account (they log in on your white-label panel). Returns a one-time password. scope: reseller
curl -X POST https://bulletproof.cx/api/v1/reseller/customers \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"acme-studio"}'

Account

GET /account Your profile, balance and settings scope: read
curl -X GET https://bulletproof.cx/api/v1/account \
  -H "Authorization: Bearer $API_KEY"
PATCH /account Update notification settings or IP retention. Username, email and PGP key need a logged-in session. scope: account
curl -X PATCH https://bulletproof.cx/api/v1/account \
  -H "Authorization: Bearer $API_KEY"
GET /account/export Everything we hold about you, as JSON scope: account
curl -X GET https://bulletproof.cx/api/v1/account/export \
  -H "Authorization: Bearer $API_KEY"
GET /activity Recent account activity (kept 30 days) scope: read
curl -X GET https://bulletproof.cx/api/v1/activity \
  -H "Authorization: Bearer $API_KEY"
GET /metrics/traffic Daily inbound/outbound traffic of all your servers in bytes, last 30 days (UTC days), plus this month so far scope: read
curl -X GET https://bulletproof.cx/api/v1/metrics/traffic \
  -H "Authorization: Bearer $API_KEY"
GET /ssh-keys Your SSH public keys (used at deploy / reinstall) scope: read
curl -X GET https://bulletproof.cx/api/v1/ssh-keys \
  -H "Authorization: Bearer $API_KEY"
POST /ssh-keys Add an SSH public key {"name", "key"} scope: account
curl -X POST https://bulletproof.cx/api/v1/ssh-keys \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"laptop","key":"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA\u2026 me@laptop"}'
DELETE /ssh-keys/{id} Remove an SSH key scope: account
curl -X DELETE https://bulletproof.cx/api/v1/ssh-keys/{id} \
  -H "Authorization: Bearer $API_KEY"
GET /account/ip The IPv4 address your request comes from (for a firewall rule), nothing is stored scope: read
curl -X GET https://bulletproof.cx/api/v1/account/ip \
  -H "Authorization: Bearer $API_KEY"

Servers

GET /servers List VPS and dedicated servers scope: read
curl -X GET https://bulletproof.cx/api/v1/servers \
  -H "Authorization: Bearer $API_KEY"
GET /servers/{id} Get one server (status, progress while installing) scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /servers Deploy servers. auth: "ssh" (keys: [ids]) or "password" (generated, returned once). VPS only: "firewall" = one of your firewall ids or "none"; left out, your default firewall (if any) is used. Price is computed server-side and charged from balance. "promo": a promo code (see GET /promos/check), otherwise the best automatic promo applies. With "pay": xmr|btc|ltc|usdt and a short balance, returns {checkout} with a payment for the difference instead, and the order runs once it is paid. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"kind":"vps","plan":"vps-2","location":"lt","image":"debian","quantity":1,"period":1,"auth":"password","tags":["web"]}'
PATCH /servers/{id} Rename, set tags or auto-renew scope: servers
curl -X PATCH https://bulletproof.cx/api/v1/servers/{id} \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tags":["prod","db"],"auto":true}'
POST /servers/{id}/actions Power and lifecycle: {"action": "start|stop|reboot|reinstall", "image": "debian", "version": "13"}. Dedicated servers: start, stop and reboot run like on a VPS (status goes to "installing" with a progress text, then "running" or "stopped"; one power action every few minutes); reinstall opens a ticket for our team. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/actions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action":"reboot"}'
POST /servers/bulk Bulk action or tag: {"ids": [...], "action": "stop"} or {"ids": [...], "addTag": "prod"} scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/bulk \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":["srv-1001","srv-1002"],"action":"reboot"}'
POST /servers/{id}/password Show the server credentials: login user and password (generated, or the one our team delivered), the root password when the login is a normal user, the rescue system password and notes. Kept encrypted until you delete them. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/password \
  -H "Authorization: Bearer $API_KEY"
DELETE /servers/{id}/rescue Mark the rescue system as finished (after a reboot from inside it) and forget its password. To leave it from here, reboot the server instead. scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/servers/{id}/rescue \
  -H "Authorization: Bearer $API_KEY"
DELETE /servers/{id}/password Delete the stored credentials of a server from our side (they cannot be shown again) scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/servers/{id}/password \
  -H "Authorization: Bearer $API_KEY"
GET /servers/{id}/live Live readings of a VPS: CPU %, memory, network in / out and disk read / write in bytes per second (poll every few seconds) scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/live \
  -H "Authorization: Bearer $API_KEY"
GET /servers/{id}/history Samples for charts (?range=hour|day|week|month): CPU %, memory %, network and disk in bytes per second scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/history \
  -H "Authorization: Bearer $API_KEY"
GET /servers/{id}/traffic Traffic of a server in bytes: this month, last month, all time (in = download, out = upload) and the last 30 days scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/traffic \
  -H "Authorization: Bearer $API_KEY"
GET /servers/{id}/isos ISO images a VPS can boot from (rescue systems, installers) scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/isos \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/iso Boot a VPS from an ISO {"iso": id from /isos} or eject it {"iso": null}. A running server restarts. Use the console to work in it. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/iso \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"iso":"local:iso/systemrescue-11.02-amd64.iso"}'
GET /firewalls Your reusable firewalls, each with the ids of the servers using it scope: servers
curl -X GET https://bulletproof.cx/api/v1/firewalls \
  -H "Authorization: Bearer $API_KEY"
GET /firewalls/lists Your IP lists for firewall rules, each with what uses it scope: servers
curl -X GET https://bulletproof.cx/api/v1/firewalls/lists \
  -H "Authorization: Bearer $API_KEY"
POST /firewalls/lists Create an IP list {"name", "entries": "IPv4 or CIDR, comma or line separated"} scope: servers
curl -X POST https://bulletproof.cx/api/v1/firewalls/lists \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Office","entries":"203.0.113.10, 198.51.100.0/28"}'
PUT /firewalls/lists/{id} Change an IP list; every rule using it gets the new addresses scope: servers
curl -X PUT https://bulletproof.cx/api/v1/firewalls/lists/{id} \
  -H "Authorization: Bearer $API_KEY"
DELETE /firewalls/lists/{id} Delete an IP list (refused while a rule uses it) scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/firewalls/lists/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /firewalls Create a reusable firewall {"name", "policy", "rules" (as for one server), "servers": [ids that use it]} scope: servers
curl -X POST https://bulletproof.cx/api/v1/firewalls \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Web servers","policy":"drop","rules":[{"action":"accept","proto":"tcp","port":"22","source":"","note":"SSH"},{"action":"accept","proto":"tcp","port":"80,443","source":"","note":"Web"}],"servers":["srv-k7m2x9qa"]}'
PUT /firewalls/{id} Change a firewall; every server using it gets the new rules. "servers" (optional) is the full list that should use it scope: servers
curl -X PUT https://bulletproof.cx/api/v1/firewalls/{id} \
  -H "Authorization: Bearer $API_KEY"
DELETE /firewalls/{id} Delete a firewall; servers that used it keep its rules as their own scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/firewalls/{id} \
  -H "Authorization: Bearer $API_KEY"
PUT /servers/{id}/firewall Firewall of a VPS, in front of the VM: {"profile": firewall id} to use one of your firewalls, or own rules {"on", "policy" / "policyOut": "accept"|"drop" (incoming / outgoing traffic no rule matches), "rules": [{"dir": "in"|"out", "action": "accept"|"drop", "proto": "tcp"|"udp"|"icmp"|"any", "port": "22" | "80,443" | "8000-8100" | "", "source": the far side, "" | IPv4 / CIDR list, "lists": [IP list ids], "local": one of the server's IPv4 or "", "on": true|false, "until": ISO time a temporary rule ends or "", "note"}]}. First matching rule wins, replies to connections always get through. scope: servers
curl -X PUT https://bulletproof.cx/api/v1/servers/{id}/firewall \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"on":true,"policy":"drop","rules":[{"action":"accept","proto":"tcp","port":"22","source":"","note":"SSH"},{"action":"accept","proto":"tcp","port":"80,443","source":"","note":"Web"}]}'
POST /servers/{id}/snapshots Take a snapshot of the disk of a VPS {"label"}. A few per server, kept a limited number of days (see GET /catalog, snapshots). scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/snapshots \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"label":"Before the upgrade"}'
POST /servers/{id}/snapshots/{name}/restore Put the disk back to a snapshot. Everything written since is lost. A running server starts again from it. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/snapshots/{name}/restore \
  -H "Authorization: Bearer $API_KEY"
DELETE /servers/{id}/snapshots/{name} Delete a snapshot scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/servers/{id}/snapshots/{name} \
  -H "Authorization: Bearer $API_KEY"
POST /stock/notify Tell me when a sold-out VPS can be ordered again: {"loc", "plan" (optional, any plan when empty)}. Logged in, you are told through your notification channels; otherwise send "email", deleted from our list with the notice or after 60 days. public
curl -X POST https://bulletproof.cx/api/v1/stock/notify \
 \
  -H "Content-Type: application/json" \
  -d '{"loc":"lt","plan":"vps-1"}'
GET /servers/{id}/upgrade Bigger plans this VPS can move to, with what it costs now (the difference for the days already paid) and the new monthly price scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/upgrade \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/upgrade Upgrade a VPS: {"plan": "vps-3"}. The difference for the days already paid is taken from your balance, the server reboots once with the new resources. Disks only grow, so plans cannot go down. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/upgrade \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"vps-3"}'
GET /servers/{id}/addons Extra IPv4 and extra disk for a VPS: what it has, what each costs a month and today for the days already paid scope: read
curl -X GET https://bulletproof.cx/api/v1/servers/{id}/addons \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/ips Add an extra IPv4 to a VPS. The difference for the days already paid is taken from your balance; add the address inside the OS (same gateway). scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/ips \
  -H "Authorization: Bearer $API_KEY"
DELETE /servers/{id}/ips/{ip} Give an extra IPv4 back. It stops reaching the server and the monthly price goes down (days already paid are not refunded). scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/servers/{id}/ips/{ip} \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/ips/{ip}/primary Make an extra IPv4 the main address. The server reboots with it, the old main address stays as an extra. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/ips/{ip}/primary \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/disk Add disk to a VPS {"gb": 10} in 10 GB blocks, up to 100 GB extra. The difference for the days already paid is taken from your balance, the disk grows without a restart. scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/disk \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"gb":20}'
POST /servers/{id}/console One-time noVNC console URL (valid 60 s) scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/console \
  -H "Authorization: Bearer $API_KEY"
POST /servers/{id}/rdns Set reverse DNS (PTR) for the server IP: {"ptr": "mail.example.com"} scope: servers
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/rdns \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ptr":"mail.example.com"}'
POST /servers/{id}/renew Renew now from balance {"months": 1|3|12, optional, the billing period when left out}. Pays the open renewal invoice when the period matches. Unsuspends. To pay with crypto use POST /billing/renew. scope: billing
curl -X POST https://bulletproof.cx/api/v1/servers/{id}/renew \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"months":3}'
DELETE /servers/{id} Delete a server for good {"confirm": "<server name>"}. The disk is wiped, unused days are not refunded. scope: servers
curl -X DELETE https://bulletproof.cx/api/v1/servers/{id} \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"confirm":"web-1"}'

Billing

GET /promos/check Check a promo code (?code=&kind=vps|dedicated|hosting|domain, optional &plan= plan id or TLD like .com): its terms and discounts per product, or why it cannot be used. Send it as "promo" with the order. scope: read
curl -X GET https://bulletproof.cx/api/v1/promos/check \
  -H "Authorization: Bearer $API_KEY"
GET /promos/auto Promotions that apply without a code right now (each lists its products; an order gets the biggest one that fits) scope: read
curl -X GET https://bulletproof.cx/api/v1/promos/auto \
  -H "Authorization: Bearer $API_KEY"
GET /billing Balance, monthly spend, invoices and open payments scope: billing
curl -X GET https://bulletproof.cx/api/v1/billing \
  -H "Authorization: Bearer $API_KEY"
GET /billing/invoices/{id} One invoice: item, amount, status, period, what it is for, and for a top-up the crypto payment (coin, amount, network) scope: billing
curl -X GET https://bulletproof.cx/api/v1/billing/invoices/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /billing/topups Create a top-up {"amount", "method": xmr|btc|ltc|usdt, "invoice"?}, returns a one-time address and the exact coin amount scope: billing
curl -X POST https://bulletproof.cx/api/v1/billing/topups \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":50,"method":"xmr"}'
GET /billing/topups/{id} Payment status (waiting, confirming, paid, underpaid, expired) scope: billing
curl -X GET https://bulletproof.cx/api/v1/billing/topups/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /billing/topups/{id}/simulate-payment Dev only, marks a fake-gateway payment as paid (real gateways call /webhooks/*) scope: billing
curl -X POST https://bulletproof.cx/api/v1/billing/topups/{id}/simulate-payment \
  -H "Authorization: Bearer $API_KEY"
GET /billing/renew What renewing costs for 1, 3 or 12 months: ?servers=srv-a,srv-b&hosting=web-c. Per service the price for each period, the new expiry and any open renewal invoice, plus your balance. scope: billing
curl -X GET https://bulletproof.cx/api/v1/billing/renew \
  -H "Authorization: Bearer $API_KEY"
POST /billing/renew Renew services for a period: {"servers": [...], "hosting": [...], "months": 1|3|12, "pay": xmr|btc|ltc|usdt (optional), "payAll": bool}. Without "pay" it is charged to your balance. With "pay" and a short balance (or payAll) you get a checkout with a one-time crypto address; the services renew once it confirms. scope: billing
curl -X POST https://bulletproof.cx/api/v1/billing/renew \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"servers":["srv-k7m2x9qa"],"months":3,"pay":"xmr"}'
POST /billing/invoices/{id}/pay Pay a due invoice from balance (also unsuspends the service) scope: billing
curl -X POST https://bulletproof.cx/api/v1/billing/invoices/{id}/pay \
  -H "Authorization: Bearer $API_KEY"

Hosting

POST /hosting/{id}/renew Renew a hosting account now from balance. Unsuspends. scope: billing
curl -X POST https://bulletproof.cx/api/v1/hosting/{id}/renew \
  -H "Authorization: Bearer $API_KEY"
GET /hosting List Plesk hosting accounts scope: read
curl -X GET https://bulletproof.cx/api/v1/hosting \
  -H "Authorization: Bearer $API_KEY"
POST /hosting Create a hosting account. domain.mode is new, mine, external or sub. "pay" and "promo" work as on POST /servers (a promo never covers the domain). scope: hosting
curl -X POST https://bulletproof.cx/api/v1/hosting \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"plan":"host-2","location":"lt","domain":{"mode":"new","name":"my-site.is"},"php":"8.4","wordpress":true,"period":1}'
PATCH /hosting/{id} Change PHP version (8.5, 8.4, 8.3, 8.2, 8.1) or auto-renew scope: hosting
curl -X PATCH https://bulletproof.cx/api/v1/hosting/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /hosting/{id}/sso One-time Plesk login URL (valid 60 s). app is one of home, files, mail, databases, wordpress, backups, cron, git, logs scope: hosting
curl -X POST https://bulletproof.cx/api/v1/hosting/{id}/sso \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"app":"files"}'
POST /hosting/{id}/password Set a new random SFTP password and return it once. It is not stored on our side, set a new one if you lose it. scope: hosting
curl -X POST https://bulletproof.cx/api/v1/hosting/{id}/password \
  -H "Authorization: Bearer $API_KEY"

Domains & DNS

GET /domains List registered domains and DNS zones scope: read
curl -X GET https://bulletproof.cx/api/v1/domains \
  -H "Authorization: Bearer $API_KEY"
POST /domains Register a domain (always with our privacy contact, your data never reaches the registry). Charged from balance; with "pay": xmr|btc|ltc|usdt and a short balance (or "payAll"), returns {checkout} with a payment instead, and the domain is registered once it is paid. scope: dns
curl -X POST https://bulletproof.cx/api/v1/domains \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"quietpress.is"}'
POST /domains/transfer Transfer a domain in with {"name", "authCode"}, charged the transfer price (includes 1 year) scope: dns
curl -X POST https://bulletproof.cx/api/v1/domains/transfer \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"blindspot.com","authCode":"EPP-CODE"}'
POST /dns/zones Add a free DNS zone for a domain registered elsewhere. {"import": true} (default) copies the records it has today on its current DNS (apex, common names, mail authentication) scope: dns
curl -X POST https://bulletproof.cx/api/v1/dns/zones \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"example.com","import":true}'
POST /dns/zones/{name}/check Re-check whether the domain delegates to our nameservers (live DNS lookup) scope: dns
curl -X POST https://bulletproof.cx/api/v1/dns/zones/{name}/check \
  -H "Authorization: Bearer $API_KEY"
PATCH /domains/{name} Update auto-renew, transfer lock, DNSSEC, nameservers ({"ns": "ours"|"custom", "nameservers": [...]}) or renew 1 year scope: dns
curl -X PATCH https://bulletproof.cx/api/v1/domains/{name} \
  -H "Authorization: Bearer $API_KEY"
DELETE /dns/zones/{name} Delete a DNS-only zone scope: dns
curl -X DELETE https://bulletproof.cx/api/v1/dns/zones/{name} \
  -H "Authorization: Bearer $API_KEY"
POST /domains/{name}/records Add a DNS record (A, CNAME, MX, TXT, CAA, SRV, NS, no AAAA) scope: dns
curl -X POST https://bulletproof.cx/api/v1/domains/{name}/records \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"A","name":"@","value":"185.231.40.12","ttl":300}'
PUT /domains/{name}/records/{index} Replace a record by index scope: dns
curl -X PUT https://bulletproof.cx/api/v1/domains/{name}/records/{index} \
  -H "Authorization: Bearer $API_KEY"
DELETE /domains/{name}/records/{index} Delete a record by index scope: dns
curl -X DELETE https://bulletproof.cx/api/v1/domains/{name}/records/{index} \
  -H "Authorization: Bearer $API_KEY"

Support

GET /tickets List tickets and chats with messages scope: read
curl -X GET https://bulletproof.cx/api/v1/tickets \
  -H "Authorization: Bearer $API_KEY"
POST /tickets Open a ticket {"subject", "text", "dept", "priority", "server"} scope: account
curl -X POST https://bulletproof.cx/api/v1/tickets \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subject":"rDNS for my server","text":"Please set PTR to mail.example.com","dept":"Technical","files":["img_\u2026 from POST /uploads"]}'
GET /tickets/{id} One ticket or chat with its messages scope: read
curl -X GET https://bulletproof.cx/api/v1/tickets/{id} \
  -H "Authorization: Bearer $API_KEY"
POST /tickets/{id}/messages Reply to a ticket {"text", "files": [image ids]}. {"close": true} closes it, {"reopen": true} reopens. scope: account
curl -X POST https://bulletproof.cx/api/v1/tickets/{id}/messages \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Thanks!"}'
POST /uploads Upload one image (raw body, PNG, JPEG, GIF or WebP, up to 3.5 MB, name in X-File-Name). Send the returned id in "files" of a ticket or chat message. public
curl -X POST https://bulletproof.cx/api/v1/uploads \
GET /uploads/{id} An image from one of your tickets or chats public
curl -X GET https://bulletproof.cx/api/v1/uploads/{id} \

Affiliate

GET /affiliate Your referral code, stats, commissions and payouts scope: read
curl -X GET https://bulletproof.cx/api/v1/affiliate \
  -H "Authorization: Bearer $API_KEY"
POST /affiliate/payouts Withdraw available earnings to balance (instant), xmr or btc (min €20, paid by staff within 48 h) scope: billing
curl -X POST https://bulletproof.cx/api/v1/affiliate/payouts \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount":20,"method":"xmr","address":"8Bz4\u2026your-wallet"}'

Live chat

Humans, usually within minutes

No account or email needed. The conversation stays in this browser, and moves to your account when you log in.

Prefer Telegram?