Zum Inhalt springen

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

1

Ö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.

2

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.

3

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.

4

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

Widerrufen

n8n

sat_Qm7t…p2Lk

Widerrufen

Schlüssel erstellt

sat_Ab3k9Zq2Xv8Lp1Mn4Rt7Wy0Cd5Fg6Hj3Kl8Sx9ZqKopieren

Du 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.

MethodePfadWas er tutBerechtigung
GET/meGibt 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/clientesSeitenweise Liste der Kunden. Filter: busqueda, tipo, activo und actualizadoDesde. Ohne activo werden auch archivierte zurückgegeben.Lesen
POST/clientesLegt 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/proveedoresSeitenweise Liste der Lieferanten. Filter: busqueda, activo, tipoProveedor, codigo und actualizadoDesde. Ohne activo werden auch archivierte zurückgegeben.Lesen
POST/proveedoresLegt 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/reparacionesSeitenweise 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}/reparacionesDie Aufträge eines Kunden (über ID oder Kundencode), mit denselben Filtern.Lesen
GET/clientes/{id}/resumenAktivitä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
1

Erster Durchlauf

Durchlaufe GET /clientes mit limit=100 und page=1, 2, 3…, bis totalPages erreicht ist. Speichere die Startzeit.

2

Weitere Durchläufe

Rufe GET /clientes?actualizadoDesde=<gespeicherte Zeit> ab und verarbeite nur, was zurückkommt. Speichere erneut die Startzeit dieses Durchlaufs.

3

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_AUTORIZADO

Der Schlüssel fehlt, hat nicht unser Format oder existiert nicht. Prüfe den Header Authorization.

CLAVE_REVOCADA

Der 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_REQUERIDO

Die Organisation ist im kostenlosen Tarif. Die API funktioniert wieder, sobald du zu einem kostenpflichtigen Tarif wechselst.

PERMISO_DENEGADO

Der 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_ENCONTRADO

In 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.

DUPLICADO

Es 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.

VALIDACION

Ein Feld besteht die Validierung nicht (oder das JSON ist fehlerhaft). In details stehen das Feld und der Grund, genau wie im Formular.

IDENTIFICADOR_FISCAL_REQUERIDO

Dieser Kunde braucht eine Steuernummer: In deinem Land ist sie für den gesendeten Kundentyp Pflicht (zum Beispiel immer bei Unternehmen).

RATE_LIMIT

Zu viele Anfragen. Warte die im Header Retry-After angegebenen Sekunden und versuche es erneut.

API_DESACTIVADA

Die 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.

1

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.

2

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.

3

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.

4

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.

5

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.

Möchten Sie es selbst ausprobieren?

Testen Sie Sattotal kostenlos mit Beispieldaten, ohne Kreditkarte.