{"name":"com.timzinin.api/trade-logistics","slug":"api-trade-logistics","title":"Trade & Logistics Evidence","description":"Pay-per-call shipping evidence: canal queues, tanker flows, container and carbon exceptions.","url":"https://mcp.market/server/api-trade-logistics","rating":null,"grade":"C","score":67,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":5,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":20,"ok":20,"last_checked_at":"2026-09-24T06:51:20.203Z","last_ok_at":"2026-09-24T06:51:20.203Z","latency_ms":67},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":null,"version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://api.timzinin.com/mcp/trade-logistics"}],"packages":[],"tools":[{"name":"container-exception-evidence","description":"Turn buyer-authorized container event snapshots into deterministic ETA, milestone, free-time, cost-exposure, confidence, limitation, and human-review evidence. No carrier scraping, reference fetching, legal verdict, automatic claim, or provider key. — $0.02/call, x402 (USDC on base).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"watchId":{"title":"Watch ID","description":"Stable identifier for one customer-owned monitoring series.","type":"string","editor":"textfield","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$","prefill":"customer-watch-1","example":"customer-watch-1"},"mode":{"title":"Run mode","description":"Use snapshot for customer events or synthetic_demo for the one exact canonical zero-provider public example. The demo accepts only the published fixture values; runtime rejects any changed field, extra row, customer row, or secret before effects.","type":"string","editor":"select","enum":["snapshot","synthetic_demo"],"enumTitles":["Customer snapshot","Synthetic demo"],"prefill":"snapshot","example":"snapshot"},"sourceStatus":{"title":"Source completeness","description":"Declare whether this customer-supplied snapshot is complete, partial, or unavailable.","type":"string","editor":"select","enum":["complete","partial","unavailable"],"enumTitles":["Complete","Partial","Unavailable"],"prefill":"complete","example":"complete"},"rightsAttestation":{"title":"Rights attestation","description":"Required customer declaration. Apify Input Schema v1 can serialize false here; the Actor runtime requires all three declarations to be exactly true and rejects otherwise before provider, Dataset, billing, state, lock, intent, or delivery effects. Do not submit credentials, secrets, or data you are not authorized to use.","type":"object","editor":"json","additionalProperties":false,"required":["customerControlsOrIsAuthorizedToUseData","noCredentialsOrSecretsSubmitted","unfetchedReferencePolicyAccepted","attestedAt","attestorId"],"properties":{"customerControlsOrIsAuthorizedToUseData":{"title":"Authorized data","description":"Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.","type":"boolean"},"noCredentialsOrSecretsSubmitted":{"title":"No credentials or secrets","description":"Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.","type":"boolean"},"unfetchedReferencePolicyAccepted":{"title":"Unfetched reference policy","description":"Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.","type":"boolean"},"attestedAt":{"title":"Attested at","description":"RFC 3339 timestamp with an explicit offset, not later than the Actor run.","type":"string","pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"attestorId":{"title":"Attestor ID","description":"Customer-controlled opaque operator identifier; never returned raw.","type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}},"example":{"customerControlsOrIsAuthorizedToUseData":true,"noCredentialsOrSecretsSubmitted":true,"unfetchedReferencePolicyAccepted":true,"attestedAt":"2026-08-09T09:00:00Z","attestorId":"customer-operator-1"}},"containers":{"title":"Containers","description":"At least one and at most 1,000 closed records. Snapshot accepts customer containers; synthetic_demo accepts exactly one fixed Actor-owned Synthetic Ocean record and rejects substitutions before effects. BOL and booking values are never returned raw.","type":"array","editor":"json","minItems":1,"maxItems":1000,"items":{"type":"object","additionalProperties":false,"required":["containerNumber"],"properties":{"containerNumber":{"title":"Container number","description":"Uppercase ISO 6346 number with a valid check digit.","type":"string","pattern":"^[A-Z]{4}[0-9]{7}$"},"carrier":{"title":"Carrier","description":"Optional customer-declared carrier label.","type":"string","nullable":true,"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$"},"billOfLading":{"title":"Bill of lading","description":"Optional private customer value; only a domain-separated digest may appear in output.","type":"string","nullable":true,"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$"},"bookingNumber":{"title":"Booking number","description":"Optional private customer value; only a domain-separated digest may appear in output.","type":"string","nullable":true,"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$"},"promisedEta":{"title":"Promised ETA","description":"Optional RFC 3339 ETA with an explicit offset; runtime validates the timestamp.","type":"string","nullable":true,"pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"freeTimeEnd":{"title":"Free-time end","description":"Optional RFC 3339 free-time deadline with an explicit offset; runtime validates the timestamp.","type":"string","nullable":true,"pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"originUnlocode":{"title":"Origin UN/LOCODE","description":"Optional five-character UN/LOCODE syntax.","type":"string","nullable":true,"pattern":"^[A-Z]{2}[A-Z0-9]{3}$"},"destinationUnlocode":{"title":"Destination UN/LOCODE","description":"Optional five-character UN/LOCODE syntax.","type":"string","nullable":true,"pattern":"^[A-Z]{2}[A-Z0-9]{3}$"}}},"prefill":[{"containerNumber":"MSCU1234566","carrier":"customer-declared-carrier","billOfLading":null,"bookingNumber":null,"promisedEta":"2026-08-12T12:00:00Z","freeTimeEnd":"2026-08-15T12:00:00Z","originUnlocode":"NLRTM","destinationUnlocode":"USLAX"}],"example":[{"containerNumber":"MSCU1234566","carrier":"customer-declared-carrier","billOfLading":null,"bookingNumber":null,"promisedEta":"2026-08-12T12:00:00Z","freeTimeEnd":"2026-08-15T12:00:00Z","originUnlocode":"NLRTM","destinationUnlocode":"USLAX"}]},"events":{"title":"Container events","description":"At least one and at most 50,000 events. Snapshot accepts customer events; synthetic_demo accepts exactly the two fixed Actor-owned events in the public fixture and rejects substitutions or extra rows before effects. Safe references are validated but never fetched.","type":"array","editor":"json","minItems":1,"maxItems":50000,"items":{"type":"object","additionalProperties":false,"required":["eventId","containerNumber","eventType","eventTime","receivedAt","source"],"properties":{"eventId":{"title":"Event ID","description":"Customer event identifier unique within the container timeline.","type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"},"containerNumber":{"title":"Container number","description":"Must match one container record in this input.","type":"string","pattern":"^[A-Z]{4}[0-9]{7}$"},"eventType":{"title":"Event type","description":"Closed container milestone or customer event type.","type":"string","enum":["booked","received_at_terminal","gate_in","loaded","transshipment","discharged","available_for_pickup","gate_out","picked_up","empty_returned","delivered","eta_update","customer_milestone"]},"eventTime":{"title":"Event time","description":"RFC 3339 event timestamp with an explicit offset; runtime validates the timestamp.","type":"string","pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"receivedAt":{"title":"Received at","description":"RFC 3339 receipt timestamp, not earlier than eventTime; runtime validates the timestamp.","type":"string","pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"locationUnlocode":{"title":"Location UN/LOCODE","description":"Optional observed location syntax.","type":"string","nullable":true,"pattern":"^[A-Z]{2}[A-Z0-9]{3}$"},"plannedLocationUnlocode":{"title":"Planned location UN/LOCODE","description":"Optional planned location syntax.","type":"string","nullable":true,"pattern":"^[A-Z]{2}[A-Z0-9]{3}$"},"plannedTime":{"title":"Planned time","description":"Optional RFC 3339 planned time; only eta_update may use a non-null value and runtime validates it.","type":"string","nullable":true,"pattern":"^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$"},"source":{"title":"Source label","description":"Customer-declared provenance label, not a provider URL or credential.","type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9][A-Za-z0-9._: -]{0,127}$"},"reference":{"title":"Safe reference","description":"Optional ref: identifier or restricted HTTPS reference. It is never fetched.","type":"string","nullable":true,"minLength":1,"maxLength":256}}},"prefill":[{"eventId":"customer-event-1","containerNumber":"MSCU1234566","eventType":"gate_in","eventTime":"2026-08-08T09:00:00Z","receivedAt":"2026-08-08T09:05:00Z","locationUnlocode":"NLRTM","plannedLocationUnlocode":null,"plannedTime":null,"source":"customer-system","reference":"ref:customer-evidence-1"}],"example":[{"eventId":"customer-event-1","containerNumber":"MSCU1234566","eventType":"gate_in","eventTime":"2026-08-08T09:00:00Z","receivedAt":"2026-08-08T09:05:00Z","locationUnlocode":"NLRTM","plannedLocationUnlocode":null,"plannedTime":null,"source":"customer-system","reference":"ref:customer-evidence-1"}]},"tariffAssumptions":{"title":"Tariff assumptions","description":"Customer-supplied USD/day assumptions. No terminal calendar or carrier tariff is fetched.","type":"object","editor":"json","additionalProperties":false,"required":["currency","demurragePerDay","detentionPerDay"],"properties":{"currency":{"title":"Currency","description":"V1 accepts USD only.","type":"string","enum":["USD"]},"demurragePerDay":{"title":"Demurrage per day","description":"Customer assumption in USD/day, up to four decimal places at runtime.","type":"number","minimum":0,"maximum":1000000},"detentionPerDay":{"title":"Detention per day","description":"Customer assumption in USD/day, up to four decimal places at runtime.","type":"number","minimum":0,"maximum":1000000}},"prefill":{"currency":"USD","demurragePerDay":0,"detentionPerDay":0},"example":{"currency":"USD","demurragePerDay":75,"detentionPerDay":50}},"continuationState":{"title":"Caller-carried continuation state","description":"Optional exact nextContinuationState from a previous successful complete run. The Actor does not store this state in a named KVS; pass it back to compare the next customer snapshot.","type":"object","nullable":true,"editor":"json"}},"required":["watchId","mode","sourceStatus","rightsAttestation","containers","events","tariffAssumptions"],"title":"Container Exception Evidence input","description":"Compare customer-authorized container events with the last healthy baseline. This Actor never fetches references or accepts provider credentials.","schemaVersion":1,"additionalProperties":false}},{"name":"panama-canal-queue-transit-imbalance","description":"Compare aggregate commercial-vessel pressure across two fixed Panama Canal approach zones. Get side imbalance, movement, observed dwell, baseline change, freshness, confidence, gaps, and a human review action without exposing raw vessel identities or claiming official Canal queues. — $0.02/call, x402 (USDC on base).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"schemaVersion":{"title":"Schema version","description":"Contract version for this Actor input.","type":"string","enum":["1.0"],"default":"1.0","prefill":"1.0","editor":"select"},"requestId":{"title":"Request ID","type":"string","pattern":"^(auto|[a-z0-9][a-z0-9._-]{2,63})$","default":"auto","prefill":"auto","editor":"textfield","description":"Use auto for a trusted-run-derived id or provide an explicit idempotency value. The returned requestId is an irreversible SHA-256-derived identifier."},"watchId":{"title":"Watch ID","type":"string","pattern":"^[a-z0-9][a-z0-9._-]{2,63}$","default":"panama-canal-main","prefill":"panama-canal-main","editor":"textfield","description":"Stable lower-case identity for the queue history. It is irreversibly derived before lock, state, ledger, and output use."},"sourceMode":{"title":"Source mode","type":"string","enum":["demo","datalastic"],"default":"demo","prefill":"demo","editor":"select","description":"Demo writes one synthetic row with no $0.05 result-found fee; the $0.005 start charge applies. Datalastic uses your own API key."},"datalasticApiKey":{"title":"Datalastic API key","type":"string","isSecret":true,"editor":"textfield","description":"Required only for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output."},"identitySalt":{"title":"Identity salt","type":"string","isSecret":true,"editor":"textfield","description":"Optional HMAC salt for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output."},"baselineDays":{"title":"Baseline days","description":"Number of stored observations used for the queue baseline.","type":"integer","minimum":7,"maximum":365,"default":30,"prefill":30,"editor":"number"},"maxVessels":{"title":"Maximum vessels per side","description":"Maximum bounded provider rows accepted for each fixed approach. The live-safe default of 500 avoids truncating dense approach snapshots.","type":"integer","minimum":1,"maximum":500,"default":500,"prefill":500,"editor":"number"},"maxProviderRequests":{"title":"Provider request cap","description":"Fixed exact cap: /stat plus the two Panama approach zones.","type":"integer","minimum":3,"maximum":3,"default":3,"prefill":3,"editor":"number"},"timeoutMs":{"title":"Provider timeout (ms)","description":"Timeout for each bounded provider request.","type":"integer","minimum":1000,"maximum":30000,"default":10000,"prefill":10000,"editor":"number"},"maxTotalChargeUsd":{"title":"Maximum total charge (USD)","description":"Buyer-side cap checked before the paid report event.","type":"number","minimum":0.005,"maximum":100,"default":0.055,"prefill":0.055,"editor":"number"}},"required":["schemaVersion","requestId","watchId","sourceMode"],"title":"Panama Canal Queue & Transit Imbalance Monitor input","description":"Use demo for a synthetic Dataset row with no $0.05 result-found fee; the $0.005 start charge still applies. Datalastic provides live aggregate AIS evidence with your own key. The Actor uses fixed approach zones and does not accept custom coordinates.","schemaVersion":1,"additionalProperties":false}},{"name":"pricing_info","description":"Free — list every paid tool in the 'trade-logistics' bundle with its price, payTo address and network. Call this first if you don't have a wallet ready yet.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{}}},{"name":"singapore-bunker-tanker-divergence","description":"Compare official monthly Singapore bunker demand, tanker arrivals, fuel mix, and vessel calls in one evidence report. Add optional bounded BYOK tanker pressure, with publication lag, freshness, confidence, null reasons, provenance, gaps, and human review. — $0.02/call, x402 (USDC on base).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"schemaVersion":{"title":"Schema version","description":"Contract version for this Actor input.","type":"string","enum":["1.0"],"default":"1.0","prefill":"1.0","editor":"select"},"requestId":{"title":"Request ID","type":"string","description":"Use auto for a Task-safe run identity.","pattern":"^(auto|[A-Za-z0-9][A-Za-z0-9._:-]{0,127})$","default":"auto","prefill":"auto","editor":"textfield"},"watchId":{"title":"Watch ID","type":"string","description":"Stable identity for the Singapore baseline.","minLength":3,"maxLength":64,"pattern":"^[a-z0-9][a-z0-9._-]{2,63}$","default":"singapore-bunker-main","prefill":"singapore-bunker-main","editor":"textfield"},"sourceMode":{"title":"Source mode","type":"string","description":"Demo is synthetic; open uses data.gov.sg; open_plus_byok adds two bounded Datalastic provider requests: /stat plus Singapore.","enum":["demo","open","open_plus_byok"],"default":"open","prefill":"open","editor":"select"},"datalasticApiKey":{"title":"Datalastic API key","type":"string","description":"Only valid with sourceMode=open_plus_byok; runtime validation requires a printable 8-256 character secret, rejects it in demo/open, and never returns it.","isSecret":true,"editor":"textfield"},"baselineMonths":{"title":"Baseline months","type":"integer","description":"Historical window used for 3-month and 12-month comparisons.","minimum":3,"maximum":12,"default":12,"prefill":12,"editor":"number"},"maxRows":{"title":"Rows per official source","type":"integer","description":"One bounded page per official source; 240 covers the observed 13-month window and up to 500 is allowed.","minimum":240,"maximum":500,"default":240,"prefill":240,"editor":"number"},"maxProviderRequests":{"title":"Maximum provider requests","type":"integer","description":"Exactly two requests are permitted for BYOK: /stat plus the Singapore zone.","minimum":2,"maximum":2,"default":2,"prefill":2,"editor":"number"},"maxTotalChargeUsd":{"title":"Maximum total charge (USD)","type":"number","description":"Buyer cap checked before the paid result event.","minimum":0.005,"maximum":100,"default":0.055,"prefill":0.055,"editor":"number"}},"required":["schemaVersion"],"title":"Singapore Bunker Demand & Tanker Flow Divergence input","description":"Compare official monthly Singapore vessel and bunker data, with optional two-request BYOK tanker pressure. Demo is synthetic, has no $0.05 result-found fee, and never emits result-found; the $0.005 actor-start charge still applies.","schemaVersion":1,"additionalProperties":false}},{"name":"strait-of-hormuz-tanker-flow-recovery","description":"Compare aggregate commercial-tanker observations across three fixed Strait of Hormuz zones with seven- and thirty-observation baselines. Get deterministic recovery labels, freshness, confidence, gaps, and a human-review action without exposing raw identities or positions. — $0.02/call, x402 (USDC on base).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"schemaVersion":{"title":"Schema version","description":"Contract version for this Actor input.","type":"string","enum":["1.0"],"default":"1.0","prefill":"1.0","editor":"select"},"requestId":{"title":"Request ID","description":"Use auto for a trusted run-derived identifier or provide an explicit idempotency value.","type":"string","pattern":"^(auto|[a-z0-9][a-z0-9._:-]{2,127})$","default":"auto","prefill":"auto","editor":"textfield"},"watchId":{"title":"Watch ID","type":"string","description":"Stable lowercase identifier for one monitoring series.","pattern":"^[a-z0-9][a-z0-9._-]{2,63}$","default":"hormuz-tanker-flow","prefill":"hormuz-tanker-flow","editor":"textfield"},"sourceMode":{"title":"Source mode","type":"string","enum":["demo","datalastic"],"default":"demo","prefill":"demo","editor":"select","description":"Demo is synthetic, includes no $0.05 result-found fee, and still incurs the automatic start charge. Datalastic uses your own API key."},"datalasticApiKey":{"title":"Datalastic API key","type":"string","isSecret":true,"editor":"textfield","description":"Required only for live Datalastic mode. Runtime validation requires a non-empty secret, and the value is never returned in output."},"identitySalt":{"title":"Stable identity salt","type":"string","isSecret":true,"editor":"textfield","description":"Optional stable secret for identity continuity across Datalastic API-key rotation. Runtime validation requires 32-256 characters; changing it starts an incompatible state epoch."},"maxVessels":{"title":"Maximum vessels","description":"Maximum bounded provider rows accepted for each fixed zone.","type":"integer","minimum":1,"maximum":500,"default":100,"prefill":100,"editor":"number"},"maxProviderRequests":{"title":"Maximum provider requests","type":"integer","minimum":4,"maximum":4,"default":4,"prefill":4,"editor":"number","description":"Exactly four actual provider attempts/pages: one /stat and one bounded page per fixed zone."},"maxTotalChargeUsd":{"title":"Maximum total charge USD","description":"Buyer-side cap checked before the paid report event.","type":"number","minimum":0.055,"maximum":100,"default":0.055,"prefill":0.055,"editor":"number"}},"required":["schemaVersion","watchId","sourceMode"],"title":"Strait of Hormuz Tanker Flow Recovery Index input","description":"Measure aggregate tanker-flow recovery across fixed Strait of Hormuz zones. Demo uses synthetic data; Datalastic mode uses your own provider key and returns no raw AIS rows.","schemaVersion":1,"additionalProperties":false}},{"name":"voyage-carbon-compliance-evidence","description":"Calculate deterministic EU ETS voyage exposure from buyer-supplied vessel, route, and fuel facts using pinned official fixtures. Get gas, fuel, segment, truth-ledger, confidence, limitation, and receipt evidence without provider calls or an automatic legal decision. — $0.02/call, x402 (USDC on base).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"schemaVersion":{"type":"string","title":"schemaVersion","description":"Contract version for validation and output interpretation. Enter `1.1.0`; other values are rejected before any Dataset delivery.","editor":"textfield"},"mode":{"type":"string","enum":["decision","synthetic_demo"],"title":"mode","description":"Choose `decision` for buyer-supplied voyage facts or `synthetic_demo` for the fixed no-charge example. Runtime enforces the fields allowed in each mode.","editor":"select"},"requestId":{"type":"string","maxLength":64,"title":"requestId","description":"Buyer correlation ID copied into the evidence receipt. Decision mode requires `rq_` plus 32 lowercase hexadecimal characters; demo mode uses `public-demo-v1`.","editor":"textfield"},"portCalls":{"type":"array","minItems":2,"maxItems":9,"items":{"type":"object","additionalProperties":false,"required":["portCallId","unlocode","memberStatePort","isPortOfCall","specialTreatment","startedAt","endedAt"],"properties":{"portCallId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"portCallId","description":"Unique port-call identifier used by legs and berth records. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.","editor":"textfield"},"unlocode":{"type":"string","pattern":"^[A-Z0-9]{5}$","title":"unlocode","description":"Five-character uppercase UN/LOCODE for the observed port, such as `NLRTM` or `USNYC`. It supports route-scope and evidence interpretation.","editor":"textfield"},"memberStatePort":{"type":"boolean","title":"memberStatePort","description":"Set true only when the supplied port fact is a qualifying EU ETS Member State port; this flag affects the voyage-scope calculation.","editor":"checkbox"},"isPortOfCall":{"type":"boolean","title":"isPortOfCall","description":"Set true when this stop qualifies as a port of call under the buyer's evidence. False keeps the stop visible while excluding it from ordinary port-call treatment.","editor":"checkbox"},"specialTreatment":{"type":"string","enum":["ordinary","excluded_stop","neighbouring_container_transhipment","unknown"],"title":"specialTreatment","description":"Regulatory treatment asserted for this stop: ordinary, excluded stop, neighbouring container transhipment, or unknown. Unknown produces a review gap rather than silent certainty.","editor":"select"},"startedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"startedAt","description":"UTC start of the port-call interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must precede the matching end time and align with linked activity.","editor":"textfield"},"endedAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"endedAt","description":"UTC end of the port-call interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It bounds berth activity and voyage chronology checks.","editor":"textfield"}}},"title":"portCalls","description":"Ordered array of 2–9 buyer-supplied port-call facts. IDs must be unique and are referenced by voyage legs and optional berth-consumption records.","editor":"json"},"legs":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object","additionalProperties":false,"required":["legId","departurePortCallId","arrivalPortCallId","departureAt","arrivalAt","fuelRecords"],"properties":{"legId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"legId","description":"Unique voyage-leg identifier used in the evidence ledger. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.","editor":"textfield"},"departurePortCallId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"departurePortCallId","description":"Exact `portCallId` of this leg's departure stop. The referenced port call must exist in `portCalls` and precede the arrival stop.","editor":"textfield"},"arrivalPortCallId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"arrivalPortCallId","description":"Exact `portCallId` of this leg's arrival stop. The referenced port call must exist in `portCalls` and follow the departure stop.","editor":"textfield"},"departureAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"departureAt","description":"UTC departure timestamp in exact `YYYY-MM-DDTHH:mm:ssZ` form. Runtime checks it against the linked port calls and fuel-consumption intervals.","editor":"textfield"},"arrivalAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"arrivalAt","description":"UTC arrival timestamp in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must be later than departure and consistent with the linked port-call chronology.","editor":"textfield"},"fuelRecords":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"object","additionalProperties":false,"required":["recordId","consumptionStartAt","consumptionEndAt","fuelType","massTonnes","dataTruth"],"properties":{"recordId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"recordId","description":"Unique identifier for this leg fuel-consumption record. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.","editor":"textfield"},"consumptionStartAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"consumptionStartAt","description":"UTC start of the fuel-consumption interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. The interval must fall within the associated voyage leg.","editor":"textfield"},"consumptionEndAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"consumptionEndAt","description":"UTC end of the fuel-consumption interval in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must follow the start and stay within the associated voyage leg.","editor":"textfield"},"fuelType":{"type":"string","enum":["HFO","LFO","MDO_MGO","LNG","BIO_LNG","LPG_BUTANE","LPG_PROPANE","METHANOL","BIOFUEL","OTHER"],"title":"fuelType","description":"Fuel category for the supplied mass value. Choose the exact enum matching the evidence; unsupported calculation paths fail closed instead of guessing factors.","editor":"select"},"massTonnes":{"type":"string","pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$","title":"massTonnes","description":"Fuel mass in metric tonnes as a non-negative decimal string, for example `12.5`, with at most six significant fractional positions under the closed contract.","editor":"textfield"},"dataTruth":{"type":"string","enum":["measured","buyer_reported","estimated"],"title":"dataTruth","description":"Evidence quality for this fuel record: measured, buyer-reported, or estimated. The value is preserved so confidence and review gaps remain explicit.","editor":"select"}}},"title":"fuelRecords","description":"Array of 1–4 fuel-consumption evidence records for this leg. Intervals, fuel types, masses, and evidence quality feed the emissions calculation.","editor":"json"}}},"title":"legs","description":"Ordered array of 1–8 voyage legs linking the supplied port calls. Each leg includes its UTC interval and bounded fuel-consumption evidence.","editor":"json"},"berthRecords":{"type":"array","maxItems":18,"items":{"type":"object","additionalProperties":false,"required":["recordId","portCallId","consumptionStartAt","consumptionEndAt","fuelType","massTonnes","dataTruth"],"properties":{"recordId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"recordId","description":"Unique identifier for this berth-consumption record. Use 1–64 letters, digits, dots, underscores, colons, or hyphens, beginning with a letter or digit.","editor":"textfield"},"portCallId":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$","title":"portCallId","description":"Exact `portCallId` where the berth consumption occurred. The referenced port call must exist and contain the supplied consumption interval.","editor":"textfield"},"consumptionStartAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"consumptionStartAt","description":"UTC start of berth fuel consumption in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must fall within the linked port-call interval.","editor":"textfield"},"consumptionEndAt":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$","title":"consumptionEndAt","description":"UTC end of berth fuel consumption in exact `YYYY-MM-DDTHH:mm:ssZ` form. It must follow the start and remain within the linked port call.","editor":"textfield"},"fuelType":{"type":"string","enum":["HFO","LFO","MDO_MGO","LNG","BIO_LNG","LPG_BUTANE","LPG_PROPANE","METHANOL","BIOFUEL","OTHER"],"title":"fuelType","description":"Fuel category for the berth-consumption mass. Choose the exact enum supported by the pinned calculation rules; unsupported paths fail closed.","editor":"select"},"massTonnes":{"type":"string","pattern":"^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$","title":"massTonnes","description":"Berth fuel mass in metric tonnes as a non-negative decimal string, for example `1.25`, using the precision permitted by the closed contract.","editor":"textfield"},"dataTruth":{"type":"string","enum":["measured","buyer_reported","estimated"],"title":"dataTruth","description":"Evidence quality for this berth record: measured, buyer-reported, or estimated. It is retained in the output confidence and review-gap evidence.","editor":"select"}}},"title":"berthRecords","description":"Optional array of up to 18 berth fuel-consumption records linked to port calls. Supply an empty array when no berth consumption evidence is available.","editor":"json"}},"required":["schemaVersion","mode","requestId","portCalls","legs","berthRecords"],"title":"EU ETS voyage carbon exposure input","description":"Apify UI projection of the authoritative two-mode contract. The platform schema cannot express nullable JSON fields, so the exact public Task and all cross-field/null rules are enforced by contract/input.schema.json and runtime validation.","additionalProperties":true,"schemaVersion":1}}],"scan":{"score":67,"grade":"C","scanned_at":"2026-09-23T11:52:57.675Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T11:52:57.643Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1051ms"]},"poisoning":{"score":15,"max":15,"notes":["6 tool descriptions checked"]},"auth":{"score":10,"max":15,"notes":["open endpoint, read-only tools"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":2,"max":10,"notes":["no repository or website to verify"]}},"findings":[{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://api.timzinin.com/mcp/trade-logistics","reachable":true,"authRequired":false,"latencyMs":1051,"serverInfo":{"name":"zinin-m2m-hub-trade-logistics","version":"1.0.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":null,"source":"none"},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":5}}}},"grade_history":[],"reviews":[]}