TimeToCargo

SeaRates

Migrate from SeaRates to TimeToCargo API v2: authentication, requests and response handling

This guide covers migration from SeaRates Container Tracking API v3 to TimeToCargo API v2. Parameter differences for legacy /container, /reference and /apiv2 operations are listed separately.

Public SeaRates documentation is currently unavailable. Before migrating, confirm your API version and integration parameters in your account or with SeaRates support. The tables below cover v3 unless stated otherwise.

See the migration workflow for importing references and setting up notifications. Full TimeToCargo schemas are in the API reference.

Authentication

SeaRates uses the api_key query parameter. The SeaRates base URL is https://tracking.searates.com.

To switch to TimeToCargo:

  1. Create a key in your TimeToCargo account.
  2. Change the base URL to https://tracking.timetocargo.com/v2. For example, the full tracking endpoint is https://tracking.timetocargo.com/v2/tracking.
  3. Send the new key in the api_key query parameter of every request, including batch tasks and webhook management. Keys and tokens from the former provider cannot be reused.

See authentication for key usage and request limits.

Tracking records and identifiers

SeaRatesTimeToCargoRequired change
metadata.number + metadata.typerequest.track_numberRead the requested number and type from request.track_number instead of metadata.
containers[]data.containers[]Process each entry in data.containers[]. A bill of lading or booking can return several containers.
metadata.statusdata.shipment_statusRead shipment progress from data.shipment_status. The top-level status describes the request result.

Operation mapping

SeaRatesTimeToCargoRequired change
GET /trackingGET /v2/trackingPass the reference, type and carrier. Use POST /v2/tracking/batch for several references.
GET /info/sealinesGET /v2/companiesFind the carrier in the new directory. Use its scac and check the required reference type in cn, bl or bk.
GET /routeGET /v2/tracking?need_route=trueAdd need_route=true to the tracking request. For stored data, use GET /v2/shipments?need_route=true.
GET /history, GET /history?id=…No direct equivalentExport past SeaRates responses before switching off the service. The shipment list provides current data, not an archive of those responses.
GET /container, /reference, /apiv2GET /v2/trackingIdentify the SeaRates version first. Replace a numeric sealine with a SCAC from GET /v2/companies.

Request parameters

SeaRatesTimeToCargoRequired change
numbervalueCopy number into the value query parameter without changing the reference.
type: CT / BL / BKtype: container / bl / bkReplace CT with container, BL with bl, and BK with bk. Include type in every request.
sealinecompanyPass the carrier SCAC in company and verify it through GET /v2/companies. AUTO is available only for container numbers.
route / aisneed_routeSet need_route=true to request route data. Remove ais from the request. There is no separate AIS switch.
force_updateforce_updateSet force_update=true when you need a carrier refresh. Follow the request limits.

Response fields

Paths in this table start at the root of a GET /v2/tracking response. In /v2/shipments, shipment data is nested inside each record at tracked_item.data.data. See the webhook guide for notification formats.

SeaRatesTimeToCargoResponse handling
data.metadata.numberrequest.track_number.valueRead the requested reference from request.track_number.value. Returned container numbers are in data.containers[].number.
data.metadata.sealinedata.summary.company.scacs[]Treat scacs as an array of strings. Check array membership instead of comparing it with a single string.
data.metadata.statusdata.shipment_statusUpdate status handling to use shipment_status values. Vessel arrival, container discharge and delivery are separate stages.
data.containers[].events[]data.containers[].events[]Read the event text from status, its code from status_code, its date from date, and its actual flag from actual. Resolve location through data.locations.
data.routedata.route_infoRead route geometry from route_info.route[].path and the current point from route_info.current_position. Coordinates use [latitude, longitude].
metadata.api_calls / unique_shipmentsGET /v2/apikeyRequest the remaining tracking allowance through GET /v2/apikey. SeaRates usage counters and balance do not transfer to the new account.

Response examples

Each pair labels the former-provider and TimeToCargo responses. Expand the longer JSON examples when you need them; the mapping tables remain visible. These are shortened examples with illustrative data. The path above each JSON block identifies the part shown. Paths in the following table start from that part.

Reference, tracking type and shipment state

How to map

SeaRatesTimeToCargoRequired change
data.metadata.number = "MSCU1234567"request.track_number.value = "MSCU1234567"The reference remains MSCU1234567. Read it from request.track_number.value in the new response.
data.metadata.type = "CT"request.track_number.type = "container"SeaRates CT corresponds to container. Use that value when building the request.
data.metadata.sealine = "MSCU"data.summary.company.scacs = ["MEDU","MSCU"]Handle the scacs array instead of a single code. In this example, MSC has both MEDU and MSCU.
data.metadata.status = "IN_TRANSIT"data.shipment_status = "IN_TRANSIT"Shipment progress is IN_TRANSIT. ACTIVE in tracking_metadata.status means the tracking subscription is active.
data.containers[0].size_type = "40' High Cube Dry"data.containers[0].type = "40' High Cube Dry"Read the container size and type description from containers[].type instead of size_type.
data.containers[0].iso_code = "45G1"No direct equivalentThere is no separate ISO equipment code field. Keep the source value separately if your system needs it.

Events, locations and vessel

How to map

SeaRatesTimeToCargoRequired change
containers[0].events[0].description = "Loaded"containers[0].events[1].status = "Loaded"Event text is in status. Replace the access to description.
containers[0].events[0].status = "CLL"containers[0].events[1].status_code = "CLL"Event codes are in status_code. Here, CLL means loading at the origin port and VAD means vessel arrival.
containers[0].events[1].actual = falsecontainers[0].events[0].actual = falseKeep checking actual: true indicates an actual event and false a planned event.
containers[0].events[0].location = 10containers[0].events[1].location = 0Match event.location to an id in locations. Do not use SeaRates numeric IDs to index the new response.
containers[0].events[0].vessel = 5containers[0].events[1].vessel = "EXAMPLE VESSEL"Read the vessel name directly from event.vessel. A lookup in a separate vessel array is no longer needed.
containers[0].events[0].date = "2026-10-01 12:00:00"containers[0].events[1].date = "2026-10-01T12:00:00"Parse the date with the T separator. If no time-zone offset is present, do not append Z or assume UTC.

Data to retain separately

Before switching off SeaRates, export past responses and position history that you need. The TimeToCargo route can contain a current point and route segments, but does not replace an AIS archive or SeaRates request history.

Last updated on