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

# Kontakt-Events abonnieren

> Registriere einen Zapier-Hook für neue oder aktualisierte Tapify-Kontakte.

Verwende diesen Endpunkt für einen Zapier-REST-Hook-Trigger. Wenn du einen Zap ohne eigenen Code einrichten möchtest, folge [Tapify mit Zapier verbinden](https://docs.tapify.app/de/teams/integrations/zapier.md).

Sende `contact.created` oder `contact.updated` als `eventType` zusammen mit der von Zapier bereitgestellten `targetUrl`.

> [!NOTE]
>
> Das Ziel muss eine HTTPS-URL auf `hooks.zapier.com` sein, ohne Benutzernamen, Passwort oder URL-Fragment. Dieser Endpunkt akzeptiert ausschließlich Zapier-Hooks.

## Abonnement-ID speichern

Die Antwort ist ein Objekt mit `id`, ohne umschließendes `data`-Objekt. Speichere diese ID, um das [Abonnement später zu entfernen](https://docs.tapify.app/de/api-reference/zapier/unsubscribe.md).

Wenn du die Anfrage mit demselben Workspace, Eventtyp und derselben URL wiederholst, erhältst du die bestehende Abonnement-ID. Das Abonnement wird dabei dem API-Schlüssel zugeordnet, den du für die Anfrage verwendest.

## Eventdaten

Tapify sendet ein Kontaktobjekt direkt an den Zapier-Hook, wenn das gewählte Event eintritt. Das Objekt enthält weder ein umschließendes `data`-Objekt noch ein Feld `eventType`.

* **Neuer Kontakt:** `id` ist die Kontakt-ID.
* **Aktualisierter Kontakt:** `id` kombiniert Kontakt-ID und Änderungszeitpunkt. `contactId` enthält die ursprüngliche Kontakt-ID für andere API-Anfragen.

Kontaktdaten können interne Notizen und übermittelte Nachrichten enthalten. Sende sie nur an einen Zapier-Workflow, der auf diese Daten zugreifen darf.

## Zustellung und Zugriff

Dein Workflow sollte wiederholte Zustellungen verarbeiten können. Bei vorübergehenden Fehlern kann Tapify die Zustellung erneut versuchen; sie ist jedoch nicht garantiert. Eine `410 Gone`-Antwort von Zapier entfernt das Abonnement.

> [!WARNING]
>
> Wenn du den API-Schlüssel löschst, werden auch seine Abonnements entfernt. Verbinde die Workflows erneut oder registriere sie neu, wenn du einen Schlüssel ersetzt. Der Workspace benötigt auch für die Zustellung Teams Connect.


## OpenAPI

````yaml de/api-reference/openapi.json POST /zapier/subscriptions
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:
  /zapier/subscriptions:
    post:
      tags:
        - Zapier
      summary: Kontaktereignisse abonnieren
      description: >-
        Registriere einen Zapier-REST-Hook. Nur HTTPS-URLs auf hooks.zapier.com
        werden akzeptiert. Bei erneutem Senden desselben Workspaces,
        Ereignistyps und derselben URL wird die vorhandene ID zurückgegeben und
        mit dem für diese Anfrage verwendeten API-Schlüssel verknüpft. Maximale
        Größe des Request-Bodys: 8 KiB (8.192 Bytes).
      operationId: subscribeZapierContactEvents
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ZapierSubscriptionRequest'
            example:
              eventType: contact.created
              targetUrl: https://hooks.zapier.com/hooks/standard/123456/example/
      responses:
        '201':
          description: >-
            Abonnement erstellt oder wiederverwendet. Die Antwort enthält keinen
            data-Wrapper.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ZapierSubscriptionResponse'
              example:
                id: 1f84ece7-9acc-4abd-8ce1-925b2a5df17d
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          $ref: '#/components/responses/SubscriptionRequired'
        '413':
          $ref: '#/components/responses/ZapierPayloadTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    ZapierSubscriptionRequest:
      type: object
      required:
        - eventType
        - targetUrl
      properties:
        eventType:
          $ref: '#/components/schemas/ZapierContactEventType'
        targetUrl:
          type: string
          format: uri
          maxLength: 2048
          description: >-
            Zapier-Ziel: eine HTTPS-URL auf hooks.zapier.com ohne Benutzername,
            Passwort oder Fragment.
          example: https://hooks.zapier.com/hooks/standard/123456/example/
    ZapierSubscriptionResponse:
      type: object
      required:
        - id
      description: Die Abonnement-ID, direkt und ohne data-Wrapper zurückgegeben.
      properties:
        id:
          type: string
          format: uuid
          description: Speichere diese ID, um das Abonnement zu beenden.
          example: 1f84ece7-9acc-4abd-8ce1-925b2a5df17d
    ZapierContactEventType:
      type: string
      enum:
        - contact.created
        - contact.updated
      description: Das Tapify-Kontaktereignis, das dieser Zapier-Trigger verwendet.
    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
  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.
    ZapierPayloadTooLarge:
      description: Die JSON-Anfrage ist größer als 8 KiB (8.192 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.