Zewnętrzna dokumentacja API

Zintegruj swoje systemy z API EasySolar

Integracja oparta na kluczu API daje Ci dostęp do Kalendarza, Projektów, Klientów i Komponentów.
Dzięki temu możesz elastycznie integrować się ze swoimi systemami i automatyzować procesy.

Zewnętrzna dokumentacja API

Integracja oparta na kluczu API daje Ci dostęp do Kalendarza, Projektów, Klientów i Komponentów. Dzięki temu możesz elastycznie integrować się ze swoimi systemami i automatyzować procesy.


Spis treści

  1. Uwierzytelnianie
  2. Paginacja
  3. API kalendarza
  4. API projektów
  5. API klientów
  6. API komponentów
  7. Konwencje danych
  8. Zachowanie filtrowania
  9. Model uprawnień
  10. Obsługa błędów
  11. Wzorce integracji
  12. Stabilność i wersjonowanie

1. Uwierzytelnianie

Wszystkie żądania muszą zawierać klucz API w nagłówku żądania.

Authorization: Api-Key <raw_api_key>

Uwagi: - Klucze API są tworzone i zarządzane przez właścicieli firmy oraz administratorów. - Każdy klucz ma zakres ograniczony do określonych uprawnień zasobów. - Wszystkie żądania są automatycznie przypisane do firmy powiązanej z kluczem API.

Błędy uwierzytelniania

StatusPowód
401Brak klucza API lub jest nieprawidłowy
401Nieprawidłowy nagłówek autoryzacji
401Nieaktywny klucz API
403Brak wymaganego uprawnienia do zasobu
402Firma nieaktywna

2. Paginacja

Punkty końcowe listy (Kalendarz, Projekty, Klienci) korzystają z paginacji limit/offset.

Parametry

ParametrOpisDomyślnieMaks.
limitLiczba wyników do zwrócenia100500
offsetPrzesunięcie paginacji0

Struktura odpowiedzi

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

Gdy next ma wartość null, dotarłeś do ostatniej strony.


3. API kalendarza

Reprezentuje zaplanowane wydarzenia, takie jak spotkania, rozmowy telefoniczne i wizyty montażowe. Tylko do odczytu.

Punkty końcowe

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

Wymagane uprawnienie: calendar_read

Przykład odpowiedzi

{
  "id": "7d0f4d55-3b66-4c71-a86d-2b0ef2fca6d5",
  "category": "meeting",
  "subject": "Wstępna wizyta na miejscu",
  "description": "Omówienie wymagań dotyczących instalacji i inspekcja dachu.",
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar Corp",
    "address": "ul. Główna 10, Warszawa",
    "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"
}

Opis pól

PoleTypOpis
idUUIDIdentyfikator wydarzenia
categorystringKategoria wydarzenia (zobacz wartości poniżej)
subjectstringTytuł wydarzenia
descriptionstringDodatkowe uwagi dotyczące wydarzenia
clientobject | nullPowiązany klient
participantsarrayPracownicy przypisani do wydarzenia
start_atdatetimeCzas rozpoczęcia wydarzenia (UTC)
end_atdatetimeCzas zakończenia wydarzenia (UTC)
full_daybooleanCzy wydarzenie trwa cały dzień
created_atdatetimeSygnatura czasowa utworzenia wydarzenia

Wartości kategorii

WartośćOpis
meetingSpotkanie
callRozmowa telefoniczna
installationWizyta montażowa
contractPodpisanie umowy
quotationPrezentacja oferty

Zagnieżdżone obiekty

Obiekt klienta:

PoleTypOpis
idUUIDIdentyfikator klienta
namestringNazwa klienta
addressstringAdres klienta
phonestringNumer telefonu klienta
is_openbooleanStatus aktywności klienta

Obiekt uczestnika:

PoleTypOpis
first_namestringImię pracownika
last_namestringNazwisko pracownika
emailstringAdres e-mail pracownika

Filtry

ParametrTypOpis
start_at_afterdatetimeFiltruj wydarzenia rozpoczynające się po tym czasie
start_at_beforedatetimeFiltruj wydarzenia rozpoczynające się przed tym czasem
end_at_afterdatetimeFiltruj wydarzenia kończące się po tym czasie
end_at_beforedatetimeFiltruj wydarzenia kończące się przed tym czasem
categorystring (wielowartościowy)Filtruj według kategorii; powtórz dla wielu wartości
clientUUIDFiltruj według identyfikatora klienta

Przykład:

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 projektów

