{"id":27262,"date":"2025-09-02T15:57:35","date_gmt":"2025-09-02T15:57:35","guid":{"rendered":"https:\/\/easysolar.app\/?page_id=27262"},"modified":"2026-07-15T09:39:01","modified_gmt":"2026-07-15T09:39:01","slug":"api-i-webhooks","status":"publish","type":"page","link":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/","title":{"rendered":"API dokumentacija"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"27262\" class=\"elementor elementor-27262 elementor-24868\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5816aaaf e-flex e-con-boxed e-con e-parent\" data-id=\"5816aaaf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-553e351 e-con-full e-flex e-con e-child\" data-id=\"553e351\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3f5115d elementor-widget elementor-widget-html\" data-id=\"3f5115d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  .es-api-docs { font-family: inherit; color: inherit; }\n  .es-api-docs h1 { font-size: 2em; font-weight: 700; margin: 0 0 0.5em; }\n  .es-api-docs h2 { font-size: 1.6em; font-weight: 700; margin: 2em 0 0.5em; padding-bottom: 0.3em; border-bottom: 2px solid #e5e7eb; }\n  .es-api-docs h3 { font-size: 1.25em; font-weight: 600; margin: 1.75em 0 0.4em; }\n  .es-api-docs h4 { font-size: 1.05em; font-weight: 600; margin: 1.25em 0 0.3em; }\n  .es-api-docs p { margin: 0.5em 0 1em; line-height: 1.7; }\n  .es-api-docs pre {\n    background: #1e1e2e;\n    color: #cdd6f4;\n    padding: 1em 1.25em;\n    border-radius: 6px;\n    overflow-x: auto;\n    font-size: 0.875em;\n    line-height: 1.6;\n    margin: 0.75em 0 1.25em;\n  }\n  .es-api-docs code {\n    background: #f3f4f6;\n    color: #1f2937;\n    padding: 0.15em 0.4em;\n    border-radius: 4px;\n    font-size: 0.875em;\n    font-family: monospace;\n  }\n  .es-api-docs pre code {\n    background: none;\n    color: inherit;\n    padding: 0;\n    font-size: inherit;\n    border-radius: 0;\n  }\n  .es-api-docs table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 1em 0 1.5em;\n    font-size: 0.9em;\n  }\n  .es-api-docs th {\n    background: #f9fafb;\n    text-align: left;\n    padding: 0.6em 0.9em;\n    border: 1px solid #e5e7eb;\n    font-weight: 600;\n  }\n  .es-api-docs td {\n    padding: 0.55em 0.9em;\n    border: 1px solid #e5e7eb;\n    vertical-align: top;\n  }\n  .es-api-docs tr:nth-child(even) td { background: #f9fafb; }\n  .es-api-docs blockquote {\n    border-left: 4px solid #f59e0b;\n    background: #fffbeb;\n    padding: 0.75em 1em;\n    margin: 1em 0;\n    border-radius: 0 6px 6px 0;\n    color: #92400e;\n  }\n  .es-api-docs blockquote p { margin: 0; }\n  .es-api-docs ol, .es-api-docs ul {\n    padding-left: 1.5em;\n    margin: 0.5em 0 1em;\n    line-height: 1.8;\n  }\n  .es-api-docs hr { border: none; border-top: 1px solid #e5e7eb; margin: 2em 0; }\n  .es-api-docs em { font-style: italic; }\n  .es-api-docs strong { font-weight: 600; }\n<\/style>\n\n<div class=\"es-api-docs\">\n<h1 id=\"external-api-documentation\">Vanjska API dokumentacija<\/h1>\n<blockquote>\n<p>Integracija putem API klju\u010da omogu\u0107uje vam pristup kalendaru, projektima, klijentima i komponentama.\nTo vam daje fleksibilnost za integraciju s va\u0161im sustavima i automatizaciju procesa.<\/p>\n<\/blockquote>\n<hr \/>\n<h2 id=\"table-of-contents\">Sadr\u017eaj<\/h2>\n<ol>\n<li><a href=\"#1-authentication\">Autentikacija<\/a><\/li>\n<li><a href=\"#2-pagination\">Paginacija<\/a><\/li>\n<li><a href=\"#3-calendar-api\">API za kalendar<\/a><\/li>\n<li><a href=\"#4-projects-api\">API za projekte<\/a><\/li>\n<li><a href=\"#5-clients-api\">API za klijente<\/a><\/li>\n<li><a href=\"#6-components-api\">API za komponente<\/a><\/li>\n<li><a href=\"#7-data-conventions\">Konvencije podataka<\/a><\/li>\n<li><a href=\"#8-filtering-behavior\">Pona\u0161anje filtriranja<\/a><\/li>\n<li><a href=\"#9-permission-model\">Model dozvola<\/a><\/li>\n<li><a href=\"#10-error-handling\">Obrada pogre\u0161aka<\/a><\/li>\n<li><a href=\"#11-integration-patterns\">Obrasci integracije<\/a><\/li>\n<li><a href=\"#12-stability--versioning\">Stabilnost &amp; verzioniranje<\/a><\/li>\n<\/ol>\n<hr \/>\n<h2 id=\"1-authentication\">1. Autentikacija<\/h2>\n<p>Svi zahtjevi moraju sadr\u017eavati API klju\u010d u zaglavlju zahtjeva.<\/p>\n<pre><code class=\"language-http\">Authorization: Api-Key &lt;raw_api_key&gt;\n<\/code><\/pre>\n<p><strong>Napomene:<\/strong>\n- API klju\u010deve kreiraju i njima upravljaju vlasnici i administratori tvrtke.\n- Svaki je klju\u010d ograni\u010den na odre\u0111ene dozvole za resurse.\n- Svi su zahtjevi automatski ograni\u010deni na tvrtku povezanu s API klju\u010dem.<\/p>\n<h3 id=\"authentication-errors\">Pogre\u0161ke autentikacije<\/h3>\n<table>\n<thead>\n<tr>\n<th>Status<\/th>\n<th>Razlog<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>401<\/code><\/td>\n<td>Nedostaje ili je API klju\u010d neispravan<\/td>\n<\/tr>\n<tr>\n<td><code>401<\/code><\/td>\n<td>Neispravno oblikovano zaglavlje autorizacije<\/td>\n<\/tr>\n<tr>\n<td><code>401<\/code><\/td>\n<td>Neaktivan API klju\u010d<\/td>\n<\/tr>\n<tr>\n<td><code>403<\/code><\/td>\n<td>Nedostaje dozvola za resurs<\/td>\n<\/tr>\n<tr>\n<td><code>402<\/code><\/td>\n<td>Tvrtka je neaktivna<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"2-pagination\">2. Paginacija<\/h2>\n<p>Krajnje to\u010dke za popis (Kalendar, projekti, klijenti) koriste <strong>limit\/offset<\/strong> paginaciju.<\/p>\n<h3 id=\"parameters\">Parametri<\/h3>\n<table>\n<thead>\n<tr>\n<th>Parametar<\/th>\n<th>Opis<\/th>\n<th>Zadano<\/th>\n<th>Maks.<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>limit<\/code><\/td>\n<td>Broj rezultata za vra\u0107anje<\/td>\n<td><code>100<\/code><\/td>\n<td><code>500<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>offset<\/code><\/td>\n<td>Pomak paginacije<\/td>\n<td><code>0<\/code><\/td>\n<td>\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"response-envelope\">Struktura odgovora<\/h3>\n<pre><code class=\"language-json\">{\n  \"count\": 123,\n  \"next\": null,\n  \"previous\": null,\n  \"results\": []\n}\n<\/code><\/pre>\n<p>Kada je <code>next<\/code> <code>null<\/code>, dosegli ste posljednju stranicu.<\/p>\n<hr \/>\n<h2 id=\"3-calendar-api\">3. API za kalendar<\/h2>\n<p>Predstavlja zakazane doga\u0111aje kao \u0161to su sastanci, pozivi i instalacije. <strong>Samo za \u010ditanje.<\/strong><\/p>\n<h3 id=\"endpoints\">Krajnje to\u010dke<\/h3>\n<pre><code>GET https:\/\/api-production.easysolar-app.com\/integrations\/calendar\/\nGET https:\/\/api-production.easysolar-app.com\/integrations\/calendar\/{id}\/\n<\/code><\/pre>\n<p><strong>Potrebna dozvola:<\/strong> <code>calendar_read<\/code><\/p>\n<h3 id=\"response-example\">Primjer odgovora<\/h3>\n<pre><code class=\"language-json\">{\n  \"id\": \"7d0f4d55-3b66-4c71-a86d-2b0ef2fca6d5\",\n  \"category\": \"meeting\",\n  \"subject\": \"Po\u010detni obilazak lokacije\",\n  \"description\": \"Raspraviti zahtjeve za instalaciju i pregled krova.\",\n  \"client\": {\n    \"id\": \"4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a\",\n    \"name\": \"Solar Corp\",\n    \"address\": \"Glavna ulica 10, Var\u0161ava\",\n    \"phone\": \"+48123456789\",\n    \"is_open\": true\n  },\n  \"participants\": [\n    {\n      \"first_name\": \"John\",\n      \"last_name\": \"Smith\",\n      \"email\": \"john.smith@example.com\"\n    }\n  ],\n  \"start_at\": \"2026-06-15T09:00:00Z\",\n  \"end_at\": \"2026-06-15T10:00:00Z\",\n  \"full_day\": false,\n  \"created_at\": \"2026-06-01T12:30:45Z\"\n}\n<\/code><\/pre>\n<h3 id=\"field-reference\">Referenca polja<\/h3>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id<\/code><\/td>\n<td>UUID<\/td>\n<td>Identifikator doga\u0111aja<\/td>\n<\/tr>\n<tr>\n<td><code>category<\/code><\/td>\n<td>string<\/td>\n<td>Kategorija doga\u0111aja (pogledajte vrijednosti u nastavku)<\/td>\n<\/tr>\n<tr>\n<td><code>subject<\/code><\/td>\n<td>string<\/td>\n<td>Naslov doga\u0111aja<\/td>\n<\/tr>\n<tr>\n<td><code>description<\/code><\/td>\n<td>string<\/td>\n<td>Dodatne napomene o doga\u0111aju<\/td>\n<\/tr>\n<tr>\n<td><code>client<\/code><\/td>\n<td>object | null<\/td>\n<td>Povezani klijent<\/td>\n<\/tr>\n<tr>\n<td><code>participants<\/code><\/td>\n<td>array<\/td>\n<td>Zaposlenici dodijeljeni doga\u0111aju<\/td>\n<\/tr>\n<tr>\n<td><code>start_at<\/code><\/td>\n<td>datetime<\/td>\n<td>Vrijeme po\u010detka doga\u0111aja (UTC)<\/td>\n<\/tr>\n<tr>\n<td><code>end_at<\/code><\/td>\n<td>datetime<\/td>\n<td>Vrijeme zavr\u0161etka doga\u0111aja (UTC)<\/td>\n<\/tr>\n<tr>\n<td><code>full_day<\/code><\/td>\n<td>boolean<\/td>\n<td>Obuhva\u0107a li doga\u0111aj cijeli dan<\/td>\n<\/tr>\n<tr>\n<td><code>created_at<\/code><\/td>\n<td>datetime<\/td>\n<td>Vremenska oznaka stvaranja doga\u0111aja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"category-values\">Vrijednosti kategorije<\/h3>\n<table>\n<thead>\n<tr>\n<th>Vrijednost<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>meeting<\/code><\/td>\n<td>Sastanak<\/td>\n<\/tr>\n<tr>\n<td><code>call<\/code><\/td>\n<td>Telefonski poziv<\/td>\n<\/tr>\n<tr>\n<td><code>installation<\/code><\/td>\n<td>Termin instalacije<\/td>\n<\/tr>\n<tr>\n<td><code>contract<\/code><\/td>\n<td>Potpisivanje ugovora<\/td>\n<\/tr>\n<tr>\n<td><code>quotation<\/code><\/td>\n<td>Prezentacija ponude<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"nested-objects\">Ugnije\u017e\u0111eni objekti<\/h3>\n<p><strong>Objekt klijenta:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id<\/code><\/td>\n<td>UUID<\/td>\n<td>Identifikator klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Naziv klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>address<\/code><\/td>\n<td>string<\/td>\n<td>Adresa klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>string<\/td>\n<td>Broj telefona klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>is_open<\/code><\/td>\n<td>boolean<\/td>\n<td>Status aktivnosti klijenta<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Objekt sudionika:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>first_name<\/code><\/td>\n<td>string<\/td>\n<td>Ime zaposlenika<\/td>\n<\/tr>\n<tr>\n<td><code>last_name<\/code><\/td>\n<td>string<\/td>\n<td>Prezime zaposlenika<\/td>\n<\/tr>\n<tr>\n<td><code>email<\/code><\/td>\n<td>string<\/td>\n<td>Adresa e-po\u0161te zaposlenika<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"filters\">Filtri<\/h3>\n<table>\n<thead>\n<tr>\n<th>Parametar<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>start_at_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj doga\u0111aje koji po\u010dinju nakon ovog vremena<\/td>\n<\/tr>\n<tr>\n<td><code>start_at_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj doga\u0111aje koji po\u010dinju prije ovog vremena<\/td>\n<\/tr>\n<tr>\n<td><code>end_at_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj doga\u0111aje koji zavr\u0161avaju nakon ovog vremena<\/td>\n<\/tr>\n<tr>\n<td><code>end_at_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj doga\u0111aje koji zavr\u0161avaju prije ovog vremena<\/td>\n<\/tr>\n<tr>\n<td><code>category<\/code><\/td>\n<td>string (multi)<\/td>\n<td>Filtriraj po kategoriji; ponovite za vi\u0161e vrijednosti<\/td>\n<\/tr>\n<tr>\n<td><code>client<\/code><\/td>\n<td>UUID<\/td>\n<td>Filtriraj prema ID-u klijenta<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Primjer:<\/strong><\/p>\n<pre><code class=\"language-http\">GET https:\/\/api-production.easysolar-app.com\/integrations\/calendar\/?start_at_after=2026-01-01T00:00:00Z&amp;category=meeting&amp;category=call\nAuthorization: Api-Key &lt;key&gt;\n<\/code><\/pre>\n<hr \/>\n<h2 id=\"4-projects-api\">4. API za projekte<\/h2>\n<p>Predstavlja zapise projekata povezane s klijentima (npr. fotonaponske instalacije). <strong>Samo za \u010ditanje.<\/strong><\/p>\n<h3 id=\"endpoints_1\">Krajnje to\u010dke<\/h3>\n<pre><code>GET https:\/\/api-production.easysolar-app.com\/integrations\/projects\/\nGET https:\/\/api-production.easysolar-app.com\/integrations\/projects\/{id}\/\n<\/code><\/pre>\n<p><strong>Potrebna dozvola:<\/strong> <code>projects_read<\/code><\/p>\n<h3 id=\"response-example_1\">Primjer odgovora<\/h3>\n<pre><code class=\"language-json\">{\n  \"id\": \"d8e22cb9-1d88-4a3d-a3fd-f954d1f23d59\",\n  \"name\": \"Fotonaponska instalacija - ured u Var\u0161avi\",\n  \"address\": \"Aleje Jerozolimskie 120, Var\u0161ava\",\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"client\": {\n    \"id\": \"4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a\",\n    \"name\": \"Solar Corp\",\n    \"address\": \"Glavna ulica 10, Var\u0161ava\",\n    \"phone\": \"+48123456789\",\n    \"is_open\": true\n  },\n  \"status\": {\n    \"name\": \"U tijeku\",\n    \"order\": 2\n  },\n  \"currency\": {\n    \"code\": \"PLN\",\n    \"name\": \"Poljski zlot\"\n  },\n  \"total_price\": \"42500.00\",\n  \"payback_period\": 8,\n  \"created\": \"2026-05-01T09:00:00Z\",\n  \"updated\": \"2026-06-01T15:30:00Z\"\n}\n<\/code><\/pre>\n<h3 id=\"field-reference_1\">Referenca polja<\/h3>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id<\/code><\/td>\n<td>UUID<\/td>\n<td>Identifikator projekta<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Naziv projekta<\/td>\n<\/tr>\n<tr>\n<td><code>address<\/code><\/td>\n<td>string<\/td>\n<td>Adresa projekta<\/td>\n<\/tr>\n<tr>\n<td><code>latitude<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Geografska \u0161irina projekta<\/td>\n<\/tr>\n<tr>\n<td><code>longitude<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Geografska du\u017eina projekta<\/td>\n<\/tr>\n<tr>\n<td><code>client<\/code><\/td>\n<td>object<\/td>\n<td>Povezani klijent (pogledajte <a href=\"#nested-objects\">Objekt klijenta<\/a>)<\/td>\n<\/tr>\n<tr>\n<td><code>status<\/code><\/td>\n<td>object<\/td>\n<td>Status projekta<\/td>\n<\/tr>\n<tr>\n<td><code>currency<\/code><\/td>\n<td>object<\/td>\n<td>Valuta koja se koristi za financijske vrijednosti<\/td>\n<\/tr>\n<tr>\n<td><code>total_price<\/code><\/td>\n<td>decimal string<\/td>\n<td>Trenuta\u010dna ukupna cijena projekta<\/td>\n<\/tr>\n<tr>\n<td><code>payback_period<\/code><\/td>\n<td>integer | null<\/td>\n<td>Procijenjeni rok povrata u godinama<\/td>\n<\/tr>\n<tr>\n<td><code>created<\/code><\/td>\n<td>datetime<\/td>\n<td>Vremenska oznaka stvaranja<\/td>\n<\/tr>\n<tr>\n<td><code>updated<\/code><\/td>\n<td>datetime<\/td>\n<td>Vremenska oznaka posljednje izmjene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote>\n<p><code>total_price<\/code> vra\u0107a se kao decimalni niz kako bi se o\u010duvala preciznost. <code>payback_period<\/code> je <code>null<\/code> ako jo\u0161 nije izra\u010dunat. <code>latitude<\/code>\/<code>longitude<\/code> su <code>null<\/code> ako lokacija nije postavljena.<\/p>\n<\/blockquote>\n<h3 id=\"nested-objects_1\">Ugnije\u017e\u0111eni objekti<\/h3>\n<p><strong>Objekt statusa:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Prikazni naziv statusa<\/td>\n<\/tr>\n<tr>\n<td><code>order<\/code><\/td>\n<td>integer<\/td>\n<td>Vrijednost redoslijeda statusa<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Objekt valute:<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>code<\/code><\/td>\n<td>string<\/td>\n<td>ISO kod valute<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Naziv valute<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"filters_1\">Filtri<\/h3>\n<table>\n<thead>\n<tr>\n<th>Parametar<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>created_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu stvaranja (donja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>created_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu stvaranja (gornja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>updated_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu izmjene (donja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>updated_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu izmjene (gornja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>client<\/code><\/td>\n<td>UUID<\/td>\n<td>Filtriraj prema ID-u klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>status<\/code><\/td>\n<td>UUID<\/td>\n<td>Filtriraj prema ID-u statusa<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Djelomi\u010dno podudaranje naziva neovisno o velikim i malim slovima<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Primjer:<\/strong><\/p>\n<pre><code class=\"language-http\">GET https:\/\/api-production.easysolar-app.com\/integrations\/projects\/?client=&lt;id&gt;&amp;name=solar\nAuthorization: Api-Key &lt;key&gt;\n<\/code><\/pre>\n<hr \/>\n<h2 id=\"5-clients-api\">5. API za klijente<\/h2>\n<p>Predstavlja klijentske entitete. Podr\u017eava operacije \u010ditanja i upisa.<\/p>\n<h3 id=\"endpoints_2\">Krajnje to\u010dke<\/h3>\n<pre><code>GET    https:\/\/api-production.easysolar-app.com\/integrations\/clients\/\nPOST   https:\/\/api-production.easysolar-app.com\/integrations\/clients\/\nGET    https:\/\/api-production.easysolar-app.com\/integrations\/clients\/{id}\/\nPATCH  https:\/\/api-production.easysolar-app.com\/integrations\/clients\/{id}\/\n<\/code><\/pre>\n<p><strong>Potrebne dozvole:<\/strong> <code>clients_read<\/code> (\u010ditanje), <code>clients_write<\/code> (upis)<\/p>\n<h3 id=\"response-example_2\">Primjer odgovora<\/h3>\n<pre><code class=\"language-json\">{\n  \"id\": \"4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a\",\n  \"name\": \"Solar Corp\",\n  \"description\": \"Komercijalni klijent zainteresiran za krovnu fotonaponsku instalaciju.\",\n  \"address\": \"Glavna ulica 10, Var\u0161ava\",\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122,\n  \"phone\": \"+48123456789\",\n  \"is_open\": true,\n  \"created\": \"2026-05-01T10:15:00Z\",\n  \"updated\": \"2026-06-01T08:45:30Z\"\n}\n<\/code><\/pre>\n<h3 id=\"field-reference_2\">Referenca polja<\/h3>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>id<\/code><\/td>\n<td>UUID<\/td>\n<td>Identifikator klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Naziv klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>description<\/code><\/td>\n<td>string<\/td>\n<td>Dodatne napomene<\/td>\n<\/tr>\n<tr>\n<td><code>address<\/code><\/td>\n<td>string<\/td>\n<td>Adresa klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>latitude<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Geografska \u0161irina klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>longitude<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Geografska du\u017eina klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>string | null<\/td>\n<td>Broj telefona klijenta<\/td>\n<\/tr>\n<tr>\n<td><code>is_open<\/code><\/td>\n<td>boolean<\/td>\n<td>Je li klijent trenuta\u010dno aktivan<\/td>\n<\/tr>\n<tr>\n<td><code>created<\/code><\/td>\n<td>datetime<\/td>\n<td>Vremenska oznaka stvaranja<\/td>\n<\/tr>\n<tr>\n<td><code>updated<\/code><\/td>\n<td>datetime<\/td>\n<td>Vremenska oznaka posljednje izmjene<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"create-client\">Kreiraj klijenta<\/h3>\n<pre><code class=\"language-http\">POST https:\/\/api-production.easysolar-app.com\/integrations\/clients\/\n<\/code><\/pre>\n<pre><code class=\"language-json\">{\n  \"name\": \"Naziv klijenta\",\n  \"description\": \"Komercijalni klijent\",\n  \"address\": \"Adresa\",\n  \"phone\": \"+48123456789\",\n  \"latitude\": 52.2297,\n  \"longitude\": 21.0122\n}\n<\/code><\/pre>\n<h3 id=\"update-client\">A\u017euriraj klijenta<\/h3>\n<pre><code class=\"language-http\">PATCH https:\/\/api-production.easysolar-app.com\/integrations\/clients\/{id}\/\n<\/code><\/pre>\n<p>Uklju\u010dite samo polja koja \u017eelite a\u017eurirati:<\/p>\n<pre><code class=\"language-json\">{\n  \"address\": \"Nova adresa 15, Var\u0161ava\",\n  \"phone\": \"+48987654321\"\n}\n<\/code><\/pre>\n<h3 id=\"coordinate-rules\">Pravila koordinata<\/h3>\n<ul>\n<li><code>latitude<\/code> i <code>longitude<\/code> uvijek moraju biti navedeni <strong>zajedno<\/strong>.<\/li>\n<li>Navo\u0111enje samo jedne koordinate rezultira pogre\u0161kom validacije.<\/li>\n<li>Ako lokacija nije postavljena, oba se polja vra\u0107aju kao <code>null<\/code>.<\/li>\n<\/ul>\n<h3 id=\"filters_2\">Filtri<\/h3>\n<table>\n<thead>\n<tr>\n<th>Parametar<\/th>\n<th>Vrsta<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>created_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu stvaranja (donja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>created_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu stvaranja (gornja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>updated_after<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu izmjene (donja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>updated_before<\/code><\/td>\n<td>datetime<\/td>\n<td>Filtriraj prema datumu izmjene (gornja granica)<\/td>\n<\/tr>\n<tr>\n<td><code>is_open<\/code><\/td>\n<td>boolean<\/td>\n<td>Filtriraj prema aktivnom statusu (<code>true<\/code> ili <code>false<\/code>)<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Djelomi\u010dno podudaranje naziva neovisno o velikim i malim slovima<\/td>\n<\/tr>\n<tr>\n<td><code>phone<\/code><\/td>\n<td>string<\/td>\n<td>Djelomi\u010dno podudaranje telefonskog broja neovisno o velikim i malim slovima<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"6-components-api\">6. API za komponente<\/h2>\n<p>Stvara komponente za kori\u0161tenje u projektima. <strong>Samo za upis.<\/strong><\/p>\n<h3 id=\"endpoint\">Krajnja to\u010dka<\/h3>\n<pre><code>POST https:\/\/api-production.easysolar-app.com\/integrations\/components\/\n<\/code><\/pre>\n<p><strong>Potrebna dozvola:<\/strong> <code>components_write<\/code><\/p>\n<h3 id=\"component-types\">Vrste komponenti<\/h3>\n<p>Podr\u017eane su tri vrste komponenti: <code>panel<\/code>, <code>inverter<\/code> i <code>other<\/code>.<\/p>\n<hr \/>\n<h4 id=\"panel\">Panel<\/h4>\n<pre><code class=\"language-json\">{\n  \"type\": \"panel\",\n  \"manufacturer_name\": \"Longi\",\n  \"name\": \"LR5-54HPH\",\n  \"net_unit_price\": \"120.00\",\n  \"nominal_power\": \"430.000\",\n  \"length\": \"1.7220\",\n  \"width\": \"1.1340\",\n  \"weight\": \"21.500\",\n  \"efficiency\": \"0.2100000\",\n  \"short_circuit_current\": \"13.52000\",\n  \"open_circuit_voltage\": \"37.85000\",\n  \"current_temperature_coefficient\": \"0.045000\",\n  \"voltage_temperature_coefficient\": \"-0.280000\",\n  \"power_temperature_coefficient\": \"-0.350000\"\n}\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Obavezno<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>type<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Mora biti <code>\"panel\"<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>manufacturer_name<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Naziv proizvo\u0111a\u010da<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Naziv modela panela<\/td>\n<\/tr>\n<tr>\n<td><code>net_unit_price<\/code><\/td>\n<td>decimal<\/td>\n<td>Ne<\/td>\n<td>Neto jedini\u010dna cijena<\/td>\n<\/tr>\n<tr>\n<td><code>nominal_power<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>Nazivna snaga (W). Mora biti izme\u0111u <strong>1.0<\/strong> i <strong>1000.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>length<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>Duljina panela (m). Mora biti izme\u0111u <strong>0.1<\/strong> i <strong>5.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>width<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>\u0160irina panela (m). Mora biti izme\u0111u <strong>0.1<\/strong> i <strong>5.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>weight<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Ne<\/td>\n<td>Masa (kg)<\/td>\n<\/tr>\n<tr>\n<td><code>efficiency<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>U\u010dinkovitost pretvorbe. Mora biti omjer izme\u0111u <strong>0<\/strong> i <strong>1<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>short_circuit_current<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>Struja kratkog spoja (A). Mora biti izme\u0111u <strong>0.00001<\/strong> i <strong>999.99999<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>open_circuit_voltage<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>Napon otvorenog kruga (V). Mora biti izme\u0111u <strong>0.00001<\/strong> i <strong>999.99999<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>current_temperature_coefficient<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Ne<\/td>\n<td>Temperaturni koeficijent struje. Ako je navedeno, mora biti izme\u0111u <strong>\u221299.999999<\/strong> i <strong>99.999999<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>voltage_temperature_coefficient<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Ne<\/td>\n<td>Temperaturni koeficijent napona<\/td>\n<\/tr>\n<tr>\n<td><code>power_temperature_coefficient<\/code><\/td>\n<td>decimal | null<\/td>\n<td>Ne<\/td>\n<td>Temperaturni koeficijent snage<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h4 id=\"inverter\">Inverter<\/h4>\n<pre><code class=\"language-json\">{\n  \"type\": \"inverter\",\n  \"manufacturer_name\": \"SMA\",\n  \"name\": \"Sunny Tripower 5.0\",\n  \"net_unit_price\": \"900.00\",\n  \"nominal_power\": \"5000.000\",\n  \"number_of_dc_inputs\": 2\n}\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Obavezno<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>type<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Mora biti <code>\"inverter\"<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>manufacturer_name<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Naziv proizvo\u0111a\u010da<\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Naziv modela invertera<\/td>\n<\/tr>\n<tr>\n<td><code>net_unit_price<\/code><\/td>\n<td>decimal<\/td>\n<td>Ne<\/td>\n<td>Neto jedini\u010dna cijena<\/td>\n<\/tr>\n<tr>\n<td><code>nominal_power<\/code><\/td>\n<td>decimal<\/td>\n<td>Da<\/td>\n<td>Nazivna snaga (W). Mora biti izme\u0111u <strong>100.0<\/strong> i <strong>100000000.0<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>number_of_dc_inputs<\/code><\/td>\n<td>integer<\/td>\n<td>Da<\/td>\n<td>Broj DC ulaza. Mora biti najmanje <strong>1<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h4 id=\"other\">Ostalo<\/h4>\n<pre><code class=\"language-json\">{\n  \"type\": \"other\",\n  \"name\": \"Monta\u017eni sustav\",\n  \"unit\": \"kom\",\n  \"net_unit_price\": \"50.00\"\n}\n<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>Polje<\/th>\n<th>Vrsta<\/th>\n<th>Obavezno<\/th>\n<th>Opis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>type<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Mora biti <code>\"other\"<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>name<\/code><\/td>\n<td>string<\/td>\n<td>Da<\/td>\n<td>Naziv komponente<\/td>\n<\/tr>\n<tr>\n<td><code>unit<\/code><\/td>\n<td>string<\/td>\n<td>Ne<\/td>\n<td>Jedinica mjere<\/td>\n<\/tr>\n<tr>\n<td><code>net_unit_price<\/code><\/td>\n<td>decimal<\/td>\n<td>Ne<\/td>\n<td>Neto jedini\u010dna cijena<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"response\">Odgovor<\/h3>\n<pre><code class=\"language-json\">{\n  \"id\": \"uuid\",\n  \"type\": \"panel | inverter | other\",\n  \"name\": \"string\"\n}\n<\/code><\/pre>\n<h3 id=\"notes\">Napomene<\/h3>\n<ul>\n<li>Proizvo\u0111a\u010di se automatski kreiraju ako ne postoje.<\/li>\n<li>Jedinstvenost proizvo\u0111a\u010da ograni\u010dena je na tvrtku.<\/li>\n<li>Sva polja specifi\u010dna za panele provjeravaju se prije stvaranja.<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"7-data-conventions\">7. Konvencije podataka<\/h2>\n<h3 id=\"ids\">ID-jevi<\/h3>\n<p>Svi identifikatori resursa su UUID nizovi, stabilni i globalno jedinstveni unutar tvrtke:<\/p>\n<pre><code>\"id\": \"550e8400-e29b-41d4-a716-446655440000\"\n<\/code><\/pre>\n<h3 id=\"timestamps\">Vremenske oznake<\/h3>\n<p>Sva datetime polja vra\u0107aju se u ISO 8601 formatu, uvijek u UTC-u:<\/p>\n<pre><code>\"created\": \"2026-06-09T12:34:56Z\"\n<\/code><\/pre>\n<h3 id=\"geolocation\">Geolokacija<\/h3>\n<p>Koordinate se odnose na klijente i projekte. Pohranjuju se kao geografska to\u010dka i vra\u0107aju kao zasebna polja:<\/p>\n<pre><code class=\"language-json\">\"latitude\": 52.2297,\n\"longitude\": 21.0122\n<\/code><\/pre>\n<h3 id=\"null-handling\">Rukovanje null vrijednostima<\/h3>\n<p>Polja koja nisu postavljena vra\u0107aju se kao <code>null<\/code> \u2014 nikada se ne izostavljaju iz odgovora.<\/p>\n<hr \/>\n<h2 id=\"8-filtering-behavior\">8. Pona\u0161anje filtriranja<\/h2>\n<h3 id=\"general-rules\">Op\u0107a pravila<\/h3>\n<ul>\n<li>Svi su filtri opcionalni osim ako nije druga\u010dije navedeno.<\/li>\n<li>Vi\u0161e filtara kombinira se logikom <strong>AND<\/strong>.<\/li>\n<li>Vrijednosti filtara s vi\u0161estrukim odabirom (npr. <code>category<\/code>) interno koriste logiku <strong>OR<\/strong>.<\/li>\n<li>Neispravne vrijednosti filtra vra\u0107aju prazne rezultate ili pogre\u0161ku validacije, ovisno o vrsti polja.<\/li>\n<\/ul>\n<h3 id=\"date-range-filters\">Filtri raspona datuma<\/h3>\n<p>Dostupno na svim krajnjim to\u010dkama:<\/p>\n<table>\n<thead>\n<tr>\n<th>Polja filtra<\/th>\n<th>Pona\u0161anje<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>created_after<\/code> \/ <code>created_before<\/code><\/td>\n<td>Raspon filtra za vremensku oznaku stvaranja<\/td>\n<\/tr>\n<tr>\n<td><code>updated_after<\/code> \/ <code>updated_before<\/code><\/td>\n<td>Raspon filtra za vremensku oznaku posljednje izmjene<\/td>\n<\/tr>\n<tr>\n<td><code>start_at_after<\/code> \/ <code>start_at_before<\/code><\/td>\n<td>Raspon filtra za vrijeme po\u010detka doga\u0111aja<\/td>\n<\/tr>\n<tr>\n<td><code>end_at_after<\/code> \/ <code>end_at_before<\/code><\/td>\n<td>Raspon filtra za vrijeme zavr\u0161etka doga\u0111aja<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"text-search-filters\">Filtri pretra\u017eivanja teksta<\/h3>\n<p>Djelomi\u010dno podudaranje neovisno o velikim i malim slovima za <code>name<\/code> i <code>phone<\/code>:<\/p>\n<pre><code>?name=solar\n<\/code><\/pre>\n<p>Podudara se s: <code>\"Solar Corp\"<\/code>, <code>\"Moj fotonaponski projekt\"<\/code>, itd.<\/p>\n<hr \/>\n<h2 id=\"9-permission-model\">9. Model dozvola<\/h2>\n<p>Dozvole API klju\u010da konfiguriraju se neovisno po resursu:<\/p>\n<table>\n<thead>\n<tr>\n<th>Resurs<\/th>\n<th>Dozvola za \u010ditanje<\/th>\n<th>Dozvola za upis<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Kalendar<\/td>\n<td><code>calendar_read<\/code><\/td>\n<td><em>(nije podr\u017eano)<\/em><\/td>\n<\/tr>\n<tr>\n<td>Projekti<\/td>\n<td><code>projects_read<\/code><\/td>\n<td><em>(nije podr\u017eano)<\/em><\/td>\n<\/tr>\n<tr>\n<td>Klijenti<\/td>\n<td><code>clients_read<\/code><\/td>\n<td><code>clients_write<\/code><\/td>\n<\/tr>\n<tr>\n<td>Komponente<\/td>\n<td><em>(nije podr\u017eano)<\/em><\/td>\n<td><code>components_write<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h2 id=\"10-error-handling\">10. Obrada pogre\u0161aka<\/h2>\n<h3 id=\"error-format\">Format pogre\u0161ke<\/h3>\n<p><strong>Op\u0107a pogre\u0161ka:<\/strong><\/p>\n<pre><code class=\"language-json\">{\n  \"detail\": \"Poruka o pogre\u0161ci\"\n}\n<\/code><\/pre>\n<p><strong>Pogre\u0161ka validacije na razini polja:<\/strong><\/p>\n<pre><code class=\"language-json\">{\n  \"field_name\": [\"Poruka o pogre\u0161ci\"]\n}\n<\/code><\/pre>\n<h3 id=\"error-reference\">Referenca pogre\u0161aka<\/h3>\n<table>\n<thead>\n<tr>\n<th>Status<\/th>\n<th>Kategorija<\/th>\n<th>Zna\u010denje<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>401<\/code><\/td>\n<td>Autentikacija<\/td>\n<td>Neispravan, nedostaju\u0107i ili neaktivan API klju\u010d; neispravno zaglavlje<\/td>\n<\/tr>\n<tr>\n<td><code>402<\/code><\/td>\n<td>Poslovanje<\/td>\n<td>Tvrtka je neaktivna<\/td>\n<\/tr>\n<tr>\n<td><code>403<\/code><\/td>\n<td>Autorizacija<\/td>\n<td>API klju\u010d nema potrebnu dozvolu za resurs<\/td>\n<\/tr>\n<tr>\n<td><code>4xx<\/code><\/td>\n<td>Validacija<\/td>\n<td>Pogre\u0161ke na razini polja vra\u0107aju se kao objekt<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3 id=\"integration-checklist\">Kontrolni popis integracije<\/h3>\n<p>Ako nai\u0111ete na pogre\u0161ke, provjerite:<\/p>\n<ol>\n<li>API klju\u010d ima ispravne dozvole za resurse.<\/li>\n<li>Ra\u010dun tvrtke je aktivan.<\/li>\n<li>Sve vrijednosti filtra (ID-jevi itd.) pripadaju istom opsegu tvrtke.<\/li>\n<\/ol>\n<hr \/>\n<h2 id=\"11-integration-patterns\">11. Obrasci integracije<\/h2>\n<h3 id=\"sync-strategy\">Strategija sinkronizacije<\/h3>\n<p>Preporu\u010deni pristup sinkronizaciji podataka:<\/p>\n<ol>\n<li>Dohvatite krajnju to\u010dku za popis (s paginacijom).<\/li>\n<li>Pohranite <code>id<\/code> kao vanjsku referencu.<\/li>\n<li>Koristite polje <code>updated<\/code> za inkrementalne sinkronizacije.<\/li>\n<\/ol>\n<h3 id=\"pagination-handling\">Rukovanje paginacijom<\/h3>\n<p>Kre\u0107ite se kroz stranice pove\u0107avaju\u0107i offset dok <code>next<\/code> ne postane <code>null<\/code>:<\/p>\n<pre><code class=\"language-http\">GET https:\/\/api-production.easysolar-app.com\/integrations\/clients\/?limit=100&amp;offset=0\nGET https:\/\/api-production.easysolar-app.com\/integrations\/clients\/?limit=100&amp;offset=100\n<\/code><\/pre>\n<h3 id=\"incremental-sync\">Inkrementalna sinkronizacija<\/h3>\n<p>Koristite filtre prema datumu za dohvat samo zapisa promijenjenih od posljednje sinkronizacije:<\/p>\n<pre><code class=\"language-http\">GET https:\/\/api-production.easysolar-app.com\/integrations\/projects\/?updated_after=2026-01-01T00:00:00Z\n<\/code><\/pre>\n<h3 id=\"filtering-best-practices\">Najbolje prakse filtriranja<\/h3>\n<ul>\n<li>Prednost dajte filtrima temeljenima na ID-jevima (<code>client<\/code>, <code>status<\/code>) umjesto tekstualnim pretra\u017eivanjima pri sinkronizacijama velikog volumena.<\/li>\n<li>Kombinirajte vi\u0161e filtara kako biste smanjili veli\u010dinu skupa rezultata.<\/li>\n<li>Izbjegavajte \u0161iroka tekstualna pretra\u017eivanja na velikim skupovima podataka.<\/li>\n<\/ul>\n<hr \/>\n<h2 id=\"12-stability-versioning\">12. Stabilnost i verzioniranje<\/h2>\n<h3 id=\"stable-guarantees\">Stabilna jamstva<\/h3>\n<p>Sljede\u0107e se ne\u0107e mijenjati bez verzionirane migracije:<\/p>\n<ul>\n<li>URL-ovi krajnjih to\u010daka<\/li>\n<li>Nazivi polja<\/li>\n<li>UUID format<\/li>\n<li>Struktura paginacije<\/li>\n<li>Shema autentikacije<\/li>\n<\/ul>\n<h3 id=\"subject-to-change-non-breaking\">Podlo\u017eno promjenama (bez naru\u0161avanja kompatibilnosti)<\/h3>\n<ul>\n<li>Opcionalni filtri (mogu se dodati novi filtri)<\/li>\n<li>Oboga\u0107ivanje odgovora (mogu se dodati nova polja)<\/li>\n<\/ul>\n<h3 id=\"versioning-policy\">Politika verzioniranja<\/h3>\n<p>Trenuta\u010dno u URL-u nije izlo\u017eena eksplicitna verzija. Promjene koje naru\u0161avaju kompatibilnost uvest \u0107e novi prostor imena krajnjih to\u010daka:<\/p>\n<pre><code>https:\/\/api-production.easysolar-app.com\/integrations\/v2\/...\n<\/code><\/pre>\n<p>Promjene koje dodaju sadr\u017eaj smatraju se promjenama bez naru\u0161avanja kompatibilnosti i mogu se objaviti bez pove\u0107anja verzije.<\/p>\n<hr \/>\n<p><em>Kraj dokumentacije<\/em><\/p>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2e6c2a6 e-flex e-con-boxed e-con e-parent\" data-id=\"2e6c2a6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4c666f5 e-con-full e-flex e-con e-child\" data-id=\"4c666f5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4aec11d e-flex e-con-boxed e-con e-parent\" data-id=\"4aec11d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f94aa89 e-con-full e-flex e-con e-child\" data-id=\"f94aa89\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-85c47c5 e-con-full animated-fast e-flex elementor-invisible e-con e-child\" data-id=\"85c47c5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInUp&quot;,&quot;animation_delay&quot;:100}\">\n\t\t<div class=\"elementor-element elementor-element-4fc3e83 e-con-full e-flex e-con e-child\" data-id=\"4fc3e83\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-26aa246 e-con-full e-flex e-con e-child\" data-id=\"26aa246\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-224995a animated-fast elementor-widget-mobile__width-inherit elementor-invisible elementor-widget elementor-widget-image\" data-id=\"224995a\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:200}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1322\" height=\"860\" src=\"https:\/\/easysolar.app\/wp-content\/uploads\/2024\/07\/Nagranie-z-ekranu-2024-07-21-o-08.22.12-3.gif\" class=\"attachment-full size-full wp-image-26938\" alt=\"Detekcija rubova krova za fotonaponske module\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d06c92 elementor-widget__width-inherit elementor-absolute elementor-widget elementor-widget-image\" data-id=\"0d06c92\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"247\" height=\"240\" src=\"https:\/\/easysolar.app\/wp-content\/uploads\/2023\/10\/ai-logo.svg\" class=\"attachment-full size-full wp-image-37945\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Dokumentacija vanjskog API-ja Integrirajte svoje sustave s EasySolar API-jem Integracija putem API klju\u010da omogu\u0107uje vam pristup kalendaru, projektima, klijentima i komponentama.To vam daje fleksibilnost za integraciju s va\u0161im sustavima i automatizaciju procesa. .es-api-docs { font-family: inherit; color: inherit; } .es-api-docs h1 { font-size: 2em; font-weight: 700; margin: 0 0 0.5em; } .es-api-docs h2 { font-size: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":24730,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-27262","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar<\/title>\n<meta name=\"description\" content=\"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/easysolar.app\/hr\/api-i-webhooks\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar\" \/>\n<meta property=\"og:description\" content=\"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/easysolar.app\/hr\/api-i-webhooks\/\" \/>\n<meta property=\"og:site_name\" content=\"EasySolar\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-15T09:39:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/easysolar.app\/wp-content\/uploads\/2025\/05\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data1\" content=\"13 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/\",\"url\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/\",\"name\":\"API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/easysolar.app\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg\",\"datePublished\":\"2025-09-02T15:57:35+00:00\",\"dateModified\":\"2026-07-15T09:39:01+00:00\",\"description\":\"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/#primaryimage\",\"url\":\"https:\\\/\\\/easysolar.app\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg\",\"contentUrl\":\"https:\\\/\\\/easysolar.app\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg\",\"width\":1536,\"height\":1024,\"caption\":\"NEC Standards: AI Tools for Solar Designers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/api-i-webhooks\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API dokumentacija\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#website\",\"url\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/\",\"name\":\"EasySolar\",\"description\":\"AI Powered Design Solar (photovoltaic) Software\",\"publisher\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#organization\",\"name\":\"EasySolar Sp. z o.o.\",\"url\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/easysolar.app\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Logo-Easysolar.png\",\"contentUrl\":\"https:\\\/\\\/easysolar.app\\\/wp-content\\\/uploads\\\/2023\\\/09\\\/Logo-Easysolar.png\",\"width\":220,\"height\":134,\"caption\":\"EasySolar Sp. z o.o.\"},\"image\":{\"@id\":\"https:\\\/\\\/easysolar.app\\\/hr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/easysolar\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@easysolarapp2920\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar","description":"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/","og_locale":"hr_HR","og_type":"article","og_title":"API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar","og_description":"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.","og_url":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/","og_site_name":"EasySolar","article_modified_time":"2026-07-15T09:39:01+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/easysolar.app\/wp-content\/uploads\/2025\/05\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Procijenjeno vrijeme \u010ditanja":"13 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/","url":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/","name":"API i webhookovi za fotonaponski softver: Integrirajte EasySolar | EasySolar","isPartOf":{"@id":"https:\/\/easysolar.app\/hr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/#primaryimage"},"image":{"@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/#primaryimage"},"thumbnailUrl":"https:\/\/easysolar.app\/wp-content\/uploads\/2025\/05\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg","datePublished":"2025-09-02T15:57:35+00:00","dateModified":"2026-07-15T09:39:01+00:00","description":"Integrirajte EasySolar sa svojim sustavima putem REST API-ja i sigurnih webhookova. API-first platforma s HMAC potpisivanjem, SSL provjerom i prilago\u0111enom PDF dokumentacijom.","breadcrumb":{"@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/easysolar.app\/hr\/api-i-webhooks\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/#primaryimage","url":"https:\/\/easysolar.app\/wp-content\/uploads\/2025\/05\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg","contentUrl":"https:\/\/easysolar.app\/wp-content\/uploads\/2025\/05\/image_517b4d754f5f43a0cafc63070a85bf49.jpeg","width":1536,"height":1024,"caption":"NEC Standards: AI Tools for Solar Designers"},{"@type":"BreadcrumbList","@id":"https:\/\/easysolar.app\/hr\/api-i-webhooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/easysolar.app\/hr\/"},{"@type":"ListItem","position":2,"name":"API dokumentacija"}]},{"@type":"WebSite","@id":"https:\/\/easysolar.app\/hr\/#website","url":"https:\/\/easysolar.app\/hr\/","name":"EasySolar","description":"AI Powered Design Solar (photovoltaic) Software","publisher":{"@id":"https:\/\/easysolar.app\/hr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/easysolar.app\/hr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":"Organization","@id":"https:\/\/easysolar.app\/hr\/#organization","name":"EasySolar Sp. z o.o.","url":"https:\/\/easysolar.app\/hr\/","logo":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/easysolar.app\/hr\/#\/schema\/logo\/image\/","url":"https:\/\/easysolar.app\/wp-content\/uploads\/2023\/09\/Logo-Easysolar.png","contentUrl":"https:\/\/easysolar.app\/wp-content\/uploads\/2023\/09\/Logo-Easysolar.png","width":220,"height":134,"caption":"EasySolar Sp. z o.o."},"image":{"@id":"https:\/\/easysolar.app\/hr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/easysolar\/","https:\/\/www.youtube.com\/@easysolarapp2920"]}]}},"_links":{"self":[{"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/pages\/27262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/comments?post=27262"}],"version-history":[{"count":0,"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/pages\/27262\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/media\/24730"}],"wp:attachment":[{"href":"https:\/\/easysolar.app\/hr\/wp-json\/wp\/v2\/media?parent=27262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}