Dokumentacija vanjskog API-ja

Integrirajte svoje sustave s EasySolar API-jem

Integracija putem API ključa omogućuje vam pristup kalendaru, projektima, klijentima i komponentama.
To vam daje fleksibilnost za integraciju s vašim sustavima i automatizaciju procesa.

Vanjska API dokumentacija

Integracija putem API ključa omogućuje vam pristup kalendaru, projektima, klijentima i komponentama. To vam daje fleksibilnost za integraciju s vašim sustavima i automatizaciju procesa.


Sadržaj

  1. Autentikacija
  2. Paginacija
  3. API za kalendar
  4. API za projekte
  5. API za klijente
  6. API za komponente
  7. Konvencije podataka
  8. Ponašanje filtriranja
  9. Model dozvola
  10. Obrada pogrešaka
  11. Obrasci integracije
  12. Stabilnost & verzioniranje

1. Autentikacija

Svi zahtjevi moraju sadržavati API ključ u zaglavlju zahtjeva.

Authorization: Api-Key <raw_api_key>

Napomene: - API ključeve kreiraju i njima upravljaju vlasnici i administratori tvrtke. - Svaki je ključ ograničen na određene dozvole za resurse. - Svi su zahtjevi automatski ograničeni na tvrtku povezanu s API ključem.

Pogreške autentikacije

StatusRazlog
401Nedostaje ili je API ključ neispravan
401Neispravno oblikovano zaglavlje autorizacije
401Neaktivan API ključ
403Nedostaje dozvola za resurs
402Tvrtka je neaktivna

2. Paginacija

Krajnje točke za popis (Kalendar, projekti, klijenti) koriste limit/offset paginaciju.

Parametri

ParametarOpisZadanoMaks.
limitBroj rezultata za vraćanje100500
offsetPomak paginacije0

Struktura odgovora

{
  "count": 123,
  "next": null,
  "previous": null,
  "results": []
}

Kada je next null, dosegli ste posljednju stranicu.


3. API za kalendar

Predstavlja zakazane događaje kao što su sastanci, pozivi i instalacije. Samo za čitanje.

Krajnje točke

GET https://api-production.easysolar-app.com/integrations/calendar/
GET https://api-production.easysolar-app.com/integrations/calendar/{id}/

Potrebna dozvola: calendar_read

Primjer odgovora

{
  "id": "7d0f4d55-3b66-4c71-a86d-2b0ef2fca6d5",
  "category": "meeting",
  "subject": "Početni obilazak lokacije",
  "description": "Raspraviti zahtjeve za instalaciju i pregled krova.",
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar Corp",
    "address": "Glavna ulica 10, Varšava",
    "phone": "+48123456789",
    "is_open": true
  },
  "participants": [
    {
      "first_name": "John",
      "last_name": "Smith",
      "email": "john.smith@example.com"
    }
  ],
  "start_at": "2026-06-15T09:00:00Z",
  "end_at": "2026-06-15T10:00:00Z",
  "full_day": false,
  "created_at": "2026-06-01T12:30:45Z"
}

Referenca polja

PoljeVrstaOpis
idUUIDIdentifikator događaja
categorystringKategorija događaja (pogledajte vrijednosti u nastavku)
subjectstringNaslov događaja
descriptionstringDodatne napomene o događaju
clientobject | nullPovezani klijent
participantsarrayZaposlenici dodijeljeni događaju
start_atdatetimeVrijeme početka događaja (UTC)
end_atdatetimeVrijeme završetka događaja (UTC)
full_daybooleanObuhvaća li događaj cijeli dan
created_atdatetimeVremenska oznaka stvaranja događaja

Vrijednosti kategorije

VrijednostOpis
meetingSastanak
callTelefonski poziv
installationTermin instalacije
contractPotpisivanje ugovora
quotationPrezentacija ponude

Ugniježđeni objekti

Objekt klijenta:

