{"openapi":"3.1.0","info":{"title":"Maritime & Shipping Intelligence API","version":"1.0.0","description":"Normalize vessel identities, detect AIS track gaps and route deviations, analyze port congestion, estimate ETAs, calculate demurrage, screen sanctions signals, reconcile cargo events, normalize ownership history, and build voyage risk reports—using caller-supplied AIS/shipping records plus optional key-free OFAC SDN data. Paid with x402 exact USDC on Base. No account is required.","contact":{"email":"support@brainiac.software"},"x-guidance":"BRAINIAC.software is a pay-per-call API for software agents. No account or API key is required.\nPayment uses the x402 protocol with exact USDC on Base (chain id 8453). Each POST operation has a fixed USD price.\nHow to call an operation:\n1. POST a JSON body matching the operation's requestBody schema to the operation path. Include an Idempotency-Key header (64 hex characters, 32 random bytes).\n2. If you have not paid, the server responds 402 with payment requirements in the body. Pay the exact amount to the payTo address on Base.\n3. Retry the identical request with the same Idempotency-Key and add a payment-signature header containing the x402 payment payload. On success (200) the operation result is returned.\n4. Reuse the same Idempotency-Key only for retries of the same operation and request body; it will not be charged twice.\nAll outputs are compliance prechecks, drafts, or data lookups for human review. They are not official determinations, legal advice, identity confirmation, or certified filings. Verify time-sensitive or official data with the cited source before acting."},"servers":[{"url":"https://www.brainiac.software"}],"paths":{"/api/v1/maritime-intelligence/vessel-identity-normalize":{"post":{"operationId":"normalize_vessel_identity","summary":"Normalize vessel identity","description":"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.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"vesselCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"normalizedName":{"type":"string"},"imo":{"type":"string"},"imoSupplied":{"type":"boolean"},"imoChecksumValid":{"type":"boolean"},"mmsi":{"type":"string"},"mmsiSupplied":{"type":"boolean"},"callSign":{"type":"string"},"flag":{"type":"string"},"vesselType":{"type":"string"},"owner":{"type":"string"},"normalizedOwner":{"type":"string"},"operator":{"type":"string"},"normalizedOperator":{"type":"string"},"identityKey":{"type":"string"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/ais-track-gap-detect":{"post":{"operationId":"detect_ais_track_gaps","summary":"Detect AIS track gaps","description":"Detect time gaps and implied speeds between caller-supplied AIS points. Global real-time AIS coverage is not claimed.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"vesselCount":{"type":"number"},"gapCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"vesselKey":{"type":"string"},"fromId":{"type":"string"},"toId":{"type":"string"},"fromAt":{"type":"string"},"toAt":{"type":"string"},"gapHours":{"type":"number"},"distanceKm":{"type":"number"},"impliedSpeedKn":{"type":"number"},"isGap":{"type":"boolean"},"thresholdHours":{"type":"number"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"subject":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/vessel-route-deviation-detect":{"post":{"operationId":"detect_vessel_route_deviations","summary":"Detect vessel route deviations","description":"Compare caller-supplied AIS points to planned waypoints and flag points beyond a distance threshold.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"pointCount":{"type":"number"},"diversionCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"vesselKey":{"type":"string"},"aisId":{"type":"string"},"at":{"type":"string"},"lat":{"type":"number"},"lon":{"type":"number"},"distanceFromRouteKm":{"type":"number"},"thresholdKm":{"type":"number"},"diverted":{"type":"boolean"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"subject":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/port-congestion-analyze":{"post":{"operationId":"analyze_port_congestion","summary":"Analyze port congestion","description":"Analyze caller-supplied port wait, queue, and berth-occupancy samples. Live terminal systems are not queried.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"portCount":{"type":"number"},"congestedCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"portKey":{"type":"string"},"portCode":{"type":"string"},"portName":{"type":"string"},"sampleCount":{"type":"number"},"latestAt":{"type":"string"},"averageWaitHours":{"type":"number"},"averageWaitHoursSupplied":{"type":"boolean"},"averageVesselsWaiting":{"type":"number"},"averageVesselsWaitingSupplied":{"type":"boolean"},"averageBerthOccupancyPct":{"type":"number"},"averageBerthOccupancyPctSupplied":{"type":"boolean"},"congested":{"type":"boolean"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"subject":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/vessel-eta-estimate":{"post":{"operationId":"estimate_vessel_eta","summary":"Estimate vessel ETA","description":"Estimate ETA from the latest caller-supplied AIS point to a destination using geodesic distance and SOG or assumed speed.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"vesselCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"vesselKey":{"type":"string"},"fromAt":{"type":"string"},"fromLat":{"type":"number"},"fromLon":{"type":"number"},"destinationLat":{"type":"number"},"destinationLon":{"type":"number"},"distanceKm":{"type":"number"},"speedKn":{"type":"number"},"speedSource":{"type":"string"},"etaHours":{"type":"number"},"etaAt":{"type":"string"},"uncertaintyNote":{"type":"string"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/demurrage-cost-calculate":{"post":{"operationId":"calculate_demurrage_cost","summary":"Calculate demurrage cost","description":"Calculate demurrage from caller-supplied allowed/used laytime and daily rate. Results are not legal invoices.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"caseCount":{"type":"number"},"totalDemurrageAmount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"vesselId":{"type":"string"},"voyageId":{"type":"string"},"laytimeAllowedHours":{"type":"number"},"laytimeAllowedHoursSupplied":{"type":"boolean"},"laytimeUsedHours":{"type":"number"},"laytimeUsedHoursSupplied":{"type":"boolean"},"excessHours":{"type":"number"},"excessHoursSupplied":{"type":"boolean"},"demurrageRatePerDay":{"type":"number"},"demurrageRatePerDaySupplied":{"type":"boolean"},"currency":{"type":"string"},"demurrageAmount":{"type":"number"},"demurrageAmountSupplied":{"type":"boolean"},"legalInvoiceClaimed":{"type":"boolean"},"source":{"type":"string"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/vessel-sanctions-signal-check":{"post":{"operationId":"check_vessel_sanctions_signals","summary":"Check vessel sanctions signals","description":"Screen caller-supplied vessel/owner/operator names and IMOs against caller sanctions entries or optional key-free OFAC SDN names. Not a legal determination.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"vesselCount":{"type":"number"},"exactSignalCount":{"type":"number"},"possibleSignalCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"vesselId":{"type":"string"},"name":{"type":"string"},"imo":{"type":"string"},"owner":{"type":"string"},"operator":{"type":"string"},"matchKind":{"type":"string"},"matchScore":{"type":"number"},"matchedName":{"type":"string"},"matchedId":{"type":"string"},"program":{"type":"string"},"matchedBy":{"type":"string"},"legalDeterminationClaimed":{"type":"boolean"},"source":{"type":"string"},"paidAisUsed":{"type":"boolean"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"subject":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.05"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/cargo-shipment-event-reconcile":{"post":{"operationId":"reconcile_cargo_shipment_events","summary":"Reconcile cargo shipment events","description":"Reconcile document-side and ops-side caller-supplied cargo shipment events by shipment/BL, event type, time, location, and quantity.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"eventCount":{"type":"number"},"reconciledCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"documentEventId":{"type":"string"},"opsEventId":{"type":"string"},"shipmentId":{"type":"string"},"billOfLading":{"type":"string"},"eventType":{"type":"string"},"documentAt":{"type":"string"},"opsAt":{"type":"string"},"reconciled":{"type":"boolean"},"quantityMatch":{"type":"boolean"},"source":{"type":"string"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.04"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/vessel-ownership-history-normalize":{"post":{"operationId":"normalize_vessel_ownership_history","summary":"Normalize vessel ownership history","description":"Normalize caller-supplied vessel ownership timeline rows and flag overlapping intervals. Registry filings are not invented.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"recordCount":{"type":"number"},"vesselCount":{"type":"number"},"items":{"type":"array","items":{"type":"object","properties":{"vesselKey":{"type":"string"},"id":{"type":"string"},"imo":{"type":"string"},"owner":{"type":"string"},"normalizedOwner":{"type":"string"},"ownerType":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"flag":{"type":"string"},"sequence":{"type":"number"},"source":{"type":"string"}},"additionalProperties":true}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.03"},"protocols":[{"x402":{}}]}}},"/api/v1/maritime-intelligence/voyage-risk-report":{"post":{"operationId":"build_maritime_voyage_risk_report","summary":"Build maritime voyage risk report","description":"Aggregate identity, AIS gaps, route deviation, port congestion, ETA, demurrage, sanctions signals, cargo reconciliation, and ownership history from caller-supplied records only.","tags":["maritime-intelligence"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"text":{"type":"string","maxLength":200000},"json":{"type":"string","maxLength":200000},"csv":{"type":"string","maxLength":200000},"file":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false},"files":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":180},"mediaType":{"type":"string","enum":["text/plain","text/csv","application/json","application/octet-stream"]},"fileBase64":{"type":"string","minLength":1,"maxLength":12000000},"role":{"type":"string","maxLength":80}},"required":["fileBase64"],"additionalProperties":false}},"vessels":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"callSign":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"vesselType":{"type":"string","maxLength":80},"owner":{"type":"string","maxLength":200},"operator":{"type":"string","maxLength":200},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"aisPoints":{"maxItems":10000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"mmsi":{"type":"string","maxLength":20},"at":{"type":"string","maxLength":40},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sogKn":{"type":"number","minimum":0,"maximum":100},"cogDeg":{"type":"number","minimum":0,"maximum":360},"headingDeg":{"type":"number","minimum":0,"maximum":360},"navStatus":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"waypoints":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":120},"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"sequence":{"type":"integer","minimum":0,"maximum":10000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"portSamples":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"portCode":{"type":"string","maxLength":20},"portName":{"type":"string","maxLength":160},"at":{"type":"string","maxLength":40},"vesselsWaiting":{"type":"number","minimum":0,"maximum":100000},"averageWaitHours":{"type":"number","minimum":0,"maximum":10000},"berthOccupancyPct":{"type":"number","minimum":0,"maximum":100},"arrivals24h":{"type":"number","minimum":0,"maximum":100000},"departures24h":{"type":"number","minimum":0,"maximum":100000},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"demurrageCases":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"voyageId":{"type":"string","maxLength":80},"laytimeAllowedHours":{"type":"number","minimum":0,"maximum":100000},"laytimeUsedHours":{"type":"number","minimum":0,"maximum":100000},"demurrageRatePerDay":{"type":"number","minimum":0,"maximum":100000000},"currency":{"type":"string","maxLength":12},"startedAt":{"type":"string","maxLength":40},"endedAt":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"sanctionsEntries":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"name":{"type":"string","maxLength":200},"imo":{"type":"string","maxLength":20},"program":{"type":"string","maxLength":120},"source":{"type":"string","maxLength":200},"sourceUrl":{"type":"string","maxLength":400}},"additionalProperties":false}},"cargoEvents":{"maxItems":5000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"shipmentId":{"type":"string","maxLength":80},"billOfLading":{"type":"string","maxLength":80},"eventType":{"type":"string","maxLength":80},"at":{"type":"string","maxLength":40},"location":{"type":"string","maxLength":160},"vesselId":{"type":"string","maxLength":80},"quantity":{"type":"number","minimum":0,"maximum":1000000000},"unit":{"type":"string","maxLength":40},"source":{"type":"string","maxLength":200},"side":{"type":"string","enum":["document","ops","left","right","a","b"]}},"additionalProperties":false}},"ownershipRecords":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","maxLength":80},"vesselId":{"type":"string","maxLength":80},"imo":{"type":"string","maxLength":20},"owner":{"type":"string","maxLength":200},"ownerType":{"type":"string","maxLength":80},"from":{"type":"string","maxLength":40},"to":{"type":"string","maxLength":40},"flag":{"type":"string","maxLength":80},"source":{"type":"string","maxLength":200}},"additionalProperties":false}},"fetchOfac":{"type":"boolean"},"asOf":{"type":"string","maxLength":40},"gapThresholdHours":{"type":"number","minimum":0.1,"maximum":720},"deviationThresholdKm":{"type":"number","minimum":0.1,"maximum":5000},"destinationLat":{"type":"number","minimum":-90,"maximum":90},"destinationLon":{"type":"number","minimum":-180,"maximum":180},"assumedSpeedKn":{"type":"number","minimum":0.1,"maximum":50}},"additionalProperties":false},"example":{"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"}]}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Fresh random 32-byte value encoded as 64 hexadecimal characters. Reuse unchanged only for retries of the same operation and request.","schema":{"type":"string","pattern":"^[0-9a-fA-F]{64}$"}}],"responses":{"200":{"description":"Illustrative endpoint-specific JSON response shape. Conditional fields depend on the result and data-source availability.","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string"},"status":{"type":"string"},"asOf":{"type":"string"},"sections":{"type":"object","properties":{"identity":{"type":"object","properties":{"vesselCount":{"type":"number"}},"additionalProperties":true},"aisGaps":{"type":"object","properties":{"vesselCount":{"type":"number"},"gapCount":{"type":"number"}},"additionalProperties":true},"routeDeviation":{"type":"object","properties":{"pointCount":{"type":"number"},"diversionCount":{"type":"number"}},"additionalProperties":true},"portCongestion":{"type":"object","properties":{"portCount":{"type":"number"},"congestedCount":{"type":"number"}},"additionalProperties":true},"eta":{"type":"object","properties":{"vesselCount":{"type":"number"}},"additionalProperties":true},"demurrage":{"type":"object","properties":{"caseCount":{"type":"number"},"totalDemurrageAmount":{"type":"number"}},"additionalProperties":true},"sanctions":{"type":"object","properties":{"vesselCount":{"type":"number"},"exactSignalCount":{"type":"number"},"possibleSignalCount":{"type":"number"}},"additionalProperties":true},"cargo":{"type":"object","properties":{"eventCount":{"type":"number"},"reconciledCount":{"type":"number"}},"additionalProperties":true},"ownership":{"type":"object","properties":{"recordCount":{"type":"number"},"vesselCount":{"type":"number"}},"additionalProperties":true}},"additionalProperties":true},"riskFlags":{"type":"array","items":{"type":"string"}},"paidProviderUsed":{"type":"boolean"},"apiKeyRequired":{"type":"boolean"},"paidAisUsed":{"type":"boolean"},"globalRealtimeCoverageClaimed":{"type":"boolean"},"ofacFetched":{"type":"boolean"},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string"},"code":{"type":"string"},"subject":{"type":"string"},"detail":{"type":"string"}},"additionalProperties":true}},"limitations":{"type":"array","items":{"type":"string"}}},"additionalProperties":true},"example":{"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."]}}}},"400":{"description":"Invalid JSON or request schema."},"402":{"description":"Payment Required"},"409":{"description":"Idempotency conflict, in-progress payment, or expired result cache. Reusing the key cannot trigger a second charge."},"413":{"description":"Request body exceeds the 24 MB limit."},"500":{"description":"Operation failed. With upfront settlement this may occur after payment; reuse the same idempotency key to retrieve the stored result."},"503":{"description":"Payment or retry-safe result storage is unavailable; the operation is not run."}},"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.08"},"protocols":[{"x402":{}}]}}}},"components":{"schemas":{"ApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}}}}}}}}