TEQ Public API (1.0)

Download OpenAPI specification:

Introduction

With the TEQ API you can integrate your system with the TEQ platform. The API is designed to be easy to use and to provide a seamless integration experience.

The TEQ API is built on HTTP and is RESTful. It has predictable resource URLs and returns HTTP response codes to indicate errors. It also accepts and returns JSON in the HTTP body. Use your favorite HTTP/REST library in your programming language when using this API. This API reference documentation contains the most commonly integrated resources.

Authentication

The API uses OAuth2 for authentication. You will need to obtain an access token to use the API. The access token should be included in the Authorization header of each request. You can create your own access credentials directly in the TEQ application: go to Settings > Integrations > Public API Clients and create a new client.

OAuth 2.0 flow

The Authentication supports OAuth 2.0 Client Credentials flow

Authentication-endpoints:

Domain-header

For all API requests an HTTP-header domain must be included. This header should contain the domain/company name that the API-call should be directed to. You will receive this domain name when you sign up for the TEQ API.

TimeZone

The API uses the timezone of the client of the request to calculate dates and times. The timezone should be included in the HTTP-header TimeZone in the format Continent/City (e.g. Europe/Berlin).

Trips

Query live trip data - fetch trip lists, trip details, and the current status of trips on the road.

Returns a list of trips

Returns a list of trips based on the filters provided

Authorizations:
OAuth2
query Parameters
triptype
string
Examples:
  • triptype=normal - Normal trips
  • triptype=vip - VIP trips
  • triptype=airport - Airport trips

Trip type

status
string
Examples:
  • status=planning - Planning
  • status=running - running
  • status=closed - Closed

Trip status

department
integer
Example: department=1

The trip department Id

fromDate
string <date>
Example: fromDate=2026-03-01

From Date

toDate
string <date>
Example: toDate=2026-03-02

To Date

customerId
integer
Example: customerId=1000

The Id of the customer for the trip

driverId
integer
Example: driverId=251

The Id of the driver assigned to the trip

vehicleId
integer
Example: vehicleId=9

The Id of the vehicle assigned to the trip

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Returns a single trip

Returns a single trip

Authorizations:
OAuth2
path Parameters
id
required
string
Example: TQ-001001-S01-N001

Trip Id

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "tripID": "TQ-001001-S01-N001",
  • "tripType": "NORMAL",
  • "status": "planning",
  • "vehicleID": 10,
  • "driverID": 100,
  • "customerId": 1000,
  • "contactPerson": "John Doe",
  • "pax": 26,
  • "travelFrom": {
    },
  • "travelTo": {
    },
  • "garage": {
    },
  • "withdrawal": {
    },
  • "deliver": {
    },
  • "viaPoints": [
    ],
  • "flag": false,
  • "sign": "Sign value",
  • "alternativeTripName": "Field excursion",
  • "tripExecution": [
    ]
}

Gets the current status of a trip

Gets the current status of a trip

Authorizations:
OAuth2
path Parameters
id
required
string
Example: TE-0000001-S01-N001

Trip Id

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "status": "planning",
  • "current_location": {
    }
}

Customers

Create, update, and look up customers, including their addresses, contact persons, and fixed-trip pricing info.

Creates a new customer

Creates a new customer

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Request Body schema: application/json
required

Customer data