PoljeVrstaOpis
idUUIDIdentifikator klijenta
namestringNaziv klijenta
addressstringAdresa klijenta
phonestringBroj telefona klijenta
is_openbooleanStatus aktivnosti klijenta

Objekt sudionika:

PoljeVrstaOpis
first_namestringIme zaposlenika
last_namestringPrezime zaposlenika
emailstringAdresa e-pošte zaposlenika

Filtri

ParametarVrstaOpis
start_at_afterdatetimeFiltriraj događaje koji počinju nakon ovog vremena
start_at_beforedatetimeFiltriraj događaje koji počinju prije ovog vremena
end_at_afterdatetimeFiltriraj događaje koji završavaju nakon ovog vremena
end_at_beforedatetimeFiltriraj događaje koji završavaju prije ovog vremena
categorystring (multi)Filtriraj po kategoriji; ponovite za više vrijednosti
clientUUIDFiltriraj prema ID-u klijenta

Primjer:

GET https://api-production.easysolar-app.com/integrations/calendar/?start_at_after=2026-01-01T00:00:00Z&category=meeting&category=call
Authorization: Api-Key <key>

4. API za projekte

Predstavlja zapise projekata povezane s klijentima (npr. fotonaponske instalacije). Samo za čitanje.

Krajnje točke

GET https://api-production.easysolar-app.com/integrations/projects/
GET https://api-production.easysolar-app.com/integrations/projects/{id}/

Potrebna dozvola: projects_read

Primjer odgovora

{
  "id": "d8e22cb9-1d88-4a3d-a3fd-f954d1f23d59",
  "name": "Fotonaponska instalacija - ured u Varšavi",
  "address": "Aleje Jerozolimskie 120, Varšava",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar Corp",
    "address": "Glavna ulica 10, Varšava",
    "phone": "+48123456789",
    "is_open": true
  },
  "status": {
    "name": "U tijeku",
    "order": 2
  },
  "currency": {
    "code": "PLN",
    "name": "Poljski zlot"
  },
  "total_price": "42500.00",
  "payback_period": 8,
  "created": "2026-05-01T09:00:00Z",
  "updated": "2026-06-01T15:30:00Z"
}

Referenca polja

PoljeVrstaOpis
idUUIDIdentifikator projekta
namestringNaziv projekta
addressstringAdresa projekta
latitudedecimal | nullGeografska širina projekta
longitudedecimal | nullGeografska dužina projekta
clientobjectPovezani klijent (pogledajte Objekt klijenta)
statusobjectStatus projekta
currencyobjectValuta koja se koristi za financijske vrijednosti
total_pricedecimal stringTrenutačna ukupna cijena projekta
payback_periodinteger | nullProcijenjeni rok povrata u godinama
createddatetimeVremenska oznaka stvaranja
updateddatetimeVremenska oznaka posljednje izmjene

total_price vraća se kao decimalni niz kako bi se očuvala preciznost. payback_period je null ako još nije izračunat. latitude/longitude su null ako lokacija nije postavljena.

Ugniježđeni objekti

Objekt statusa:

PoljeVrstaOpis
namestringPrikazni naziv statusa
orderintegerVrijednost redoslijeda statusa

Objekt valute:

PoljeVrstaOpis
codestringISO kod valute
namestringNaziv valute

Filtri

ParametarVrstaOpis
created_afterdatetimeFiltriraj prema datumu stvaranja (donja granica)
created_beforedatetimeFiltriraj prema datumu stvaranja (gornja granica)
updated_afterdatetimeFiltriraj prema datumu izmjene (donja granica)
updated_beforedatetimeFiltriraj prema datumu izmjene (gornja granica)
clientUUIDFiltriraj prema ID-u klijenta
statusUUIDFiltriraj prema ID-u statusa
namestringDjelomično podudaranje naziva neovisno o velikim i malim slovima

Primjer:

GET https://api-production.easysolar-app.com/integrations/projects/?client=<id>&name=solar
Authorization: Api-Key <key>

5. API za klijente

Predstavlja klijentske entitete. Podržava operacije čitanja i upisa.

