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

ParameterValuesDescription
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 }
      }
    }
  ]
}
FieldNotes
mmsiMaritime Mobile Service Identity — always present, the vessel's AIS identifier.
imoIMO number when the vessel has broadcast one. null otherwise.
destinationThe destination text the vessel actually transmitted — FOR ORDERS, ORDERS, ORDR and similar. Passed through unmodified.
nearest_portClosest port to the current position with its distance in kilometres, so you can see roughly where a vessel is open without plotting it.
draught_mDraught as broadcast. Useful as a rough laden/ballast indicator alongside the for-orders signal.
last_seenWhen 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