> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tapify.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Teammitglied erstellen

> Füge ein Mitglied hinzu und erstelle seine digitale Visitenkarte.

Füge ein Mitglied zum Workspace hinzu, zu dem dein API-Schlüssel gehört. Sende `firstName`, `lastName` und eine gültige `email`. Du kannst auch Position, Abteilung, Foto-URL und Kontaktdaten angeben.

Die Antwort enthält `id`, `profileUrl` und `created` des Mitglieds:

| Antwort | Bedeutung |
| - | - |
| `201` mit `created: true` | Ein neues Mitglied und eine digitale Visitenkarte wurden erstellt. |
| `200` mit `created: false` | Die E-Mail-Adresse gehört bereits zu einem Mitglied in diesem Workspace. Das bestehende Mitglied wird unverändert zurückgegeben. |

Wenn die E-Mail-Adresse bereits von einem Mitglied außerhalb dieses Workspaces verwendet wird, liefert Tapify `409 Conflict`. Mit [Teammitglied aktualisieren](https://docs.tapify.app/de/api-reference/team-members/update.md) änderst du die Daten eines bestehenden Mitglieds.

## E-Mail und Einladungen

Das Pflichtfeld `email` ist die Anmeldeadresse des Mitglieds. Damit eine E-Mail-Adresse auf der Visitenkarte erscheint, füge auch einen E-Mail-Eintrag zu `contactDetails` hinzu:

```json theme={null}
{
  "type": "email",
  "value": "mina@acme.com"
}
```

Neue Mitglieder beginnen normalerweise mit `status: "not_invited"`. Beim Erstellen wird keine Einladung verschickt. Versende sie im Dashboard unter **Team**, sobald die Visitenkarte fertig ist. Das Feld `sendInvite` wird nicht unterstützt. [Mitglieder einladen](https://docs.tapify.app/de/teams/members/invite.md)

> [!WARNING]
>
> Neue Mitglieder werden bereits abgerechnet, bevor sie ihre Einladung annehmen. Prüfe die [Mitgliederabrechnung](https://docs.tapify.app/de/teams/settings/billing.md), bevor du ein großes Mitarbeiterverzeichnis importierst.


## OpenAPI

````yaml de/api-reference/openapi.json POST /team-members
openapi: 3.0.3
info:
  title: Tapify-API
  version: 1.0.0
  description: >-
    Lies und verwalte gespeicherte Kontakte, Teammitglieder und ihre digitalen
    Visitenkarten in einem Tapify-Teams-Workspace. Erfordert Zugriff auf Teams
    Connect und einen API-Schlüssel für den Workspace.
servers:
  - url: https://tapify.app/api/v1
    description: Tapify-API
security:
  - bearerAuth: []
  - apiKeyHeader: []
tags:
  - name: Workspace
    description: Den mit einem API-Schlüssel verbundenen Workspace prüfen.
  - name: Teammitglieder
    description: Mitglieder und ihre digitalen Visitenkarten verwalten.
  - name: Kontakte
    description: Im gesamten Workspace erfasste Kontakte verwalten.
  - name: Zapier
    description: >-
      Endpunkte, die die Tapify-Zapier-Integration für Trigger-Beispiele und
      REST-Hook-Abonnements verwendet.
paths:
  /team-members:
    post:
      tags:
        - Teammitglieder
      summary: Teammitglied erstellen
      description: >-
        Erstellt ein Teammitglied. Wenn die E-Mail-Adresse bereits zu einem
        Mitglied in diesem Workspace gehört, wird dieses Mitglied unverändert
        zurückgegeben.
      operationId: createTeamMember
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTeamMemberRequest'
            examples:
              teamMember:
                summary: Neues Teammitglied
                value:
                  firstName: Mina
                  lastName: Park
                  email: mina@acme.com
                  jobTitle: Head of Partnerships
                  department: Partnerships
                  contactDetails:
                    - type: phone
                      label: Mobile
                      value: '+31612345678'
                    - type: email
                      label: Work
                      value: mina@acme.com
      responses:
        '200':
          description: Vorhandenes Teammitglied unverändert zurückgegeben
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamMemberWriteResponse'
        '201':
          description: Teammitglied erstellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TeamMemberWriteResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/SubscriptionRequired'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    CreateTeamMemberRequest:
      type: object
      description: >-
        Erstelle ein Mitglied oder gib das vorhandene Workspace-Mitglied
        unverändert zurück, wenn seine Anmelde-E-Mail-Adresse bereits vorhanden
        ist. Einladungen werden über das Dashboard gesendet; sendInvite wird
        nicht unterstützt.
      required:
        - firstName
        - lastName
        - email
      properties:
        firstName:
          type: string
          description: Vorname des Mitglieds.
          example: Mina
          minLength: 1
        lastName:
          type: string
          description: Nachname des Mitglieds.
          example: Park
          minLength: 1
        email:
          type: string
          format: email
          description: >-
            Anmelde-E-Mail-Adresse des Mitglieds, die auch für Einladungen und
            die Prüfung auf Duplikate verwendet wird. Um eine E-Mail-Adresse auf
            der Karte anzuzeigen, füge in contactDetails einen Eintrag vom Typ
            email hinzu.
          example: mina@acme.com
        jobTitle:
          type: string
          nullable: true
          example: Head of Partnerships
        department:
          type: string
          nullable: true
          example: Partnerships
        avatarUrl:
          type: string
          format: uri
          nullable: true
          example: https://example.com/mina.jpg
        contactDetails:
          type: array
          description: >-
            Persönliche Kontaktmöglichkeiten für die Karte des Mitglieds.
            Gemeinsame Unternehmensdaten aus dem Markendesign sind nicht
            enthalten und werden nicht geändert.
          items:
            $ref: '#/components/schemas/TeamMemberContactDetailInput'
    TeamMemberWriteResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/TeamMemberWriteResult'
    TeamMemberContactDetailInput:
      type: object
      description: >-
        Eine Kontaktmöglichkeit, die auf der digitalen Visitenkarte des
        Mitglieds angezeigt wird.
      required:
        - type
      properties:
        type:
          type: string
          description: Typ der Kontaktangabe.
          enum:
            - phone
            - email
            - website
            - address
            - social_media
          example: phone
        label:
          type: string
          nullable: true
          description: >-
            Auf der digitalen Visitenkarte angezeigte Bezeichnung, zum Beispiel
            Mobiltelefon oder Büro.
          example: Mobile
        value:
          type: string
          description: >-
            Phone number, email address, website, or social-media link. Not used
            for an address.
          example: '+31612345678'
          minLength: 1
        platform:
          allOf:
            - $ref: '#/components/schemas/SocialPlatform'
          description: Erforderlich, wenn type den Wert social_media hat.
        address:
          allOf:
            - $ref: '#/components/schemas/Address'
          description: Erforderlich, wenn type den Wert address hat.
      oneOf:
        - title: Telefon oder Website
          type: object
          required:
            - value
          properties:
            type:
              type: string
              enum:
                - phone
                - website
        - title: E-Mail-Adresse
          type: object
          required:
            - value
          properties:
            type:
              type: string
              enum:
                - email
            value:
              type: string
              format: email
        - title: Soziale Netzwerke
          type: object
          required:
            - value
            - platform
          properties:
            type:
              type: string
              enum:
                - social_media
        - title: Adresse
          type: object
          required:
            - address
          properties:
            type:
              type: string
              enum:
                - address
    TeamMemberWriteResult:
      allOf:
        - $ref: '#/components/schemas/TeamMember'
        - type: object
          required:
            - created
          properties:
            created:
              type: boolean
              description: true, wenn ein neues Mitglied erstellt wurde.
              example: true
    ErrorResponse:
      type: object
      description: Informationen zu einer Anfrage, die Tapify nicht abschließen konnte.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Kurzer Code zur Identifizierung des Fehlers.
              example: bad_request
            message:
              type: string
              description: Verständliche Erklärung des Fehlers.
              example: Request body is invalid.
            details:
              type: object
              description: >-
                Zusätzliche Informationen, die beim Korrigieren der Anfrage
                helfen können.
              additionalProperties: true
              nullable: true
    SocialPlatform:
      type: string
      description: Soziale Plattform, auf die dieser Link verweist.
      enum:
        - facebook
        - instagram
        - linkedin
        - x
        - whatsapp
        - calendly
        - youtube
        - pinterest
        - spotify
        - tiktok
        - reddit
        - behance
        - bluesky
        - wechat
        - discord
        - dribbble
        - github
        - mastodon
        - medium
        - messenger
        - patreon
        - soundcloud
        - slack
        - telegram
        - snapchat
        - threads
        - twitch
        - yelp
    Address:
      type: object
      description: Eine strukturierte Adresse. Gib mindestens ein nicht leeres Feld an.
      minProperties: 1
      properties:
        line1:
          type: string
          description: Straßenname und Hausnummer.
          example: Keizersgracht 391 A
        line2:
          type: string
          description: >-
            Wohnung, Büroeinheit, Stockwerk oder andere zusätzliche
            Adressangaben.
          example: ''
        city:
          type: string
          example: Amsterdam
        postalCode:
          type: string
          example: 1016 EJ
        country:
          type: string
          description: Ländercode oder Ländername.
          example: NL
    TeamMember:
      type: object
      description: Ein Mitglied des Tapify-Teams-Workspaces.
      required:
        - id
        - workspaceId
        - accountId
        - status
        - firstName
        - lastName
        - displayName
        - email
        - jobTitle
        - department
        - avatarUrl
        - profileUrl
        - slug
        - contact
        - contactDetails
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Teammitglied-ID. Verwende diesen Wert in anderen Endpunkten für
            Teammitglieder.
          example: 45fa16aa-2546-49b3-9d1e-7b7e1c9fb1e7
        workspaceId:
          type: string
          format: uuid
          description: ID des Workspaces, der das Mitglied enthält.
          example: 9df81bd4-3d76-42cc-9518-a019ea75a221
        accountId:
          type: string
          format: uuid
          description: ID des Tapify-Kontos des Mitglieds.
          example: 0e35f7a8-e866-4f5d-b9cb-06961a130fef
        status:
          type: string
          enum:
            - not_invited
            - pending
            - active
            - failed
          description: >-
            Einladungsstatus: not_invited bedeutet, dass keine Einladung
            gesendet wurde; pending bedeutet, dass das Mitglied noch nicht
            aktiviert wurde; active bedeutet, dass das Konto bereit ist; failed
            bedeutet, dass die Einladung nicht zugestellt werden konnte.
          example: active
        firstName:
          type: string
          example: Mina
        lastName:
          type: string
          example: Park
        displayName:
          type: string
          description: Vollständiger Name, zusammengesetzt aus firstName und lastName.
          example: Mina Park
        email:
          type: string
          format: email
          description: >-
            Anmelde-E-Mail-Adresse des Mitglieds. Sie ist unabhängig von den
            email-Einträgen in contactDetails, die auf der Karte veröffentlicht
            werden.
          example: mina@acme.com
        jobTitle:
          type: string
          nullable: true
          example: Head of Partnerships
        department:
          type: string
          nullable: true
          example: Partnerships
        avatarUrl:
          type: string
          format: uri
          nullable: true
          example: https://example.com/mina.jpg
        profileUrl:
          type: string
          format: uri
          description: Öffentlicher Link zur digitalen Visitenkarte des Mitglieds.
          example: https://tapify.app/mina-park
        slug:
          type: string
          description: Letzter Teil der URL der digitalen Visitenkarte.
          example: mina-park
        contact:
          type: object
          description: >-
            Schnellzugriff auf die jeweils ersten Werte des Mitglieds für
            Telefon, WhatsApp und Website.
          required:
            - phone
            - whatsapp
            - website
          properties:
            phone:
              type: string
              nullable: true
              example: '+31612345678'
            whatsapp:
              type: string
              nullable: true
            website:
              type: string
              nullable: true
              example: https://acme.com
        contactDetails:
          type: array
          description: >-
            In diesem Mitgliederprofil gespeicherte Kontaktdaten. Gemeinsame
            Unternehmensdaten aus dem Markendesign sind nicht enthalten.
          items:
            $ref: '#/components/schemas/TeamMemberContactDetail'
        createdAt:
          type: string
          format: date-time
          description: Datum und Uhrzeit, zu denen das Mitglied hinzugefügt wurde.
          example: '2026-07-01T09:30:00.000Z'
        updatedAt:
          type: string
          format: date-time
          description: Datum und Uhrzeit der letzten Aktualisierung des Mitglieds.
          example: '2026-07-28T10:15:00.000Z'
    TeamMemberContactDetail:
      type: object
      description: Eine im Mitgliederprofil gespeicherte Kontaktangabe.
      required:
        - id
        - type
        - label
        - value
      properties:
        id:
          type: string
          format: uuid
          description: ID dieser gespeicherten Kontaktangabe.
          example: 33d5f285-64f7-41aa-bf9e-17a0fbf535af
        type:
          type: string
          description: Typ der Kontaktangabe.
          enum:
            - phone
            - email
            - website
            - address
            - social_media
        label:
          type: string
          nullable: true
          description: Auf der digitalen Visitenkarte angezeigte Bezeichnung.
          example: Mobile
        value:
          type: string
          example: '+31612345678'
        platform:
          $ref: '#/components/schemas/SocialPlatform'
        address:
          $ref: '#/components/schemas/Address'
  responses:
    BadRequest:
      description: Das JSON der Anfrage, ein Pflichtfeld oder ein Parameter ist ungültig.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: bad_request
              message: fullName is required.
    Unauthorized:
      description: Der API-Schlüssel fehlt, ist falsch oder wurde gelöscht.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_api_key
              message: API key is invalid or revoked.
    SubscriptionRequired:
      description: >-
        Der Workspace benötigt Zugriff auf Teams Connect. Prüfe seinen Tarif,
        den Abonnementstatus und den Ablauf der Testphase.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: subscription_required
              message: Tapify Teams Connect is required for this feature.
    Conflict:
      description: >-
        Die E-Mail-Adresse des Teammitglieds wird bereits außerhalb dieses
        Workspaces verwendet.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: conflict
              message: This email is already in use.
    PayloadTooLarge:
      description: Der JSON-Body überschreitet 256 KB (262.144 Bytes).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: payload_too_large
              message: Request body is too large.
    RateLimited:
      description: In kurzer Zeit wurden zu viele Anfragen gesendet.
      headers:
        Retry-After:
          description: Wartezeit in Sekunden vor einem erneuten Versuch.
          schema:
            type: integer
            example: 30
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: rate_limited
              message: Rate limit exceeded.
              details:
                retryAfter: 30
    InternalError:
      description: Tapify konnte die Anfrage nicht abschließen.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: internal_error
              message: Something went wrong.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: Tapify API key
      description: Unter Einstellungen → API-Schlüssel erstellter API-Schlüssel.
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Alternative zu Authorization: Bearer. Sende pro Anfrage nur eine
        Authentifizierungsmethode; ein Bearer-Token hat Vorrang.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.