Ukrposhta APItrack.ukrposhta.ua ↗
Track Ukrposhta parcels via 3 endpoints. Get event history, origin/destination cities, and multi-barcode lookups from track.ukrposhta.ua.
What is the Ukrposhta API?
This API exposes 3 endpoints for querying Ukrposhta shipment data, returning up to 8 response fields per tracking result including event history, origin/destination cities, and query timestamps. The track_parcel endpoint accepts a single barcode and returns a full array of tracking events along with from_to city data, while track_multiple_parcels lets you query a comma-separated list of barcodes in one call.
curl -X POST 'https://api.parse.bot/scraper/2ff64a00-8724-4e97-a4e0-d498c7e3d428/track_parcel' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"lang": "EN",
"barcode": "CV102717070UA"
}'Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace track-ukrposhta-ua-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.ukrposhta_tracking_api import Ukrposhta, Language
client = Ukrposhta()
# Track a single parcel
parcel = client.parcels.track(barcode="CV102717070UA", lang=Language.EN)
print(parcel.result_time, parcel.date_by_barcode)
print(parcel.from_to.city_from, parcel.from_to.city_to)
# Track multiple parcels in batch
batch = client.batchresults.track(barcodes="CV102717070UA,0500500505098", lang=Language.UA)
print(batch.result_time, batch.result)
# Get tracking page metadata
page = client.trackingpages.get(lang=Language.EN)
print(page.url, page.language, page.description)
Track a single parcel by its barcode. Returns origin/destination cities, tracking event history, and timestamp. Solves reCAPTCHA internally to access the Ukrposhta tracking API. Empty results or missing city data indicate the parcel has been fully delivered or the barcode is not recognized.
| Param | Type | Description |
|---|---|---|
| lang | string | Language for results. |
| barcoderequired | string | The tracking number (e.g. CV102717070UA or 0500500505098). |
{
"type": "object",
"fields": {
"result": "array of tracking events (may be empty if no updates available)",
"from_to": "object containing city_from, city_to, lang, RDDDATE, ISSEVERALPLACES",
"nod_barcode": "string or null, related barcode",
"nod_regdate": "string or null, registration date",
"result_time": "string, timestamp of the query result",
"date_by_barcode": "boolean"
},
"sample": {
"data": {
"result": [],
"from_to": {
"lang": "en",
"RDDDATE": null,
"city_to": " ",
"city_from": " ",
"ISSEVERALPLACES": 0
},
"nod_barcode": null,
"nod_regdate": null,
"result_time": "2026-06-11 02:34",
"date_by_barcode": false
},
"status": "success"
}
}About the Ukrposhta API
Endpoints and What They Return
The track_parcel endpoint takes a required barcode parameter (e.g. CV102717070UA or 0500500505098) and an optional lang parameter (EN or UA). It returns a result array of tracking events, a from_to object with city_from, city_to, lang, RDDDATE, and ISSEVERALPLACES fields, plus nod_barcode, nod_regdate, result_time, and date_by_barcode. If the shipment has no recorded updates yet, result will be an empty array.
The track_multiple_parcels endpoint accepts the same lang option and a barcodes string of comma-separated tracking numbers. The response wraps all results under a single result object and includes a result_time timestamp. When none of the barcodes are found, the response contains a message field rather than tracking data, so callers should check for this case explicitly.
Metadata Endpoint
The get_tracking_page endpoint is a GET request that accepts an optional lang parameter and returns the canonical URL of the Ukrposhta tracking interface, the active language code, and a plain-text page description. This is useful for linking users directly to the official tracking page alongside programmatic results.
Coverage and Language
Both tracking endpoints support Ukrainian (UA) and English (EN) output. The from_to object surfaces city-level origin and destination; granular address or GPS data is not part of the response. Tracking event detail and frequency depend on what Ukrposhta has logged for a given barcode — international shipments may show fewer intermediate scans than domestic ones.
The Ukrposhta API is a managed, monitored endpoint for track.ukrposhta.ua — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when track.ukrposhta.ua changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official track.ukrposhta.ua API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Display real-time Ukrposhta delivery status in an e-commerce order management dashboard using
track_parcelevent history - Bulk-check the status of dozens of outbound shipments simultaneously with
track_multiple_parcelsand a comma-separated barcode list - Notify customers when
city_toin thefrom_toobject matches their city and a delivery-stage event appears in theresultarray - Log
result_timeand event arrays to a database for shipment SLA monitoring and late-delivery detection - Build a browser extension that shows a Ukrposhta tracking panel with a direct link to the tracking page via
get_tracking_page - Reconcile expected vs. actual delivery dates by comparing
RDDDATEfrom thefrom_toobject against current date
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Ukrposhta provide an official developer API?+
What does `track_parcel` return when a barcode has no events yet?+
result field will be an empty array. The from_to object may still contain city_from and city_to if the shipment is registered, and date_by_barcode will indicate whether the barcode was recognized. Check both fields to distinguish 'registered but not yet scanned' from 'barcode not found'.Does the API return estimated delivery dates or only historical events?+
from_to object includes an RDDDATE field which represents a delivery-related date from the tracking record. The API does not expose a separately calculated delivery estimate or predicted arrival window. You can fork this API on Parse and revise it to add any additional date-related fields if Ukrposhta surfaces them.Can I retrieve the full sender and recipient addresses from tracking results?+
from_to object provides city_from and city_to but no street-level address, postal code, or recipient name. You can fork this API on Parse and revise it to surface additional address detail if needed.How does `track_multiple_parcels` handle a mix of valid and invalid barcodes?+
result object contains entries for each barcode. Barcodes that are not found return a message rather than event data instead of causing the whole request to fail. Callers should iterate over the result object and check each entry individually for the presence of tracking events versus an error message.