Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,544Letters: 14Defects: 1,324counted just now
teppi

Server definition

Hash
sha256:699316801ebf6ccca8ec1c16203300693945f8dfc00304c6a509af519dad840d
What it is
What a remote MCP server returned when asked what it offers: 6 tools

The blob, as servednamed by its sha256

{ "instructions": "Trade & Logistics Evidence. 5 pay-per-call tools plus one free tool, `pricing_info`.\nEvery other tool charges per call: USDC on base over x402. Attach the signed payment payload as a plain JSON object in params._meta[\"x402/payment\"] of the tools/call request. Without it the call is answered with isError:true and the payment requirements in structuredContent, and nothing is run or charged.\n`pricing_info` is free, needs no wallet, and returns every tool's price, the payTo address, the network and the scheme — call it first. Each tool's price is also in its own description.\nA settled call is final: settlement is an on-chain transfer and cannot be reversed, so treat each tools/call as a purchase, not as a retryable read. Questions, or evaluating this server without a wallet: [email protected]", "tools": [ { "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).", "inputSchema": { "additionalProperties": false, "description": "Compare customer-authorized container events with the last healthy baseline. This Actor never fetches references or accepts provider credentials.", "properties": { "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.", "editor": "json", "example": [ { "billOfLading": null, "bookingNumber": null, "carrier": "customer-declared-carrier", "containerNumber": "MSCU1234566", "destinationUnlocode": "USLAX", "freeTimeEnd": "2026-08-15T12:00:00Z", "originUnlocode": "NLRTM", "promisedEta": "2026-08-12T12:00:00Z" } ], "items": { "additionalProperties": false, "properties": { "billOfLading": { "description": "Optional private customer value; only a domain-separated digest may appear in output.", "maxLength": 128, "minLength": 1, "nullable": true, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$", "title": "Bill of lading", "type": "string" }, "bookingNumber": { "description": "Optional private customer value; only a domain-separated digest may appear in output.", "maxLength": 128, "minLength": 1, "nullable": true, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$", "title": "Booking number", "type": "string" }, "carrier": { "description": "Optional customer-declared carrier label.", "maxLength": 128, "minLength": 1, "nullable": true, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/ -]{0,127}$", "title": "Carrier", "type": "string" }, "containerNumber": { "description": "Uppercase ISO 6346 number with a valid check digit.", "pattern": "^[A-Z]{4}[0-9]{7}$", "title": "Container number", "type": "string" }, "destinationUnlocode": { "description": "Optional five-character UN/LOCODE syntax.", "nullable": true, "pattern": "^[A-Z]{2}[A-Z0-9]{3}$", "title": "Destination UN/LOCODE", "type": "string" }, "freeTimeEnd": { "description": "Optional RFC 3339 free-time deadline with an explicit offset; runtime validates the timestamp.", "nullable": true, "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Free-time end", "type": "string" }, "originUnlocode": { "description": "Optional five-character UN/LOCODE syntax.", "nullable": true, "pattern": "^[A-Z]{2}[A-Z0-9]{3}$", "title": "Origin UN/LOCODE", "type": "string" }, "promisedEta": { "description": "Optional RFC 3339 ETA with an explicit offset; runtime validates the timestamp.", "nullable": true, "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Promised ETA", "type": "string" } }, "required": [ "containerNumber" ], "type": "object" }, "maxItems": 1000, "minItems": 1, "prefill": [ { "billOfLading": null, "bookingNumber": null, "carrier": "customer-declared-carrier", "containerNumber": "MSCU1234566", "destinationUnlocode": "USLAX", "freeTimeEnd": "2026-08-15T12:00:00Z", "originUnlocode": "NLRTM", "promisedEta": "2026-08-12T12:00:00Z" } ], "title": "Containers", "type": "array" }, "continuationState": { "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.", "editor": "json", "nullable": true, "title": "Caller-carried continuation state", "type": "object" }, "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.", "editor": "json", "example": [ { "containerNumber": "MSCU1234566", "eventId": "customer-event-1", "eventTime": "2026-08-08T09:00:00Z", "eventType": "gate_in", "locationUnlocode": "NLRTM", "plannedLocationUnlocode": null, "plannedTime": null, "receivedAt": "2026-08-08T09:05:00Z", "reference": "ref:customer-evidence-1", "source": "customer-system" } ], "items": { "additionalProperties": false, "properties": { "containerNumber": { "description": "Must match one container record in this input.", "pattern": "^[A-Z]{4}[0-9]{7}$", "title": "Container number", "type": "string" }, "eventId": { "description": "Customer event identifier unique within the container timeline.", "maxLength": 128, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", "title": "Event ID", "type": "string" }, "eventTime": { "description": "RFC 3339 event timestamp with an explicit offset; runtime validates the timestamp.", "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Event time", "type": "string" }, "eventType": { "description": "Closed container milestone or customer event type.", "enum": [ "booked", "received_at_terminal", "gate_in", "loaded", "transshipment", "discharged", "available_for_pickup", "gate_out", "picked_up", "empty_returned", "delivered", "eta_update", "customer_milestone" ], "title": "Event type", "type": "string" }, "locationUnlocode": { "description": "Optional observed location syntax.", "nullable": true, "pattern": "^[A-Z]{2}[A-Z0-9]{3}$", "title": "Location UN/LOCODE", "type": "string" }, "plannedLocationUnlocode": { "description": "Optional planned location syntax.", "nullable": true, "pattern": "^[A-Z]{2}[A-Z0-9]{3}$", "title": "Planned location UN/LOCODE", "type": "string" }, "plannedTime": { "description": "Optional RFC 3339 planned time; only eta_update may use a non-null value and runtime validates it.", "nullable": true, "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Planned time", "type": "string" }, "receivedAt": { "description": "RFC 3339 receipt timestamp, not earlier than eventTime; runtime validates the timestamp.", "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Received at", "type": "string" }, "reference": { "description": "Optional ref: identifier or restricted HTTPS reference. It is never fetched.", "maxLength": 256, "minLength": 1, "nullable": true, "title": "Safe reference", "type": "string" }, "source": { "description": "Customer-declared provenance label, not a provider URL or credential.", "maxLength": 128, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._: -]{0,127}$", "title": "Source label", "type": "string" } }, "required": [ "eventId", "containerNumber", "eventType", "eventTime", "receivedAt", "source" ], "type": "object" }, "maxItems": 50000, "minItems": 1, "prefill": [ { "containerNumber": "MSCU1234566", "eventId": "customer-event-1", "eventTime": "2026-08-08T09:00:00Z", "eventType": "gate_in", "locationUnlocode": "NLRTM", "plannedLocationUnlocode": null, "plannedTime": null, "receivedAt": "2026-08-08T09:05:00Z", "reference": "ref:customer-evidence-1", "source": "customer-system" } ], "title": "Container events", "type": "array" }, "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.", "editor": "select", "enum": [ "snapshot", "synthetic_demo" ], "enumTitles": [ "Customer snapshot", "Synthetic demo" ], "example": "snapshot", "prefill": "snapshot", "title": "Run mode", "type": "string" }, "rightsAttestation": { "additionalProperties": false, "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.", "editor": "json", "example": { "attestedAt": "2026-08-09T09:00:00Z", "attestorId": "customer-operator-1", "customerControlsOrIsAuthorizedToUseData": true, "noCredentialsOrSecretsSubmitted": true, "unfetchedReferencePolicyAccepted": true }, "properties": { "attestedAt": { "description": "RFC 3339 timestamp with an explicit offset, not later than the Actor run.", "pattern": "^(?:\\d{4}-\\d{2}-\\d{2})T(?:\\d{2}:\\d{2}:\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$", "title": "Attested at", "type": "string" }, "attestorId": { "description": "Customer-controlled opaque operator identifier; never returned raw.", "maxLength": 128, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", "title": "Attestor ID", "type": "string" }, "customerControlsOrIsAuthorizedToUseData": { "description": "Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.", "title": "Authorized data", "type": "boolean" }, "noCredentialsOrSecretsSubmitted": { "description": "Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.", "title": "No credentials or secrets", "type": "boolean" }, "unfetchedReferencePolicyAccepted": { "description": "Must be true. Input Schema v1 cannot enforce true; runtime rejects false before later effects.", "title": "Unfetched reference policy", "type": "boolean" } }, "required": [ "customerControlsOrIsAuthorizedToUseData", "noCredentialsOrSecretsSubmitted", "unfetchedReferencePolicyAccepted", "attestedAt", "attestorId" ], "title": "Rights attestation", "type": "object" }, "sourceStatus": { "description": "Declare whether this customer-supplied snapshot is complete, partial, or unavailable.", "editor": "select", "enum": [ "complete", "partial", "unavailable" ], "enumTitles": [ "Complete", "Partial", "Unavailable" ], "example": "complete", "prefill": "complete", "title": "Source completeness", "type": "string" }, "tariffAssumptions": { "additionalProperties": false, "description": "Customer-supplied USD/day assumptions. No terminal calendar or carrier tariff is fetched.", "editor": "json", "example": { "currency": "USD", "demurragePerDay": 75, "detentionPerDay": 50 }, "prefill": { "currency": "USD", "demurragePerDay": 0, "detentionPerDay": 0 }, "properties": { "currency": { "description": "V1 accepts USD only.", "enum": [ "USD" ], "title": "Currency", "type": "string" }, "demurragePerDay": { "description": "Customer assumption in USD/day, up to four decimal places at runtime.", "maximum": 1000000, "minimum": 0, "title": "Demurrage per day", "type": "number" }, "detentionPerDay": { "description": "Customer assumption in USD/day, up to four decimal places at runtime.", "maximum": 1000000, "minimum": 0, "title": "Detention per day", "type": "number" } }, "required": [ "currency", "demurragePerDay", "detentionPerDay" ], "title": "Tariff assumptions", "type": "object" }, "watchId": { "description": "Stable identifier for one customer-owned monitoring series.", "editor": "textfield", "example": "customer-watch-1", "maxLength": 128, "minLength": 1, "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$", "prefill": "customer-watch-1", "title": "Watch ID", "type": "string" } }, "required": [ "watchId", "mode", "sourceStatus", "rightsAttestation", "containers", "events", "tariffAssumptions" ], "schemaVersion": 1, "title": "Container Exception Evidence input", "type": "object" }, "name": "container-exception-evidence", "outputSchema": null }, { "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).", "inputSchema": { "additionalProperties": false, "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.", "properties": { "baselineDays": { "default": 30, "description": "Number of stored observations used for the queue baseline.", "editor": "number", "maximum": 365, "minimum": 7, "prefill": 30, "title": "Baseline days", "type": "integer" }, "datalasticApiKey": { "description": "Required only for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output.", "editor": "textfield", "isSecret": true, "title": "Datalastic API key", "type": "string" }, "identitySalt": { "description": "Optional HMAC salt for datalastic mode. Runtime validation requires a printable 8-256 character secret. Never returned in output.", "editor": "textfield", "isSecret": true, "title": "Identity salt", "type": "string" }, "maxProviderRequests": { "default": 3, "description": "Fixed exact cap: /stat plus the two Panama approach zones.", "editor": "number", "maximum": 3, "minimum": 3, "prefill": 3, "title": "Provider request cap", "type": "integer" }, "maxTotalChargeUsd": { "default": 0.055, "description": "Buyer-side cap checked before the paid report event.", "editor": "number", "maximum": 100, "minimum": 0.005, "prefill": 0.055, "title": "Maximum total charge (USD)", "type": "number" }, "maxVessels": { "default": 500, "description": "Maximum bounded provider rows accepted for each fixed approach. The live-safe default of 500 avoids truncating dense approach snapshots.", "editor": "number", "maximum": 500, "minimum": 1, "prefill": 500, "title": "Maximum vessels per side", "type": "integer" }, "requestId": { "default": "auto", "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.", "editor": "textfield", "pattern": "^(auto|[a-z0-9][a-z0-9._-]{2,63})$", "prefill": "auto", "title": "Request ID", "type": "string" }, "schemaVersion": { "default": "1.0", "description": "Contract version for this Actor input.", "editor": "select", "enum": [ "1.0" ], "prefill": "1.0", "title": "Schema version", "type": "string" }, "sourceMode": { "default": "demo", "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.", "editor": "select", "enum": [ "demo", "datalastic" ], "prefill": "demo", "title": "Source mode", "type": "string" }, "timeoutMs": { "default": 10000, "description": "Timeout for each bounded provider request.", "editor": "number", "maximum": 30000, "minimum": 1000, "prefill": 10000, "title": "Provider timeout (ms)", "type": "integer" }, "watchId": { "default": "panama-canal-main", "description": "Stable lower-case identity for the queue history. It is irreversibly derived before lock, state, ledger, and output use.", "editor": "textfield", "pattern": "^[a-z0-9][a-z0-9._-]{2,63}$", "prefill": "panama-canal-main", "title": "Watch ID", "type": "string" } }, "required": [ "schemaVersion", "requestId", "watchId", "sourceMode" ], "schemaVersion": 1, "title": "Panama Canal Queue & Transit Imbalance Monitor input", "type": "object" }, "name": "panama-canal-queue-transit-imbalance", "outputSchema": null }, { "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "pricing_info", "outputSchema": null }, { "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).", "inputSchema": { "additionalProperties": false, "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.", "properties": { "baselineMonths": { "default": 12, "description": "Historical window used for 3-month and 12-month comparisons.", "editor": "number", "maximum": 12, "minimum": 3, "prefill": 12, "title": "Baseline months", "type": "integer" }, "datalasticApiKey": { "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.", "editor": "textfield", "isSecret": true, "title": "Datalastic API key", "type": "string" }, "maxProviderRequests": { "default": 2, "description": "Exactly two requests are permitted for BYOK: /stat plus the Singapore zone.", "editor": "number", "maximum": 2, "minimum": 2, "prefill": 2, "title": "Maximum provider requests", "type": "integer" }, "maxRows": { "default": 240, "description": "One bounded page per official source; 240 covers the observed 13-month window and up to 500 is allowed.", "editor": "number", "maximum": 500, "minimum": 240, "prefill": 240, "title": "Rows per official source", "type": "integer" }, "maxTotalChargeUsd": { "default": 0.055, "description": "Buyer cap checked before the paid result event.", "editor": "number", "maximum": 100, "minimum": 0.005, "prefill": 0.055, "title": "Maximum total charge (USD)", "type": "number" }, "requestId": { "default": "auto", "description": "Use auto for a Task-safe run identity.", "editor": "textfield", "pattern": "^(auto|[A-Za-z0-9][A-Za-z0-9._:-]{0,127})$", "prefill": "auto", "title": "Request ID", "type": "string" }, "schemaVersion": { "default": "1.0", "description": "Contract version for this Actor input.", "editor": "select", "enum": [ "1.0" ], "prefill": "1.0", "title": "Schema version", "type": "string" }, "sourceMode": { "default": "open", "description": "Demo is synthetic; open uses data.gov.sg; open_plus_byok adds two bounded Datalastic provider requests: /stat plus Singapore.", "editor": "select", "enum": [ "demo", "open", "open_plus_byok" ], "prefill": "open", "title": "Source mode", "type": "string" }, "watchId": { "default": "singapore-bunker-main", "description": "Stable identity for the Singapore baseline.", "editor": "textfield", "maxLength": 64, "minLength": 3, "pattern": "^[a-z0-9][a-z0-9._-]{2,63}$", "prefill": "singapore-bunker-main", "title": "Watch ID", "type": "string" } }, "required": [ "schemaVersion" ], "schemaVersion": 1, "title": "Singapore Bunker Demand & Tanker Flow Divergence input", "type": "object" }, "name": "singapore-bunker-tanker-divergence", "outputSchema": null }, { "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).", "inputSchema": { "additionalProperties": false, "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.", "properties": { "datalasticApiKey": { "description": "Required only for live Datalastic mode. Runtime validation requires a non-empty secret, and the value is never returned in output.", "editor": "textfield", "isSecret": true, "title": "Datalastic API key", "type": "string" }, "identitySalt": { "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.", "editor": "textfield", "isSecret": true, "title": "Stable identity salt", "type": "string" }, "maxProviderRequests": { "default": 4, "description": "Exactly four actual provider attempts/pages: one /stat and one bounded page per fixed zone.", "editor": "number", "maximum": 4, "minimum": 4, "prefill": 4, "title": "Maximum provider requests", "type": "integer" }, "maxTotalChargeUsd": { "default": 0.055, "description": "Buyer-side cap checked before the paid report event.", "editor": "number", "maximum": 100, "minimum": 0.055, "prefill": 0.055, "title": "Maximum total charge USD", "type": "number" }, "maxVessels": { "default": 100, "description": "Maximum bounded provider rows accepted for each fixed zone.", "editor": "number", "maximum": 500, "minimum": 1, "prefill": 100, "title": "Maximum vessels", "type": "integer" }, "requestId": { "default": "auto", "description": "Use auto for a trusted run-derived identifier or provide an explicit idempotency value.", "editor": "textfield", "pattern": "^(auto|[a-z0-9][a-z0-9._:-]{2,127})$", "prefill": "auto", "title": "Request ID", "type": "string" }, "schemaVersion": { "default": "1.0", "description": "Contract version for this Actor input.", "editor": "select", "enum": [ "1.0" ], "prefill": "1.0", "title": "Schema version", "type": "string" }, "sourceMode": { "default": "demo", "description": "Demo is synthetic, includes no $0.05 result-found fee, and still incurs the automatic start charge. Datalastic uses your own API key.", "editor": "select", "enum": [ "demo", "datalastic" ], "prefill": "demo", "title": "Source mode", "type": "string" }, "watchId": { "default": "hormuz-tanker-flow", "description": "Stable lowercase identifier for one monitoring series.", "editor": "textfield", "pattern": "^[a-z0-9][a-z0-9._-]{2,63}$", "prefill": "hormuz-tanker-flow", "title": "Watch ID", "type": "string" } }, "required": [ "schemaVersion", "watchId", "sourceMode" ], "schemaVersion": 1, "title": "Strait of Hormuz Tanker Flow Recovery Index input", "type": "object" }, "name": "strait-of-hormuz-tanker-flow-recovery", "outputSchema": null }, { "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).", "inputSchema": { "additionalProperties": true, "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.", "properties": { "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", "items": { "additionalProperties": false, "properties": { "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "consumptionEndAt", "type": "string" }, "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "consumptionStartAt", "type": "string" }, "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", "enum": [ "measured", "buyer_reported", "estimated" ], "title": "dataTruth", "type": "string" }, "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", "enum": [ "HFO", "LFO", "MDO_MGO", "LNG", "BIO_LNG", "LPG_BUTANE", "LPG_PROPANE", "METHANOL", "BIOFUEL", "OTHER" ], "title": "fuelType", "type": "string" }, "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", "pattern": "^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$", "title": "massTonnes", "type": "string" }, "portCallId": { "description": "Exact `portCallId` where the berth consumption occurred. The referenced port call must exist and contain the supplied consumption interval.", "editor": "textfield", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "portCallId", "type": "string" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "recordId", "type": "string" } }, "required": [ "recordId", "portCallId", "consumptionStartAt", "consumptionEndAt", "fuelType", "massTonnes", "dataTruth" ], "type": "object" }, "maxItems": 18, "title": "berthRecords", "type": "array" }, "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", "items": { "additionalProperties": false, "properties": { "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "arrivalAt", "type": "string" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "arrivalPortCallId", "type": "string" }, "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "departureAt", "type": "string" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "departurePortCallId", "type": "string" }, "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", "items": { "additionalProperties": false, "properties": { "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "consumptionEndAt", "type": "string" }, "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "consumptionStartAt", "type": "string" }, "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", "enum": [ "measured", "buyer_reported", "estimated" ], "title": "dataTruth", "type": "string" }, "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", "enum": [ "HFO", "LFO", "MDO_MGO", "LNG", "BIO_LNG", "LPG_BUTANE", "LPG_PROPANE", "METHANOL", "BIOFUEL", "OTHER" ], "title": "fuelType", "type": "string" }, "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", "pattern": "^(0|[1-9][0-9]*)(?:\\.[0-9]{0,5}[1-9])?$", "title": "massTonnes", "type": "string" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "recordId", "type": "string" } }, "required": [ "recordId", "consumptionStartAt", "consumptionEndAt", "fuelType", "massTonnes", "dataTruth" ], "type": "object" }, "maxItems": 4, "minItems": 1, "title": "fuelRecords", "type": "array" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "legId", "type": "string" } }, "required": [ "legId", "departurePortCallId", "arrivalPortCallId", "departureAt", "arrivalAt", "fuelRecords" ], "type": "object" }, "maxItems": 8, "minItems": 1, "title": "legs", "type": "array" }, "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", "enum": [ "decision", "synthetic_demo" ], "title": "mode", "type": "string" }, "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", "items": { "additionalProperties": false, "properties": { "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "endedAt", "type": "string" }, "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", "title": "isPortOfCall", "type": "boolean" }, "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", "title": "memberStatePort", "type": "boolean" }, "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", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,63}$", "title": "portCallId", "type": "string" }, "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", "enum": [ "ordinary", "excluded_stop", "neighbouring_container_transhipment", "unknown" ], "title": "specialTreatment", "type": "string" }, "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", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", "title": "startedAt", "type": "string" }, "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", "pattern": "^[A-Z0-9]{5}$", "title": "unlocode", "type": "string" } }, "required": [ "portCallId", "unlocode", "memberStatePort", "isPortOfCall", "specialTreatment", "startedAt", "endedAt" ], "type": "object" }, "maxItems": 9, "minItems": 2, "title": "portCalls", "type": "array" }, "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", "maxLength": 64, "title": "requestId", "type": "string" }, "schemaVersion": { "description": "Contract version for validation and output interpretation. Enter `1.1.0`; other values are rejected before any Dataset delivery.", "editor": "textfield", "title": "schemaVersion", "type": "string" } }, "required": [ "schemaVersion", "mode", "requestId", "portCalls", "legs", "berthRecords" ], "schemaVersion": 1, "title": "EU ETS voyage carbon exposure input", "type": "object" }, "name": "voyage-carbon-compliance-evidence", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:699316801ebf6ccca8ec1c16203300693945f8dfc00304c6a509af519dad840d | sha256sum