name
string
email
string <email>
selectAsInvoiceEmail
boolean
invoiceEmail
string <email>
type
string (CustomerType)
Enum: "person" "organization"
orgno
string
object (CustomerCategory)
customerNumber
string
parentCustomerId
integer
object (CustomerAddress)
object (CustomerAddress)
notes
string
paymentType
string
Enum: "Invoice" "Vipps" "Cash" "Card"
deadline
integer
creditLimit
integer
invoiceMethod
string
Enum: "Email" "Post"
purchaseOrder
string
language
string
Enum: "Norwegian" "English" "Swedish" "Danish"
currency
string
Enum: "NOK" "SEK" "DKK" "EUR" "USD" "GBP" "BDT"
EAN
string
VATNumber
string
includeVAT
boolean
displayVAT
boolean
fixedDiscountPercentage
number
Array of objects (NewContactPerson)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "selectAsInvoiceEmail": true,
  • "invoiceEmail": "invoice@customer.com",
  • "type": "person",
  • "orgno": "string",
  • "category": {
    },
  • "customerNumber": "string",
  • "parentCustomerId": 0,
  • "address1": {
    },
  • "address2": {
    },
  • "notes": "string",
  • "paymentType": "Invoice",
  • "deadline": 0,
  • "creditLimit": 0,
  • "invoiceMethod": "Email",
  • "purchaseOrder": "string",
  • "language": "Norwegian",
  • "currency": "NOK",
  • "EAN": "string",
  • "VATNumber": "string",
  • "includeVAT": true,
  • "displayVAT": true,
  • "fixedDiscountPercentage": 0,
  • "contactPersons": [
    ]
}

Response samples

Content type
application/json
{
  • "customerId": "string"
}

Returns a list of customers

Returns a list of customers based on the filters provided

Authorizations:
OAuth2
query Parameters
type
string (CustomerType)
Enum: "person" "organization"
name
string
email
string
orgno
string
freetext
string
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "count": 552,
  • "results": [
    ]
}

Updates an existing customer

Updates an existing customer

Authorizations:
OAuth2
path Parameters
id
required
integer

Customer ID

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Request Body schema: application/json
required

Customer data

name
string
email
string <email>
type
string (CustomerType)
Enum: "person" "organization"
orgno
string
object (CustomerCategory)
customerNumber
string
parentCustomerId
integer
orgNumber
string
object (Address)
object (Address)
notes
string
paymentType
string
Enum: "Invoice" "Vipps" "Cash" "Card"
deadline
integer
creditLimit
integer
invoiceMethod
string
Enum: "Email" "Post"
purchaseOrder
string
language
string
Enum: "Norwegian" "English" "Swedish" "Danish"
currency
string
Enum: "NOK" "SEK" "DKK" "EUR" "USD" "GBP" "BDT"
EAN
string
VATNumber
string
includeVAT
boolean
fixedDiscountPercentage
number
Array of objects (ContactPerson)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "type": "person",
  • "orgno": "string",
  • "category": {
    },
  • "customerNumber": "string",
  • "parentCustomerId": 0,
  • "orgNumber": "string",
  • "address1": {
    },
  • "address2": {
    },
  • "notes": "string",
  • "paymentType": "Invoice",
  • "deadline": 0,
  • "creditLimit": 0,
  • "invoiceMethod": "Email",
  • "purchaseOrder": "string",
  • "language": "Norwegian",
  • "currency": "NOK",
  • "EAN": "string",
  • "VATNumber": "string",
  • "includeVAT": true,
  • "fixedDiscountPercentage": 0,
  • "contactPersons": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Invalid request, please review the errors and retry the request"
}

Returns a list of fixed trips for a customer

Returns a list of fixed trips for a customer based on the filters provided

Authorizations:
OAuth2
path Parameters
id
required
integer

Customer ID

query Parameters
date
string <date>
Default: "today"

Date to get fixed trips for

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Customer-categories

Manage the customer categories used to group and price customers.

Creates a new customer category

Creates a new customer category

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Request Body schema: application/json
required

Customer category data

name
required
string
description
string
active
boolean
default
boolean

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "default": true
}

Response samples

Content type
application/json
{
  • "id": 0
}

Returns a list of customer categories

Returns a list of customer categories based on the filters provided

Authorizations:
OAuth2
query Parameters
name
string
active
boolean
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Returns a customer category by ID

Returns a customer category by ID

Authorizations:
OAuth2
path Parameters
id
required
integer

Customer category ID

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "default": true
}

Updates an existing customer category

Updates an existing customer category

Authorizations:
OAuth2
path Parameters
id
required
integer

Customer category ID

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Request Body schema: application/json
required

Customer category data

name
required
string
description
string
active
boolean
default
boolean

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "active": true,
  • "default": true
}

Response samples

Content type
application/json
{
  • "message": "Invalid request, please review the errors and retry the request"
}

Requests

