Travel · Beta
Perk
API integration
Ship Travel features without building the integration. Full Perk API access via Proxy and 30+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with Perk
Common scenarios for SaaS companies building Perk integrations for their customers.
Auto-reconcile travel expenses in your expense platform
Expense management and corporate card SaaS can ingest TravelPerk invoices with line-level detail to automatically match transactions, eliminate manual receipt chasing, and close the books faster.
Sync employees and cost centers from your HRIS
HRIS and identity platforms can push employee lifecycle changes into TravelPerk via SCIM — provisioning new hires, moving them across cost centers, and deactivating leavers so travel policy always reflects the current org.
Push ERP project codes into TravelPerk at booking time
ERP and PSA platforms can inject live project or client codes as custom field options so travelers tag trips correctly, enabling automated client rebilling and accurate GL coding downstream.
Power carbon accounting from granular trip data
ESG and sustainability SaaS can subscribe to trip events and pull booking-level itineraries (flights, trains, cars) to calculate Scope 3 emissions and build live sustainability dashboards for their customers.
Centralize travel visibility in finance and ops dashboards
FP&A and operations tools can list trips, bookings, and suppliers to give customers a live view of upcoming travel, committed spend, and supplier concentration without logging into TravelPerk.
What You Can Build
Ship these features with Truto + Perk
Concrete product features your team can ship faster by leveraging Truto’s Perk integration instead of building from scratch.
Real-time invoice ingestion with PDF attachments
Subscribe to TravelPerk webhooks for issued invoices, then pull invoice lines and the compliant PDF to post fully-reconciled entries into your ledger or expense product.
SCIM-based employee provisioning
Create, update, bulk-update, and deactivate TravelPerk users directly from your HRIS or IdP using the SCIM endpoints, including schema discovery for custom attributes.
Two-way cost center management
Create and update TravelPerk cost centers, bulk-assign users, and manage cost center access so your customers' org structure stays mirrored between your product and TravelPerk.
Dynamic custom field option sync
Push project codes, client IDs, or GL tags as custom field select options into TravelPerk — and archive stale ones — so travelers always pick from an up-to-date list at booking time.
Trip and booking data pipeline for analytics
List trips, trip custom fields, and bookings to feed carbon calculators, travel analytics, or client rebilling workflows with granular itinerary data.
Webhook lifecycle management from your app
Programmatically create, test, update, and delete TravelPerk webhooks per customer so each tenant gets isolated, reliable event delivery without manual setup.
SuperAI
Perk AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
list_all_perk_profiles
List all invoice profiles associated to this TravelPerk account. Returns: id, company_id, name, payment_method_type, billing_period, currency, billing_information.
list_all_perk_invoices
List TravelPerk invoices with filters for profile, serial number, billing period, status, issuing and due dates, and sort order. Returns: serial_number, profile_id, profile_name, billing_information, tk_billing_address, mode, status, due_date, currency, total, and 11 more. Only invoices issued on or after January 1st 2019 are returned.
get_single_perk_invoice_by_id
Get a single TravelPerk invoice by id, where id is the invoice serial number (e.g. INV-01-987654). Returns the full invoice including serial_number, profile_name, status, total, taxes_summary, lines, and pdf. Required: id.
list_all_perk_invoices_lines
List all invoice lines in TravelPerk with optional filters. Returns: id, expense_date, description, quantity, unit_price, total_amount, metadata, invoice_serial_number, invoice_status, currency, and 10 more. Only invoices issued on or after January 1st 2019 are returned; network_transaction_id cannot be combined with other filters.
get_single_perk_invoice_pdf_by_id
Download a TravelPerk invoice in PDF format. Returns the invoice document itself as binary PDF file content, not a JSON object. INV-01-987654). Required: id.
list_all_perk_trips
List all trips in TravelPerk, returned in descending order of modified time. Returns: id, trip_name, start, start_datetime_utc, start_datetime_local, end, end_datetime_utc, end_datetime_local, status, modified, start_location, end_location, booker_id.
get_single_perk_trip_by_id
Get a single TravelPerk trip by id. Returns: id, trip_name, start, start_datetime_utc, start_datetime_local, end, end_datetime_utc, end_datetime_local, status, modified, start_location, end_location, booker_id. Required: id.
list_all_perk_trip_custom_fields
List all custom field values associated with a trip in TravelPerk. Returns: trip_id, created_date, custom_fields (each with name and value). Required: trip_id.
list_all_perk_companies
List all companies associated to this TravelPerk account. Returns: id, name, address, tax_id, enabled, is_default. Max 50 per page.
list_all_perk_cost_centers
List all cost centers in your Perk organization. Returns each cost center's id, name, type, and count_users. The type field is only present when cost object types are enabled for your organization.
create_a_perk_cost_center
Create a cost center in Perk with the given name. Returns the created cost center including id, name, type, archived, approver, delegate, company scope, and owners. Required: name.
get_single_perk_cost_center_by_id
Get a single Perk cost center by id. Returns the full cost center including name, type, archived, approver, delegate, assigned users, company scope, and owners. Required: id.
update_a_perk_cost_center_by_id
Update a Perk cost center by id — rename it, archive or unarchive it, change approver, delegate, delegate expiry, company scope, or cost object type. Returns the updated cost center including id, name, type, archived, approver, delegate, and owners. Required: id.
perk_cost_centers_bulk_updates_bulk_update
Bulk update Perk cost centers in a single request: archive or unarchive them and/or set their cost object type. Returns: updated_count. When cost object types are not enabled, archive is required; when enabled, supply at least one of archive or a non-null type (max 256 chars; fails with 400 if any listed cost…. Required: id_list.
perk_cost_center_users_bulk_update
Replace all users assigned to a Perk cost center with the provided list; any users not in the list are removed from the cost center. Returns the updated cost center including id, name, users, count_users, and owners. Required: cost_center_id.
list_all_perk_custom_field_select_options
List the select options of a Perk custom field, filterable by value substring and status. Returns options with id, value, and is_archived. Required: custom_field_id. Max 100 options per page.
create_a_perk_custom_field_select_option
Create one or more select options on a Perk custom field, which must be a select or multi-select field with target 'BOOKING'. Returns the created or revived options with id, value, is_archived, and erp_code. Required: custom_field_id, select_options.
perk_custom_field_select_options_archive
Archive or unarchive a select option on a Perk custom field. Returns the option's resulting state with id, value, and is_archived. Required: custom_field_id, option_id, archive_action. Idempotent; unarchiving is rejected if another active option on the field has the same value.
list_all_perk_users
List Perk users, a read-only view of user information in the account (user management itself is handled separately via SCIM). Returns: id, attributes (the remaining user fields are not enumerated upstream).
list_all_perk_bookings
List bookings in Perk trips, ordered by modified time (most recent first). Returns each booking with id, trip_id, type (flight, train, hotel, car hire), status, start/end times, references, location, and legs. MICE bookings are not supported.
get_single_perk_webhook_by_id
Get a TravelPerk webhook endpoint by id. Returns the webhook subscription including id, name, url, secret, status, and its subscribed events. Required: id.
create_a_perk_webhook
Create a TravelPerk webhook endpoint that subscribes to one or more events. Returns the created subscription: id, name, url, secret, status, events, and delivery stats (successfully_sent, failed_sent, error_rate). The target url must be unique for the account.
update_a_perk_webhook_by_id
Update a TravelPerk webhook endpoint by id — edit its name, url, secret, status, or subscribed events. Returns the updated webhook: id, name, url, secret, status, events. The target url must be unique for the account (HTTP 409 otherwise). Required: id.
delete_a_perk_webhook_by_id
Delete a TravelPerk webhook endpoint by id. Returns an empty 204 response on success. Required: id.
create_a_perk_scim_user
Create a new user in Perk via SCIM. Returns the created user resource including id, userName, name, active, phoneNumbers, meta, and travel attributes (gender, dateOfBirth, travelPolicy, travelDocuments). Required: userName, name (givenName, familyName), active.
list_all_perk_scim_users
List SCIM-provisioned users in Perk. Returns user records with id, userName, name, active, phoneNumbers, meta, and travel attributes (gender, dateOfBirth, travelPolicy). Filter with a SCIM expression, e.g. filter=externalId eq
get_single_perk_scim_user_by_id
Get a single SCIM user in Perk by id. Returns the full user resource including id, userName, name, active, phoneNumbers, meta, and travel attributes (gender, dateOfBirth, travelPolicy, travelDocuments). Required: id.
update_a_perk_scim_user_by_id
Update an existing Perk SCIM user by id. Returns the updated user resource including id, userName, name, active, phoneNumbers, meta, and travel attributes (gender, dateOfBirth, travelPolicy, travelDocuments). Required: id, userName, name (givenName, familyName), active.
delete_a_perk_scim_user_by_id
Delete a Perk SCIM user by id. Returns an empty 204 response on success. Required: id.
perk_scim_users_bulk_update
Update attributes of an existing Perk SCIM user via a SCIM PatchOp body (add, remove, or replace operations); attributes not included stay unchanged. Returns the updated user: id, username, name, active, meta. Required: user_id, schemas, Operations. userName, name.givenName, name.familyName and active must not be null or empty.
list_all_perk_scim_schemas
List the SCIM schemas available in Perk (e.g. the User schema and the perkCustomFields extension schema). Returns each schema's id (URN), name, description, attributes, and meta.
get_single_perk_scim_schema_by_id
Get a Perk SCIM schema by id (the schema URN, e.g. urn:ietf:params:scim:schemas:core:2.0:User) and all its attributes. Returns: id, name, description, attributes, meta, openapi, info, servers, components, security, paths, x-readme, x-readme-fauxas. Required: id.
list_all_perk_suppliers
List suppliers in Perk. Returns the collection of supplier records as served by the suppliers endpoint; the supplier fields are not enumerated in Perk's current documentation, so treat the record shape as opaque.
perk_cost_center_access_bulk_update
Set the access configuration for a Perk cost center, controlling which users and user groups can access it. Returns the updated cost center including access_type, users, groups, approver, and delegate details. Required: cost_center_id, access_type.
create_a_perk_webhook_test
Send a test notification to a Perk webhook endpoint. Returns the test stub payload with test set to true, which Perk fires to the webhook's target URL. Required: webhook_id.
list_all_perk_webhook_events
List the webhook event types available in Perk that can be subscribed to (invoice.issued, trip.created/updated). Returns each event's model and trigger, with the trip.created/updated payload including id, trip_name, start/end datetime fields, status, modified, start_location, end_location, bookings, and booker_id.
Why Truto
Why use Truto’s MCP server for Perk
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Perk in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Perk account
Use Truto’s frontend SDK to connect your customer’s Perk account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Perk
Truto’s Proxy API is a 1-to-1 mapping of the Perk API. You call us, we call Perk, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Perk’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Perk on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How do end users connect their TravelPerk account?
Truto handles the auth handshake with TravelPerk so your users connect through a flow you embed in your product. Credentials and token refresh are managed by Truto — you call the normalized tools without storing secrets.
Can we react to TravelPerk events in real time?
Yes. TravelPerk supports webhooks for events like invoice issued and trip created/updated. You can use the webhook tools to create, test, update, and delete subscriptions per connected account, so you don't have to poll.
What invoice data is available for reconciliation?
You can list all invoices, fetch a single invoice by ID, list invoice lines for line-level detail (taxes, unit prices, metadata), and download the invoice PDF — enough to reconcile corporate card transactions and attach compliant receipts.
Does the integration support SCIM for user provisioning?
Yes. The SCIM tools cover create, read, update, delete, and bulk update of users, plus schema discovery, so HRIS and IdP products can run full employee lifecycle automation into TravelPerk.
Can we sync project codes or GL tags into TravelPerk?
Yes. You can create and archive custom field select options programmatically, which is the standard way to push ERP project codes or client IDs so travelers select them at booking time.
What trip and booking data can we pull for carbon or analytics use cases?
You can list all trips, retrieve a single trip by ID, read trip custom fields, and list bookings — giving you itinerary-level data (type, locations, suppliers) to drive emissions calculations or travel analytics.
Can we manage cost centers and user assignments programmatically?
Yes. The integration exposes list, create, get, and update for cost centers, plus bulk update tools for cost centers, their user assignments, and cost center access permissions.
Perk
Get Perk integrated into your app
Our team understands what it takes to make a Perk integration successful. A short, crisp 30 minute call with folks who understand the problem.