Externe API-Dokumentation

Integrieren Sie Ihre Systeme mit der EasySolar-API

Die Integration auf Basis eines API-Schlüssels gewährt Ihnen Zugriff auf Kalender, Projekte, Kunden und Komponenten.
Dadurch erhalten Sie die Flexibilität, Ihre Systeme zu integrieren und Prozesse zu automatisieren.

Externe API-Dokumentation

Die Integration auf Basis eines API-Schlüssels gewährt Ihnen Zugriff auf Kalender, Projekte, Kunden und Komponenten. Dadurch erhalten Sie die Flexibilität, Ihre Systeme zu integrieren und Prozesse zu automatisieren.


Inhaltsverzeichnis

  1. Authentifizierung
  2. Paginierung
  3. Kalender-API
  4. Projekte-API
  5. Kunden-API
  6. Komponenten-API
  7. Datenkonventionen
  8. Filterverhalten
  9. Berechtigungsmodell
  10. Fehlerbehandlung
  11. Integrationsmuster
  12. Stabilität & Versionierung

1. Authentifizierung

Alle Anfragen müssen im Request-Header einen API-Schlüssel enthalten.

Authorization: Api-Key <raw_api_key>

Hinweise: - API-Schlüssel werden von Unternehmensinhabern und Administratoren erstellt und verwaltet. - Jeder Schlüssel ist auf bestimmte Ressourcenberechtigungen beschränkt. - Alle Anfragen sind automatisch auf das dem API-Schlüssel zugeordnete Unternehmen beschränkt.

Authentifizierungsfehler

StatusGrund
401Fehlender oder ungültiger API-Schlüssel
401Fehlerhaft formatierter Authorization-Header
401Inaktiver API-Schlüssel
403Fehlende Ressourcenberechtigung
402Unternehmen inaktiv

2. Paginierung

Listen-Endpunkte (Kalender, Projekte, Kunden) verwenden eine limit/offset-Paginierung.

Parameter

ParameterBeschreibungStandardMax.
limitAnzahl der zurückzugebenden Ergebnisse100500
offsetPaginierungs-Offset0

Antwortstruktur

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

Wenn next null ist, haben Sie die letzte Seite erreicht.


3. Kalender-API

Stellt geplante Ereignisse wie Besprechungen, Anrufe und Installationstermine dar. Schreibgeschützt.

Endpunkte

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

Erforderliche Berechtigung: calendar_read

Beispielantwort

{
  "id": "7d0f4d55-3b66-4c71-a86d-2b0ef2fca6d5",
  "category": "meeting",
  "subject": "Erstbesichtigung vor Ort",
  "description": "Installationsanforderungen und Dachinspektion besprechen.",
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar GmbH",
    "address": "Hauptstraße 10, Warschau",
    "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"
}

Feldreferenz

FeldTypBeschreibung
idUUIDEreigniskennung
categorystringEreigniskategorie (siehe Werte unten)
subjectstringEreignistitel
descriptionstringZusätzliche Notizen zum Ereignis
clientobject | nullVerknüpfter Kunde
participantsarrayDem Ereignis zugewiesene Mitarbeiter
start_atdatetimeStartzeit des Ereignisses (UTC)
end_atdatetimeEndzeit des Ereignisses (UTC)
full_daybooleanOb das Ereignis den ganzen Tag umfasst
created_atdatetimeZeitstempel der Ereigniserstellung

Kategorienwerte

WertBeschreibung
meetingBesprechung
callTelefonanruf
installationInstallationstermin
contractVertragsunterzeichnung
quotationAngebotspräsentation

Verschachtelte Objekte

Kundenobjekt:

FeldTypBeschreibung
idUUIDKundenkennung
namestringKundenname
addressstringKundenadresse
phonestringTelefonnummer des Kunden
is_openbooleanAktivstatus des Kunden

Teilnehmerobjekt:

FeldTypBeschreibung
first_namestringVorname des Mitarbeiters
last_namestringNachname des Mitarbeiters
emailstringE-Mail-Adresse des Mitarbeiters

Filter

ParameterTypBeschreibung
start_at_afterdatetimeFiltert Ereignisse, die nach diesem Zeitpunkt beginnen
start_at_beforedatetimeFiltert Ereignisse, die vor diesem Zeitpunkt beginnen
end_at_afterdatetimeFiltert Ereignisse, die nach diesem Zeitpunkt enden
end_at_beforedatetimeFiltert Ereignisse, die vor diesem Zeitpunkt enden
categorystring (multi)Nach Kategorie filtern; für mehrere Werte wiederholen
clientUUIDNach Kunden-ID filtern

