API und Integrationen (CRM, Make, n8n)
Verbinde dein CRM oder dein ERP über API-Schlüssel mit Sattotal: Kunden und Lieferanten automatisch und sicher abgleichen
Über die API von Sattotal kann ein anderes Programm — dein CRM, dein ERP, Make, n8n, Zapier oder ein eigenes Skript — Kunden und Lieferanten in deiner Organisation lesen und anlegen, ohne dass jemand eine CSV von Hand importieren muss. Gesteuert wird das über API-Schlüssel, die der Administrator unter Einstellungen → API erstellt, jeder mit eigenem Namen und mit Berechtigungen pro Ressource, und die sich jederzeit widerrufen lassen. Hier erfährst du, was die API kann, wie du einen Schlüssel erstellst, wie du die API aufrufst und wie du Schritt für Schritt einen Abgleich mit Make einrichtest.
Verbinde dein CRM und deine Automatisierungen
Jedes Tool, das eine HTTP-Anfrage senden kann (Make, n8n, Zapier, dein eigenes CRM oder ERP), kann Kunden und Lieferanten lesen, anlegen und aktualisieren.
Schlüssel mit Namen und Berechtigungen
Ein Schlüssel pro Integration und darin eine Berechtigung pro Ressource: Du kannst Lesezugriff auf Lieferanten geben, ohne Schreibzugriff auf Kunden zu geben. Bis zu 10 aktive Schlüssel pro Organisation.
Inkrementeller Abgleich
Mit dem Parameter actualizadoDesde holst du nur die Kunden oder Lieferanten ab, die sich seit dem letzten Durchlauf geändert haben: ideal für ein Szenario, das alle paar Minuten läuft.
Sicher von Grund auf
Der Schlüssel wird nur ein einziges Mal angezeigt und unumkehrbar verschlüsselt gespeichert. Jeder Schlüssel greift nur auf die Daten seiner Organisation zu und lässt sich sofort widerrufen.
Wer sie nutzen kann
Schlüssel werden von den Administratoren der Organisation erstellt und widerrufen. Die API ist in den kostenpflichtigen Tarifen (Basic, Pro und Enterprise) und während der Testphase enthalten; im kostenlosen Tarif zeigt die Seite ein Schloss mit der Option, den Tarif zu wechseln. Ein Schlüssel handelt immer im Namen der Organisation, nicht einer Person: Er erbt keine Berechtigungen eines Technikers und erscheint nicht als Benutzer im Team.
So erstellst du einen Schlüssel
Öffne Einstellungen → API
Im Seitenmenü auf Einstellungen, dann auf die Karte „API“. Du siehst die Liste der Schlüssel deiner Organisation (aktive und widerrufene) und eine Karte „So verbindest du dich“ mit der Basis-URL und einem Beispiel.
Klicke auf „Neuer Schlüssel“
Gib ihm einen Namen, an dem du die Integration erkennst („CRM des Ladens“, „Make“, „n8n“). Wenn du ihn eines Tages widerrufen musst, weißt du so, welcher es ist.
Wähle die Berechtigungen
Hake die Ressourcen an, die die Integration braucht — Kunden, Lieferanten oder beide — und wähle für jede „Nur lesen“ (abfragen) oder „Lesen und schreiben“ (abfragen, anlegen, aktualisieren und archivieren). Eine nicht angehakte Ressource ist eine Ressource, an die der Schlüssel nicht herankommt. Wähle das Minimum, das sie braucht.
Kopiere den Schlüssel und hinterlege ihn in deinem Tool
Der vollständige Schlüssel (er beginnt mit sat_) wird nur ein einziges Mal angezeigt. Kopiere ihn mit dem Button und füge ihn in Make, n8n oder deinem CRM ein. Geht er verloren, lässt er sich nicht wiederherstellen: Du widerrufst ihn und erstellst einen neuen.
Einstellungen → API: Schlüsselliste und frisch erstellter Schlüssel
CRM Make
sat_Ab3k…x9Zq
n8n
sat_Qm7t…p2Lk
Schlüssel erstellt
sat_Ab3k9Zq2Xv8Lp1Mn4Rt7Wy0Cd5Fg6Hj3Kl8Sx9ZqKopierenDu siehst den vollständigen Schlüssel nur dieses eine Mal. Wenn du ihn verlierst, widerrufe ihn und erstelle einen neuen.
Berechtigungen eines Schlüssels
Nur lesen
Kann diese Ressource auflisten und abfragen. Jeder Versuch, etwas anzulegen, zu ändern oder zu archivieren, erhält einen Fehler 403 mit dem Code PERMISO_DENEGADO und der fehlenden Berechtigung.
Lesen und schreiben
Kann in dieser Ressource nicht nur abfragen, sondern auch anlegen, aktualisieren und archivieren. Diese Berechtigung braucht ein Abgleich in beide Richtungen.
Berechtigungen gelten pro Ressource
Die Berechtigungen gelten pro Ressource, und das hat sich bereits gezeigt: Als die Lieferanten dazukamen, erhielten die vorhandenen Schlüssel — allesamt für Kunden — KEINEN Zugriff darauf. Es musste angehakt werden. Dasselbe gilt für jede Ressource, die später hinzukommt: Eine Integration sieht nie mehr, als du ihr erlaubt hast.
So authentifizierst du dich
Sende den Schlüssel bei jeder Anfrage, von Server zu Server, im Header Authorization: Bearer sat_…. Erlaubt dein Tool keine Authorization-Header, wird er auch im Header x-api-key akzeptiert. Die Basis-URL ist die URL deines Sattotal gefolgt von /api/v1 (du findest sie zum Kopieren auf der Seite Einstellungen → API).
GET /api/v1/me Authorization: Bearer sat_Ab3k9…x9Zq
Die API hat absichtlich kein CORS: Sie ist für Server und Automatisierungstools gedacht, nicht für Websites oder Apps, die im Browser deiner Kunden laufen. Ein Schlüssel darf nie in einen Browser gelangen.
Was möglich ist (Endpunkte)
Alle Antworten haben die Form success + data (plus pagination bei Listen). Einen Kunden kannst du über seine ID oder seinen Code (CLI-0007) anfordern, einen Lieferanten nur über seine ID.
| Methode | Pfad | Was er tut | Berechtigung |
|---|---|---|---|
| GET | /me | Gibt deine Organisation und den Schlüssel zurück, mit dem du aufrufst. Nutze ihn, um in Make oder n8n „die Verbindung zu testen“. | Beliebig |
| GET | /clientes | Seitenweise Liste der Kunden. Filter: busqueda, tipo, activo und actualizadoDesde. Ohne activo werden auch archivierte zurückgegeben. | Lesen |
| POST | /clientes | Legt einen Kunden mit denselben Regeln wie das Formular an (Steuernummer je nach Land, keine doppelte Steuernummer und keine doppelte E-Mail). | Schreiben |
| GET | /clientes/{id} | Gibt einen Kunden anhand der ID oder des Codes zurück. | Lesen |
| PATCH | /clientes/{id} | Aktualisiert nur die gesendeten Felder. PUT wird als Synonym akzeptiert. | Schreiben |
| DELETE | /clientes/{id} | Archiviert den Kunden (activo = false). Es wird nichts gelöscht, und der Aufruf lässt sich ohne Fehler wiederholen. | Schreiben |
| GET | /proveedores | Seitenweise Liste der Lieferanten. Filter: busqueda, activo, tipoProveedor, codigo und actualizadoDesde. Ohne activo werden auch archivierte zurückgegeben. | Lesen |
| POST | /proveedores | Legt einen Lieferanten an. Nur der Name ist Pflicht. Gibt es bereits einen mit derselben Steuernummer oder demselben Namen, antwortet die API mit 409 und der ID des vorhandenen. | Schreiben |
| GET | /proveedores/{id} | Gibt einen Lieferanten anhand seiner ID zurück. Der Code funktioniert hier NICHT: siehe den Hinweis weiter unten. | Lesen |
| PATCH | /proveedores/{id} | Aktualisiert nur die gesendeten Felder. Die Kontaktliste wird komplett ersetzt. PUT wird als Synonym akzeptiert. | Schreiben |
| DELETE | /proveedores/{id} | Archiviert den Lieferanten (activo = false). Es wird nichts gelöscht, und der Aufruf lässt sich ohne Fehler wiederholen. | Schreiben |
| GET | /reparaciones | Seitenweise Liste der Aufträge, neueste Annahme zuerst. Filter: cliente, estado, entradaDesde, entradaHasta und actualizadoDesde. | Lesen |
| GET | /reparaciones/{id} | Liefert einen Auftrag anhand seiner ID oder Auftragsnummer. | Lesen |
| GET | /clientes/{id}/reparaciones | Die Aufträge eines Kunden (über ID oder Kundencode), mit denselben Filtern. | Lesen |
| GET | /clientes/{id}/resumen | Aktivitätsübersicht des Kunden: wie viele Aufträge er hat (insgesamt, offen und nach Status), wie viel ihm angeboten wurde und wann er zuletzt da war. | Lesen |
Felder des Kunden
Die Felder sind dieselben wie im Kundendatensatz: nombre und tipo (particular oder empresa) sind Pflicht; nif_cif, apellidos, razonSocial, email, telefono, telefonoSecundario, direccion (calle, numero, piso, codigoPostal, localidad, provincia, pais) und notas sind optional. Die Steuernummer wird in Großbuchstaben gespeichert, die E-Mail in Kleinbuchstaben. In der Antwort sind alle Schlüssel immer vorhanden, mit null, wenn kein Wert existiert, damit das Feld-Mapping in deinem Tool nicht bricht. Achtung beim Namen: nombre ist der Vorname (bei Firmen der Firmenname), der Nachname gehört separat in apellidos – im Plural.
Felder, die die API nicht kennt
Enthält der Body einen Schlüssel, den es nicht gibt (zum Beispiel firstName statt nombre oder apellido im Singular statt apellidos), wird die Anfrage nicht abgelehnt, der Wert aber nicht gespeichert. Damit das nicht unbemerkt bleibt, enthält die Antwort beim Anlegen und Bearbeiten von Kunden avisos.camposIgnorados mit der Liste dieser Schlüssel; Adressfelder stehen mit ihrem Pfad darin, etwa direccion.ciudad. Taucht der Hinweis auf, prüfen Sie die Feldzuordnung Ihrer Integration. Felder, die die API selbst liefert (id, codigo, createdAt …), lösen ihn nie aus – Sie können also einen Kunden lesen, ändern und vollständig zurückschicken.
POST /api/v1/clientes
{ "firstName": "Daniel", "nombre": "Florea", "tipo": "particular" }
201 Created
{
"success": true,
"data": { "nombre": "Florea", "apellidos": null, … },
"avisos": { "camposIgnorados": ["firstName"] }
}Beispiel: einen Kunden anlegen
Anfrage
POST /api/v1/clientes
Authorization: Bearer sat_Ab3k9…x9Zq
Content-Type: application/json
{
"nombre": "Daniel",
"apellidos": "Florea",
"tipo": "empresa",
"razonSocial": "Assista Tech SRL",
"nif_cif": "RO12345678",
"codigoPersonalizado": "801",
"email": "daniel@example.com",
"telefono": "+40 700 000 000",
"direccion": { "localidad": "București", "pais": "RO" }
}Antwort (201)
{
"success": true,
"data": {
"id": "64b0…0001",
"codigo": "CLI-0042",
"codigoPersonalizado": "801",
"codigoVisible": "801",
"tipo": "empresa",
"nombre": "Daniel",
"apellidos": "Florea",
"razonSocial": "Assista Tech SRL",
"nif_cif": "RO12345678",
"email": "daniel@example.com",
"activo": true,
"createdAt": "2026-09-18T10:00:00.000Z",
"updatedAt": "2026-09-18T10:00:00.000Z"
}
}Lieferanten
Neben den Kunden stellt die API auch den Lieferantenkatalog bereit: dieselben fünf Endpunkte, dieselben Fehlercodes und derselbe inkrementelle Abgleich. Es geht nur um den Katalog: Einkäufe und Lieferantenrechnungen bleiben dort, wo sie schon heute liegen — in deinem ERP oder in Sattotal.
Felder des Lieferanten
Nur nombre ist Pflicht. Optional sind codigo, cif, email, telefono, telefonoSecundario, web, direccion (in einer einzigen Zeile, kein Objekt wie bei Kunden), ciudad, provincia, codigoPostal, pais, contactos, tipoProveedor (general, producto, servicio, logistica oder otro), formaPago, plazoPago (in Tagen; 0 bedeutet sofort zahlbar), cuentaCliente und notas. Jeder Kontakt hat nombre —Pflicht—, cargo, telefono, email und notas; Kontakte haben keine eigene Kennung.
Wie Kontakte aktualisiert werden
Die Liste, die du sendest, ERSETZT die vorhandene. Eine leere Liste löscht alle Kontakte; lässt du den Schlüssel weg (oder sendest null), bleiben sie unverändert. Genau deshalb kannst du einen Lieferanten lesen, ein Feld ändern und das ganze Objekt zurückschicken, ohne dass Seltsames passiert.
Anfrage
POST /api/v1/proveedores
Authorization: Bearer sat_Ab3k9…x9Zq
Content-Type: application/json
{
"nombre": "Distribuciones Norte",
"cif": "B12345678",
"tipoProveedor": "producto",
"plazoPago": 30,
"cuentaCliente": "C-4471",
"contactos": [
{ "nombre": "Ana Ruiz", "cargo": "Ventas", "email": "ana@norte.es" }
]
}Antwort (201)
{
"success": true,
"data": {
"id": "64b0…0009",
"codigo": "PROV-004",
"nombre": "Distribuciones Norte",
"cif": "B12345678",
"tipoProveedor": "producto",
"plazoPago": 30,
"cuentaCliente": "C-4471",
"contactos": [
{ "nombre": "Ana Ruiz", "cargo": "Ventas",
"telefono": null, "email": "ana@norte.es", "notas": null }
],
"excluidoRecargoEquivalencia": false,
"activo": true,
"createdAt": "2026-09-19T08:00:00.000Z",
"updatedAt": "2026-09-19T08:00:00.000Z"
}
}Bankdaten gibt die API nicht heraus
IBAN und Bankkonten des Lieferanten werden weder zurückgegeben noch angenommen, und zwar mit Absicht: Sollte ein Schlüssel je nach außen gelangen, wäre er für den Betrug mit geänderter Kontoverbindung — die häufigste Masche bei Lieferanten — wertlos. cuentaCliente wird dagegen zurückgegeben, denn das ist DEINE Kundennummer bei diesem Lieferanten, mit der ein ERP seine Einkäufe abgleicht.
Der Ausgleichszuschlag ist schreibgeschützt
Das Feld excluidoRecargoEquivalencia wird zurückgegeben, und du darfst es mit demselben Wert wieder mitsenden (damit du das ganze Objekt zurückschicken kannst), doch eine Änderung über die API wird mit 400 beantwortet: Es entscheidet, ob auf deine Einkäufe bei diesem Lieferanten der Zuschlag anfällt, verschiebt also die Bemessungsgrundlage deiner Eingangsrechnungen. Geändert wird er im Lieferantendatensatz. Außerhalb Spaniens hat er überhaupt keine Wirkung.
Über den Lieferantencode findest du keinen Lieferanten
Anders als beim Kunden ist der Lieferantencode (PROV-004) nicht eindeutig: Er kann sich sogar innerhalb deiner eigenen Werkstatt wiederholen. Deshalb akzeptiert GET /proveedores/{id} ausschließlich die ID. Speichert dein ERP nur den Code, nutze den Filter der Liste: GET /proveedores?codigo=PROV-004 liefert alle Treffer, und du entscheidest.
Reparaturaufträge (nur Lesen)
Über die API lassen sich auch die Reparaturaufträge abrufen: Auftragsnummer, Status, Datumsangaben, das Gerät (Typ, Marke, Modell, Seriennummer, IMEI) und der Kostenvoranschlag. Nur lesend: Aufträge werden weiterhin in Sattotal angelegt und im Status weitergeschaltet, wo auch Annahmebeleg und Übergabe unterschrieben werden. Der Schlüssel braucht die Ressource Reparaturen; Schlüssel für Kunden oder Lieferanten haben keinen Zugriff darauf.
Felder des Auftrags
Jeder Auftrag enthält numeroFicha, estado, prioridad, ubicacion, averiaDeclarada, diagnostico, die Daten des Ablaufs (Annahme, Beginn und Ende von Diagnose und Reparatur, Kundenbenachrichtigung, Übergabe und ultimoCambioEstado, wann er in seinen aktuellen Status gewechselt ist), eine Kundenübersicht (id, codigo, codigoVisible, nombre, apellidos, razonSocial), das Gerät (id, codigo, tipo, marca, modelo, numeroSerie, imei, color), den Kostenvoranschlag (numero, total, estado, fechaEnvio und fechaRespuesta, oder null, wenn keiner existiert), den zugewiesenen Techniker (nur den Namen) und plazoEntregaEstimado, die dem Kunden auf dem Annahmebeleg genannte Bearbeitungszeit. Interne Notizen, Unterschriften, Fotos, Dokumente und Gerätepasswörter werden nie ausgegeben.
Anfrage
GET /api/v1/clientes/CLI-0042/reparaciones?estado=reparado Authorization: Bearer sat_Ab3k9…x9Zq
Antwort (201)
{
"success": true,
"data": [{
"id": "64b0…0042",
"numeroFicha": "ORD-2026-0042",
"estado": "reparado",
"prioridad": "normal",
"averiaDeclarada": "No carga",
"diagnostico": "Conector de carga dañado",
"fechas": {
"entrada": "2026-09-20T09:00:00.000Z",
"finReparacion": "2026-09-22T17:30:00.000Z",
"entrega": null
},
"cliente": { "id": "64b0…0001", "codigoVisible": "801", "nombre": "Daniel" },
"dispositivo": {
"tipo": "movil", "marca": "Apple", "modelo": "iPhone 13",
"numeroSerie": "F2LXX0000", "imei": "356789012345678"
},
"presupuesto": { "numero": "PRES-2026-0010", "total": 89.9, "estado": "aprobado" },
"tecnico": { "nombre": "Andrei Popescu" },
"plazoEntregaEstimado": "3 días laborables"
}],
"pagination": { "total": 1, "page": 1, "limit": 25, "totalPages": 1 }
}Den Kunden über die anrufende Nummer finden
Wenn dein CRM oder deine Telefonanlage bei einem eingehenden Anruf die Kundenakte öffnet, nutze GET /clientes?telefono=<Nummer>. Gesucht wird in der Haupt- und in der Zweitnummer, egal wie die Nummer geschrieben ist: Leerzeichen, Bindestriche, Schrägstriche, die Ländervorwahl deines Landes (+49 oder 0049) und die führende 0. So findet „0151 23456789“ einen Kunden, der als „+49 151 2345-6789“ gespeichert ist. Es sind mindestens 6 Ziffern nötig.
Kundenübersicht für dein CRM
GET /clientes/{id}/resumen liefert mit einem einzigen Aufruf, was ein CRM üblicherweise in der Kundenakte zeigt: totalReparaciones, reparacionesAbiertas (das Gerät ist noch in der Werkstatt), porEstado, totalPresupuestado und totalPresupuestosAprobados (in der Währung der Werkstatt, die in moneda mitkommt), primeraReparacion, ultimaReparacion und ultimaActividad (die letzte Änderung an einem seiner Aufträge). Dafür ist die Ressource Reparaturen nötig, genau wie für die Aufträge.
Anfrage
GET /api/v1/clientes?telefono=0722 123 456
→ { "data": [{ "id": "64b0…0001", "codigoVisible": "801", "telefono": "+40 722 123 456", … }] }
GET /api/v1/clientes/801/resumen
{
"success": true,
"data": {
"cliente": { "id": "64b0…0001", "codigoVisible": "801" },
"moneda": "RON",
"totalReparaciones": 7,
"reparacionesAbiertas": 1,
"porEstado": { "entregado": 6, "en_reparacion": 1 },
"totalPresupuestosAprobados": 1240.5,
"ultimaReparacion": "2026-10-02T09:15:00.000Z",
"ultimaActividad": "2026-10-06T16:40:00.000Z",
…
}
}Nur abgleichen, was sich geändert hat
Du musst nicht bei jedem Durchlauf alles abholen. Speichere in deinem Tool Datum und Uhrzeit der letzten Ausführung und frage mit dem Parameter actualizadoDesde nur die seitdem geänderten Kunden oder Lieferanten ab. Die Antwort ist aufsteigend nach Änderungsdatum sortiert, mit einer stabilen Reihenfolge bei Gleichstand, sodass du sie seitenweise durchlaufen kannst, ohne Datensätze zu überspringen. Archivierte Datensätze erscheinen ebenfalls (mit activo = false), damit dein CRM die Archivierung nachziehen kann.
GET /api/v1/clientes?actualizadoDesde=2026-09-18T10:00:00Z&limit=100&page=1 Authorization: Bearer sat_Ab3k9…x9Zq
Erster Durchlauf
Durchlaufe GET /clientes mit limit=100 und page=1, 2, 3…, bis totalPages erreicht ist. Speichere die Startzeit.
Weitere Durchläufe
Rufe GET /clientes?actualizadoDesde=<gespeicherte Zeit> ab und verarbeite nur, was zurückkommt. Speichere erneut die Startzeit dieses Durchlaufs.
Verknüpfen statt duplizieren
Speichere die Sattotal-ID zusammen mit dem Datensatz in deinem CRM. Erhältst du beim Anlegen ein 409 DUPLICADO, enthält die Antwort existenteId: Verknüpfe diesen Kunden, statt einen weiteren anzulegen.
Seitenweise Ausgabe und Suche
Listen akzeptieren page (ab 1) und limit (standardmäßig 25, maximal 100; wer mehr anfordert, bekommt 100). Das Feld busqueda durchsucht Name, Nachname, Firmenname, Steuernummer, E-Mail, Code und Telefon.
Fehlercodes und was zu tun ist
Alle Fehlerantworten enthalten success: false, einen erklärenden Text und einen stabilen code, anhand dessen dein Programm entscheiden kann. Diese kannst du erhalten:
NO_AUTORIZADODer Schlüssel fehlt, hat nicht unser Format oder existiert nicht. Prüfe den Header Authorization.
CLAVE_REVOCADADer Schlüssel war gültig, aber ein Administrator hat ihn widerrufen. Erstelle unter Einstellungen → API einen neuen und trage ihn in deinem Tool ein.
PLAN_REQUERIDODie Organisation ist im kostenlosen Tarif. Die API funktioniert wieder, sobald du zu einem kostenpflichtigen Tarif wechselst.
PERMISO_DENEGADODer Schlüssel hat nicht die nötige Berechtigung für diese Operation. Die Antwort nennt in ambitoRequerido, welche fehlt: Erstelle einen Schlüssel mit dieser Berechtigung.
NO_ENCONTRADOIn deiner Organisation gibt es weder einen Kunden noch einen Lieferanten mit dieser ID. Datensätze anderer Organisationen sind nie sichtbar, und „existiert nicht“ wird nicht von „gehört dir nicht“ unterschieden.
DUPLICADOEs gibt bereits einen Datensatz mit diesem Wert: Steuernummer oder E-Mail bei Kunden; Steuernummer, Name oder Code bei Lieferanten. Die Antwort enthält campo und existenteId, damit du ihn verknüpfen kannst, statt einen zweiten anzulegen.
VALIDACIONEin Feld besteht die Validierung nicht (oder das JSON ist fehlerhaft). In details stehen das Feld und der Grund, genau wie im Formular.
IDENTIFICADOR_FISCAL_REQUERIDODieser Kunde braucht eine Steuernummer: In deinem Land ist sie für den gesendeten Kundentyp Pflicht (zum Beispiel immer bei Unternehmen).
RATE_LIMITZu viele Anfragen. Warte die im Header Retry-After angegebenen Sekunden und versuche es erneut.
API_DESACTIVADADie API ist wegen Wartungsarbeiten vorübergehend deaktiviert. Versuche es später noch einmal.
Limits
120 Anfragen pro Minute und Schlüssel (mehr als genug für einen regelmäßigen Abgleich; bremst eine versehentliche Endlosschleife). 10 aktive Schlüssel pro Organisation. Listen liefern höchstens 100 Datensätze pro Seite. Ist die Organisation im kostenlosen Tarif und das Monatskontingent aufgebraucht, wird das Anlegen von Kunden genauso gestoppt wie in der Anwendung.
Schritt für Schritt: Kunden mit Make abgleichen
Ein typisches Szenario: alle 15 Minuten die in Sattotal neuen oder geänderten Kunden und Lieferanten in dein CRM holen. In n8n geht das genauso mit dem Node HTTP Request und einem Node Schedule.
Erstelle den Schlüssel in Sattotal
Einstellungen → API → Neuer Schlüssel, Berechtigung „Nur lesen“, wenn du nur lesen willst, „Lesen und schreiben“, wenn du auch Kunden aus dem CRM anlegen willst. Kopiere den Schlüssel.
HTTP-Modul „Make a request“
URL: deine Basis-URL + /clientes. Methode GET. Header Authorization mit dem Wert Bearer und deinem Schlüssel. Aktiviere „Parse response“, um mit dem JSON zu arbeiten.
Teste die Verbindung
Führe zuallererst einmal eine Anfrage an /me aus: Kommen deine Organisation und der Name des Schlüssels zurück, stimmt die Authentifizierung.
Füge den inkrementellen Filter hinzu
Speichere das Datum der letzten Ausführung in einem Data store oder einer Variablen und übergib es als actualizadoDesde in der URL. Plane das Szenario alle 15 Minuten.
Ordne die Felder deinem CRM zu
Iteriere über data[] und ordne id, codigo, nombre, apellidos, email, telefono, nif_cif und direccion zu. Speichere die Sattotal-ID in deinem CRM, um zu aktualisieren statt zu duplizieren.
Um Kunden aus dem CRM anzulegen, nutze ein weiteres HTTP-Modul mit der Methode POST an /clientes und dem JSON-Body des Kunden. Erhältst du 409, verknüpfe über existenteId.
Gute Sicherheitspraxis
Ein Schlüssel pro Integration
So kannst du einen widerrufen, ohne die anderen zu stören, und siehst in der Liste, wann jeder zuletzt verwendet wurde.
Nie im Browser oder in einem öffentlichen Repository
Hinterlege ihn im Anmeldedaten-Speicher deines Tools (Verbindungen in Make, Credentials in n8n, Umgebungsvariablen). Landet er in einem Repository oder auf einer Website, gilt er als kompromittiert.
Bei einem Leak: widerrufen und neu erstellen
Der Widerruf wirkt sofort: Der alte Schlüssel bekommt ab dann 401 CLAVE_REVOCADA. Trage den neuen in deinem Tool ein, fertig.
API-Spezifikation
Die vollständige technische Referenz (Pfade, Parameter, Schemas und Fehlercodes) ist in einem offenen Format unter /api/v1/openapi.json veröffentlicht, ohne Schlüssel abrufbar. Standardmäßig ist sie auf Spanisch; hänge ?lang= mit deiner Sprache an, um sie übersetzt zu bekommen (zum Beispiel /api/v1/openapi.json?lang=de, ?lang=en oder ?lang=ro). Du kannst sie in Postman, Insomnia, Make oder n8n importieren, um alle Aufrufe fertig vorbereitet zu haben.
Häufige Fragen
Ich habe den Schlüssel verloren, kann ich ihn noch einmal sehen?
Nein. Er wird nur beim Erstellen angezeigt und danach unumkehrbar gespeichert. Widerrufe ihn unter Einstellungen → API und erstelle einen neuen.
Gibt es Webhooks, damit Sattotal mein CRM benachrichtigt, wenn sich etwas ändert?
Noch nicht. Der empfohlene Weg ist, regelmäßig mit dem Parameter actualizadoDesde abzufragen, der nur zurückgibt, was sich geändert hat.
Welche Daten stellt die API bereit?
Kunden und Lieferanten: auflisten, anlegen, abfragen, aktualisieren und archivieren. Die Berechtigungen gelten pro Ressource, deshalb erreicht ein Schlüssel, der vor den Lieferanten erstellt wurde, diese erst, wenn ein Administrator sie ihm anhakt. Dazu die Reparaturaufträge, nur lesend (Status, Daten, Gerät und Kostenvoranschlag), mit eigener Berechtigung.
Kann ich einen Kunden per API löschen?
Nein, nur archivieren (activo = false), genau wie in der Anwendung. Das gilt für Kunden und Lieferanten gleichermaßen. Ein archivierter Datensatz erscheint weiterhin im Abgleich, damit dein CRM das nachziehen kann.
Ist die API im kostenlosen Tarif enthalten?
Nein. Sie ist in Basic, Pro und Enterprise sowie während der Testphase enthalten. Im kostenlosen Tarif kannst du die erstellten Schlüssel weiterhin sehen und widerrufen.
Beim Kunden kommt nur der Nachname an – warum wird der Vorname nicht gespeichert?
Fast immer liegt es an der Feldzuordnung: Der Vorname gehört in nombre, der Nachname in apellidos. Schickt Ihr Tool den Vornamen unter einem anderen Schlüssel (firstName, name, apellido …), verwirft die API ihn und meldet das in avisos.camposIgnorados der Antwort. Korrigieren Sie die Zuordnung und senden Sie den Kunden per PATCH erneut.
Kann ich den Kunden über die Nummer finden, die mich gerade anruft?
Ja. Rufe GET /api/v1/clientes?telefono= mit der Nummer so auf, wie sie bei dir ankommt: Es spielt keine Rolle, ob sie eine Ländervorwahl, Leerzeichen oder Bindestriche enthält, und die Zweitnummer wird ebenfalls durchsucht. Mit seiner ID kannst du anschließend seine Aufträge (/clientes/{id}/reparaciones) und seine Übersicht (/clientes/{id}/resumen) abrufen.