Submit new trip requests, either for an existing customer or together with new customer details.

Create a new Request

Creates a new Request in the system

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Request Body schema: application/json
required

Request data

tripType
string
Default: "OneWay"
Enum: "OneWay" "Return"
departureDate
required
string <date>
departureTime
required
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
returnDate
string <date>
returnTime
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
required
object (Location)
required
object (Location)
pax
required
integer <int32>
busAvailableDuringStay
boolean
Default: false
comments
string
acceptTerms
required
boolean
externalReference
string
customerType
required
string
Default: "person"
Enum: "person" "organization"
companyName
string
companyOrgNumber
string
firstName
required
string
lastName
required
string
email
required
string <email>
phoneNo
required
string

Responses

Request samples

Content type
application/json
{
  • "tripType": "OneWay",
  • "departureDate": "2019-08-24",
  • "departureTime": "string",
  • "returnDate": "2019-08-24",
  • "returnTime": "string",
  • "travelFrom": {
    },
  • "travelTo": {
    },
  • "pax": 0,
  • "busAvailableDuringStay": false,
  • "comments": "string",
  • "acceptTerms": true,
  • "externalReference": "string",
  • "customerType": "person",
  • "companyName": "string",
  • "companyOrgNumber": "string",
  • "firstName": "string",
  • "lastName": "string",
  • "email": "user@example.com",
  • "phoneNo": "string"
}

Response samples

Content type
application/json
{
  • "requestId": "string",
  • "customerId": "string"
}

Create a new Request for a given customer

Create a new Request for a given customer

Authorizations:
OAuth2
path Parameters
customerId
required
integer

existing customer Id

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Request Body schema: application/json
required

Request data

tripType
string
Default: "OneWay"
Enum: "OneWay" "Return"
departureDate
required
string <date>
departureTime
required
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
returnDate
string <date>
returnTime
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
required
object (Location)
required
object (Location)
pax
required
integer <int32>
busAvailableDuringStay
boolean
Default: false
comments
string
acceptTerms
required
boolean
externalReference
string

Responses

Request samples

Content type
application/json
{
  • "tripType": "OneWay",
  • "departureDate": "2019-08-24",
  • "departureTime": "string",
  • "returnDate": "2019-08-24",
  • "returnTime": "string",
  • "travelFrom": {
    },
  • "travelTo": {
    },
  • "pax": 0,
  • "busAvailableDuringStay": false,
  • "comments": "string",
  • "acceptTerms": true,
  • "externalReference": "string"
}

Response samples

Content type
application/json
{
  • "requestId": "string"
}

Orders

Create orders, add trips to existing orders, and track order and order-confirmation status.

Get a single order with all order lines

Returns a single order including all trips and other order lines. Exactly one of orderId or orderNumber must be provided.

Authorizations:
OAuth2
query Parameters
orderId
integer
Example: orderId=34290

Internal order ID. Mutually exclusive with orderNumber.

orderNumber
string
Example: orderNumber=BT-034150-S01

Order number as displayed in the TEQ UI (e.g. BT-034150-S01). Mutually exclusive with orderId.

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Responses

Response samples

Content type
application/json
{
  • "orderId": "34290",
  • "orderNumber": "BT-034150-S01",
  • "status": "sale",
  • "customer": {
    },
  • "contactPerson": {
    },
  • "trips": [
    ]
}

Create a new Order for a given customer

Creates a new Order in the system

Authorizations:
OAuth2
path Parameters
customerId
required
integer

existing customer Id

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Request Body schema: application/json
required

Request data

orderContactPersonId
integer

The ID of the contact person for the order

object (NewContactPerson)
salesPersonId
integer

The ID of the sales person for the order

externalOrderReference
string

The external order reference

orderStatus
string
Default: "Active order"
Enum: "Draft" "Sent to customer" "Accepted by customer" "Active order"

The status to set for the newly created order

departmentId
integer

The ID of the department for the order

Array of objects (PostTrip)

Responses

Request samples

Content type
application/json
{
  • "orderContactPersonId": 2255,
  • "newOrderContactPerson": {
    },
  • "salesPersonId": 100,
  • "externalOrderReference": "EXT-12345",
  • "orderStatus": "Draft",
  • "departmentId": 1,
  • "trips": [
    ]
}