Beispiel:

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. Projekte-API

Stellt kundenbezogene Projektdatensätze dar (z. B. Photovoltaikanlagen). Schreibgeschützt.

Endpunkte

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

Erforderliche Berechtigung: projects_read

Beispielantwort

{
  "id": "d8e22cb9-1d88-4a3d-a3fd-f954d1f23d59",
  "name": "PV-Anlage - Büro Warschau",
  "address": "Aleje Jerozolimskie 120, Warschau",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "client": {
    "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
    "name": "Solar GmbH",
    "address": "Hauptstraße 10, Warschau",
    "phone": "+48123456789",
    "is_open": true
  },
  "status": {
    "name": "In Bearbeitung",
    "order": 2
  },
  "currency": {
    "code": "PLN",
    "name": "Polnischer Złoty"
  },
  "total_price": "42500.00",
  "payback_period": 8,
  "created": "2026-05-01T09:00:00Z",
  "updated": "2026-06-01T15:30:00Z"
}

Feldreferenz

FeldTypBeschreibung
idUUIDProjektkennung
namestringProjektname
addressstringProjektadresse
latitudedecimal | nullBreitengrad des Projekts
longitudedecimal | nullLängengrad des Projekts
clientobjectVerknüpfter Kunde (siehe Kundenobjekt)
statusobjectProjektstatus
currencyobjectFür Finanzwerte verwendete Währung
total_pricedecimal stringAktueller Gesamtpreis des Projekts
payback_periodinteger | nullGeschätzte Amortisationszeit in Jahren
createddatetimeErstellungszeitstempel
updateddatetimeZeitstempel der letzten Aktualisierung

total_price wird als Dezimal-String zurückgegeben, um die Genauigkeit zu erhalten. payback_period ist null, wenn sie noch nicht berechnet wurde. latitude/longitude sind null, wenn kein Standort gesetzt ist.

Verschachtelte Objekte

Statusobjekt:

FeldTypBeschreibung
namestringAnzeigename des Status
orderintegerSortierwert des Status

Währungsobjekt:

FeldTypBeschreibung
codestringISO-Währungscode
namestringWährungsname

Filter

ParameterTypBeschreibung
created_afterdatetimeNach Erstellungsdatum filtern (untere Grenze)
created_beforedatetimeNach Erstellungsdatum filtern (obere Grenze)
updated_afterdatetimeNach Aktualisierungsdatum filtern (untere Grenze)
updated_beforedatetimeNach Aktualisierungsdatum filtern (obere Grenze)
clientUUIDNach Kunden-ID filtern
statusUUIDNach Status-ID filtern
namestringTeilweise Übereinstimmung des Namens ohne Beachtung der Groß-/Kleinschreibung

Beispiel:

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

5. Kunden-API

Stellt Kundenentitäten dar. Unterstützt Lese- und Schreiboperationen.

Endpunkte

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

Erforderliche Berechtigungen: clients_read (Lesen), clients_write (Schreiben)

Beispielantwort

{
  "id": "4ab8e7cb-0a27-48f1-a0f6-6d6ecf5d8c6a",
  "name": "Solar GmbH",
  "description": "Gewerbekunde mit Interesse an einer PV-Dachanlage.",
  "address": "Hauptstraße 10, Warschau",
  "latitude": 52.2297,
  "longitude": 21.0122,
  "phone": "+48123456789",
  "is_open": true,
  "created": "2026-05-01T10:15:00Z",
  "updated": "2026-06-01T08:45:30Z"
}

Feldreferenz

FeldTypBeschreibung
idUUIDKundenkennung
namestringKundenname
descriptionstringZusätzliche Notizen
addressstringKundenadresse
latitudedecimal | nullBreitengrad des Kunden
longitudedecimal | nullLängengrad des Kunden
phonestring | nullTelefonnummer des Kunden
is_openbooleanOb der Kunde derzeit aktiv ist
createddatetimeErstellungszeitstempel
updateddatetimeZeitstempel der letzten Aktualisierung

Kunde anlegen

POST https://api-production.easysolar-app.com/integrations/clients/
{
  "name": "Kundenname",
  "description": "Gewerbekunde",
  "address": "Adresse",
  "phone": "+48123456789",
  "latitude": 52.2297,
  "longitude": 21.0122
}

Kunde aktualisieren

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

Fügen Sie nur die Felder ein, die Sie aktualisieren möchten:

{
  "address": "Neue Adresse 15, Warschau",
  "phone": "+48987654321"
}