Krajnje točke

GET    https://api-production.easysolar-app.com/integrations/clients/
POST   https://api-production.easysolar-app.com/integrations/clients/
GET    https://api-production.easysolar-app.com/integrations/clients/{id}/
PATCH  https://api-production.easysolar-app.com/integrations/clients/{id}/

Potrebne dozvole: clients_read (čitanje), clients_write (upis)

Primjer odgovora

{
  "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
  "name": "Solar Corp",
  "description": "Komercijalni klijent zainteresiran za krovnu fotonaponsku instalaciju.",
  "address": "Glavna ulica 10, Varšava",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "phone": "+48123456789",
  "is_open": true,
  "created": "2026-05-01T10:15:00Z",
  "updated": "2026-06-01T08:45:30Z"
}

Referenca polja

PoljeVrstaOpis
idUUIDIdentifikator klijenta
namestringNaziv klijenta
descriptionstringDodatne napomene
addressstringAdresa klijenta
latitudedecimal | nullGeografska širina klijenta
longitudedecimal | nullGeografska dužina klijenta
phonestring | nullBroj telefona klijenta
is_openbooleanJe li klijent trenutačno aktivan
createddatetimeVremenska oznaka stvaranja
updateddatetimeVremenska oznaka posljednje izmjene

Kreiraj klijenta

POST https://api-production.easysolar-app.com/integrations/clients/
{
  "name": "Naziv klijenta",
  "description": "Komercijalni klijent",
  "address": "Adresa",
  "phone": "+48123456789",
  "latitude": 52.2297,
  "longitude": 21.0122
}

Ažuriraj klijenta

PATCH https://api-production.easysolar-app.com/integrations/clients/{id}/

Uključite samo polja koja želite ažurirati:

{
  "address": "Nova adresa 15, Varšava",
  "phone": "+48987654321"
}

Pravila koordinata

  • latitude i longitude uvijek moraju biti navedeni zajedno.
  • Navođenje samo jedne koordinate rezultira pogreškom validacije.
  • Ako lokacija nije postavljena, oba se polja vraćaju kao null.

Filtri

ParametarVrstaOpis
created_afterdatetimeFiltriraj prema datumu stvaranja (donja granica)
created_beforedatetimeFiltriraj prema datumu stvaranja (gornja granica)
updated_afterdatetimeFiltriraj prema datumu izmjene (donja granica)
updated_beforedatetimeFiltriraj prema datumu izmjene (gornja granica)
is_openbooleanFiltriraj prema aktivnom statusu (true ili false)
namestringDjelomično podudaranje naziva neovisno o velikim i malim slovima
phonestringDjelomično podudaranje telefonskog broja neovisno o velikim i malim slovima

6. API za komponente

Stvara komponente za korištenje u projektima. Samo za upis.

Krajnja točka

POST https://api-production.easysolar-app.com/integrations/components/

Potrebna dozvola: components_write

Vrste komponenti

Podržane su tri vrste komponenti: panel, inverter i other.


Panel

{
  "type": "panel",
  "manufacturer_name": "Longi",
  "name": "LR5-54HPH",
  "net_unit_price": "120.00",
  "nominal_power": "430.000",
  "length": "1.7220",
  "width": "1.1340",
  "weight": "21.500",
  "efficiency": "0.2100000",
  "short_circuit_current": "13.52000",
  "open_circuit_voltage": "37.85000",
  "current_temperature_coefficient": "0.045000",
  "voltage_temperature_coefficient": "-0.280000",
  "power_temperature_coefficient": "-0.350000"
}
PoljeVrstaObaveznoOpis
typestringDaMora biti "panel"
manufacturer_namestringDaNaziv proizvođača
namestringDaNaziv modela panela
net_unit_pricedecimalNeNeto jedinična cijena
nominal_powerdecimalDaNazivna snaga (W). Mora biti između 1.0 i 1000.0
lengthdecimalDaDuljina panela (m). Mora biti između 0.1 i 5.0
widthdecimalDaŠirina panela (m). Mora biti između 0.1 i 5.0
weightdecimal | nullNeMasa (kg)
efficiencydecimalDaUčinkovitost pretvorbe. Mora biti omjer između 0 i 1
short_circuit_currentdecimalDaStruja kratkog spoja (A). Mora biti između 0.00001 i 999.99999
open_circuit_voltagedecimalDaNapon otvorenog kruga (V). Mora biti između 0.00001 i 999.99999
current_temperature_coefficientdecimal | nullNeTemperaturni koeficijent struje. Ako je navedeno, mora biti između −99.999999 i 99.999999
voltage_temperature_coefficientdecimal | nullNeTemperaturni koeficijent napona
power_temperature_coefficientdecimal | nullNeTemperaturni koeficijent snage

