{"id":21113,"plugin_id":"plugins_6aace9b25cc8819185620a8407053ddb","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:48.458Z","digest":"489dd69cf8a0099b8c203db171b4851437cc472c8cbb890be9db25e10460fc23","against":null,"payload":{"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"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}