1. Home
  2. Open protocols
  3. API
Docs · REST / GraphQL

API

Full read/write access to schedules, availability, bookings, inventory and pricing over REST and GraphQL. The same surface the product is built on.

All protocols
StyleREST + GraphQL
AuthPer-operator keys
Rate limitPer operator
FormatJSON

BORA Systems is a ferry operations platform built in Tallinn, Estonia — 33 modules across 6 functional categories, each on its own microservice with a local API. Certified to ISO/IEC 27001 and GDPR-compliant. As of 2026, in daily service across three regions: the Baltic, the Channel Islands and the Persian Gulf.

Overview

The BORA API is the same surface the product is built on — there is no second-class public tier. Read a schedule, check availability, create a booking, adjust inventory or pricing: what the interface does, the API does.

It is available as REST and as GraphQL, so an integration can take whichever fits it. Every response is JSON, and every call is authenticated per operator.

Access and authentication

Access is granted per operator, and what a given set of credentials may reach is agreed with it — an integration that only reads schedules is not given the ability to write bookings.

The address to call and the credentials to call it with are not published here.

What the API covers

Schedules and sailings, live availability, bookings, pricing, reporting and payments — the same modules an operator runs, reachable programmatically rather than only through the interface.

Endpoint-by-endpoint detail — paths, fields, types — lives in the OpenAPI specification rather than on this page. That is deliberate: one description of the interface, kept current with the interface, instead of a second one here that drifts.

Limits, pagination and errors

Requests are rate-limited and list responses are paginated. The limits that apply are set per operator rather than fixed, so a bulk import is something to arrange rather than something to work around.

Error codes and what each one means are part of the specification, so an integration branches on the same definitions the API is built from.

GraphQL

The same data is available over GraphQL, for a caller that would rather ask for exactly the fields it needs in one round trip than assemble them from several REST calls. It runs under the same per-operator authentication.

The OpenAPI specification

There is a full OpenAPI specification for the API, and it — not this page — is the reference to build against. It is not published here; ask for it.

Frequently asked questions

Is the BORA API REST or GraphQL?

Both. The same data is available over REST and over GraphQL, under the same per-operator authentication.

How is the BORA API authenticated?

Per operator, and what a set of credentials is allowed to reach is agreed with the integration. The credentials themselves are not published here.

Are there rate limits?

Yes, and list responses are paginated. The limits are set per operator rather than fixed, so a bulk import is something to arrange rather than work around.

Can the BORA API create bookings?

Yes. Creating and changing bookings is part of the API, not a read-only view of it.

See API in action

A 30-minute walkthrough of the platform, and how it connects to what you run.

Head office

Akadeemia tee 15a, 12618 Tallinn, Estonia

Request a demo

See it on live data — a 30-minute walkthrough, from a web booking to the ramp closing.