Pregled #
Svi endpointi su REST pozivi sa JSON odgovorima. Uspješan odgovor uvijek ima "success": true i podatke u "data" objektu; greška ima "success": false i "error" poruku.
Bazni URL
Svi pozivi se šalju na HTTPS.
https://api.resellerunion.com/v1/
Obavezno koristite www.
Adresa bez www. vraća 301 preusmjerenje. Po standardu
(RFC 7231) HTTP klijenti pri 301 pretvaraju POST u
GET, pa zahtjev stigne kao GET i API odgovori
Method not allowed. Use POST.
Isto vrijedi i za sandbox. Ako vaš klijent prati preusmjerenja, obavezno
isključite tu opciju ili odmah koristite adresu s www.
Odakle vrijednosti parametara?
Sve što šaljete u narudžbama dohvaćate iz kataloških endpointa: ekstenzije, cijene domena i
dodatna polja koja ekstenzija traži iz
price_list.php, hosting pakete (njihov
uuid i dostupne cikluse) iz
hosting_offer.php. Postojeće usluge i njihove
uuid identifikatore dohvaćate iz
my_domains.php i
my_hosting.php.
Identifikacija isključivo UUID-om
Sve usluge (domene, hosting) se u API pozivima identificiraju javnim uuid identifikatorom koji dobijete u odgovorima. Interni brojčani identifikatori ne postoje na API granici.
Autentikacija #
Svaki zahtjev se autentificira s dva headera koja idu zajedno kao par:
| Header | Opis |
X-API-UUID |
UUID vašeg reseller naloga. Vidljiv u kontrolnoj tabli. |
X-API-KEY |
Vaš personalni reseller API ključ, sa mogućnošću regeneracije. |
GET https://api.resellerunion.com/v1/price_list.php
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
Izuzetak: provjera domene
Jedino su za
whois.php kredencijali opcionalni. Ako ih šaljete, i dalje idu kao par — slanje samo jednog headera vraća
401.
Sigurnosne napomene
Svi API pozivi moraju ići sa server-side koda. Nikada ne izlažite X-API-KEY u frontend/JavaScript kodu. Sistem logira svaki pokušaj pristupa s neispravnim ključem.
Greške i limiti #
| HTTP kod | Značenje |
| 400 | Neispravan ulaz (nedostaje polje, pogrešan format) ili poslovna greška (npr. domena zauzeta, ciklus nedostupan, ekstenzija van ponude) |
| 401 | Nedostajući ili neispravni kredencijali (X-API-UUID / X-API-KEY) |
| 405 | Pogrešna HTTP metoda za endpoint |
| 429 | Prekoračen rate limit |
| 500 | Interna greška servera |
| 502 | Pozadinski sistem privremeno nedostupan — pokušajte ponovo |
Rate limiti (po IP adresi)
Provjera domene (whois.php): 60 zahtjeva u minuti. Svi akcijski POST endpointi (narudžbe, transferi, produženja, EPP, nameserveri, kontakti, promjena registranta): 30 zahtjeva u minuti. Prekoračenje vraća 429.
// Primjer greške
{
"success": false,
"error": "Field \"package_uuid\" is required."
}
Sandbox #
Testno okruženje za razvoj integracije. Iste putanje i isti format odgovora kao produkcija, ali bez ikakvih stvarnih podataka i bez posljedica.
Iste putanje kao produkcija — samo zamijenite baznu adresu. Popis dostupnih endpointa je niže na ovoj stranici.
Kredencijali
Javni su i isti za sve — ne treba vam nalog:
X-API-UUID: 00000000-0000-4000-8000-000000000001
X-API-KEY: sandbox_kljuc_za_testiranje_1234567
Kako se ponaša
| Ponašanje | Opis |
| Bez stanja | Sandbox ne pamti ništa između zahtjeva. |
| Narudžbe | order_* vraćaju uspjeh, ali se narudžba ne izvršava. Ne kreira se predračun i ništa se ne naplaćuje. |
| Liste | my_* uvijek vraćaju istu fiksnu listu. Naručena stavka se neće pojaviti u njoj. |
| Validacija | Identična produkcijskoj — možete testirati i neuspješne puteve (neispravan uuid, privatna IP adresa, nepodržan ciklus, nepostojeći paket). |
| Cjenovni nivo | Sandbox nalog je na nivou 2 (Advanced). |
Sandbox se ne može zamijeniti s produkcijom
Svaki odgovor nosi "sandbox": true i polje sandbox_napomena, a odgovori na narudžbu i dodatno sandbox_upozorenje. U HTTP zaglavljima stoji X-Sandbox: true.
Primjer
POST https://sandbox.resellerunion.com/v1/order_license.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 00000000-0000-4000-8000-000000000001
X-API-KEY: sandbox_kljuc_za_testiranje_1234567
{
"package_uuid": "aaaaaaaa-0000-4000-8000-000000000001",
"cycle": "monthly",
"ip": "185.99.1.50"
}
// Odgovor
{
"success": true,
"sandbox": true,
"sandbox_napomena": "Testno okruženje (sandbox). Podaci su fiktivni…",
"data": {
"sandbox_upozorenje": "SANDBOX: narudžba je simulirana i NIJE izvršena…",
"proforma_invoice": { "number": "SB-2026-04128", "total": "61.51" },
"order": { "order_number": "RSL-4820193756", "status": 1 },
"license": { "name": "cPanel Admin Cloud", "ip": "185.99.1.50", "status": 1 }
}
}
Dostupni endpointi
| Metoda | Putanja |
| GET | /v1/my_profile.php |
| GET | /v1/credit.php |
| GET | /v1/license_offer.php |
| GET | /v1/my_licenses.php |
| POST | /v1/order_license.php |
| GET | /v1/hosting_offer.php |
| GET | /v1/my_hosting.php |
| POST | /v1/order_hosting.php |
| GET | /v1/my_domains.php |
| GET | /v1/price_list.php |
Testiranje WHMCS modula na sandboxu
U modulima je API baza fiksna. Za testiranje privremeno izmijenite funkciju resellerba_*_apiBase() da vraća https://sandbox.resellerunion.com/v1 — i vratite je prije prelaska na produkciju.
Cjenovnik domena #
Vraća sve domenske ekstenzije iz ponude vaše platforme sa cijenama registracije i produženja za vaš cjenovni nivo, plus valutu. Ovo je izvor vrijednosti za registraciju i transfer domena, kao i dodatnih polja koja pojedine ekstenzije traže.
Opcioni query parametar ?lang=en|es|de|fr određuje jezik naziva i opisa dodatnih polja. Bez njega se koristi zadani jezik platforme.
Primjer zahtjeva
GET https://api.resellerunion.com/v1/price_list.php
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
Odgovor
{
"success": true,
"data": {
"level": 2,
"currency": "BAM",
"decimal_separator": ".",
"total_count": 42,
"domains": [
{
"extension": ".ba",
"featured": true,
"registration_price": "29.90",
"renewal_price": "29.90",
"registration_periods": {
"1": "29.90",
"2": "55.00",
"5": "125.00"
},
"custom_fields": [
{
"slot": 1,
"required": true,
"type": "check",
"name": "Suglasnost s uvjetima registracije",
"description": "Potvrdite kvačicom da ste pročitali i prihvatili Pravilnik o registraciji .ba domena.",
"validation": "^(true)$"
},
{
"slot": 2,
"required": true,
"type": "input",
"name": "Svrha registracije domene",
"description": "Ukratko opišite za šta će se domena koristiti (najmanje 5 znakova).",
"validation": "^.{5,}$"
}
]
}
]
}
}
Registracijski periodi po ekstenziji
Objekat
registracijski_periodi sadrži
samo periode koji se nude za tu ekstenziju — ključ je broj godina, vrijednost ukupna cijena za cijeli period. Period kojeg nema u objektu se ne može naručiti (u primjeru gore: 3 i 4 godine nisu dostupne). Vrijednost
period pri
registraciji domene mora biti jedan od ovih ključeva.
Dodatna polja po ekstenziji
Niz
custom_polja je prisutan
samo kod ekstenzija koje dodatna polja traže; kod ostalih je prazan. Svako navedeno polje je
obavezno — bez njega
registracija domene vraća grešku.
slot je redni broj (1–6) i šalje se natrag kao ključ u objektu
custom_polja pri narudžbi. Naziv je tekst za prikaz i može se promijeniti, slot ne može — vežite se za slot.
vrsta može biti
check (kvačica; vrijednost
"true"),
input (slobodan tekst) ili
dropdown. Kod dropdowna dolazi i niz
opcije s dozvoljenim vrijednostima.
validacija je regularni izraz
bez delimitera, isti onaj kojim server provjerava vrijednost. Šalje se da unos možete provjeriti prije slanja i korisniku javiti grešku odmah.
Ponuda hostinga #
Vraća sve hosting pakete iz ponude vaše platforme sa cijenama za vaš cjenovni nivo po svim dostupnim ciklusima naplate. Iz ovog odgovora uzimate uuid paketa i naziv ciklusa za narudžbu hostinga.
Primjer zahtjeva
GET https://api.resellerunion.com/v1/hosting_offer.php
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
Odgovor (skraćeno)
{
"success": true,
"data": {
"level": 2,
"currency": "BAM",
"total_count": 6,
"packages": [
{
"uuid": "3f2a1b6c-9d4e-4f70-8a21-5e6d7c8b9a01",
"name": "Business",
"disk_space": "10 GB",
"bandwidth": "Neograničen",
"requires_domain": true,
"prices": {
"monthly": "9.90",
"annually": "99.00"
}
}
]
}
}
Ciklus koji nije u odgovoru se ne nudi
U cijene objektu svakog paketa nalaze se samo ciklusi koji su dostupni za taj paket i vaš nivo. Slanje narudžbe s ciklusom kojeg nema u ponudi paketa vraća grešku — cijena se nikad ne izmišlja.
Provjeri dostupnost domene #
Provjerava da li je tražena domena dostupna za registraciju. Podržane su samo ekstenzije koje se nalaze u reseller ponudi za vašu platformu (vidi cjenovnik). Pokušaj provjere ekstenzije izvan ponude vraća grešku.
GET parametri
| Parametar | Tip | Obavezan | Opis |
domain |
string |
DA |
Puno ime domene uključujući ekstenziju (npr. mojafirma.com, example.co.ba) |
format |
string |
NE |
text = tekstualni odgovor za WHMCS (vidi ispod). Bez parametra: JSON. |
Kredencijali su opcionalni
Ako šaljete kredencijale, X-API-UUID i X-API-KEY idu zajedno kao par — slanje samo jednog vraća 401.
Primjer zahtjeva
GET https://api.resellerunion.com/v1/whois.php?domain=mojafirma.com
Odgovor
{
"success": true,
"data": {
"domain": "mojafirma.com",
"extension": ".com",
"available": true
}
}
Tekstualni format (WHMCS whois.json)
Sa parametrom format=text endpoint vraća čisti tekst — namijenjen za WHMCS whois.json "https://" lookup. Odgovor je uvijek HTTP 200 (WHMCS poredi tijelo, ne HTTP kod):
STATUS: AVAILABLE
STATUS: REGISTERED
STATUS: ERROR: <poruka>
Primjer whois.json unosa za .ba ekstenzije (nemaju javni port-43 whois server):
{
"extensions": ".ba,.edu.ba",
"uri": "https://api.resellerunion.com/v1/whois.php?format=text&domain=",
"available": "STATUS: AVAILABLE"
}
Registruj domenu #
Kreira narudžbu registracije domene. Domena mora biti dostupna (sistem radi provjeru) i ekstenzija mora biti u ponudi vaše platforme. Cijena se obračunava prema vašem cjenovnom nivou.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
domain | string | DA | Puno ime domene (npr. primjer.org.ba) |
period | integer | DA | Broj godina registracije: 1–5. Dozvoljen je samo period koji postoji u registracijski_periodi za tu ekstenziju u cjenovniku — svaki period ima svoju ukupnu cijenu. Nedostupan period vraća grešku. |
registrant | object | DA | Podaci registranta — vidi Registrant podaci |
nameservers | array | DA | Najmanje 2, najviše 5 hostname-ova. Svaki mora biti različit. Registar odbija domenu s manje od dva nameservera, pa se narudžba bez njih ne prihvata. |
custom_polja | object | * | Obavezno ako ekstenzija traži dodatna polja — vidi custom_polja u cjenovniku. Ključ je slot kao string, vrijednost tekst. |
Primjer zahtjeva
POST https://api.resellerunion.com/v1/order_domain.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"domain": "primjer.org.ba",
"period": 1,
"registrant": {
"is_company": 0,
"first_name": "Amir",
"last_name": "Amirović",
"address": "Ulica bb",
"city": "Sarajevo",
"postal_code": "71000",
"country": "BA",
"email": "amir@primjer.ba",
"phone": "+38761111222"
},
"nameservers": ["ns1.primjer.ba", "ns2.primjer.ba"],
"custom_fields": {
"1": "true",
"2": "Prezentacija firme i kontakt stranica"
}
}
Nameserveri su obavezni
Potrebna su najmanje dva i moraju biti različiti. Provjera se radi prije kreiranja narudžbe i predračuna, pa narudžba bez njih ne nastane i ništa se ne naplaćuje. Zadani nameserveri se ne podmeću — nameserver koji niste zadali se ne izmišlja.
Dodatna polja
Prije narudžbe pročitajte
custom_polja za tu ekstenziju iz
price_list.php. Svako aktivno polje je obavezno; vrijednost mora zadovoljiti
validacija regex, a kod dropdowna biti iz niza
opcije.
Kod polja vrste
check šalje se tekst
"true" (ili JSON
true, koji server pretvara u isto).
Vrijednost poslana za slot koji ta ekstenzija
ne traži se odbija greškom — to je znak da radite po zastarjeloj definiciji polja.
Odgovor
Odgovor je ugniježđen: data sadrži četiri objekta — order, domain, proforma_invoice i currency. UUID narudžbe je data.order.uuid, a UUID domene data.domain.uuid — ne data.uuid.
{
"success": true,
"data": {
"order": {
"uuid": "945bda1a-2a36-4f7e-acfd-4c3cfd158a99",
"order_number": "RSL-3430439926",
"status": 1
},
"domain": {
"uuid": "4dd69549-68df-4cf7-9bd5-dc73b38acc8d",
"domain": "primjer.ba",
"extension": ".ba",
"registration_period": 1,
"level": 2,
"price": "58.67",
"status": 1,
"nameservers": ["ns1.primjer.ba", "ns2.primjer.ba"],
"custom_fields": {
"1": "true",
"2": "Prezentacija firme"
}
},
"proforma_invoice": {
"proforma_number": "1564",
"subtotal": "50.15",
"vat_amount": "8.52",
"total": "58.67",
"currency": "KM",
"status": "nije_placen"
},
"currency": {
"code": "BAM",
"prefix": "",
"suffix": "KM",
"position": "after",
"space": 1,
"rate": "1.000000"
},
"decimal_separator": ","
}
}
Česta greška
data.uuid ne postoji. Postoje
data.order.uuid (narudžba) i
data.domain.uuid (domena) — to su dva različita objekta i dva različita UUID-a.
Za praćenje domene kroz
my_domains.php koristi se
data.domain.uuid.
custom_fields
Prisutno samo kad ekstenzija traži dodatna polja. Ključ je
slot kao string,
isti onaj koji vraća
price_list.php.
Transfer domene #
Kreira narudžbu transfera domene ka vašoj platformi. Uz polja kao kod registracije, obavezan je i EPP (authInfo) kod trenutnog registra.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
domain | string | DA | Puno ime domene koja se transferuje |
period | integer | DA | Broj godina. Za transfer je trenutno podržana isključivo 1 godina. |
eppcode | string | DA | EPP / authInfo kod dobijen od trenutnog registrara |
registrant | object | NE | Podaci registranta — vidi Registrant podaci |
nameservers | array | NE | Do 5 hostname-ova |
Produži domenu #
Kreira predračun za produženje postojeće domene. Domena se identificira uuid-om iz my_domains.php.
POST https://api.resellerunion.com/v1/renew_domain.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"uuid": "9c1f4a2e-7b3d-4e58-a690-1f2e3d4c5b6a"
}
EPP kod #
Šalje EPP (authInfo) kod domene na email registranta. Domena se identificira uuid-om. Kod se iz sigurnosnih razloga nikad ne vraća u API odgovoru.
{
"uuid": "9c1f4a2e-7b3d-4e58-a690-1f2e3d4c5b6a"
}
Nameserveri domene #
GET ?uuid=<uuid> vraća trenutne nameservere domene. POST mijenja nameservere na registru.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
uuid | string | DA | UUID domene |
nameservers | array | DA | Lista do 5 hostname-ova |
{
"uuid": "9c1f4a2e-7b3d-4e58-a690-1f2e3d4c5b6a",
"nameservers": ["ns1.primjer.ba", "ns2.primjer.ba"]
}
Promjena registranta #
GET ?uuid=<uuid> vraća trenutnog registranta i cijenu promjene. POST kreira zahtjev za promjenu registranta i pripadajući predračun.
POST JSON polja
| Polje | Obavezan | Opis |
uuid | DA | UUID domene |
ime, prezime | DA | Novi registrant |
kompanija | NE | Naziv firme (za pravna lica) |
adresa, grad, zip, regija, drzava | DA | Adresa novog registranta (drzava = ISO-2 kod) |
telefon, email | DA | Kontakt novog registranta |
Naruči hosting #
Kreira narudžbu hosting paketa i pripadajući predračun. Paket i ciklus dohvaćate iz hosting_offer.php — narudžba prolazi samo za ciklus koji je u ponudi tog paketa.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
package_uuid | string | DA | uuid paketa iz ponude hostinga |
cycle | string | DA | Naziv ciklusa — vidi Ciklusi naplate |
domain | string | NE* | Domena usluge. Obavezna ako paket ima zahtjeva_domenu: true. |
Primjer zahtjeva
POST https://api.resellerunion.com/v1/order_hosting.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"package_uuid": "3f2a1b6c-9d4e-4f70-8a21-5e6d7c8b9a01",
"cycle": "godisnja",
"domain": "primjer.ba"
}
Odgovor
Odgovor je ugniježđen: data sadrži order, service, proforma_invoice, auto_activation i currency. UUID usluge je data.service.uuid.
{
"success": true,
"data": {
"order": {
"uuid": "e7a0565d-a746-456e-8938-68412977e573",
"order_number": "RSL-3036365111",
"status": 1
},
"service": {
"uuid": "c3c3b3f0-db2f-42cc-a195-99e6a97aedb8",
"package": "START HOSTING",
"cycle": "annually",
"cycle_months": 12,
"domain": "primjer.ba",
"level": 1,
"price": "54.40",
"status": 1,
"dedicated_ip": false,
"package_price": "54.40",
"dedicated_ip_price": null
},
"proforma_invoice": {
"proforma_number": "1564",
"subtotal": "46.50",
"vat_amount": "7.90",
"total": "54.40",
"currency": "KM",
"status": "nije_placen"
},
"auto_activation": {
"enabled": true,
"message": "Automatska aktivacija: dostupan kredit pokriva iznos predračuna."
},
"currency": {
"prefix": "",
"suffix": "KM",
"position": "after",
"space": 1
},
"decimal_separator": ","
}
}
Česta greška
data.uuid ne postoji. UUID usluge je data.service.uuid, a UUID
narudžbe data.order.uuid.
Dedicirana IP
Kad je naručena, price UKLJUČUJE i nju — na dokumentu je jedna stavka, ne dvije.
package_price i dedicated_ip_price su informativni razdvojeni iznosi.
Moje hosting usluge #
Lista vaših hosting usluga. Parametri: ?limit=50&offset=0 (opcionalno) ili ?uuid=<uuid> za pojedinačnu uslugu. Vraća za svaku uslugu: uuid, paket, domenu, status, cijenu, ciklus, datume, potrošnju diska/prometa i broj narudžbe.
| Status usluge | Značenje |
1 | Na čekanju |
2 | U obradi |
3 | Aktivna |
Ponuda licenci #
Kompletna ponuda licenci s cijenama prema vašem cjenovnom nivou. Licence su grupisane u kategorije, a svaka nosi uuid koji koristite pri narudžbi.
Primjer zahtjeva
GET https://api.resellerunion.com/v1/license_offer.php
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
Odgovor (skraćeno)
{
"success": true,
"data": {
"level": 2,
"currency": { "code": "BAM", "suffix": "KM", "position": "after", "space": 1 },
"decimal_separator": ",",
"categories": [ { "name": "cPanel/WHM" }, { "name": "CloudLinux" } ],
"total_count": 24,
"licenses": [
{
"uuid": "3f2a1b6c-9d4e-4f70-8a21-5e6d7c8b9a01",
"name": "cPanel Admin Cloud",
"category": "cPanel/WHM",
"host_type": "virtual",
"max_accounts": 5,
"term_months": 1,
"featured": true,
"prices": { "monthly": "61.51" }
}
]
}
}
| Polje licence | Tip | Opis |
uuid | string | Identifikator za narudžbu |
naziv | string | Naziv licence |
kategorija | string | Grupa kojoj licenca pripada |
host_type | string | virtual ili dedicated — tip servera za koji licenca vrijedi |
max_accounts | int|null | Maksimalan broj naloga; null = neograničeno |
cijene.mjesecna | string | Cijena za vaš nivo, mjesečno |
Licence su isključivo mjesečne
Licenca se zakupljuje na mjesec dana i obnavlja svaki mjesec. Duži ciklusi ne postoje — polje cycle pri narudžbi prima samo monthly.
Naruči licencu #
Kreira narudžbu licence i pripadajući predračun. Licenca se vezuje za IP adresu servera koju šaljete u zahtjevu — bez nje se ne može aktivirati.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
package_uuid | string | DA | uuid licence iz ponude licenci |
cycle | string | DA | Uvijek monthly — licence se zakupljuju samo mjesečno |
ip | string | DA | Javna IPv4 ili IPv6 adresa servera na koji se licenca vezuje |
Ograničenja IP adrese
Adresa mora biti javna — privatni i rezervisani opsezi (10.x, 192.168.x, 172.16–31.x, 127.x) se odbijaju s 400. Na istu IP adresu ne može ići druga licenca; pokušaj vraća 409.
Primjer zahtjeva
POST https://api.resellerunion.com/v1/order_license.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"package_uuid": "3f2a1b6c-9d4e-4f70-8a21-5e6d7c8b9a01",
"cycle": "monthly",
"ip": "185.99.1.50"
}
Odgovor
{
"success": true,
"data": {
"proforma_invoice": { "number": "P-2026-00412", "total": "61.51", "currency": "KM", "status": "nije_placen" },
"order": { "uuid": "…", "order_number": "RSL-0000100042", "status": 1 },
"license": { "uuid": "…", "name": "cPanel Admin Cloud", "ip": "185.99.1.50", "status": 1 }
}
}
Licenca ostaje u statusu Na čekanju dok se predračun ne plati. Nakon uplate se aktivira i dobiva licenseid — stanje pratite kroz my_licenses.php.
Moje licence #
Lista vaših licenci. Parametri: ?limit=50&offset=0 (opcionalno) ili ?uuid=<uuid> za pojedinačnu licencu.
| Polje | Tip | Opis |
uuid | string | Identifikator licence |
naziv | string | Naziv licence u trenutku kupovine |
kategorija | string | Grupa kojoj licenca pripada |
status | int | Vidi tabelu statusa ispod |
greska | string|null | Razlog neuspjeha — popunjeno samo kod statusa 4 |
ip | string | IP adresa na koju je licenca vezana |
licenseid | string|null | Broj licence kod proizvođača; null dok nije aktivirana |
hostname | string|null | Hostname servera, ako je poznat |
cijena | string | Mjesečna cijena po kojoj je prodana |
datum_aktivacije | string|null | Datum i vrijeme aktivacije |
datum_isteka | string|null | Datum isteka tekućeg mjeseca |
broj_narudzbe | string|null | Broj narudžbe kojom je licenca kupljena |
| Status licence | Značenje |
1 | Na čekanju — narudžba zaprimljena, čeka se uplata |
3 | Aktivna |
4 | Neuspjela — razlog u polju greska |
5 | Istekla |
7 | Otkazana |
9 | Suspendirana |
Produži hosting uslugu #
Kreira predračun za sljedeći period usluge. Usluga se produžava ciklusom koji već ima — ciklus se pri obnovi ne mijenja.
POST JSON polja
Cijena se ne šalje — određuje je sistem prema vašem cjenovnom nivou i ciklusu koji usluga ima.
Primjer zahtjeva
POST https://api.resellerunion.com/v1/renew_hosting.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"uuid": "7c1e9a2b-4d38-4f61-9b02-1a5c8e7d3f40"
}
Odgovor
{
"success": true,
"data": {
"proforma_invoice": { "proforma_number": "P-2026-00518", "total": "19.56", "currency": "KM", "status": "nije_placen" },
"service": {
"uuid": "7c1e9a2b-…", "package": "BUSINESS HOSTING", "domain": "primjer.ba",
"cycle_months": 1, "expires_at": "2026-08-20", "new_period_until": "2026-09-19"
},
"auto_activation": { "enabled": true, "message": "Automatska obnova: dostupan kredit…" }
}
}
Kada je obnova moguća
| Stanje usluge | Obnova |
| Aktivna | Moguća |
| Istekla, unutar roka za obnovu | Moguća |
| Istekla, rok prošao | 409 — potrebna ponovna aktivacija |
| Suspendirana | 409 — prvo reaktivirajte uslugu |
| Otkazana | 409 |
| Na čekanju (još nije aktivirana) | 409 |
Postojeći neplaćeni predračun
Ako za uslugu već postoji neplaćen predračun za obnovu, novi se ne kreira. Odgovor je 409 s brojem postojećeg predračuna — platite njega ili sačekajte obradu.
Produži licencu #
Kreira predračun za sljedeći mjesec licence. Licence se zakupljuju i obnavljaju isključivo mjesečno.
POST JSON polja
| Polje | Tip | Obavezan | Opis |
uuid | string | DA | uuid licence iz Moje licence |
Primjer zahtjeva
POST https://api.resellerunion.com/v1/renew_license.php
Content-Type: application/json; charset=utf-8
X-API-UUID: 550e8400-e29b-41d4-a716-446655440000
X-API-KEY: your_api_key
{
"uuid": "9a4f2c81-6b30-4e75-8d19-3f7b2e5a1c68"
}
Odgovor je istog oblika kao kod hostinga, s blokom licenca umjesto usluga. Ista pravila vrijede i za stanja u kojima obnova nije moguća, kao i za postojeći neplaćeni predračun.
Automatska obnova i aktivacija #
Na vašem nalogu možete uključiti automatsku aktivaciju i obnovu. Postavka se nalazi u reseller panelu, pod Postavke.
Kako radi
Svaka narudžba i svaka obnova kreiraju predračun. Razlika je samo u tome ko ga plaća:
| Postavka | Šta se dešava s predračunom |
| Isključena | Predračun čeka vašu uplatu. Usluga se aktivira ili produžava tek nakon plaćanja. |
| Uključena | Predračun se naplaćuje iz kredita na vašem nalogu, a usluga se aktivira ili produžava odmah. Ako kredita nema dovoljno, predračun ostaje neplaćen i čeka uplatu ili dopunu kredita. |
Predračun se kreira uvijek
I kada je automatska obnova uključena, predračun se kreira — samo se odmah naplaćuje iz kredita. Tako svaka transakcija ima svoj dokument.
Domene
Obnova domene se pokreće vašim pozivom — kroz API ili WHMCS modul. Čim poziv stigne, kreira se predračun i, ako je automatska obnova uključena i ima dovoljno kredita, odmah se naplaćuje i domena se produžava kod registra.
Rok do kojeg se istekla domena još može obnoviti određuje registar te ekstenzije, ne ova platforma. Grace period po ekstenziji vidite u cjenovniku domena.
Hosting usluge i licence
WHMCS ne šalje komandu za obnovu hostinga i licenci
Za razliku od domena, WHMCS provisioning moduli nemaju automatsku komandu za produženje usluge. Zato hosting usluge i licence imaju drugačiji tok obnove — opisan niže.
Ako je automatska obnova uključena, hosting usluga ili licenca se produžava određeni broj dana nakon isteka, pod uslovom da joj u međuvremenu niste promijenili stanje u suspendirano ili otkazano. Zadana vrijednost je dva dana; tačan rok za vaš nalog vidite u reseller panelu pod Postavke, a vraća ga i my_profile.php u poljima hosting_grace i licence_grace.
Taj rok je namjerno ostavljen kao vaš prostor: WHMCS ne javlja da uslugu treba produžiti, ali javlja kada je treba suspendovati ili terminirati. Ako vaš klijent ne plati i vi uslugu suspendujete ili otkažete, obnova se ne izvršava i kredit vam se ne skida. Ako ništa ne poduzmete, sistem to razumije kao potvrdu da usluga treba raditi dalje i produžava je.
| Stanje usluge nakon isteka | Rezultat |
| Nepromijenjeno | Obnova se izvršava, kredit se skida |
| Suspendirano | Obnova se ne izvršava |
| Otkazano | Obnova se ne izvršava |
Ručna obnova je uvijek moguća
Nezavisno od automatske obnove, uslugu ili licencu možete produžiti u bilo kojem trenutku — pozivom
renew_hosting.php odnosno
renew_license.php, ili klikom na
Obnovi u WHMCS modulu i reseller panelu.
Rok za obnovu nakon isteka
Rok se podešava po nalogu i odvojen je za hosting i licence; zadana vrijednost je dva dana. Kada rok prođe, obnova više nije moguća i za ponovnu aktivaciju je potrebno kontaktirati podršku.
Moje domene #
Lista vaših domena. Parametri: ?limit=50&offset=0 (opcionalno). Vraća za svaku domenu: uuid, naziv, status, cijenu, datume i broj narudžbe — uuid odavde koristite za produženje, EPP, nameservere i kontakte.
| Status domene | Značenje |
1 | Na čekanju |
3 | Aktivna |
4 | Neuspjela |
5 | Istekla |
Moji dokumenti #
Zadnji predračuni i računi. Parametar: ?limit=10 (1–50, default 10). Svaki dokument sadrži uuid, broj, datume, iznos, valutu i status. Status predračuna: 0 = nije plaćen, 1 = plaćen.
Moj profil #
Vraća vaše profil podatke u registrant formatu — spremno za opciju "registruj na moje podatke" pri narudžbi domene.
Kredit #
Trenutno stanje vašeg kredita: { kredit: { iznos, valuta, broj_avansnog_racuna, datum } }. Bez aktivnog avansa iznos je 0.00.
Postavke #
GET vraća { postavke: { auto_aktivacija: 0|1 } }. POST { "auto_aktivacija": 0|1 } mijenja postavku i vraća novo stanje. Auto-aktivacija znači da se usluge aktiviraju automatski nakon plaćanja.
Registrant podaci #
Objekat registrant koji se šalje pri registraciji i transferu domene:
| Polje | Obavezan | Opis |
pravno_lice | DA | 0 = fizičko lice, 1 = pravno lice (firma) |
ime, prezime | DA | Ime i prezime registranta / kontakt osobe |
naziv_firme | NE* | Naziv firme — za pravna lica |
id_broj | NE* | ID broj — za pravna lica |
pdv_broj | NE | PDV broj — za PDV obveznike |
adresa, grad, postanski_broj | DA | Adresa registranta |
drzava | DA | ISO-2 kod države (npr. BA, HR, DE) |
email, telefon | DA | Kontakt registranta (telefon u međunarodnom formatu) |
Polja za pravna lica
Za pravno_lice: 1 obavezno pošaljite i naziv_firme i id_broj. Nepotpuni podaci vraćaju poslovnu grešku sa opisom polja koje nedostaje.
Ciklusi naplate #
Polje cycle pri narudžbi hostinga prima jednu od sljedećih vrijednosti (string):
| Vrijednost | Period | Broj mjeseci |
mjesecna | Mjesečno | 1 |
kvartalna | Kvartalno | 3 |
polugodisnja | Polugodišnje | 6 |
godisnja | Godišnje | 12 |
dvogodisnja | Dvogodišnje | 24 |
trogodisnja | Trogodišnje | 36 |
cetverogodisnja | Četverogodišnje | 48 |
petogodisnja | Petogodišnje | 60 |
Dostupnost po paketu
Koje cikluse konkretni paket nudi vidite u
cijene objektu tog paketa u
ponudi hostinga. Ciklus kojeg nema u ponudi paketa se ne može naručiti.
Domene
Domene ne koriste cikluse — period se šalje kao broj godina u polju
period: registracija
1–
5 godina (dostupnost po ekstenziji iz
registracijski_periodi u
cjenovniku), transfer trenutno
1 godina.
Licence
Licence se zakupljuju i obnavljaju isključivo mjesečno. Polje cycle pri narudžbi licence prima samo vrijednost monthly — duži ciklusi ne postoje i vraćaju 400.