Pregled
Ova dokumentacija pokriva BDBOX API v1: provjeru statusa, autentifikaciju, profil trenutnog korisnika, kategorije, oglase, poruke, gradove/lokacije i podatke iz modula Analize.
https://www.bijeljina.org/bdbox/api/v1
Standardizovani OpenAPI opis postojećeg API-ja dostupan je na /bdbox/api/v1/openapi.yaml.
Svi API odgovori koriste JSON format sa success, data ili error i meta.request_id.
Autentifikacija
Server integracije koriste Bearer token. Za izdavanje API tokena javite se administraciji preko stranice /bdbox/kontakt. Mobilna aplikacija koristi korisnički access token dobijen kroz login endpoint. Oba se salju kroz isti HTTP header:
Authorization: Bearer bdbox_test_xxxxxxxxx
Token se cuva bezbjedno i ne treba ga objavljivati u kodu koji je javno dostupan, logovima ili screenshot-ovima.
Token mozete provjeriti pozivom GET /api/v1/auth-test. Ako je token ispravan i ima dozvolu public:read, endpoint vraca osnovne podatke o API klijentu.
curl -i -H 'Authorization: Bearer TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/auth-test
Idempotency-Key
Idempotency-Key je nasumican jedinstven string koji klijent sam generise za jedan pokusaj upisa. Koristi se za POST akcije gdje retry ne smije napraviti duplikat: kreiranje oglasa, upload/rotaciju slika, renew oglasa i slanje poruke.
Pravila: 16-128 ASCII znakova, novi key za svaku novu akciju, isti key ponoviti samo kada ponavljate isti zahtjev nakon timeout-a ili greske mreze. Isti key i isti payload vracaju raniji rezultat; isti key sa drugim payloadom vraca 409 idempotency_conflict.
Primjeri dobrih vrijednosti:
550e8400-e29b-41d4-a716-446655440000
msg_20260625_103000_8f3a2c9d7b1e4a90
client123-01j1x8r6k8p9s2v3a4b5c6d7e8
Generisanje u JavaScript-u:
const idempotencyKey = crypto.randomUUID();
Generisanje u PHP-u:
$idempotencyKey = bin2hex(random_bytes(16));
Greške
Greške uvijek imaju success=false, stabilan error.code i meta.request_id koji treba poslati administraciji ako se problem prijavljuje.
{
"success": false,
"error": {
"code": "missing_token",
"message": "Nedostaje Bearer token."
},
"meta": {
"request_id": "req_20260617_...",
"api_version": "v1"
}
}
{
"success": false,
"error": {
"code": "validation_error",
"message": "Podaci oglasa nisu validni.",
"details": {
"fields": {
"title": "Naslov je obavezan.",
"category_id": "Kategorija nije pronadjena.",
"custom_fields.51": "Polje je obavezno."
}
}
},
"meta": {
"request_id": "req_...",
"api_version": "v1"
}
}
{
"success": false,
"error": {
"code": "idempotency_conflict",
"message": "Idempotency-Key je vec koristen za drugi zahtjev."
},
"meta": {
"request_id": "req_...",
"api_version": "v1"
}
}
{
"success": false,
"error": {
"code": "rate_limit_exceeded",
"message": "API rate limit po minuti je prekoracen."
},
"meta": {
"request_id": "req_...",
"api_version": "v1"
}
}
{
"success": false,
"error": {
"code": "phone_verification_required",
"message": "Potrebno je da verifikujete broj telefona da bi mogli slati poruke."
},
"meta": {
"request_id": "req_...",
"api_version": "v1"
}
}
Ograničenja
Osnovni rate limit se racuna po API klijentu kroz api_request_logs. Ako klijent nema posebno podesena ogranicenja, koriste se globalni default limiti.
| Limit | Default | Napomena |
|---|---|---|
| API zahtjevi po minuti | 120 |
Po API klijentu. |
| API zahtjevi po danu | 5000 |
Po API klijentu. |
| Kreiranje oglasa | 10/h |
Najviše 10 create zahtjeva po korisniku u jednom satu. |
User login dodatno koristi throttle po IP adresi, identifikatoru i njihovoj kombinaciji. Nakon previse neuspjelih pokusaja vraca 429 login_rate_limited.
API za postavljanje oglasa
Ovaj dio je namijenjen korisnicima koji zele kroz API dodavati i administrirati svoje BDBOX oglase. Za ovu vrstu integracije koristi se Bearer token vezan za korisnički nalog.
Potrebne dozvole
public:readza kategorije i lokacije,listings:read_ownza vlastite oglase,listings:writeza kreiranje, izmjenu, slike i obnovu oglasa,listings:deleteza završavanje i brisanje oglasa.
listings:auto_approve je posebna dozvola za provjerene server klijente i dodjeljuje je isključivo BDBOX administracija.
Ključna pravila
- Standardno kreiranje kroz API šalje oglas na pregled prije javnog prikaza.
- Jedan API oglas ima jednu krajnju kategoriju.
external_idje trajni ID iz sistema integratora.Idempotency-Keyse generise za svaki POST koji se moze retry-ovati.
Kompletan tok
- Korisnik se javi administraciji za izdavanje API tokena i potrebnih dozvola.
- Integracija ucita dostupne kategorije i polja:
GET /categories/{id}/custom-fields. - Integracija kreira oglas sa svojim
external_idiIdempotency-Key. - Integracija po potrebi uploaduje glavnu i galerijske slike.
- Kasnije oglas mijenja po BDBOX ID-u ili po
external_id. - Oglas se moze obnoviti, završiti ili obrisati kroz posebne endpoint-e.
Preporučeni redoslijed integracije je: polja kategorije → kreiranje oglasa → glavna slika → galerijske slike → izmjena, obnova ili brisanje po potrebi.
Kreiranje oglasa
Primjer kreira oglas koji ide na pregled prije javnog prikaza. Prije slanja treba provjeriti kategorije, lokacije i obavezna polja kategorije.
Korisnik API-ja ne moze sam poslati status=approved. Standardni API token kreira pending oglas. Provjereni server klijent kome BDBOX administracija ručno dodijeli listings:auto_approve dobija direktan approved create i zadržava approved status poslije izmjena i uploada slika.
curl -i -X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
--data @listing.json \
https://www.bijeljina.org/bdbox/api/v1/listings
<?php
$token = 'TOKEN';
$payload = [
'external_id' => 'erp-listing-1001',
'title' => 'Prodajem stan u Bijeljini',
'short_description' => 'Dvosoban stan u centru',
'description' => 'Detaljan opis oglasa',
'category_id' => 189,
'city_id' => 108401,
'price_info' => ['type' => 'fixed', 'amount' => 150000],
'contact' => ['phone' => '065 123 456'],
'custom_fields' => [
'51' => '58',
'53' => 'Novogradnja',
],
];
$ch = curl_init('https://www.bijeljina.org/bdbox/api/v1/listings');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
'Idempotency-Key: ' . bin2hex(random_bytes(16)),
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
import requests
import uuid
token = "TOKEN"
payload = {
"external_id": "erp-listing-1001",
"title": "Prodajem stan u Bijeljini",
"short_description": "Dvosoban stan u centru",
"description": "Detaljan opis oglasa",
"category_id": 189,
"city_id": 108401,
"price_info": {"type": "fixed", "amount": 150000},
"contact": {"phone": "065 123 456"},
"custom_fields": {
"51": "58",
"53": "Novogradnja"
}
}
response = requests.post(
"https://www.bijeljina.org/bdbox/api/v1/listings",
headers={
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
json=payload,
)
print(response.status_code, response.json())
| Polje | Status | Opis |
|---|---|---|
external_id |
required za server klijente | Stabilan ID oglasa u sistemu integratora. Mora ostati isti za kasnije izmjene. |
title |
required | Naslov oglasa. |
short_description |
required | Kratak opis/prikaz u listama. |
description |
optional | Detaljan tekst oglasa, do 20000 karaktera. |
category_id |
required | ID krajnje kategorije. Provjeriti kroz kategorije i polja kategorije. |
city_id |
required | ID grada iz lokacija. |
price_info |
required | type je fixed, negotiable ili no_price. Kod fixed poslati i amount. |
contact.phone |
recommended | Kontakt telefon za oglas. |
location |
optional | Adresa, poštanski broj i opcione koordinate. |
custom_fields |
zavisi od kategorije | Ključevi su ID-jevi polja iz custom_fields[].id. Vrijednosti su tekstualne kanonske vrijednosti iz allowed_values, ne ID-jevi opcija. |
custom_fields je JSON objekat. Ključevi mogu biti poslani kao stringovi, npr. "51", jer JSON objekti prirodno koriste string ključeve. Za checkbox se šalje niz tekstualnih vrijednosti, a za select, radio, number, decimal, text, url i time jedna vrijednost.
Ako je allowed_values prazan niz, vrijednost ne birate iz liste nego šaljete vrijednost odgovarajućeg tipa. Za number i decimal prihvata se JSON broj ili string, npr. "51": "58" ili "51": 58. Vrijednost se u sistemu čuva kao tekst, ali se validira kao broj.
Za select i radio šalje se tačan string iz allowed_values, npr. "Gorivo": "Dizel" u konceptu, odnosno stvarno "29": "Dizel" ako je ID polja 29. Ako se nazivi opcija u sistemu promijene, integracija treba ponovo pročitati GET /categories/{id}/custom-fields i koristiti nove kanonske vrijednosti.
{
"external_id": "erp-listing-1001",
"title": "Prodajem stan u Bijeljini",
"short_description": "Dvosoban stan u centru",
"description": "Detaljan opis oglasa sa svim bitnim informacijama.",
"category_id": 189,
"city_id": 108401,
"price_info": {
"type": "fixed",
"amount": 150000
},
"location": {
"address": "Centar",
"postal_code": "76300",
"lat": 44.7587,
"lng": 19.2144
},
"contact": {
"phone": "065 123 456",
"whatsapp_country_code": "387",
"whatsapp_area_code": "65",
"whatsapp_phone": "123456"
},
"custom_fields": {
"51": "58",
"53": "Novogradnja",
"55": "Namješteno",
"56": ["Balkon", "Lift"]
}
}
{
"success": true,
"data": {
"id": 18009,
"external_id": "erp-listing-1001",
"status": "pending",
"title": "Prodajem stan u Bijeljini",
"currency": "BAM"
},
"meta": {
"request_id": "req_...",
"api_version": "v1",
"idempotent_replay": false
}
}
Izmjena oglasa
PATCH se koristi za dozvoljena tekstualna, cjenovna, lokacijska, kontakt i dodatna polja. Kategorija, status, slug, vlasnik, slike i external_id se ne mijenjaju kroz PATCH.
curl -i -X PATCH \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: application/json' \
--data '{"price_info":{"type":"fixed","amount":155000}}' \
https://www.bijeljina.org/bdbox/api/v1/listings/by-external-id/erp-listing-1001
<?php
$token = 'TOKEN';
$externalId = rawurlencode('erp-listing-1001');
$payload = ['price_info' => ['type' => 'fixed', 'amount' => 155000]];
$ch = curl_init("https://www.bijeljina.org/bdbox/api/v1/listings/by-external-id/{$externalId}");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PATCH',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
]);
$response = curl_exec($ch);
import requests
response = requests.patch(
"https://www.bijeljina.org/bdbox/api/v1/listings/by-external-id/erp-listing-1001",
headers={"Authorization": "Bearer TOKEN"},
json={"price_info": {"type": "fixed", "amount": 155000}},
)
print(response.status_code, response.json())
{
"success": true,
"data": {
"id": 18009,
"status": "pending",
"price_info": {
"amount": 155000,
"currency": "BAM",
"type": "fixed"
}
},
"meta": {
"request_id": "req_...",
"api_version": "v1"
}
}
Slike
Slike se salju odvojeno od create zahtjeva kao multipart/form-data. Main slika i galerijske slike imaju zasebne endpoint-e. Dozvoljeni su JPEG i PNG fajlovi do 10 MiB i 40 MP.
Tačan form-key za upload je image. Ne koristiti file, picture ili naziv originalnog fajla kao ključ.
Gallery endpoint prima jednu sliku po zahtjevu. Za više galerijskih slika pošaljite više HTTP zahtjeva u petlji. Svaka slika mora imati svoj novi Idempotency-Key; isti key ponovite samo za retry iste slike i istog zahtjeva.
curl -i -X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440001' \
-F '[email protected]' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/main-image
curl -i -X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440002' \
-F '[email protected]' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/images
curl -i -X POST \
-H 'Authorization: Bearer TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440003' \
--data '{"degrees":90}' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/main-image/rotate
{
"success": true,
"data": {
"image_key": "78d439902b86060324faa5d847a125fe.jpg",
"url": "https://www.bijeljina.org/bdbox/pictures/main-pic/78/78d439902b86060324faa5d847a125fe.jpg",
"original_url": "https://www.bijeljina.org/bdbox/pictures/main-pic-original/78/78d439902b86060324faa5d847a125fe.jpg"
},
"meta": {
"request_id": "req_...",
"api_version": "v1",
"idempotent_replay": false
}
}
Upravljanje oglasom
Status akcije su odvojene od PATCH-a. Delete briše oglas iz korisničkog i javnog prikaza. Complete označava oglas kao završen. Renew obnavlja samo aktivan oglas i troši dnevni brojač besplatnih obnova.
curl -i -X POST -H 'Authorization: Bearer TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/deactivate
curl -i -X POST -H 'Authorization: Bearer TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/complete
curl -i -X POST -H 'Authorization: Bearer TOKEN' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440004' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009/renew
curl -i -X DELETE -H 'Authorization: Bearer TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/listings/18009
GET /api/v1/auth-test
Autentifikacija: Bearer token sa public:read scope-om.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/auth-test
POST /api/v1/auth/login
Autentifikacija: nije potreban Bearer token. Obavezni su Content-Type: application/json i javni X-BDBOX-Client identifikator first-party aplikacije.
Podrzava email ili korisnicko ime. Vraca access token koji traje 15 minuta i refresh token koji traje 30 dana. Raw tokeni se prikazuju samo u login odgovoru.
Nepoznat nalog, pogresna lozinka i neaktivan nalog vracaju isti 401 invalid_credentials odgovor.
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-BDBOX-Client: bdbox-mobile-test' \
--data '{"identifier":"USERNAME_OR_EMAIL","password":"PASSWORD","device":{"name":"Test device","platform":"web","id":"test-installation"}}' \
https://www.bijeljina.org/bdbox/api/v1/auth/login
POST /api/v1/auth/refresh
Autentifikacija: refresh token u JSON body-ju. Obavezni su Content-Type: application/json i isti X-BDBOX-Client koji je korišten za login.
Uspješan refresh atomski rotira access i refresh token. Stari tokeni odmah prestaju raditi. Originalni 30-dnevni refresh rok se ne produžava.
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'X-BDBOX-Client: bdbox-mobile-test' \
--data '{"refresh_token":"REFRESH_TOKEN"}' \
https://www.bijeljina.org/bdbox/api/v1/auth/refresh
POST /api/v1/auth/logout
Autentifikacija: user access Bearer token. API client server token ne može se koristiti za ovaj endpoint.
Opoziva samo trenutnu user sesiju/uređaj. Ponovljeni logout iste sesije vraća uspješan odgovor.
curl -i -X POST \
-H 'Authorization: Bearer USER_ACCESS_TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/auth/logout
GET /api/v1/me
Autentifikacija: user access Bearer token sa me:read scope-om. Standardni API client token nije dovoljan.
Vraca minimalan skup javnih polja trenutno prijavljenog korisnika: id, username, display_name, store_name i profile_image_url. Email, password hash i interna polja se ne izlažu.
curl -i -H 'Authorization: Bearer USER_ACCESS_TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/me
GET /api/v1/me/listings
Autentifikacija: Bearer token sa listings:read_own scope-om i autentifikovanim korisnikom. Podrzani su user access token i server API client vezan za korisnika.
Vraca paginiranu listu oglasa autentifikovanog vlasnika, ukljucujuci approved, pending, completed i trashed oglase. user_id se ne salje kao parametar.
Query parametri: page, per_page (maksimalno 50), status, category_id, q i sort. Statusi: approved, pending, completed, trashed. Paginacija je u meta.total, meta.page, meta.per_page i meta.total_pages.
curl -i -H 'Authorization: Bearer USER_ACCESS_TOKEN' \
'https://www.bijeljina.org/bdbox/api/v1/me/listings?per_page=20'
GET /api/v1/me/listings/{id}
Autentifikacija: isti ownership auth i listings:read_own scope.
Vraca detalj samo ako oglas pripada autentifikovanom korisniku. Nepostojeci i tudji oglas vracaju isti 404 not_found. Odgovor ne sadrzi kontakt, IP, payment, plan ili sirovi userid.
curl -i -H 'Authorization: Bearer USER_ACCESS_TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/me/listings/123
GET /api/v1/me/conversations
Autentifikacija: user access token ili server API client vezan za korisnika, sa messages:read scope-om.
Vraca paginiranu listu privatnih razgovora trenutnog korisnika. Odgovor sadrzi sagovornika, zadnju poruku, broj neprocitanih markera i ukupan broj poruka u razgovoru. Ne vraca email, telefon, IP ili sirove korisnicke redove.
Query parametri: page i per_page (maksimalno 50). Uspješan odgovor vraća paginaciju u meta.total, meta.page, meta.per_page i meta.total_pages.
curl -i -H 'Authorization: Bearer USER_OR_SERVER_TOKEN' \
'https://www.bijeljina.org/bdbox/api/v1/me/conversations?per_page=20'
GET /api/v1/me/conversations/{partner_id}/messages
Autentifikacija: user access token ili server API client vezan za korisnika, sa messages:read scope-om.
Vraca poruke razgovora samo ako je trenutni korisnik posiljalac ili primalac. Odgovor je sortiran order=desc po ID-u i koristi next_before_id za ucitavanje starijih poruka.
Query parametri: limit (maksimalno 50) i before_id.
curl -i -H 'Authorization: Bearer USER_OR_SERVER_TOKEN' \
'https://www.bijeljina.org/bdbox/api/v1/me/conversations/123/messages?limit=20'
POST /api/v1/me/conversations/{partner_id}/read
Autentifikacija: user access token ili server API client vezan za korisnika, sa messages:write scope-om.
Oznacava razgovor procitanim brisanjem unread markera iz messages_procitane. Akcija je idempotentna. Ne mijenja poruke i ne zahtijeva verifikovan telefon.
curl -i -X POST \
-H 'Authorization: Bearer USER_OR_SERVER_TOKEN' \
https://www.bijeljina.org/bdbox/api/v1/me/conversations/123/read
POST /api/v1/me/conversations/{partner_id}/messages
Autentifikacija: user access token ili server API client vezan za korisnika, sa messages:write scope-om.
Salje privatnu poruku sagovorniku. Trenutni korisnik mora imati verifikovan telefon (phone_status=1). Ako nema, endpoint vraca 403 phone_verification_required.
Obavezan header: Idempotency-Key sa 16-128 ASCII znakova. Replay istog zahtjeva vraca isti message ID bez duplikata.
Payload dozvoljava samo body i opcioni context. U ovoj fazi podrzani su context=null i context.type=listing.
{
"body": "Dobar dan, da li je oglas jos aktivan?",
"context": {
"type": "listing",
"id": 18001
}
}
curl -i -X POST \
-H 'Authorization: Bearer USER_OR_SERVER_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
--data @message.json \
https://www.bijeljina.org/bdbox/api/v1/me/conversations/123/messages
GET /api/v1/categories
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
Vraca aktivne javne BDBOX kategorije. Opcioni query parametar: parent_id.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/categories
GET /api/v1/categories/{id}
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/categories/1
GET /api/v1/categories/{id}/custom-fields
Autentifikacija: Bearer token sa public:read, listings:read ili listings:write scope-om.
Vraca aktivna globalna i kategorijska polja potrebna za formu oglasa. Kategorija mora biti aktivna leaf kategorija dostupna u web formi. Parent ili neaktivna kategorija ne moze se koristiti za unos.
id je ID polja koji se koristi kao ključ u custom_fields objektu. allowed_values sadrzi tekstualne kanonske vrijednosti koje treba poslati u create/update payload-u. Ne salju se ID-jevi opcija. Za checkbox se salje niz tekstualnih vrijednosti, a ostali tipovi koriste jednu vrijednost.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/categories/189/custom-fields
{
"success": true,
"data": {
"category": {
"id": 189,
"name": "Stanovi",
"slug": "prodaja-stanova",
"parent_id": 174,
"writable": true
},
"custom_fields": [
{
"id": 51,
"name": "Povrsina",
"type": "number",
"required": true,
"allowed_values": [],
"tooltip": "",
"order": 0
}
]
},
"meta": {
"request_id": "req_...",
"api_version": "v1",
"total": 1
}
}
Nepostojeca ili neaktivna kategorija vraca 404 not_found. Aktivna kategorija koja nije dozvoljena za unos vraca 409 category_not_writable.
GET /api/v1/listings
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
Vraca samo javno vidljive oglase: status=approved i paid=1. Odgovor koristi samo javno dozvoljena polja i ne vraca interne kolone.
Cijene oglasa se u API response-u vracaju sa valutom BAM.
Query parametri: category_id, city_id, q, price_min, price_max, sort, page, per_page. Sljedeća stranica se traži kroz query parametre, npr. ?page=2&per_page=20.
Sort vrijednosti: date_desc, date_asc, price_asc, price_desc. Maksimalni per_page je 50.
Uspješan list response vraća paginaciju u meta.total, meta.page, meta.per_page i meta.total_pages. Filteri koji su primijenjeni vraćaju se u meta.filters.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
'https://www.bijeljina.org/bdbox/api/v1/listings?per_page=5'
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
'https://www.bijeljina.org/bdbox/api/v1/listings?page=2&per_page=20'
GET /api/v1/listings/{id}
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
Vraca jedan javno vidljiv oglas po numerickom ID-u. Ako oglas nije aktivan/javan, endpoint vraca 404.
Detail response dodatno vraca description, short_description, price_info, categories, images, custom_fields i javni seller objekat.
currency i price_info.currency su uvijek BAM za oglase.
description je sirovi tekst sacuvan u oglasu, bez HTML renderovanja. Za checkbox i multiselect custom fields, value i display_value su uvijek nizovi.
Oglas bez slika ili custom fields vraca prazne nizove. Kod price_info.type=no_price, i price i price_info.amount su null.
Ne vracaju se interna polja kao userid, paid, plan, credits_uniq_id, contact_email, ip_address ili filesystem putanje slika.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/listings/123
GET /api/v1/locations/cities
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
Vraca gradove uz pripadajucu regiju/state. Odgovor koristi samo javno dozvoljena polja.
Query parametri: state_id, q, sort, page, per_page.
Sort vrijednosti: name_asc, id_asc. Maksimalni per_page je 200.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
'https://www.bijeljina.org/bdbox/api/v1/locations/cities?q=bijeljina'
GET /api/v1/locations/cities/{id}
Autentifikacija: Bearer token sa public:read ili listings:read scope-om.
Vraca jedan grad po numerickom city_id.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/locations/cities/108401
GET /api/v1/analize/series
Autentifikacija: Bearer token sa public:read ili analize:read scope-om.
Vraca aktivne serije iz modula Analize, uz oblast, lokaciju i zadnju aktivnu vrijednost. Odgovor koristi samo javno dozvoljena polja.
Query parametri: oblast_id, lokacija_id, tip_podatka, izvor, q, sort, page, per_page.
Sort vrijednosti: name_asc, id_asc, latest_desc. Maksimalni per_page je 100.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
'https://www.bijeljina.org/bdbox/api/v1/analize/series?per_page=10'
GET /api/v1/analize/series/{id}
Autentifikacija: Bearer token sa public:read ili analize:read scope-om.
Vraca jednu aktivnu seriju po numerickom ID-u. Ako serija, oblast ili lokacija nisu aktivni, endpoint vraca 404.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
https://www.bijeljina.org/bdbox/api/v1/analize/series/1
GET /api/v1/analize/series/{id}/values
Autentifikacija: Bearer token sa public:read ili analize:read scope-om.
Vraca aktivne vrijednosti za jednu seriju, sortirane po measured_at. Polje meta_json se ne vraca kroz javni API.
Query parametri: from, to, order, limit. Datumi mogu biti YYYY-MM-DD ili YYYY-MM-DD HH:MM:SS. Maksimalni limit je 2000.
curl -i -H 'Authorization: Bearer bdbox_test_xxx' \
'https://www.bijeljina.org/bdbox/api/v1/analize/series/1/values?limit=20&order=desc'
Sljedeće faze
- Prijava oglasa kroz API.
- Favoriti i dodatni korisnički podaci za mobilnu aplikaciju.
- Push notifikacije i napredniji brojači nepročitanih poruka.
- Dodatni context-i poruka za smještaj i događaje.
- OpenAPI specifikacija za automatsko generisanje klijenata i testova.