Reprezentuje rekordy projektów powiązanych z klientami (np. instalacje fotowoltaiczne). Tylko do odczytu.

Punkty końcowe

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

Wymagane uprawnienie: projects_read

Przykład odpowiedzi

{
  "id": "d8e22cb9-1d88-4a3d-a3fd-f954d1f23d59",
  "name": "Instalacja fotowoltaiczna - biuro w Warszawie",
  "address": "Aleje Jerozolimskie 120, Warszawa",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar Corp",
    "address": "ul. Główna 10, Warszawa",
    "phone": "+48123456789",
    "is_open": true
  },
  "status": {
    "name": "W trakcie realizacji",
    "order": 2
  },
  "currency": {
    "code": "PLN",
    "name": "Złoty polski"
  },
  "total_price": "42500.00",
  "payback_period": 8,
  "created": "2026-05-01T09:00:00Z",
  "updated": "2026-06-01T15:30:00Z"
}

Opis pól

PoleTypOpis
idUUIDIdentyfikator projektu
namestringNazwa projektu
addressstringAdres projektu
latitudedecimal | nullSzerokość geograficzna projektu
longitudedecimal | nullDługość geograficzna projektu
clientobjectPowiązany klient (zobacz Obiekt klienta)
statusobjectStatus projektu
currencyobjectWaluta używana dla wartości finansowych
total_pricedecimal stringAktualna łączna cena projektu
payback_periodinteger | nullSzacowany okres zwrotu w latach
createddatetimeSygnatura czasowa utworzenia
updateddatetimeSygnatura czasowa ostatniej aktualizacji

total_price jest zwracane jako ciąg dziesiętny, aby zachować precyzję. payback_period ma wartość null, jeśli nie został jeszcze obliczony. latitude/longitude mają wartość null, jeśli nie ustawiono lokalizacji.

Zagnieżdżone obiekty

Obiekt statusu:

PoleTypOpis
namestringWyświetlana nazwa statusu
orderintegerWartość kolejności statusu

Obiekt waluty:

PoleTypOpis
codestringKod waluty ISO
namestringNazwa waluty

Filtry

ParametrTypOpis
created_afterdatetimeFiltruj według daty utworzenia (dolna granica)
created_beforedatetimeFiltruj według daty utworzenia (górna granica)
updated_afterdatetimeFiltruj według daty aktualizacji (dolna granica)
updated_beforedatetimeFiltruj według daty aktualizacji (górna granica)
clientUUIDFiltruj według identyfikatora klienta
statusUUIDFiltruj według identyfikatora statusu
namestringCzęściowe dopasowanie nazwy bez rozróżniania wielkości liter

Przykład:

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

5. API klientów

Reprezentuje encje klientów. Obsługuje operacje odczytu i zapisu.

Punkty końcowe

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}/

Wymagane uprawnienia: clients_read (odczyt), clients_write (zapis)

Przykład odpowiedzi

{
  "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
  "name": "Solar Corp",
  "description": "Klient komercyjny zainteresowany instalacją fotowoltaiczną na dachu.",
  "address": "ul. Główna 10, Warszawa",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "phone": "+48123456789",
  "is_open": true,
  "created": "2026-05-01T10:15:00Z",
  "updated": "2026-06-01T08:45:30Z"
}

Opis pól

PoleTypOpis
idUUIDIdentyfikator klienta
namestringNazwa klienta
descriptionstringDodatkowe uwagi
addressstringAdres klienta
latitudedecimal | nullSzerokość geograficzna klienta
longitudedecimal | nullDługość geograficzna klienta
phonestring | nullNumer telefonu klienta
is_openbooleanCzy klient jest obecnie aktywny
createddatetimeSygnatura czasowa utworzenia
updateddatetimeSygnatura czasowa ostatniej aktualizacji

Utwórz klienta

POST https://api-production.easysolar-app.com/integrations/clients/
{
  "name": "Nazwa klienta",
  "description": "Klient komercyjny",
  "address": "Adres",
  "phone": "+48123456789",
  "latitude": 52.2297,
  "longitude": 21.0122
}

Aktualizuj klienta

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

Uwzględnij tylko pola, które chcesz zaktualizować:

{
  "address": "Nowy adres 15, Warszawa",
  "phone": "+48987654321"
}

Zasady dotyczące współrzędnych

  • latitude i longitude muszą być zawsze podawane razem.
  • Podanie tylko jednej współrzędnej powoduje błąd walidacji.
  • Jeśli nie ustawiono lokalizacji, oba pola są zwracane jako null.

Filtry

