Perk Invoices API

The Invoices API from Perk — 4 operation(s) for invoices.

Operations 4

GET /invoices List all Invoices #
GET /invoices/lines List all Invoice lines #
GET /invoices/{serial_number} Retrieve an Invoice #
GET /invoices/{serial_number}/pdf Retrieve Invoice PDF #

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-invoices-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-invoices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: travelperk-api-v1 Invoices API
  version: '1.5'
servers:
- url: https://api.travelperk.com/
security:
- sec0: []
tags:
- name: Invoices
paths:
  /invoices:
    get:
      summary: List all Invoices
      description: Get list of invoices, filters may be added as query parameters. Only invoices issued on or after January 1st 2019 will be returned
      operationId: list-invoice
      parameters:
      - name: profile_id
        in: query
        description: Filter, only fetch invoices that match any of the provided invoice profile ids
        schema:
          type: array
          items:
            type: string
      - name: serial_number
        in: query
        description: Filter, only fetch invoices that exactly match one of the provided invoice serial numbers
        schema:
          type: array
          items:
            type: string
      - name: serial_number_contains
        in: query
        description: Filter, only fetch invoices that partially match a serial_number
        schema:
          type: string
      - name: billing_period
        in: query
        description: Filter, only fetch invoices that match a billing_period (instant, weekly, biweekly, monthly)
        schema:
          type: string
      - name: travelperk_bank_account_number
        in: query
        description: Filter, only fetch invoices that match the number of the tk_bank_account in the invoice
        schema:
          type: string
      - name: customer_country_name
        in: query
        description: Filter, only fetch invoices that match the country name of the customer's billing address in the invoice
        schema:
          type: string
      - name: status
        in: query
        description: 'Filter, only fetch invoices that match invoice''s status.  Available values : paid, unpaid'
        schema:
          type: string
      - name: issuing_date_gte
        in: query
        description: Filter, only fetch invoices where invoice.issuing_date is greater than or equal to this date. Dates should be in format YYYY-MM-DD.
        schema:
          type: string
          format: date
          default: '2023-11-10'
      - name: issuing_date_lte
        in: query
        description: Filter, only fetch invoices where invoice.issuing_date is less than or equal to this date. Dates should be in format YYYY-MM-DD.
        schema:
          type: string
          format: date
          default: '2023-11-10'
      - name: due_date_gte
        in: query
        description: Filter, only fetch invoices where invoice.due_date is greater than or equal to this date. Dates should be in format YYYY-MM-DD.
        schema:
          type: string
          format: date
      - name: due_date_lte
        in: query
        description: Filter, only fetch invoices where invoice.due_date is less than or equal to this date. Dates should be in format YYYY-MM-DD.
        schema:
          type: string
          format: date
      - name: limit
        in: query
        description: Maximum number of elements to return per page. See more info in [Pagination](reference#pagination-1)
        schema:
          type: integer
          format: int32
      - name: offset
        in: query
        description: Pagination offset index, 0 based.
        schema:
          type: integer
          format: int32
      - name: sort
        in: query
        description: 'Sorting criteria on fields in Invoice. Available values : issuing_date, -issuing_date'
        schema:
          type: string
          default: -issuing_date
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n   \"serial_number\": \"INV-01-987654\",\n   \"profile_id\": \"edb6322b-8e11-48e9-8d6f-6402e445e50d\",\n   \"company_id\": 1346,\n   \"profile_name\": \"My Company Ltd\",\n   \"billing_information\": {\n      \"legal_name\": \"My Company Ltd\",\n      \"vat_number\": \"GB123456789\",\n      \"address_line_1\": \"199 Bishopsgate\",\n      \"address_line_2\": \"Spitalfields\",\n      \"city\": \"London\",\n      \"postal_code\": \"EC2M 3TY\",\n      \"country_name\": \"United Kingdom\"\n   },\n   \"mode\": \"reseller\",\n   \"status\": \"paid\",\n   \"issuing_date\": \"2020-03-31\",\n   \"billing_period\": \"monthly\",\n   \"from_date\":  \"2020-03-01\",\n   \"to_date\": \"2020-03-31\",\n   \"due_date\": \"2020-04-15\",\n   \"currency\": \"EUR\",\n   \"total\": \"13579.24\",\n   \"taxes_summary\": [\n      {\n         \"tax_regime\": \"STAR\",\n         \"subtotal\": \"6543.21\",\n         \"tax_percentage\": \"0.00\",\n         \"tax_amount\": \"0.00\",\n         \"total\": \"6543.21\",\n      },\n      {\n         \"tax_regime\": \"G-VAT-R\",\n         \"subtotal\": \"5912.63\",\n         \"tax_percentage\": \"19.00\",\n         \"tax_amount\": \"1123.40\",\n         \"total\": \"7036.03\",\n      }\n   ],\n   \"reference\": \"My Company Ltd - SEPA - Monthly 2020-03\",\n   \"travelperk_bank_account\": {\n      \"bank_name\": \"La Caixa\",\n      \"account_number\": \"ES01 2345 6789 1098 7654 3210\",\n      \"bic\": \"CAIX ES BB XXX\",\n      \"reference\": \"INV-01-987654\"\n   },\n   \"pdf\": \"https://api.travelperk.com/invoices/INV-01-987654/pdf\"\n}"
      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/invoices"
        samples-languages:
        - curl
      tags:
      - Invoices
  /invoices/lines:
    get:
      summary: List all Invoice lines
      description: Get list of invoices lines, filters may be added as query parameters. Returns InvoiceLineExtended models.
      operationId: list-invoice-lines-1
      parameters:
      - name: profile_id
        in: query
        description: Filter, only fetch invoices that match any of the provided profile ids
        schema:
          type: array
          items:
            type: string
      - name: serial_number
        in: query
        description: Filter, only fetch invoices that exactly match one of the provided serial numbers
        schema:
          type: array
          items:
            type: string
      - name: serial_number_contains
        in: query
        description: Filter, only fetch lines on invoices that partially match invoice.serial_number
        schema:
          type: string
      - name: billing_period
        in: query
        description: Filter, only fetch invoices that match a billing_period (instant, weekly, biweekly, monthly)
        schema:
          type: string
      - name: travelperk_bank_account_number
        in: query
        description: Filters the invoices that need to be paid against a specific TravelPerk’s bank account, using its account number. See the tk_bank_account attribute of the Invoice model for more detail
        schema:
          type: string
      - name: customer_country_name
        in: query
        description: Filter, only fetch invoices that match the country name of the customer's billing address in the invoice
        schema:
          type: string
      - name: status
        in: query
        description: 'Filter, only fetch invoices that match invoice''s status.  Available values : paid, unpaid'
        schema:
          type: string
      - name: issuing_date_gte
        in: query
        description: Filter, only fetch invoices where invoice.issuing_date is greater than or equal to this date
        schema:
          type: string
          format: date
      - name: issuing_date_lte
        in: query
        description: Filter, only fetch invoices where invoice.issuing_date is less than or equal to this date
        schema:
          type: string
          format: date
      - name: due_date_gte
        in: query
        description: Filter, only fetch invoices where invoice.due_date is greater than or equal to this date
        schema:
          type: string
          format: date
      - name: due_date_lte
        in: query
        description: Filter, only fetch invoices where invoice.due_date is less than or equal to this date
        schema:
          type: string
          format: date
      - name: limit
        in: query
        description: Pagination maximum number of elements to return. See more info in [Pagination](reference#pagination-1)
        schema:
          type: integer
          format: int32
      - name: offset
        in: query
        description: Pagination offset index, 0 based.
        schema:
          type: integer
          format: int32
      - name: network_transaction_id
        in: query
        description: Filter, only fetch InvoiceLines that match the specified network transaction ID of the card transaction used to cover them. This ID is provided by card vendors such as expense card providers to help match card transactions with invoice lines in TravelPerk. This filter cannot be combined with other filters and is only available for invoices with dates after March 31, 2025.
        schema:
          type: string
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n    \"total\": 1,\n    \"offset\": 0,\n    \"limit\": 10,\n    \"invoice_lines\": [\n        {\n            \"id\": \"6dc6d45e-55f5-48cc-9e23-cad798b364ef\",\n            \"expense_date\": \"2020-02-13\",\n            \"description\": \"FLIGHT for Trip ID 1687664\",\n            \"quantity\": 1,\n            \"unit_price\": \"20.00000000\",\n            \"non_taxable_unit_price\": \"0E-8\",\n            \"tax_percentage\": \"0E-8\",\n            \"tax_amount\": \"0E-8\",\n            \"tax_regime\": \"STAR\",\n            \"total_amount\": \"20.00000000\",\n            \"metadata\": {\n              \"trip_id\": 1687664,\n              \"trip_name\": \"Meeting with German company GmbH\",\n              \"service\": \"flight\",\n              \"travelers\": [\n                { \"name\": \"John Doe\", \"email\": \"john.doe@mycompany.com\", \"external_id\": \"ASD123\" \n                }\n              ],\n            \t\"start_date\": \"2020-03-27\",\n              \"end_date\": \"2020-04-05\",\n              \"cost_center\": \"DACH Accounts\",\n              \"labels\": [ \"Sales trips\", \"Special\",],\n              \"vendor\": {\"code\": \"LH\", \"name\": \"Lufthansa\"},\n              \"out_of_policy\": false,\n              \"approvers\": [\n                { \"name\": \"Jake Bolt\", \"email\": \"jake.bolt@mycompany.com\", \"external_id\": \"ASD124\" \n                }\n              ],\n              \"booker\": { \"name\": \"Marien Lint\", \"email\": \"marien.lint@mycompany.com\", \"external_id\": \"ASD124\" \n        }\n            },\n          \"invoice_serial_number\": \"INV-01-190111\",\n          \"profile_id\": \"09d649d1-35fa-4d9f-b688-046d5790afd2\",\n          \"profile_name\": \"My Company Ltd\",\n          \"invoice_mode\": \"reseller\",\n          \"invoice_status\": \"paid\",\n          \"issuing_date\": \"2020-02-13\",\n          \"due_date\": \"2020-02-13\",\n          \"currency\": \"EUR\"\n        }\n    ]\n}"
      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/invoices/lines"
        samples-languages:
        - curl
      tags:
      - Invoices
  /invoices/{serial_number}:
    get:
      summary: Retrieve an Invoice
      description: Get invoice detail
      operationId: get-invoice
      parameters:
      - name: serial_number
        in: path
        description: invoice serial number
        schema:
          type: string
        required: true
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n   \"serial_number\": \"INV-01-987654\",\n   \"profile_id\": \"edb6322b-8e11-48e9-8d6f-6402e445e50d\",\n   \"profile_name\": \"My Company Ltd\",\n   \"billing_information\": {\n      \"legal_name\": \"My Company Ltd\",\n      \"vat_number\": \"GB123456789\",\n      \"address_line_1\": \"199 Bishopsgate\",\n      \"address_line_2\": \"Spitalfields\",\n      \"city\": \"London\",\n      \"postal_code\": \"EC2M 3TY\",\n      \"country_name\": \"United Kingdom\"\n   },\n   \"mode\": \"reseller\",\n   \"status\": \"paid\",\n   \"issuing_date\": \"2020-03-31\",\n   \"billing_period\": \"monthly\",\n   \"from_date\":  \"2020-03-01\",\n   \"to_date\": \"2020-03-31\",\n   \"due_date\": \"2020-04-15\",\n   \"currency\": \"EUR\",\n   \"total\": \"13579.24\",\n   \"lines\": {\n     \"total\": 15,\n     \"data\": [\n      (objects of type InvoiceLine)\n     ],\n     \"next\": \"/invoices/lines?serial_number=INV-01-987654&offset=10\"\n   },\n   \"taxes_summary\": [\n      {\n         \"tax_regime\": \"STAR\",\n         \"subtotal\": \"6543.21\",\n         \"tax_percentage\": \"0.00\",\n         \"tax_amount\": \"0.00\",\n         \"total\": \"6543.21\",\n      },\n      {\n         \"tax_regime\": \"G-VAT-R\",\n         \"subtotal\": \"5912.63\",\n         \"tax_percentage\": \"19.00\",\n         \"tax_amount\": \"1123.40\",\n         \"total\": \"7036.03\",\n      }\n   ],\n   \"reference\": \"My Company Ltd - SEPA - Monthly 2020-03\",\n   \"travelperk_bank_account\": {\n      \"bank_name\": \"La Caixa\",\n      \"account_number\": \"ES01 2345 6789 1098 7654 3210\",\n      \"bic\": \"CAIX ES BB XXX\",\n      \"reference\": \"INV-01-987654\"\n   },\n   \"pdf\": \"https://api.travelperk.com/invoices/INV-01-987654/pdf\"\n}"
      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/invoices/INV-01-987654"
        samples-languages:
        - curl
      tags:
      - Invoices
  /invoices/{serial_number}/pdf:
    get:
      summary: Retrieve Invoice PDF
      description: Download invoice in PDF format
      operationId: download-pdf
      parameters:
      - name: serial_number
        in: path
        description: invoice serial number
        schema:
          type: string
        required: true
      responses:
        '200':
          description: '200'
          content:
            text/plain:
              examples:
                Result:
                  value: '***binary***'
      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/invoices/INV-01-987654/pdf"
        samples-languages:
        - curl
      tags:
      - Invoices
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