Response samples

Content type
application/json
{
  • "status": "success",
  • "orderId": "34290",
  • "gen_oid": "BT-034150-S01",
  • "createdRows": 1
}

Get the status for a given order

Returns the status for a given order and the status of all trips related to this order

Authorizations:
OAuth2
path Parameters
id
required
integer

Order ID

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "order_id": "3714",
  • "status": "active order",
  • "trips": {
    }
}

Get the order confirmation for a given order

Returns the orderconfirmation for the order in PDF format

Authorizations:
OAuth2
path Parameters
id
required
integer

existing order Id

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "pdf": "string"
}

Adds a trip to an existing order

Adds a new trip to an existing order

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Request Body schema: application/json
required

Request data

tripType
string
Default: "OneWay"
Enum: "OneWay" "Return"
departureDate
required
string <date>
departureTime
required
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
returnDate
string <date>
returnTime
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
boarding
integer

Number of minutes for boarding the passengers

disembarkation
integer

Number of minutes for disembarking the passengers

required
object (Location)
required
object (Location)
Array of objects (ViaPoint)
pax
required
integer <int32>
busAvailableDuringStay
boolean
Default: false
tripTypeId
integer

The id of the trip type (GET /core/settings/triptype) to use for the trip

flightno
string

The flight number for the trip, this field is only relevant, but mandatory when the tripTypeId is set to the type Airport Trip

groupReference
string

The group reference for the trip, this field is only relevant when the tripTypeId is set to the type Airport Trip

acceptTerms
required
boolean
vehicleLicensePlate
string

The license plate of the vehicle to use for the trip, only relevant if a specific vehicle is requested

pointOfContact
integer

Use an existing point of contact for the customer for this trip

object (NewContactPerson)
object
object
price
number <decimal>

The price of the trip (inc. VAT), only relevant if the trip is already priced and the TEQ price-calculator should be bypassed.

prepaid
boolean
Default: false

If the trip is prepaid

addToPlanning
boolean
Default: false

If true, the trip will be automatically planned to the chosen vehicle (requires vehicleLicensePlate: to be set)

object

The planned duration of the trip, only relevant if the trip is set to addToPlanning

Responses

Request samples

Content type
application/json
{
  • "tripType": "OneWay",
  • "departureDate": "2019-08-24",
  • "departureTime": "string",
  • "returnDate": "2019-08-24",
  • "returnTime": "string",
  • "boarding": 10,
  • "disembarkation": 15,
  • "travelFrom": {
    },
  • "travelTo": {
    },
  • "viaPoints": [
    ],
  • "pax": 0,
  • "busAvailableDuringStay": false,
  • "tripTypeId": 1,
  • "flightno": "AB123",
  • "groupReference": "string",
  • "acceptTerms": true,
  • "vehicleLicensePlate": "string",
  • "pointOfContact": 0,
  • "newPointOfContact": {
    },
  • "comments": {
    },
  • "details": {
    },
  • "price": 1000,
  • "prepaid": false,
  • "addToPlanning": false,
  • "plannedDuration": {
    }
}

Response samples

Content type
application/json
{
  • "message": "Invalid request, please review the errors and retry the request"
}

Capacity

Check available vehicle capacity for a given time range and department.

Returns the vehicle capacity for a given time

Returns the vehicle capacity for a given time

Authorizations:
OAuth2
query Parameters
startTime
required
string
Example: startTime=01.01.2025 10:00

The start-time for the trip. Format DD.MM.YYYY HH:MM

endTime
required
string
Example: endTime=01.01.2025 12:00

The end-time for the trip. Format DD.MM.YYYY HH:MM

departmentId
integer

Id of the department to get the capacity for

vehicleTypeId
integer

Id of the vehicle type to get the capacity for

pax
integer

The number of passengers to get the capacity for, vehicle type will be set to default based on the number of passengers

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
{
  • "capacity": "High",
  • "departmentId": 0,
  • "departmentName": "string",
  • "vehicletypeId": 0,
  • "vehicleTypeName": "string",
  • "tripCount": {
    },
  • "fullDayInfo": [
    ]
}

