← Ship24 Tracking APICONTENT HISTORY

Update to Ship24 Tracking API

Snapshot Sep 30, 2026 · 23:16 UTC · version 1.0.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Ship24 courier codes, courier auto-detection and per-courier required fields. Use when asked \"which courier code for <carrier>\", \"force the courier\", \"does <carrier> need a postcode\", \"courier not detected\", \"courierCode\", \"list of couriers Ship24 supports\", or when a tracker returns no results and the courier may be the cause. Explains when to send courierCode, the 3-per-request limit, requiredFields, deprecated codes, and how to fetch the courier list once and cache it instead of calling GET /couriers on every request.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 338
    },
    {
      "relative_path": "assets/icon-large.png",
      "size_in_bytes": 11655
    },
    {
      "relative_path": "assets/icon-small.png",
      "size_in_bytes": 3297
    },
    {
      "relative_path": "references/courier-fields.md",
      "size_in_bytes": 1723
    }
  ],
  "name": "ship24-couriers",
  "skill_md_contents": "---\nname: ship24-couriers\ndescription: Ship24 courier codes, courier auto-detection and per-courier required fields. Use when asked \"which courier code for <carrier>\", \"force the courier\", \"does <carrier> need a postcode\", \"courier not detected\", \"courierCode\", \"list of couriers Ship24 supports\", or when a tracker returns no results and the courier may be the cause. Explains when to send courierCode, the 3-per-request limit, requiredFields, deprecated codes, and how to fetch the courier list once and cache it instead of calling GET /couriers on every request.\nlicense: MIT\n---\n\n# Courier codes and detection\n\nSources: [Couriers](https://docs.ship24.com/couriers) and the `GET /couriers` operation in the OpenAPI spec\n(field table in `references/courier-fields.md`). The courier list itself is not bundled: it changes over time, and a\nstale code is silently ignored by the API, so always read it from the live API.\n\n## Auto-detection first\n\nShip24 detects the courier from the tracking number in most cases. `courierCode` is optional. Send it when:\n\n- the user already knows the courier (it improves accuracy and avoids ambiguous matches);\n- a tracker returned no results and the courier is a plausible cause;\n- tracking must be restricted to specific couriers (`settings.restrictTrackingToCourierCode: true`).\n\nDo not guess a code. If the courier is unknown, omit the field and let Ship24 detect it.\n\n## Format and limits\n\n| Rule | Value | Source |\n| --- | --- | --- |\n| Type | string or array of strings | OpenAPI `tracker-create-request` |\n| Per request | up to 3 codes | Couriers page |\n| Per shipment | up to 9 codes in total; `PATCH /trackers/{trackerId}` is the documented way to add codes afterward | Couriers and Trackers pages |\n| Deprecated code (`isDeprecated: true`) | silently ignored, not rejected | Couriers page |\n| `settings.restrictTrackingToCourierCode` | `true` pins tracking to the given codes only | OpenAPI |\n\n`tracker_conflict` means a tracker with similar conflicting parameters already exists. Provide additional\nparameters such as `shippingDate` or `destinationCountryCode` to differentiate it (see `ship24-troubleshooting`).\n\n## Required fields per courier\n\nEach courier entry carries `requiredFields`, a list of values that Ship24 needs to retrieve results for that\ncourier. Ship24 does not reject a request that omits them, but it may then fail to find the shipment.\n\n| `requiredFields` value | Tracker field to send |\n| --- | --- |\n| `destinationPostCode` | `destinationPostCode` (1 to 32 chars) |\n| `destinationCountryCode` | `destinationCountryCode` (ISO 3166-1 alpha-2 or alpha-3) |\n| `courierAccount` | No matching request field exists in the spec today, so it cannot be supplied through the API. |\n\nThe dashboard CSV export exposes the same information as `is_destination_postcode_required`,\n`is_destination_country_code_required`, `is_courier_account_required` columns.\n\n## `courierCode` is not `sourceCode`\n\n`courierCode` identifies the courier you ask Ship24 to track with (for example `us-post`). Event `sourceCode`\nidentifies the data source Ship24 obtained the event from (for example `usps-tracking`). They differ, and\nsource codes may evolve; never feed a `sourceCode` back as a `courierCode`.\n\n## Getting the courier list\n\n| Source | How | Notes |\n| --- | --- | --- |\n| Live API | `GET /couriers` or the `get_couriers` MCP tool | Full list, unpaginated, rate limit 1 request per second. Fetch once per session or deployment, cache it, never call it per request. |\n| Dashboard | Integrations → Couriers, CSV download | Same data for humans. |\n\nTo answer \"which code for <carrier>\", fetch the list once and filter it locally on `courierName` and\n`courierCode`; the response is large, so do not paste it whole into the conversation. Skip entries with\n`isDeprecated: true`. `isPost` is `true` when the courier is a postal operator; `countryCode` is the courier's\nmain country and may be `null`.\n\nCodes appearing in the OpenAPI examples: `us-post` (USPS), `fr-post` (La Poste), `palletways` (Palletways). For\nany other courier, call the API; do not invent codes.\n\n## Sibling skills\n\n`ship24-integration` for the tracker creation flow, `ship24-troubleshooting` for `validation_error`,\n`tracker_conflict` and \"no results\" triage.\n"
}

SHA-256 of public snapshot: 489dd69cf8a0099b8c203db171b4851437cc472c8cbb890be9db25e10460fc23