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

# Aanmelden voor contactevents

> Registreer een Zapier-hook voor nieuwe of bijgewerkte Tapify-contacten.

Gebruik dit endpoint voor een Zapier REST Hook-trigger. Wil je zonder code een Zap instellen? Volg dan [Tapify koppelen aan Zapier](https://docs.tapify.app/nl/teams/integrations/zapier.md).

Stuur `contact.created` of `contact.updated` mee als `eventType`, samen met de `targetUrl` die Zapier levert.

> [!NOTE]
>
> Het doeladres moet een HTTPS-URL op `hooks.zapier.com` zijn, zonder gebruikersnaam, wachtwoord of URL-fragment. Dit endpoint accepteert alleen Zapier-hooks.

## De abonnements-ID bewaren

Het antwoord is een object met `id`, zonder een `data`-object eromheen. Bewaar deze ID om je later [af te melden](https://docs.tapify.app/nl/api-reference/zapier/unsubscribe.md).

Herhaal je het verzoek met dezelfde workspace, hetzelfde eventtype en dezelfde URL, dan krijg je de bestaande abonnements-ID terug. Het abonnement wordt ook gekoppeld aan de API-sleutel waarmee je het verzoek doet.

## Gegevens per event

Tapify stuurt een contactobject direct naar de Zapier-hook wanneer het gekozen event plaatsvindt. Dit object bevat geen `data`-object of veld `eventType`.

* **Nieuw contact:** `id` is de contact-ID.
* **Bijgewerkt contact:** `id` combineert de contact-ID met het tijdstip van de wijziging. `contactId` bevat de oorspronkelijke contact-ID voor andere API-verzoeken.

Contactgegevens kunnen interne notities en ingediende berichten bevatten. Stuur deze alleen naar een Zapier-workflow die toegang tot die gegevens mag hebben.

## Aflevering en toegang

Zorg dat je workflow herhaalde afleveringen kan verwerken. Bij tijdelijke fouten kan Tapify het opnieuw proberen, maar aflevering is niet gegarandeerd. Een `410 Gone`-antwoord van Zapier verwijdert het abonnement.

> [!WARNING]
>
> Als je de API-sleutel verwijdert, worden ook de bijbehorende abonnementen verwijderd. Verbind je workflows opnieuw of meld ze opnieuw aan wanneer je een sleutel vervangt. De workspace heeft ook Teams Connect nodig om events te kunnen afleveren.


## OpenAPI

````yaml nl/api-reference/openapi.json POST /zapier/subscriptions
openapi: 3.0.3
info:
  title: Tapify API
  version: 1.0.0
  description: >-
    Lees en beheer opgeslagen contacten, teamleden en hun digitale
    visitekaartjes in één Tapify Teams-workspace. Vereist Teams Connect-toegang
    en een API-sleutel voor de workspace.
servers:
  - url: https://tapify.app/api/v1
    description: Tapify API
security:
  - bearerAuth: []
  - apiKeyHeader: []
tags:
  - name: Workspace
    description: Controleer de workspace die aan een API-sleutel is gekoppeld.
  - name: Teamleden
    description: Beheer teamleden en hun digitale visitekaartjes.
  - name: Contacten
    description: Beheer contacten die in de workspace zijn verzameld.
  - name: Zapier
    description: >-
      Endpoints die de Tapify-integratie met Zapier gebruikt voor
      triggervoorbeelden en REST Hook-abonnementen.
paths:
  /zapier/subscriptions:
    post:
      tags:
        - Zapier
      summary: Aanmelden voor contactevents
      description: >-
        Registreer een Zapier REST Hook. Alleen HTTPS-URL's van hooks.zapier.com
        worden geaccepteerd. Een herhaling met dezelfde workspace, hetzelfde
        gebeurtenistype en dezelfde URL geeft de bestaande id terug en koppelt
        deze aan de API-sleutel van dit verzoek. Limiet voor de verzoekbody: 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 aangemaakt of hergebruikt. Het antwoord heeft geen
            omsluitend data-object.
          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-bestemming: een HTTPS-URL op hooks.zapier.com zonder
            gebruikersnaam, wachtwoord of fragment.
          example: https://hooks.zapier.com/hooks/standard/123456/example/
    ZapierSubscriptionResponse:
      type: object
      required:
        - id
      description: >-
        De abonnements-id, rechtstreeks teruggegeven zonder omsluitend
        data-object.
      properties:
        id:
          type: string
          format: uuid
          description: Bewaar deze id om het abonnement op te zeggen.
          example: 1f84ece7-9acc-4abd-8ce1-925b2a5df17d
    ZapierContactEventType:
      type: string
      enum:
        - contact.created
        - contact.updated
      description: De Tapify-contactgebeurtenis die deze Zapier-trigger gebruikt.
    ErrorResponse:
      type: object
      description: Informatie over een verzoek dat Tapify niet kon voltooien.
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Korte code die de fout aangeeft.
              example: bad_request
            message:
              type: string
              description: Begrijpelijke uitleg van wat er misging.
              example: Request body is invalid.
            details:
              type: object
              description: >-
                Aanvullende informatie die kan helpen om het verzoek te
                corrigeren.
              additionalProperties: true
              nullable: true
  responses:
    BadRequest:
      description: >-
        De JSON van het verzoek, een verplicht veld of een parameter is
        ongeldig.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: bad_request
              message: fullName is required.
    Unauthorized:
      description: De API-sleutel ontbreekt, is onjuist of is verwijderd.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_api_key
              message: API key is invalid or revoked.
    SubscriptionRequired:
      description: >-
        De workspace heeft Teams Connect-toegang nodig. Controleer het
        abonnement, de abonnementsstatus en de einddatum van de proefperiode.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: subscription_required
              message: Tapify Teams Connect is required for this feature.
    ZapierPayloadTooLarge:
      description: Het JSON-verzoek is groter dan 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: Er zijn te veel verzoeken in korte tijd verstuurd.
      headers:
        Retry-After:
          description: Aantal seconden dat je moet wachten voordat je het opnieuw probeert.
          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 kon het verzoek niet voltooien.
      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: API-sleutel die is gemaakt via Instellingen → API-sleutels.
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Alternatief voor Authorization: Bearer. Gebruik één authenticatiemethode
        per verzoek; een Bearer-token heeft voorrang.

````

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