https://www.brainiac.software/api/v1/maritime-intelligence/vessel-identity-normalize$0.03 USDCNormalize vessel identity
Normalize caller-supplied vessel name, IMO, MMSI, call sign, flag, owner, and operator fields. Validates IMO checksum when an IMO is supplied. Paid AIS coverage is not used.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"mmsi": "636019825",
"callSign": "A8AA9",
"flag": "LR",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "normalized",
"vesselCount": 1,
"items": [
{
"id": "V1",
"name": "MV Example Star",
"normalizedName": "example star",
"imo": "9074729",
"imoSupplied": true,
"imoChecksumValid": true,
"mmsi": "636019825",
"mmsiSupplied": true,
"callSign": "A8AA9",
"flag": "LR",
"vesselType": "",
"owner": "Example Shipping Ltd",
"normalizedOwner": "example shipping",
"operator": "Example Shipping Ltd",
"normalizedOperator": "example shipping",
"identityKey": "9074729",
"source": "Caller-supplied",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/vessel-identity-normalize" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"mmsi": "636019825",
"callSign": "A8AA9",
"flag": "LR",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/ais-track-gap-detect$0.04 USDCDetect AIS track gaps
Detect time gaps and implied speeds between caller-supplied AIS points. Global real-time AIS coverage is not claimed.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"gapThresholdHours": 6,
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A2",
"vesselId": "V1",
"at": "2026-11-01T02:00:00.000Z",
"lat": 1.5,
"lon": 104,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A3",
"vesselId": "V1",
"at": "2026-11-01T12:00:00.000Z",
"lat": 2,
"lon": 105,
"sogKn": 11,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"vesselCount": 1,
"gapCount": 2,
"items": [
{
"vesselKey": "V1",
"fromId": "A2",
"toId": "A3",
"fromAt": "2026-11-01T02:00:00.000Z",
"toAt": "2026-11-01T12:00:00.000Z",
"gapHours": 10,
"distanceKm": 124.2732,
"impliedSpeedKn": 6.7102,
"isGap": true,
"thresholdHours": 6,
"source": "Caller-supplied AIS export; Caller-supplied AIS export",
"paidAisUsed": false
},
{
"vesselKey": "V1",
"fromId": "A3",
"toId": "A4",
"fromAt": "2026-11-01T12:00:00.000Z",
"toAt": "2026-11-02T00:00:00.000Z",
"gapHours": 12,
"distanceKm": 471.2937,
"impliedSpeedKn": 21.2065,
"isGap": true,
"thresholdHours": 6,
"source": "Caller-supplied AIS export; Caller-supplied AIS export",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [
{
"kind": "observation",
"code": "ais_gap",
"subject": "V1",
"detail": "AIS gap of 10 hours between 2026-11-01T02:00:00.000Z and 2026-11-01T12:00:00.000Z."
},
{
"kind": "observation",
"code": "ais_gap",
"subject": "V1",
"detail": "AIS gap of 12 hours between 2026-11-01T12:00:00.000Z and 2026-11-02T00:00:00.000Z."
}
],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/ais-track-gap-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"gapThresholdHours": 6,
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A2",
"vesselId": "V1",
"at": "2026-11-01T02:00:00.000Z",
"lat": 1.5,
"lon": 104,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A3",
"vesselId": "V1",
"at": "2026-11-01T12:00:00.000Z",
"lat": 2,
"lon": 105,
"sogKn": 11,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/vessel-route-deviation-detect$0.04 USDCDetect vessel route deviations
Compare caller-supplied AIS points to planned waypoints and flag points beyond a distance threshold.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"deviationThresholdKm": 50,
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
],
"waypoints": [
{
"id": "W1",
"vesselId": "V1",
"name": "Singapore",
"lat": 1.2,
"lon": 103.8,
"sequence": 1,
"source": "Caller-supplied"
},
{
"id": "W2",
"vesselId": "V1",
"name": "Waypoint",
"lat": 2,
"lon": 105,
"sequence": 2,
"source": "Caller-supplied"
},
{
"id": "W3",
"vesselId": "V1",
"name": "Destination",
"lat": 22.3,
"lon": 114.2,
"sequence": 3,
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"pointCount": 2,
"diversionCount": 1,
"items": [
{
"vesselKey": "V1",
"aisId": "A4",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"distanceFromRouteKm": 174.2233,
"thresholdKm": 50,
"diverted": true,
"source": "Caller-supplied AIS export",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [
{
"kind": "conflict",
"code": "route_deviation",
"subject": "A4",
"detail": "AIS point is 174.2233 km from the planned route (threshold 50 km)."
}
],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/vessel-route-deviation-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"deviationThresholdKm": 50,
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
],
"waypoints": [
{
"id": "W1",
"vesselId": "V1",
"name": "Singapore",
"lat": 1.2,
"lon": 103.8,
"sequence": 1,
"source": "Caller-supplied"
},
{
"id": "W2",
"vesselId": "V1",
"name": "Waypoint",
"lat": 2,
"lon": 105,
"sequence": 2,
"source": "Caller-supplied"
},
{
"id": "W3",
"vesselId": "V1",
"name": "Destination",
"lat": 22.3,
"lon": 114.2,
"sequence": 3,
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/port-congestion-analyze$0.04 USDCAnalyze port congestion
Analyze caller-supplied port wait, queue, and berth-occupancy samples. Live terminal systems are not queried.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"portSamples": [
{
"id": "P1",
"portCode": "SGSIN",
"portName": "Singapore",
"at": "2026-11-04T21:00:00.000Z",
"vesselsWaiting": 15,
"averageWaitHours": 30,
"berthOccupancyPct": 90,
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"portCount": 1,
"congestedCount": 1,
"items": [
{
"portKey": "sgsin",
"portCode": "SGSIN",
"portName": "Singapore",
"sampleCount": 1,
"latestAt": "2026-11-04T21:00:00.000Z",
"averageWaitHours": 30,
"averageWaitHoursSupplied": true,
"averageVesselsWaiting": 15,
"averageVesselsWaitingSupplied": true,
"averageBerthOccupancyPct": 90,
"averageBerthOccupancyPctSupplied": true,
"congested": true,
"source": "Caller-supplied",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [
{
"kind": "observation",
"code": "port_congestion",
"subject": "sgsin",
"detail": "Caller-supplied port metrics exceed local congestion thresholds."
}
],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/port-congestion-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"portSamples": [
{
"id": "P1",
"portCode": "SGSIN",
"portName": "Singapore",
"at": "2026-11-04T21:00:00.000Z",
"vesselsWaiting": 15,
"averageWaitHours": 30,
"berthOccupancyPct": 90,
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/vessel-eta-estimate$0.04 USDCEstimate vessel ETA
Estimate ETA from the latest caller-supplied AIS point to a destination using geodesic distance and SOG or assumed speed.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"destinationLat": 22.3,
"destinationLon": 114.2,
"aisPoints": [
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "estimated",
"vesselCount": 1,
"items": [
{
"vesselKey": "V1",
"fromAt": "2026-11-02T00:00:00.000Z",
"fromLat": 5,
"fromLon": 108,
"destinationLat": 22.3,
"destinationLon": 114.2,
"distanceKm": 2035.9992,
"speedKn": 10,
"speedSource": "ais_sog",
"etaHours": 109.9352,
"etaAt": "2026-11-06T13:56:06.590Z",
"uncertaintyNote": "ETA is a straight-line geodesic estimate from the latest supplied AIS point. It ignores weather, traffic, canals, and speed changes.",
"source": "Caller-supplied AIS export",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/vessel-eta-estimate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"destinationLat": 22.3,
"destinationLon": 114.2,
"aisPoints": [
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/demurrage-cost-calculate$0.03 USDCCalculate demurrage cost
Calculate demurrage from caller-supplied allowed/used laytime and daily rate. Results are not legal invoices.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"demurrageCases": [
{
"id": "D1",
"vesselId": "V1",
"voyageId": "VOY1",
"laytimeAllowedHours": 48,
"laytimeUsedHours": 72,
"demurrageRatePerDay": 12000,
"currency": "USD",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "calculated",
"caseCount": 1,
"totalDemurrageAmount": 12000,
"items": [
{
"id": "D1",
"vesselId": "V1",
"voyageId": "VOY1",
"laytimeAllowedHours": 48,
"laytimeAllowedHoursSupplied": true,
"laytimeUsedHours": 72,
"laytimeUsedHoursSupplied": true,
"excessHours": 24,
"excessHoursSupplied": true,
"demurrageRatePerDay": 12000,
"demurrageRatePerDaySupplied": true,
"currency": "USD",
"demurrageAmount": 12000,
"demurrageAmountSupplied": true,
"legalInvoiceClaimed": false,
"source": "Caller-supplied"
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/demurrage-cost-calculate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"demurrageCases": [
{
"id": "D1",
"vesselId": "V1",
"voyageId": "VOY1",
"laytimeAllowedHours": 48,
"laytimeUsedHours": 72,
"demurrageRatePerDay": 12000,
"currency": "USD",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/vessel-sanctions-signal-check$0.05 USDCCheck vessel sanctions signals
Screen caller-supplied vessel/owner/operator names and IMOs against caller sanctions entries or optional key-free OFAC SDN names. Not a legal determination.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"source": "Caller-supplied"
}
],
"sanctionsEntries": [
{
"id": "S1",
"name": "Example Shipping Ltd",
"imo": "9074729",
"program": "Caller-list",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "checked",
"vesselCount": 1,
"exactSignalCount": 1,
"possibleSignalCount": 0,
"items": [
{
"vesselId": "V1",
"name": "MV Example Star",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"matchKind": "exact",
"matchScore": 1,
"matchedName": "Example Shipping Ltd",
"matchedId": "S1",
"program": "Caller-list",
"matchedBy": "imo",
"legalDeterminationClaimed": false,
"source": "Caller-supplied",
"paidAisUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [
{
"kind": "conflict",
"code": "sanctions_signal",
"subject": "V1",
"detail": "Exact vessel/owner/operator or IMO matched a sanctions list entry. This is a signal, not a legal determination."
}
],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/vessel-sanctions-signal-check" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"source": "Caller-supplied"
}
],
"sanctionsEntries": [
{
"id": "S1",
"name": "Example Shipping Ltd",
"imo": "9074729",
"program": "Caller-list",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/cargo-shipment-event-reconcile$0.04 USDCReconcile cargo shipment events
Reconcile document-side and ops-side caller-supplied cargo shipment events by shipment/BL, event type, time, location, and quantity.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"cargoEvents": [
{
"id": "C1",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "document",
"source": "Caller-supplied"
},
{
"id": "C2",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "ops",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reconciled",
"eventCount": 1,
"reconciledCount": 1,
"items": [
{
"key": "sh1|loaded|2026-11-01|sgsin",
"documentEventId": "C1",
"opsEventId": "C2",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"documentAt": "2026-11-01",
"opsAt": "2026-11-01",
"reconciled": true,
"quantityMatch": true,
"source": "Caller-supplied; Caller-supplied"
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/cargo-shipment-event-reconcile" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"cargoEvents": [
{
"id": "C1",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "document",
"source": "Caller-supplied"
},
{
"id": "C2",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "ops",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/vessel-ownership-history-normalize$0.03 USDCNormalize vessel ownership history
Normalize caller-supplied vessel ownership timeline rows and flag overlapping intervals. Registry filings are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"ownershipRecords": [
{
"id": "O1",
"vesselId": "V1",
"imo": "9074729",
"owner": "Old Owner SA",
"from": "2018-01-01",
"to": "2022-06-01",
"flag": "PA",
"source": "Caller-supplied"
},
{
"id": "O2",
"vesselId": "V1",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"from": "2022-06-01",
"flag": "LR",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "normalized",
"recordCount": 2,
"vesselCount": 1,
"items": [
{
"vesselKey": "V1",
"id": "O1",
"imo": "9074729",
"owner": "Old Owner SA",
"normalizedOwner": "old owner",
"ownerType": "",
"from": "2018-01-01",
"to": "2022-06-01",
"flag": "PA",
"sequence": 1,
"source": "Caller-supplied"
},
{
"vesselKey": "V1",
"id": "O2",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"normalizedOwner": "example shipping",
"ownerType": "",
"from": "2022-06-01",
"to": "",
"flag": "LR",
"sequence": 2,
"source": "Caller-supplied"
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/vessel-ownership-history-normalize" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"ownershipRecords": [
{
"id": "O1",
"vesselId": "V1",
"imo": "9074729",
"owner": "Old Owner SA",
"from": "2018-01-01",
"to": "2022-06-01",
"flag": "PA",
"source": "Caller-supplied"
},
{
"id": "O2",
"vesselId": "V1",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"from": "2022-06-01",
"flag": "LR",
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/maritime-intelligence/voyage-risk-report$0.08 USDCBuild maritime voyage risk report
Aggregate identity, AIS gaps, route deviation, port congestion, ETA, demurrage, sanctions signals, cargo reconciliation, and ownership history from caller-supplied records only.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
files | No | array; Array |
vessels | No | array; Array |
aisPoints | No | array; Array |
waypoints | No | array; Array |
portSamples | No | array; Array |
demurrageCases | No | array; Array |
sanctionsEntries | No | array; Array |
cargoEvents | No | array; Array |
ownershipRecords | No | array; Array |
fetchOfac | No | boolean |
asOf | No | string |
gapThresholdHours | No | number |
deviationThresholdKm | No | number |
destinationLat | No | number |
destinationLon | No | number |
assumedSpeedKn | No | number |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"gapThresholdHours": 6,
"deviationThresholdKm": 50,
"destinationLat": 22.3,
"destinationLon": 114.2,
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"mmsi": "636019825",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"flag": "LR",
"source": "Caller-supplied"
}
],
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A2",
"vesselId": "V1",
"at": "2026-11-01T02:00:00.000Z",
"lat": 1.5,
"lon": 104,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A3",
"vesselId": "V1",
"at": "2026-11-01T12:00:00.000Z",
"lat": 2,
"lon": 105,
"sogKn": 11,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
],
"waypoints": [
{
"id": "W1",
"vesselId": "V1",
"name": "Singapore",
"lat": 1.2,
"lon": 103.8,
"sequence": 1,
"source": "Caller-supplied"
},
{
"id": "W2",
"vesselId": "V1",
"name": "Waypoint",
"lat": 2,
"lon": 105,
"sequence": 2,
"source": "Caller-supplied"
},
{
"id": "W3",
"vesselId": "V1",
"name": "Destination",
"lat": 22.3,
"lon": 114.2,
"sequence": 3,
"source": "Caller-supplied"
}
],
"portSamples": [
{
"id": "P1",
"portCode": "SGSIN",
"portName": "Singapore",
"at": "2026-11-04T21:00:00.000Z",
"vesselsWaiting": 15,
"averageWaitHours": 30,
"berthOccupancyPct": 90,
"source": "Caller-supplied"
}
],
"demurrageCases": [
{
"id": "D1",
"vesselId": "V1",
"voyageId": "VOY1",
"laytimeAllowedHours": 48,
"laytimeUsedHours": 72,
"demurrageRatePerDay": 12000,
"currency": "USD",
"source": "Caller-supplied"
}
],
"sanctionsEntries": [
{
"id": "S1",
"name": "Example Shipping Ltd",
"imo": "9074729",
"program": "Caller-list",
"source": "Caller-supplied"
}
],
"cargoEvents": [
{
"id": "C1",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "document",
"source": "Caller-supplied"
},
{
"id": "C2",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "ops",
"source": "Caller-supplied"
}
],
"ownershipRecords": [
{
"id": "O1",
"vesselId": "V1",
"imo": "9074729",
"owner": "Old Owner SA",
"from": "2018-01-01",
"to": "2022-06-01",
"flag": "PA",
"source": "Caller-supplied"
},
{
"id": "O2",
"vesselId": "V1",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"from": "2022-06-01",
"flag": "LR",
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reported",
"asOf": "2026-11-04T21:00:00.000Z",
"sections": {
"identity": {
"vesselCount": 1
},
"aisGaps": {
"vesselCount": 1,
"gapCount": 2
},
"routeDeviation": {
"pointCount": 4,
"diversionCount": 1
},
"portCongestion": {
"portCount": 1,
"congestedCount": 1
},
"eta": {
"vesselCount": 1
},
"demurrage": {
"caseCount": 1,
"totalDemurrageAmount": 12000
},
"sanctions": {
"vesselCount": 1,
"exactSignalCount": 1,
"possibleSignalCount": 0
},
"cargo": {
"eventCount": 1,
"reconciledCount": 1
},
"ownership": {
"recordCount": 2,
"vesselCount": 1
}
},
"riskFlags": [
"ais_gaps",
"route_deviation",
"port_congestion",
"sanctions_exact_signal",
"demurrage_exposure"
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"paidAisUsed": false,
"globalRealtimeCoverageClaimed": false,
"ofacFetched": false,
"findings": [
{
"kind": "observation",
"code": "voyage_risk_flags",
"subject": "",
"detail": "Voyage risk flags from supplied records: ais_gaps, route_deviation, port_congestion, sanctions_exact_signal, demurrage_exposure."
}
],
"limitations": [
"Vessel identities, AIS points, waypoints, port samples, demurrage cases, sanctions entries, cargo events, and ownership records are copied only from labeled fields supplied by the caller, or from the key-free public OFAC SDN publication when fetchOfac is requested.",
"No paid AIS service is used and no API key is required. Global real-time vessel coverage is not claimed.",
"Track gaps, route deviations, and ETA values use only supplied positions/speeds and simple geodesic math. Missing values are not invented.",
"Sanctions signals are name/IMO comparisons only. Exact matches are labeled as signals, not confirmed legal determinations. Possible matches require human review.",
"Demurrage amounts use only caller-supplied laytime and rate inputs and are not legal invoices."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/maritime-intelligence/voyage-risk-report" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"gapThresholdHours": 6,
"deviationThresholdKm": 50,
"destinationLat": 22.3,
"destinationLon": 114.2,
"vessels": [
{
"id": "V1",
"name": "MV Example Star",
"imo": "9074729",
"mmsi": "636019825",
"owner": "Example Shipping Ltd",
"operator": "Example Shipping Ltd",
"flag": "LR",
"source": "Caller-supplied"
}
],
"aisPoints": [
{
"id": "A1",
"vesselId": "V1",
"at": "2026-11-01T00:00:00.000Z",
"lat": 1.2,
"lon": 103.8,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A2",
"vesselId": "V1",
"at": "2026-11-01T02:00:00.000Z",
"lat": 1.5,
"lon": 104,
"sogKn": 12,
"source": "Caller-supplied AIS export"
},
{
"id": "A3",
"vesselId": "V1",
"at": "2026-11-01T12:00:00.000Z",
"lat": 2,
"lon": 105,
"sogKn": 11,
"source": "Caller-supplied AIS export"
},
{
"id": "A4",
"vesselId": "V1",
"at": "2026-11-02T00:00:00.000Z",
"lat": 5,
"lon": 108,
"sogKn": 10,
"source": "Caller-supplied AIS export"
}
],
"waypoints": [
{
"id": "W1",
"vesselId": "V1",
"name": "Singapore",
"lat": 1.2,
"lon": 103.8,
"sequence": 1,
"source": "Caller-supplied"
},
{
"id": "W2",
"vesselId": "V1",
"name": "Waypoint",
"lat": 2,
"lon": 105,
"sequence": 2,
"source": "Caller-supplied"
},
{
"id": "W3",
"vesselId": "V1",
"name": "Destination",
"lat": 22.3,
"lon": 114.2,
"sequence": 3,
"source": "Caller-supplied"
}
],
"portSamples": [
{
"id": "P1",
"portCode": "SGSIN",
"portName": "Singapore",
"at": "2026-11-04T21:00:00.000Z",
"vesselsWaiting": 15,
"averageWaitHours": 30,
"berthOccupancyPct": 90,
"source": "Caller-supplied"
}
],
"demurrageCases": [
{
"id": "D1",
"vesselId": "V1",
"voyageId": "VOY1",
"laytimeAllowedHours": 48,
"laytimeUsedHours": 72,
"demurrageRatePerDay": 12000,
"currency": "USD",
"source": "Caller-supplied"
}
],
"sanctionsEntries": [
{
"id": "S1",
"name": "Example Shipping Ltd",
"imo": "9074729",
"program": "Caller-list",
"source": "Caller-supplied"
}
],
"cargoEvents": [
{
"id": "C1",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "document",
"source": "Caller-supplied"
},
{
"id": "C2",
"shipmentId": "SH1",
"billOfLading": "BL1",
"eventType": "loaded",
"at": "2026-11-01",
"location": "SGSIN",
"quantity": 1000,
"unit": "TEU",
"side": "ops",
"source": "Caller-supplied"
}
],
"ownershipRecords": [
{
"id": "O1",
"vesselId": "V1",
"imo": "9074729",
"owner": "Old Owner SA",
"from": "2018-01-01",
"to": "2022-06-01",
"flag": "PA",
"source": "Caller-supplied"
},
{
"id": "O2",
"vesselId": "V1",
"imo": "9074729",
"owner": "Example Shipping Ltd",
"from": "2022-06-01",
"flag": "LR",
"source": "Caller-supplied"
}
]
}
JSON