REST API
Vessels For Orders API
A live feed of ships sailing for orders — underway with no declared destination, which in practice means open and available. JSON or GeoJSON, filterable by ship type, region or bounding box.
The endpoint
GET https://shyppy.cy/api/v1/vessels-for-orders
Authentication. Send your key in an x-api-key header, or as Authorization: Bearer <key> — either works. Requests without a valid key return 401. CORS is open, so a browser-based map can call it directly without a proxy.
Request
curl -H "x-api-key: YOUR_KEY" \ "https://shyppy.cy/api/v1/vessels-for-orders?type=tanker®ion=mediterranean&limit=50"
Query parameters
| Parameter | Values | Description |
|---|---|---|
type |
tanker, cargo, passenger, other |
Ship category, derived from the AIS ship-type code. Tankers are AIS types 80–89, cargo 70–79, passenger 60–69. |
region |
mediterranean, middle-east, south-east-asia, north-west-europe |
Restricts results to a named trading area. Convenience wrapper around a bounding box. |
bbox |
minLng,minLat,maxLng,maxLat |
Arbitrary bounding box in decimal degrees, for a region of your own. Combine with type if you like. |
limit |
1–1000 (default 1000) | Maximum vessels returned. Values above 1000 are capped. |
format |
geojson |
Returns a GeoJSON FeatureCollection instead of the default JSON envelope. Vessels with no known position are omitted. |
Response
Default JSON
{
"generated_at": "2026-08-06T09:14:22.481Z",
"count": 2,
"vessels": [
{
"mmsi": 241486000,
"imo": "9412137",
"name": "EXAMPLE TRADER",
"category": "Tanker",
"type": "Tanker (hazard A, major)",
"type_code": 80,
"destination": "FOR ORDERS",
"latitude": 35.412,
"longitude": 23.887,
"nearest_port": {
"name": "Chania",
"country": "GR",
"distance_km": 31
},
"length_m": 183,
"beam_m": 32,
"draught_m": 11.4,
"last_seen": "2026-08-06T09:11:08.000Z"
}
]
}
With format=geojson
{
"type": "FeatureCollection",
"generated_at": "2026-08-06T09:14:22.481Z",
"count": 1,
"features": [
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [23.887, 35.412] },
"properties": {
"mmsi": 241486000,
"imo": "9412137",
"name": "EXAMPLE TRADER",
"category": "Tanker",
"destination": "FOR ORDERS",
"nearest_port": { "name": "Chania", "country": "GR", "distance_km": 31 }
}
}
]
}
| Field | Notes |
|---|---|
mmsi | Maritime Mobile Service Identity — always present, the vessel's AIS identifier. |
imo | IMO number when the vessel has broadcast one. null otherwise. |
destination | The destination text the vessel actually transmitted — FOR ORDERS, ORDERS, ORDR and similar. Passed through unmodified. |
nearest_port | Closest port to the current position with its distance in kilometres, so you can see roughly where a vessel is open without plotting it. |
draught_m | Draught as broadcast. Useful as a rough laden/ballast indicator alongside the for-orders signal. |
last_seen | When this vessel last broadcast. Compare against generated_at to judge freshness. |
Caching and limits
Responses carry Cache-Control: public, max-age=60. The underlying data changes as AIS broadcasts arrive, so polling more than once a minute gains nothing — and a CDN or browser cache will serve the same payload anyway. Entries drop out of the feed after 24 hours without a broadcast, which keeps it a picture of vessels currently open rather than an archive.
What this is good for
The for-orders signal is one of the few genuinely public indicators of open tonnage. A vessel underway with no declared discharge port is a vessel whose next voyage has not been fixed. Chartering desks use it to find candidates before they are offered around; shipbroking platforms use it to populate a live availability map; commodity traders watch it as a soft signal of where spot capacity is building up.
The same data drives our own public for-orders board and the weekly tonnage report, so you can see exactly what the feed contains before writing a line of code.
Common questions
What does "sailing for orders" mean?
A ship is sailing for orders when it is underway but has not been told where to discharge — the charterer has not fixed a destination. Rather than a port, the master broadcasts something like FOR ORDERS. For a broker it is the clearest public signal that a vessel is open.
Where does the data come from?
Live AIS. A worldwide stream is monitored continuously for vessels whose declared destination matches the for-orders pattern. Nothing is inferred — the destination string is what the vessel itself transmitted.
How fresh is it?
Vessels appear as their broadcasts arrive, usually within minutes. Every response carries generated_at, and every vessel a last_seen, so you can judge staleness rather than take our word for it.
Can I use it directly in a browser map?
Yes. CORS is open and format=geojson returns something Leaflet or Mapbox will accept as-is, so a front-end can call the endpoint without a server in between.
How do I get a key?
Keys are issued on request rather than self-serve — email us with a line about what you're building.
Related
Build with the for-orders feed
Tell us what you're building and we'll issue a key.
Request an API Key