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
my.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://my.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://my.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://my.bulletproof.cx/api/v1/storefront/{slug} \
GET
/reseller
Reseller status, storefront settings, customers and rebates
scope: read
curl -X GET https://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.bulletproof.cx/api/v1/hosting/{id}/renew \
-H "Authorization: Bearer $API_KEY"
GET
/hosting
List Plesk hosting accounts
scope: read
curl -X GET https://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.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://my.bulletproof.cx/api/v1/uploads \
GET
/uploads/{id}
An image from one of your tickets or chats
public
curl -X GET https://my.bulletproof.cx/api/v1/uploads/{id} \
Affiliate
GET
/affiliate
Your referral code, stats, commissions and payouts
scope: read
curl -X GET https://my.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://my.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"}'