Inverter

{
  "type": "inverter",
  "manufacturer_name": "SMA",
  "name": "Sunny Tripower 5.0",
  "net_unit_price": "900.00",
  "nominal_power": "5000.000",
  "number_of_dc_inputs": 2
}
PoljeVrstaObaveznoOpis
typestringDaMora biti "inverter"
manufacturer_namestringDaNaziv proizvođača
namestringDaNaziv modela invertera
net_unit_pricedecimalNeNeto jedinična cijena
nominal_powerdecimalDaNazivna snaga (W). Mora biti između 100.0 i 100000000.0
number_of_dc_inputsintegerDaBroj DC ulaza. Mora biti najmanje 1

Ostalo

{
  "type": "other",
  "name": "Montažni sustav",
  "unit": "kom",
  "net_unit_price": "50.00"
}
PoljeVrstaObaveznoOpis
typestringDaMora biti "other"
namestringDaNaziv komponente
unitstringNeJedinica mjere
net_unit_pricedecimalNeNeto jedinična cijena

Odgovor

{
  "id": "uuid",
  "type": "panel | inverter | other",
  "name": "string"
}

Napomene

  • Proizvođači se automatski kreiraju ako ne postoje.
  • Jedinstvenost proizvođača ograničena je na tvrtku.
  • Sva polja specifična za panele provjeravaju se prije stvaranja.

7. Konvencije podataka

ID-jevi

Svi identifikatori resursa su UUID nizovi, stabilni i globalno jedinstveni unutar tvrtke:

"id": "550e8400-e29b-41d4-a716-446655440000"

Vremenske oznake

Sva datetime polja vraćaju se u ISO 8601 formatu, uvijek u UTC-u:

"created": "2026-06-09T12:34:56Z"

Geolokacija

Koordinate se odnose na klijente i projekte. Pohranjuju se kao geografska točka i vraćaju kao zasebna polja:

"latitude": 52.2297,
"longitude": 21.0122

Rukovanje null vrijednostima

Polja koja nisu postavljena vraćaju se kao null — nikada se ne izostavljaju iz odgovora.


8. Ponašanje filtriranja

Opća pravila

  • Svi su filtri opcionalni osim ako nije drugačije navedeno.
  • Više filtara kombinira se logikom AND.
  • Vrijednosti filtara s višestrukim odabirom (npr. category) interno koriste logiku OR.
  • Neispravne vrijednosti filtra vraćaju prazne rezultate ili pogrešku validacije, ovisno o vrsti polja.

Filtri raspona datuma

Dostupno na svim krajnjim točkama:

Polja filtraPonašanje
created_after / created_beforeRaspon filtra za vremensku oznaku stvaranja
updated_after / updated_beforeRaspon filtra za vremensku oznaku posljednje izmjene
start_at_after / start_at_beforeRaspon filtra za vrijeme početka događaja
end_at_after / end_at_beforeRaspon filtra za vrijeme završetka događaja

Filtri pretraživanja teksta

Djelomično podudaranje neovisno o velikim i malim slovima za name i phone:

?name=solar

Podudara se s: "Solar Corp", "Moj fotonaponski projekt", itd.