Koordinatenregeln

  • latitude und longitude müssen immer zusammen angegeben werden.
  • Wenn nur eine Koordinate angegeben wird, führt dies zu einem Validierungsfehler.
  • Wenn kein Standort gesetzt ist, werden beide Felder als null zurückgegeben.

Filter

ParameterTypBeschreibung
created_afterdatetimeNach Erstellungsdatum filtern (untere Grenze)
created_beforedatetimeNach Erstellungsdatum filtern (obere Grenze)
updated_afterdatetimeNach Aktualisierungsdatum filtern (untere Grenze)
updated_beforedatetimeNach Aktualisierungsdatum filtern (obere Grenze)
is_openbooleanNach Aktivstatus filtern (true oder false)
namestringTeilweise Übereinstimmung des Namens ohne Beachtung der Groß-/Kleinschreibung
phonestringTeilweise Übereinstimmung der Telefonnummer ohne Beachtung der Groß-/Kleinschreibung

6. Komponenten-API

Erstellt Komponenten zur Verwendung in Projekten. Nur schreibend.

Endpunkt

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

Erforderliche Berechtigung: components_write

Komponententypen

Es werden drei Komponententypen unterstützt: panel, inverter und other.


PV-Modul

{
  "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"
}
FeldTypErforderlichBeschreibung
typestringJaMuss "panel" sein
manufacturer_namestringJaHerstellername
namestringJaModellname des PV-Moduls
net_unit_pricedecimalNeinNettostückpreis
nominal_powerdecimalJaNennleistung (W)
lengthdecimalJaModullänge (m)
widthdecimalJaModulbreite (m)
weightdecimal | nullNeinGewicht (kg)
efficiencydecimalJaWirkungsgrad
short_circuit_currentdecimalJaKurzschlussstrom (A)
open_circuit_voltagedecimalJaLeerlaufspannung (V)
current_temperature_coefficientdecimal | nullNeinStrom-Temperaturkoeffizient
voltage_temperature_coefficientdecimal | nullNeinSpannungs-Temperaturkoeffizient
power_temperature_coefficientdecimal | nullNeinLeistungs-Temperaturkoeffizient

Wechselrichter

{
  "type": "inverter",
  "manufacturer_name": "SMA",
  "name": "Sunny Tripower 5.0",
  "net_unit_price": "900.00",
  "nominal_power": "5000.000",
  "number_of_dc_inputs": 2
}
FeldTypErforderlichBeschreibung
typestringJaMuss "inverter" sein
manufacturer_namestringJaHerstellername
namestringJaModellname des Wechselrichters
net_unit_pricedecimalNeinNettostückpreis
nominal_powerdecimalJaNennleistung (W)
number_of_dc_inputsintegerJaAnzahl der DC-Eingänge

Sonstiges

{
  "type": "other",
  "name": "Montagesystem",
  "unit": "pcs",
  "net_unit_price": "50.00"
}
FeldTypErforderlichBeschreibung
typestringJaMuss "other" sein
namestringJaKomponentenname
unitstringNeinMaßeinheit
net_unit_pricedecimalNeinNettostückpreis

Antwort

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

Hinweise

  • Hersteller werden automatisch angelegt, wenn sie noch nicht existieren.
  • Die Eindeutigkeit der Hersteller gilt pro Unternehmen.
  • Alle modulspezifischen Felder werden vor der Erstellung validiert.

7. Datenkonventionen

IDs

Alle Ressourcenkennungen sind UUID-Strings, stabil und unternehmensweit eindeutig:

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

Zeitstempel

Alle Datums-/Zeitfelder werden im ISO-8601-Format und stets in UTC zurückgegeben:

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

Geokoordinaten

Koordinaten gelten für Kunden und Projekte. Sie werden als geografischer Punkt gespeichert und als separate Felder zurückgegeben:

"latitude": 52.2297,
"longitude": 21.0122

Umgang mit null-Werten

Nicht gesetzte Felder werden als null zurückgegeben — sie werden niemals aus der Antwort weggelassen.


8. Filterverhalten

Allgemeine Regeln

  • Alle Filter sind optional, sofern nicht anders angegeben.
  • Mehrere Filter werden mit AND-Logik kombiniert.
  • Mehrfachauswahl-Filterwerte (z. B. category) verwenden intern ODER-Logik.
  • Ungültige Filterwerte liefern je nach Feldtyp leere Ergebnisse oder einen Validierungsfehler.

Datumsbereichsfilter

In allen Endpunkten verfügbar:

