Perk Webhooks API

The Webhooks API from Perk — 4 operation(s) for webhooks.

Operations 7

POST /webhooks Create a webhook endpoint #
GET /webhooks List all webhook endpoints #
GET /webhooks/events List all events #
PATCH /webhooks/{id} Update a webhook endpoint #
GET /webhooks/{id} Retrieve a webhook endpoint #
DELETE /webhooks/{id} Delete a webhook endpoint #
POST /webhooks/{id}/test Test a webhook endpoint #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/perk:perk-webhooks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

perk-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: travelperk-api-v1 Webhooks API
  version: '1.5'
servers:
- url: https://api.travelperk.com/
security:
- sec0: []
tags:
- name: Webhooks
paths:
  /webhooks:
    post:
      summary: Create a webhook endpoint
      description: Subscribes to one or more events, the target url of the webhook must be unique for the account.
      operationId: subscribe-to-event
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: A name that identifies this subscription. This name will be sent on the notification JSON payload.
                url:
                  type: string
                  description: Target URL where notification JSON payloads will be POSTed.
                secret:
                  type: string
                  description: A secret only know by the user and TravelPerk. This secret will be used to sign the payload and send it in the `Tk-Signature` header.
                events:
                  type: array
                  description: A list of event names to which the user is subscribing to.
                  items:
                    type: string
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"id\": \"b42820bb-24c9-48da-bded-487681e9c851\",\n    \"name\": \"invoice webhook\",\n    \"url\": \"https://mycompany.com/tkwebhooks\",\n    \"secret\": \"some secret\",\n    \"status\": \"enabled\",\n    \"events\": [\n        \"invoice.issued\"\n    ],\n    \"successfully_sent\": 0,\n    \"failed_sent\": 0,\n    \"error_rate\": 0.0\n}"
              schema:
                type: object
                properties:
                  id:
                    type: string
                    example: b42820bb-24c9-48da-bded-487681e9c851
                  name:
                    type: string
                    example: invoice webhook
                  url:
                    type: string
                    example: https://mycompany.com/tkwebhooks
                  secret:
                    type: string
                    example: some secret
                  status:
                    type: string
                    example: enabled
                  events:
                    type: array
                    items:
                      type: string
                      example: invoice.issued
                  successfully_sent:
                    type: integer
                    example: 0
                    default: 0
                  failed_sent:
                    type: integer
                    example: 0
                    default: 0
                  error_rate:
                    type: integer
                    example: 0
                    default: 0
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"url\": [\n        \"Enter a valid URL.\"\n    ]\n}"
              schema:
                type: object
                properties:
                  url:
                    type: array
                    items:
                      type: string
                      example: Enter a valid URL.
        '409':
          description: '409'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"error\": \"This subscription already exists. Use patch to amend it\"\n}"
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: This subscription already exists. Use patch to amend it
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl -d '{\"name\": \"invoice webhook\", \"url\": \"https://mycompany.com/tkwebhooks\", \"secret\":\"some secret\",\"events\": [\"invoice.issued\"]}' \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Content-Type: application/json' \\\n  -H 'Api-Version: 1' \\\n  -X POST https://api.sandbox-travelperk.com/webhooks\n\n\n"
        samples-languages:
        - curl
      tags:
      - Webhooks
    get:
      summary: List all webhook endpoints
      description: List all webhook subscriptions
      operationId: list-webhooks
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"webhooks\": [\n        {\n            \"id\": \"b42820bb-24c9-48da-bded-487681e9c851\",\n            \"name\": \"invoice webhook\",\n            \"url\": \"https://mycompany/tkwebhook\",\n            \"secret\": \"some secret\",\n            \"status\": \"enabled\",\n            \"events\": [\n                \"invoice.issued\",\n                \"invoiceline.created\"\n            ],\n            \"successfully_sent\": 2,\n            \"failed_sent\": 0,\n            \"error_rate\": 0.0\n        }\n    ]\n}"
              schema:
                type: object
                properties:
                  webhooks:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: b42820bb-24c9-48da-bded-487681e9c851
                        name:
                          type: string
                          example: invoice webhook
                        url:
                          type: string
                          example: https://mycompany/tkwebhook
                        secret:
                          type: string
                          example: some secret
                        status:
                          type: string
                          example: enabled
                        events:
                          type: array
                          items:
                            type: string
                            example: invoice.issued
                        successfully_sent:
                          type: integer
                          example: 2
                          default: 0
                        failed_sent:
                          type: integer
                          example: 0
                          default: 0
                        error_rate:
                          type: integer
                          example: 0
                          default: 0
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl -i \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -X GET https://api.travelperk.com/webhooks"
        samples-languages:
        - curl
      tags:
      - Webhooks
  /webhooks/events:
    get:
      summary: List all events
      description: List all events you can subscribe to
      operationId: list-events
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "[\n    {\n        \"name\": \"invoice.issued\",\n        \"topic\": \"invoices\"\n    },\n    {\n        \"name\": \"invoiceline.created\",\n        \"topic\": \"invoices\"\n    }\n]"
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                      example: invoice.issued
                    topic:
                      type: string
                      example: invoices
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl -i \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -X GET https://api.travelperk.com/webhooks/events"
        samples-languages:
        - curl
      tags:
      - Webhooks
  /webhooks/{id}:
    patch:
      summary: Update a webhook endpoint
      description: Updates the webhook endpoint. You may edit the url, the list of events, status, secret or name. The target url of the webhook must be unique for the account, if the target url is not unique a client error HTTP 409 will be returned.
      operationId: update-subscription
      parameters:
      - name: id
        in: path
        description: Unique identifier for the webhook.
        schema:
          type: integer
          format: int32
        required: true
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"id\": \"b42820bb-24c9-48da-bded-487681e9c851\",\n    \"name\": \"invoice webhook\",\n    \"url\": \"https://mycompany.com/tk_webhook\",\n    \"secret\": \"some secret\",\n    \"status\": \"enabled\",\n    \"events\": [\n        \"invoice.issued\",\n        \"invoiceline.created\"\n    ]\n}"
              schema:
                type: object
                properties:
                  id:
                    type: string
                    example: b42820bb-24c9-48da-bded-487681e9c851
                  name:
                    type: string
                    example: invoice webhook
                  url:
                    type: string
                    example: https://mycompany.com/tk_webhook
                  secret:
                    type: string
                    example: some secret
                  status:
                    type: string
                    example: enabled
                  events:
                    type: array
                    items:
                      type: string
                      example: invoice.issued
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"url\": [\n        \"Enter a valid URL.\"\n    ]\n}"
              schema:
                type: object
                properties:
                  url:
                    type: array
                    items:
                      type: string
                      example: Enter a valid URL.
        '409':
          description: '409'
          content:
            text/plain:
              examples:
                Result:
                  value: ''
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl -d '{\"enabled\":\"false\"}' \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -H 'Content-Type: application/json' \\\n  -X PATCH https://api.travelperk.com/webhooks/b42820bb-24c9-48da-bded-487681e9c851"
        samples-languages:
        - curl
      tags:
      - Webhooks
    get:
      summary: Retrieve a webhook endpoint
      description: Get details for a specific webhook endpoint
      operationId: get-subscription-details
      parameters:
      - name: id
        in: path
        description: Unique identifier for the webhook.
        schema:
          type: integer
          format: int32
        required: true
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"id\": \"b42820bb-24c9-48da-bded-487681e9c851\",\n    \"name\": \"invoice webhook\",\n    \"url\": \"https://mycompany.com/tk_webhook\",\n    \"secret\": \"some secret\",\n    \"status\": \"enabled\",\n    \"events\": [\n        \"invoice.issued\",\n        \"invoiceline.created\"\n    ],\n    \"successfully_sent\": 2,\n    \"failed_sent\": 0,\n    \"error_rate\": 0.0\n}"
              schema:
                type: object
                properties:
                  id:
                    type: string
                    example: b42820bb-24c9-48da-bded-487681e9c851
                  name:
                    type: string
                    example: invoice webhook
                  url:
                    type: string
                    example: https://mycompany.com/tk_webhook
                  secret:
                    type: string
                    example: some secret
                  status:
                    type: string
                    example: enabled
                  events:
                    type: array
                    items:
                      type: string
                      example: invoice.issued
                  successfully_sent:
                    type: integer
                    example: 2
                    default: 0
                  failed_sent:
                    type: integer
                    example: 0
                    default: 0
                  error_rate:
                    type: integer
                    example: 0
                    default: 0
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"error\": \"wrong uuid: b97f08e1-735-4f68-a937-542566780c52\"\n}"
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: 'wrong uuid: b97f08e1-735-4f68-a937-542566780c52'
        '404':
          description: '404'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"error\": \"Not found\"\n}"
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Not found
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl -i \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -X GET https://api.travelperk.com/webhooks/b42820bb-24c9-48da-bded-487681e9c851"
        samples-languages:
        - curl
      tags:
      - Webhooks
    delete:
      summary: Delete a webhook endpoint
      description: Deletes a webhook endpoint
      operationId: delete-webhook-subscription
      parameters:
      - name: id
        in: path
        description: Unique identifier for the webhook.
        schema:
          type: integer
          format: int32
        required: true
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: ''
        '404':
          description: '404'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"error\": \"Not found\"\n}"
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Not found
      deprecated: false
      x-readme:
        code-samples:
        - language: text
          code: "curl -i \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -X DELETE https://api.travelperk.com/webhooks/b42820bb-24c9-48da-bded-487681e9c851"
        samples-languages:
        - text
      tags:
      - Webhooks
  /webhooks/{id}/test:
    post:
      summary: Test a webhook endpoint
      description: Sends a sample payload to the webhook target URL.
      operationId: test-webhook
      parameters:
      - name: id
        in: path
        description: Unique identifier for the webhook.
        schema:
          type: integer
          format: int32
        required: true
      responses:
        '200':
          description: '200'
          content:
            text/plain:
              examples:
                Result:
                  value: ''
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
      deprecated: false
      x-readme:
        code-samples:
        - language: text
          code: "curl -i \\\n  -H 'Authorization: ApiKey 123456.abcdefghijklmnopqrstuvwxyz123456' \\\n  -H 'Api-Version: 1' \\\n  -X POST https://api.travelperk.com/webhooks/b42820bb-24c9-48da-bded-487681e9c851/test"
        samples-languages:
        - text
      tags:
      - Webhooks