9. Model dozvola

Dozvole API ključa konfiguriraju se neovisno po resursu:

ResursDozvola za čitanjeDozvola za upis
Kalendarcalendar_read(nije podržano)
Projektiprojects_read(nije podržano)
Klijenticlients_readclients_write
Komponente(nije podržano)components_write

10. Obrada pogrešaka

Format pogreške

Opća pogreška:

{
  "detail": "Poruka o pogrešci"
}

Pogreška validacije na razini polja:

{
  "field_name": ["Poruka o pogrešci"]
}

Referenca pogrešaka

StatusKategorijaZnačenje
401AutentikacijaNeispravan, nedostajući ili neaktivan API ključ; neispravno zaglavlje
402PoslovanjeTvrtka je neaktivna
403AutorizacijaAPI ključ nema potrebnu dozvolu za resurs
4xxValidacijaPogreške na razini polja vraćaju se kao objekt

Kontrolni popis integracije

Ako naiđete na pogreške, provjerite:

  1. API ključ ima ispravne dozvole za resurse.
  2. Račun tvrtke je aktivan.
  3. Sve vrijednosti filtra (ID-jevi itd.) pripadaju istom opsegu tvrtke.

11. Obrasci integracije

Strategija sinkronizacije

Preporučeni pristup sinkronizaciji podataka:

  1. Dohvatite krajnju točku za popis (s paginacijom).
  2. Pohranite id kao vanjsku referencu.
  3. Koristite polje updated za inkrementalne sinkronizacije.

Rukovanje paginacijom

Krećite se kroz stranice povećavajući offset dok next ne postane null:

GET https://api-production.easysolar-app.com/integrations/clients/?limit=100&offset=0
GET https://api-production.easysolar-app.com/integrations/clients/?limit=100&offset=100

Inkrementalna sinkronizacija

Koristite filtre prema datumu za dohvat samo zapisa promijenjenih od posljednje sinkronizacije:

GET https://api-production.easysolar-app.com/integrations/projects/?updated_after=2026-01-01T00:00:00Z

Najbolje prakse filtriranja

  • Prednost dajte filtrima temeljenima na ID-jevima (client, status) umjesto tekstualnim pretraživanjima pri sinkronizacijama velikog volumena.
  • Kombinirajte više filtara kako biste smanjili veličinu skupa rezultata.
  • Izbjegavajte široka tekstualna pretraživanja na velikim skupovima podataka.

12. Stabilnost i verzioniranje

Stabilna jamstva

Sljedeće se neće mijenjati bez verzionirane migracije:

  • URL-ovi krajnjih točaka
  • Nazivi polja
  • UUID format
  • Struktura paginacije
  • Shema autentikacije

Podložno promjenama (bez narušavanja kompatibilnosti)

  • Opcionalni filtri (mogu se dodati novi filtri)
  • Obogaćivanje odgovora (mogu se dodati nova polja)

Politika verzioniranja

Trenutačno u URL-u nije izložena eksplicitna verzija. Promjene koje narušavaju kompatibilnost uvest će novi prostor imena krajnjih točaka:

https://api-production.easysolar-app.com/integrations/v2/...

Promjene koje dodaju sadržaj smatraju se promjenama bez narušavanja kompatibilnosti i mogu se objaviti bez povećanja verzije.


Kraj dokumentacije

Kontaktirajte nas

Trebate pomoć?

support@easysolar.app

Slobodno nam se obratite i naš će vam posvećeni tim brzo odgovoriti na upite.

Prodajte automatski uz AI

Izradite automatiziranog AI prodajnog asistenta za 2 minute

Dodajte AI generator ponuda za fotonaponske sustave na svoju postojeću web-stranicu. Postavite cijene, odaberite proizvode i prilagodite vizualni identitet svoje tvrtke. Vaši će kupci odmah dobiti ponudu, a vi ćete za svaku ponudu i zainteresiranog klijenta odmah dobiti obavijest e-poštom.

Roof edge detection for solar panels