Perk Webhooks API
The Webhooks API from Perk — 4 operation(s) for webhooks.
The Webhooks API from Perk — 4 operation(s) for webhooks.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/perk:perk-webhooks-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: 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