components:
  securitySchemes:
    sec0:
      type: apiKey
      in: header
      x-default: ''
      name: Authorization
      x-bearer-format: token
x-readme-fauxas: true
x-provenance:
  method: searched
  source: https://developers.perk.com/reference
  harvested: '2026-10-14'
  tool: harvest-readme-openapi.py
  note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
  assembled_from:
  - https://developers.perk.com/reference/companies-1.md
  - https://developers.perk.com/reference/delete-webhook-subscription.md
  - https://developers.perk.com/reference/download-pdf.md
  - https://developers.perk.com/reference/get-invoice.md
  - https://developers.perk.com/reference/get-subscription-details.md
  - https://developers.perk.com/reference/list-all-bookings.md
  - https://developers.perk.com/reference/list-all-suppliers.md
  - https://developers.perk.com/reference/list-all-trips.md
  - https://developers.perk.com/reference/list-all-users-1.md
  - https://developers.perk.com/reference/list-events.md
  - https://developers.perk.com/reference/list-invoice-lines-1.md
  - https://developers.perk.com/reference/list-invoice-profiles.md
  - https://developers.perk.com/reference/list-invoice.md
  - https://developers.perk.com/reference/list-webhooks.md
  - https://developers.perk.com/reference/retrieve-a-trip-by-id.md
  - https://developers.perk.com/reference/retrieve-custom-fields.md
  - https://developers.perk.com/reference/subscribe-to-event.md
  - https://developers.perk.com/reference/test-webhook.md
  - https://developers.perk.com/reference/update-subscription.md
  merge:
    pages: 19
    deduped: 18
    conflicts_kept_first: 0