Skip to main content
Returns a paginated list of vessels filtered by their specific type, by their flag country, or by both at once. Reads the local database directly — no external providers involved, so latency is fast and consistent.
Credits: 10 credits per request, charged only when at least one vessel is returned. Empty results, validation errors, and auth failures cost nothing.

Request Parameters

Validation Rules

  1. At least one filter is required. type_specific alone, country alone, or both together. Sending neither returns 422.
  2. Values must come from the accepted lists below. This is not a free-text search — use dropdowns or autocomplete, not text inputs.
  3. Matching is case-insensitive and ignores leading/trailing spaces. bulk carrier, Bulk Carrier, and BULK CARRIER are all accepted.
  4. page must be ≥ 1. page=0 or negative values return 422.

Example Requests

Response — 200

Item Fields

Every field inside an item is nullable. Identifiers are normally present.

Empty Results

An empty result set is a normal 200, not an error:
This is returned for a valid filter combination with no matching vessels, or for a page past the end of the result set. No credit is charged.
Casing quirk: The database stores some values in inconsistent casing — there are rows with Albania and rows with ALBANIA, rows with Fishing vessel and rows with Fishing Vessel. Filtering is case-insensitive so a single query returns all of them, but country and typeSpecific in the response carry the raw stored value. A single page of results can legitimately contain both spellings of the same country or type. If you group, sort, or deduplicate on those fields client-side, compare them case-insensitively.

Errors

422 — No filter provided

422 — Value not in the accepted list

detail is an array with one entry per rejected field, so a request with two invalid values returns two entries. A filter that was not sent is never reported.
allowed_values always contains the complete list for that field. You can populate dropdowns at runtime instead of hardcoding: send one deliberately invalid request (e.g. type_specific=__list__) and read the lists from the 422 response. Validation happens before billing — neither request costs a credit.
The standard FastAPI 422 (missing header, page not a number) has a different detail shape. Check for detail[i].field before relying on the custom structure above.

Other Status Codes


Accepted Values for type_specific

361 accepted values. Matching is case-insensitive.

Accepted Values for country

273 accepted values. Matching is case-insensitive.
These lists are a snapshot of the current database values and are not expected to change. If the backend adds values, this page and the frontend dropdowns need updating together. Alternatively, use the runtime trick described in the 422 section to always reflect the current backend state.