Price

Calculate trip prices ahead of creating a request or order.

Calculate the price for a trip

Calculates the price for a trip based on the given trip details

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Request Body schema: application/json
required

Trip details to calculate the price for

trip_direction
string
Default: "one-way"
Enum: "one-way" "return"

Whether the trip is one-way or a return trip

departureDate
required
string <date>
departureTime
required
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
returnDate
string <date>
returnTime
string^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$
required
object (Location)
required
object (Location)
pax
required
integer <int32>
productId
integer <int32>
busAvailableDuringStay
boolean
Default: false

Responses

Request samples

Content type
application/json
{
  • "trip_direction": "one-way",
  • "departureDate": "2019-08-24",
  • "departureTime": "string",
  • "returnDate": "2019-08-24",
  • "returnTime": "string",
  • "travelFrom": {
    },
  • "travelTo": {
    },
  • "pax": 0,
  • "productId": 0,
  • "busAvailableDuringStay": false
}

Response samples

Content type
application/json
{
  • "totalPrice": 1500,
  • "price_exVAT": 1250,
  • "vehicleTypeId": 1,
  • "trip": {
    },
  • "returnTrip": {
    }
}

Vehicles

Look up the vehicle fleet available in the TEQ platform.

Returns a list of vehicles

Returns a list of vehicles

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Employees

Look up employees and their calendar and availability entries.

Returns a list of employees

Returns a list of employees

Authorizations:
OAuth2
query Parameters
name
string

Name of the employee

number
integer

Employee number

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Returns calendar entries for an employee

Returns calendar entries for an employee

Authorizations:
OAuth2
path Parameters
id
required
string

The ID of the employee

query Parameters
start
string <date>

Start date for the calendar range (YYYY-MM-DD)

end
string <date>

End date for the calendar range (YYYY-MM-DD)

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

TimeZone
string
Example: Europe/Berlin

The timezone of the client of the request

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Settings

Retrieve platform-level configuration, such as the available trip types.

Returns a list of trip types

Returns a list of trip types

Authorizations:
OAuth2
header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Products

Look up additional products and items that can be billed on trips and orders.

Returns a list of products

Returns a list of products

Authorizations:
OAuth2
query Parameters
itemCode
integer

The Item Code to search for

description
string

The Item Description to search for

header Parameters
domain
required
string
Example: ferdia

The domain/company to direct the API-call to

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Changelog

2026-10-10

  • Updated the documentation site layout to match Ferdia branding, fixed typos, and documented OAuth2 scopes for each endpoint.
  • Added SEO metadata (robots.txt, sitemap.xml, canonical/meta tags) so developer.ferdia.co is indexable by search engines.

2026-10-03

  • Added departmentId to the POST /sales/orders request payload.

2026-09-24

  • Added POST /sales/price/calculateTripPrice endpoint to calculate a trip price ahead of creating a request or order.

2026-08-27

  • Renamed the order confirmation endpoint to GET /sales/orders/orderConfirmation/{id} for naming consistency.

2026-08-24

  • Added GET /core/products endpoint to list products.
  • Added GET /sales/orders endpoint to list orders, including new OrderDetail, OrderCustomer, OrderTrip, and AdditionalItem schemas.
  • Promoted POST /sales/orders/addtrip/{id} from staging-only to production.

2026-08-18

  • Added customer category management: POST/GET /sales/customer-categories and GET/PUT /sales/customer-categories/{id}.
  • Added GET /sales/orders/orderconfirmation/{id} endpoint to retrieve the order confirmation PDF.

2026-07-15

  • Added POST /sales/orders/addtrip/{id} endpoint (staging only) to add a trip to an existing order.

2026-07-02

  • Added GET /core/settings/triptypes endpoint to list trip types.
  • Added boarding and disembarkation fields to the trip payload.
  • Restructured order/trip payloads: order-level fields (status, contact person, sales person, external reference) moved from the trip payload to the order payload; added status and createdRows to the order-creation response.