ParametrTypOpis
created_afterdatetimeFiltruj według daty utworzenia (dolna granica)
created_beforedatetimeFiltruj według daty utworzenia (górna granica)
updated_afterdatetimeFiltruj według daty aktualizacji (dolna granica)
updated_beforedatetimeFiltruj według daty aktualizacji (górna granica)
is_openbooleanFiltruj według statusu aktywności (true lub false)
namestringCzęściowe dopasowanie nazwy bez rozróżniania wielkości liter
phonestringCzęściowe dopasowanie numeru telefonu bez rozróżniania wielkości liter

6. API komponentów

Tworzy komponenty do użycia w projektach. Tylko do zapisu.

Punkt końcowy

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

Wymagane uprawnienie: components_write

Typy komponentów

Obsługiwane są trzy typy komponentów: panel, inverter i other.


Moduł fotowoltaiczny

{
  "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"
}
PoleTypWymaganeOpis
typestringTakMusi być "panel"
manufacturer_namestringTakNazwa producenta
namestringTakNazwa modelu modułu
net_unit_pricedecimalNieCena jednostkowa netto
nominal_powerdecimalTakMoc znamionowa (W). Musi mieścić się w zakresie od 1.0 do 1000.0
lengthdecimalTakDługość modułu (m). Musi mieścić się w zakresie od 0.1 do 5.0
widthdecimalTakSzerokość modułu (m). Musi mieścić się w zakresie od 0.1 do 5.0
weightdecimal | nullNieMasa (kg)
efficiencydecimalTakSprawność konwersji. Musi być współczynnikiem z zakresu od 0 do 1
short_circuit_currentdecimalTakPrąd zwarciowy (A). Musi mieścić się w zakresie od 0.00001 do 999.99999
open_circuit_voltagedecimalTakNapięcie obwodu otwartego (V). Musi mieścić się w zakresie od 0.00001 do 999.99999
current_temperature_coefficientdecimal | nullNieWspółczynnik temperaturowy prądu. Jeśli zostanie podany, musi mieścić się w zakresie od −99.999999 do 99.999999
voltage_temperature_coefficientdecimal | nullNieWspółczynnik temperaturowy napięcia
power_temperature_coefficientdecimal | nullNieWspółczynnik temperaturowy mocy

Falownik

{
  "type": "inverter",
  "manufacturer_name": "SMA",
  "name": "Sunny Tripower 5.0",
  "net_unit_price": "900.00",
  "nominal_power": "5000.000",
  "number_of_dc_inputs": 2
}
PoleTypWymaganeOpis
typestringTakMusi być "inverter"
manufacturer_namestringTakNazwa producenta
namestringTakNazwa modelu falownika
net_unit_pricedecimalNieCena jednostkowa netto
nominal_powerdecimalTakMoc znamionowa (W). Musi mieścić się w zakresie od 100.0 do 100000000.0
number_of_dc_inputsintegerTakLiczba wejść DC. Musi wynosić co najmniej 1

Inne

{
  "type": "other",
  "name": "System montażowy",
  "unit": "pcs",
  "net_unit_price": "50.00"
}
PoleTypWymaganeOpis
typestringTakMusi być "other"
namestringTakNazwa komponentu
unitstringNieJednostka miary
net_unit_pricedecimalNieCena jednostkowa netto

Odpowiedź

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

Uwagi

  • Producenci są tworzeni automatycznie, jeśli nie istnieją.
  • Unikalność producenta jest ograniczona do firmy.
  • Wszystkie pola specyficzne dla modułów fotowoltaicznych są walidowane przed utworzeniem.

7. Konwencje danych

Identyfikatory

Wszystkie identyfikatory zasobów są ciągami UUID, stabilnymi i globalnie unikalnymi w obrębie firmy:

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

Znaczniki czasu

Wszystkie pola datetime są zwracane w formacie ISO 8601, zawsze w UTC:

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

Geolokalizacja

Współrzędne dotyczą Klientów i Projektów. Są przechowywane jako punkt geograficzny i zwracane jako osobne pola:

"latitude": 52.2297,
"longitude": 21.0122

Obsługa wartości null

Pola, które nie są ustawione, są zwracane jako null — nigdy nie są pomijane w odpowiedzi.


8. Zachowanie filtrowania

Zasady ogólne

  • Wszystkie filtry są opcjonalne, chyba że zaznaczono inaczej.
  • Wiele filtrów jest łączonych logiką AND.
  • Wartości filtrów wielokrotnego wyboru (np. category) wewnętrznie używają logiki OR.
  • Nieprawidłowe wartości filtrów zwracają puste wyniki lub błąd walidacji, w zależności od typu pola.

