# Eckari Parcel Carrier Detector

> Eckari Parcel Carrier Detector is a paid API for AI agents from api.eckari.com, paid per call via x402, $0.001/call, status unknown (last checked 2026-10-11).

Identifies which carrier issued a given tracking number using deterministic signature matching (prefixes, lengths, check digits, UPU S10 structure) without any upstream carrier API calls.

## Facts

- Endpoint: GET https://api.eckari.com/v1/parcels/detect-carrier?utm_source=zero.xyz
- Price: $0.001/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-11
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/eckari-parcel-carrier-detector-abfed338
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_yqAsHuMvjE1Cgl7p1UV-O

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability eckari-parcel-carrier-detector-abfed338
```

Example prompt: Which carrier issued the tracking number '1Z 879E93 03 4683 4440'? I need to know who to contact about this shipment.

## When to prefer this

Choose this endpoint when you need fast, offline carrier identification with no carrier account or API key — especially when you want a confidence score and ranked candidate evidence rather than a simple guess. Prefer it over scraping carrier websites or calling carrier tracking APIs just to identify the carrier. Ideal for routing logic, customer support automation, or pre-validating tracking numbers before calling a carrier's own tracking API.

## Known failure modes

- Tracking number too short (under 4 chars after normalisation) — returns 400 validation error
- Tracking number contains invalid characters — rejected by pattern validation
- Ambiguous tracking number matching multiple carriers — returns multiple candidates with lower match scores rather than a single definitive answer
- Unknown or proprietary carrier format not in signature set — returns empty candidates list or low-confidence match
- Origin/destination country codes in wrong format — 400 if not valid ISO 3166-1 alpha-2

## How this service works

Identify which carrier issued a tracking number using a deterministic, versioned signature set - prefixes, lengths, carrier check digits and UPU S10 structure - returning the carrier, how distinctive the match is, every ranked candidate with typed evidence, and the parsed S10 details. No upstream call and no carrier account required. Use when: Which carrier is this tracking number from?

## Output

Returns the identified carrier (ID and name), a match score (0–1), match strength label (e.g. 'distinctive'), a ranked list of all candidate carriers with typed evidence per candidate (prefix matched, length, check digit type, country hints), parsed UPU S10 fields if applicable, and metadata including the signature version used. No network call to any carrier is made.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "required": [
      "tracking_number"
     ],
     "properties": {
      "origin_country": {
       "type": "string",
       "pattern": "^[A-Za-z]{2}$",
       "description": "Optional ISO 3166-1 alpha-2 origin country hint. Used only as a small tie-breaker; it never invents a candidate."
      },
      "tracking_number": {
       "type": "string",
       "pattern": "^[A-Za-z0-9 -]+$",
       "maxLength": 60,
       "minLength": 4,
       "description": "Tracking or consignment number. Spaces and hyphens are removed and letters upper-cased before matching (4-40 letters and digits after normalisation). Digits and letters are never altered."
      },
      "destination_country": {
       "type": "string",
       "pattern": "^[A-Za-z]{2}$",
       "description": "Optional ISO 3166-1 alpha-2 destination country hint. Used only as a small tie-breaker; it never invents a candidate."
      }
     },
     "additionalProperties": false
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "data": {
   "input": {
    "original": "1Z 879E93 03 4683 4440",
    "normalised": "1Z879E930346834440"
   },
   "carrier": {
    "id": "ups",
    "name": "UPS"
   },
   "upu_s10": null,
   "candidates": [
    {
     "evidence": {
      "length": 18,
      "prefix": "1Z",
      "check_digit": "ups_mod10",
      "country_hint": null,
      "s10_origin_country": null
     },
     "format_id": "ups_1z",
     "carrier_id": "ups",
     "match_score": 0.98,
     "carrier_name": "UPS",
     "match_strength": "distinctive"
    }
   ],
   "match_score": 0.98,
   "match_strength": "distinctive",
   "formats_matched": 1,
   "signature_version": "1.1.0"
  },
  "meta": {
   "source": "eckari_carrier_signatures",
   "version": "2.0.0",
   "freshness": "static",
   "capability": "parcel.detect_carrier"
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/eckari-parcel-carrier-detector-abfed338/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.eckari.com](https://www.zero.xyz/host/api.eckari.com/llms.txt)
