Benutzer

Benutzer deiner Organisation — User-Stammdaten, Rollen, Lizenzen und Aktivierungs-Status. Strukturell identisch zu Customers (gleiche Stammdaten-Felder, gleiche Sub-Resources), unter eigenem API-Pfad und eigener Scope-Familie `v3:users:*`.

Zuletzt geprüft: 14. September 2026

Übersicht

Ein Benutzer ist ein interner Account deiner Organisation — Mitarbeiter, Berater, Administrator. Benutzer haben dieselben Stammdaten und Sub-Resources wie Customers (Adressen, Bankverbindungen, Kontaktdaten, …) — nur unter eigenem API-Pfad und eigener Scope-Familie:

  • Gleiche Sub-Resources wie Customers (Addresses, Banking, Contacts, …) — 10 direkte Familien plus Aktivitäten und Links parent-scoped (12 Familien insgesamt).
  • Eigene Scope-Familie v3:users:* — Sub-Resource-Endpoints nutzen NICHT die Per-Resource-Scopes von Customers, sondern fallen unter den v3:users:*-Bucket. Ausnahme: Aktivitäten am User laufen weiterhin auf v3:activities:* (eigene Daten-Domäne).
  • Keine Verträge, Schäden, Finanzen, Ziele am Benutzer — diese CRM-Objekte hängen ausschließlich an Customers.

Die CRUD-Mechanik (Pagination, Schema-Tab, Single-vs-Batch-POST, Soft-Delete, Error-Codes) ist 1:1 dieselbe wie bei Customers — auf dieser Seite wird sie nicht erneut ausgebreitet.

Scopes

Benutzer-Stammdaten und direkte Sub-Resources verwenden v3:users:read|write. Dokumente und Aktivitäten behalten ihre eigenen Scopes:

Endpoint-FamilieScope
GET /v3/users / GET /v3/users/<id>v3:users:read
POST /v3/usersv3:users:write
PATCH /v3/users/<id>v3:users:write
DELETE /v3/users/<id>v3:users:write
Direkte Sub-Resource GET-Endpointsv3:users:read
Direkte Sub-Resource POST/PATCH/DELETEv3:users:write
Dokumente unter /v3/users/{kid}/documentsv3:documents:read / v3:documents:write
Aktivitäten unter /v3/users/{kid}/activitiesv3:activities:read / v3:activities:write

Auth-Mechanik und Fehler siehe Authentifizierung. Vollständige Scope-Referenz mit Token-Beispielen: Scopes.

Pagination & Limits

Identisch zu Customers > Pagination & Limits — page, limit, Default 50, Max 5000, Envelope { page, page_size, total, items }.

Schema

json
{
  "id": 4001,
  "anrede": "Herr",
  "vorname": "Helmut",
  "name": "Leier",
  "geb": "1970-01-15",
  "email": "h.leier@example.de",
  "rolle": "vertrieb",                // siehe select_fields.users.rollen
  "lizenz": true,                     // hat der User eine aktive Lizenz?
  "lizenz_typ": "vollzugang",         // siehe select_fields.users.lizenztypen
  "aktiv": true,                      // false = deaktiviert, kein Login mehr
  "letzter_login": "2024-06-15T08:42:00Z",
  "insert_datum": "2023-01-15",
  "edit_datum": "2024-06-15",

  // Sub-Resources — opt-in via ?with_*=true (Default false seit Phase C, Mai 2026)
  "addresses": [ /* siehe /rest/v3/customers#addresses */ ],
  "contacts":  [ /* siehe /rest/v3/customers#contacts */ ],
  "banking":   [ /* siehe /rest/v3/customers#banking */ ]
}

Endpoints

Verhalten und Response-Shapes sind 1:1 wie bei Customers. Für Detail-Beispiele zu Query-Parametern, Batch-POST, Soft-Delete-Mechanik etc. siehe die entsprechenden Customer-Sektionen.

Benutzer abfragen

Liefert eine paginierte Liste aller Benutzer deiner Organisation. Query-Parameter und Response-Envelope identisch zu Customers abfragen.

Einzelnen Benutzer abrufen

Verhalten wie Customer abrufen.

Benutzer anlegen

Body folgt dem Customer-POST-Pattern — Single-Item oder Array (max. 100), per-item Transaktion, gescheiterte Items in failed[]. Pflicht-Felder zusätzlich: email (eindeutig pro Org). Sub-Resources im Body werden ignoriert — separate Endpoints nutzen.

bash
curl -X POST https://www.api.i-planner.app/v3/users \
  -H "Authorization: Bearer $IPLANNER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "anrede": "Frau",
    "vorname": "Maria",
    "name": "Schmidt",
    "email": "m.schmidt@example.de",
    "rolle": "vertrieb",
    "lizenz": true,
    "lizenz_typ": "vollzugang"
  }'

Response: 201 mit { success, id }. Fehler: 400 email_not_unique (E-Mail existiert bereits in der Org), 400 license_quota_exceeded (Lizenzkontingent voll).

Benutzer aktualisieren

PATCH/v3/users/<id> Im Playground testen ↗

Verhalten wie Customer aktualisieren. Response: { success, updated }.

Benutzer löschen

DELETE/v3/users/<id> Im Playground testen ↗

Soft-Delete (del=1 in der Datenbank). Verhalten wie Customer löschen. Response: { success, soft_deleted, kid }.

Unterressourcen

Alle 12 Sub-Resource-Familien hängen path-scoped am Benutzer ({kid} = User-ID) und folgen demselben Pattern wie die Customer-Sub-Resources. Verhalten, Query-Parameter, Schema-Felder und Fehler-Codes sind identisch — nur der Scope wechselt auf v3:users:* (siehe Scopes oben).

Direkte Sub-ResourcePfadDoku am Customer-Pattern
Addresses/v3/users/{kid}/addressesAddresses
Contacts/v3/users/{kid}/contactsContacts
Banking/v3/users/{kid}/bankingBanking
Nummern/v3/users/{kid}/numbersNummern
Identity/v3/users/{kid}/identityIdentity
Jobs/v3/users/{kid}/jobsJobs
Tags/v3/users/{kid}/tagsTags
Comments/v3/users/{kid}/commentsComments
Documents/v3/users/{kid}/documentsDocuments — Scope v3:documents:* (Cross-Domain)
Followers/v3/users/{kid}/followersFollowers
Activities (List + Create scoped)/v3/users/{kid}/activitiesAktivitäten — Scope v3:activities:*, Update/Delete top-level über /v3/activities/{id}
Links (List + Create + Delete scoped)/v3/users/{kid}/links[/{id}]Links — Scope v3:users:*

POST/PATCH dürfen kid nicht im Body führen (path ist Source-of-Truth → 400 body_kid_forbidden).

Nicht verfügbar an Benutzern: Contracts, Damages, Finances, Goals — diese CRM-Objekte hängen ausschließlich an Customers (Typ 0), nicht an Benutzern (Typ 4).

kid-Bindung: Die User-kid steht im URL-Pfad (/v3/users/{kid}/...) und ist Source-of-Truth — POST/PATCH-Body darf kid nicht enthalten (400 body_kid_forbidden). Es gibt keinen ?kid=-Query-Parameter mehr; der frühere customer-scope-style ist mit dem Path-Refactor (Mai 2026) ausgelaufen.