Filtry zakresu dat

Dostępne w różnych punktach końcowych:

Pola filtruZachowanie
created_after / created_beforeFiltr zakresu dla znacznika utworzenia
updated_after / updated_beforeFiltr zakresu dla znacznika ostatniej aktualizacji
start_at_after / start_at_beforeFiltr zakresu dla czasu rozpoczęcia wydarzenia
end_at_after / end_at_beforeFiltr zakresu dla czasu zakończenia wydarzenia

Filtry wyszukiwania tekstowego

Częściowe dopasowanie bez rozróżniania wielkości liter dla name i phone:

?name=solar

Dopasowania: "Solar Corp", "My Solar Project", itp.


9. Model uprawnień

Uprawnienia klucza API są konfigurowane niezależnie dla każdego zasobu:

ZasóbUprawnienie do odczytuUprawnienie do zapisu
Kalendarzcalendar_read(nieobsługiwane)
Projektyprojects_read(nieobsługiwane)
Klienciclients_readclients_write
Komponenty(nieobsługiwane)components_write

10. Obsługa błędów

Format błędu

Błąd ogólny:

{
  "detail": "Komunikat błędu"
}

Błąd walidacji na poziomie pola:

{
  "field_name": ["Komunikat błędu"]
}

Odwołanie do błędów

StatusKategoriaZnaczenie
401UwierzytelnianieNieprawidłowy, brakujący lub nieaktywny klucz API; nieprawidłowy nagłówek
402BiznesFirma jest nieaktywna
403AutoryzacjaKlucz API nie ma wymaganego uprawnienia do zasobu
4xxWalidacjaBłędy na poziomie pól są zwracane jako obiekt

Lista kontrolna integracji

Jeśli napotkasz błędy, sprawdź:

  1. Czy klucz API ma odpowiednie uprawnienia do zasobów.
  2. Czy konto firmy jest aktywne.
  3. Czy wszystkie wartości filtrów (identyfikatory itd.) należą do tego samego zakresu firmy.

11. Wzorce integracji

Strategia synchronizacji

Zalecane podejście do synchronizacji danych:

  1. Pobierz punkt końcowy listy (z paginacją).
  2. Zapisz id jako odwołanie zewnętrzne.
  3. Używaj pola updated do synchronizacji przyrostowej.

Obsługa paginacji

Przechodź przez strony, zwiększając offset, aż next będzie miało wartość 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

Synchronizacja przyrostowa

Używaj filtrów dat, aby pobierać tylko rekordy zmienione od ostatniej synchronizacji:

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

Najlepsze praktyki filtrowania

  • W przypadku synchronizacji o dużym wolumenie preferuj filtry oparte na identyfikatorach (client, status) zamiast wyszukiwania tekstowego.
  • Łącz wiele filtrów, aby zmniejszyć rozmiar zestawu wyników.
  • Unikaj szerokiego wyszukiwania tekstowego w dużych zbiorach danych.

12. Stabilność i wersjonowanie

Gwarancje stabilności

Poniższe elementy nie ulegną zmianie bez migracji wersjonowanej:

  • Adresy URL punktów końcowych
  • Nazwy pól
  • Format UUID
  • Struktura paginacji
  • Schemat uwierzytelniania

Mogą ulec zmianie (niełamliwe)

  • Filtry opcjonalne (mogą zostać dodane nowe filtry)
  • Rozszerzanie odpowiedzi (mogą zostać dodane nowe pola)

Polityka wersjonowania

W adresie URL obecnie nie jest udostępniona jawna wersja. Zmiany łamiące zgodność wprowadzą nową przestrzeń nazw punktów końcowych:

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

Zmiany rozszerzające są uznawane za niełamliwe i mogą być wdrażane bez zwiększania wersji.


Koniec dokumentacji

Skontaktuj się z nami

Potrzebujesz pomocy?

support@easysolar.app

Skontaktuj się z nami, a nasz dedykowany zespół szybko odpowie na Twoje zapytania.

Sprzedawaj automatycznie dzięki AI

Stwórz automatycznego sprzedawcę AI w 2 minuty

Dodaj generator ofert fotowoltaicznych oparty na AI do swojej obecnej strony internetowej. Ustal ceny, wybierz produkty i dostosuj identyfikację wizualną swojej firmy. Twoi klienci otrzymają natychmiastową ofertę, a Ty dostaniesz od razu powiadomienie e-mailowe o każdej ofercie i zainteresowanym kliencie.

Roof edge detection for solar panels