FilterfelderVerhalten
created_after / created_beforeBereichsfilter für den Erstellungszeitstempel
updated_after / updated_beforeBereichsfilter für den Zeitstempel der letzten Aktualisierung
start_at_after / start_at_beforeBereichsfilter für die Startzeit des Ereignisses
end_at_after / end_at_beforeBereichsfilter für die Endzeit des Ereignisses

Textsuchfilter

Teilweise Übereinstimmung ohne Beachtung der Groß-/Kleinschreibung für name und phone:

?name=solar

Treffer: "Solar GmbH", "Mein Solarprojekt", usw.


9. Berechtigungsmodell

Die Berechtigungen für API-Schlüssel werden je Ressource separat konfiguriert:

RessourceLeseberechtigungSchreibberechtigung
Kalendercalendar_read(nicht unterstützt)
Projekteprojects_read(nicht unterstützt)
Kundenclients_readclients_write
Komponenten(nicht unterstützt)components_write

10. Fehlerbehandlung

Fehlerformat

Allgemeiner Fehler:

{
  "detail": "Fehlermeldung"
}

Validierungsfehler auf Feldebene:

{
  "field_name": ["Fehlermeldung"]
}

Fehlerreferenz

StatusKategorieBedeutung
401AuthentifizierungUngültiger, fehlender oder inaktiver API-Schlüssel; fehlerhaft formatierter Header
402GeschäftslogikDas Unternehmen ist inaktiv
403AutorisierungDem API-Schlüssel fehlt die erforderliche Ressourcenberechtigung
4xxValidierungFeldfehler werden als Objekt zurückgegeben

Integrations-Checkliste

Wenn Fehler auftreten, überprüfen Sie:

  1. Der API-Schlüssel verfügt über die richtigen Ressourcenberechtigungen.
  2. Das Unternehmenskonto ist aktiv.
  3. Alle Filterwerte (IDs usw.) gehören zum selben Unternehmenskontext.

11. Integrationsmuster

Synchronisationsstrategie

Empfohlene Vorgehensweise für die Datensynchronisierung:

  1. Rufen Sie den Listen-Endpunkt ab (mit Paginierung).
  2. Speichern Sie die id als externe Referenz.
  3. Verwenden Sie das Feld updated für inkrementelle Synchronisierungen.

Umgang mit Pagination

Blättern Sie durch die Seiten, indem Sie den offset erhöhen, bis next null ist:

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

Inkrementelle Synchronisierung

Verwenden Sie Datumsfilter, um nur Datensätze abzurufen, die sich seit Ihrer letzten Synchronisierung geändert haben:

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

Best Practices beim Filtern

  • Verwenden Sie bei Synchronisierungen mit hohem Datenvolumen bevorzugt ID-basierte Filter (client, status) statt Textsuchen.
  • Kombinieren Sie mehrere Filter, um die Ergebnismenge zu reduzieren.
  • Vermeiden Sie breit angelegte Textsuchen in großen Datensätzen.

12. Stabilität & Versionierung

Stabile Zusagen

Folgendes ändert sich nicht ohne eine versionierte Migration:

  • Endpunkt-URLs
  • Feldnamen
  • UUID-Format
  • Paginierungsstruktur
  • Authentifizierungsschema

Kann sich ändern (nicht brechend)

  • Optionale Filter (neue Filter können hinzugefügt werden)
  • Antwortanreicherung (neue Felder können hinzugefügt werden)

Versionierungsrichtlinie

In der URL ist derzeit keine explizite Version sichtbar. Inkompatible Änderungen führen zu einem neuen Endpunkt-Namespace:

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

Ergänzende Änderungen gelten als nicht brechend und können ohne Versionssprung bereitgestellt werden.


Ende der Dokumentation

Kontaktieren Sie uns

Brauchen Sie Hilfe?

support@easysolar.app

Nehmen Sie gern Kontakt mit uns auf, unser engagiertes Team beantwortet Ihre Anfragen umgehend.

Mit KI automatisch verkaufen

Erstellen Sie in 2 Minuten einen automatisierten KI-Vertriebsassistenten

Fügen Sie den KI-Generator für Photovoltaik-Angebote in Ihre bestehende Website ein. Legen Sie Ihre Preise fest, wählen Sie Ihre Produkte aus und passen Sie den Markenauftritt Ihres Unternehmens an. Ihre Kunden erhalten sofort ein Angebot, und Sie erhalten für jedes Angebot und jeden interessierten Kunden umgehend eine E-Mail-Benachrichtigung.

Roof edge detection for solar panels