Batches
Where a batch went: deliveries, the distribution tree and EPCIS export.
Endpoints
-
GET
/batches/List deliveries -
GET
/batches/{gtin}/{batch_number}/Trace a batch -
GET
/batches/{gtin}/{batch_number}/tree/Get a batch's distribution tree -
GET
/batches/{gtin}/{batch_number}/orphans/List a batch's events the graph can't connect -
GET
/batches/{gtin}/{batch_number}/epcis/Export a batch as EPCIS 2.0 -
GET
/lots/List your lots -
GET
/lots/{gtin}/{batch_number}/Read a lot's details -
PATCH
/lots/{gtin}/{batch_number}/Correct a lot's details
List deliveries
https://api.dawatrack.com/partner-api/v1/batches/
Receipts of deliveries you can see, newest first: of your shipments, and by you or your linked facilities.
batches:read
Limit 5,000 per day
Each row is a receipt on the ledger (a RECEIVE event): who received it (receiver), the shipment it names (shipment_event_id, null if it names none), the quantity and when.
A manufacturer sees the receipts of its supplier account's shipments, whoever received them. A distributor or pharmacy sees the deliveries its linked facilities received, not their opening stock, branch transfers or customer returns.
Filter with gtin and batch_number. A batch number matches in any spelling (case, spaces).
To report a delivery, write events: a SHIP from the sender and a RECEIVE from the receiver (POST /events/). There is no other way to record one.
Query parameters
-
batch_numberstring OptionalAny spelling; compared in its one format.
-
gtinstring OptionalGTIN-14.
-
orderingstring OptionalWhich field to use when ordering the results.
-
pageinteger OptionalA page number within the paginated result set.
-
page_sizeinteger OptionalNumber of results to return per page.
-
searchstring OptionalA search term.
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/batches/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/batches/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/batches/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
A page of results. These are the fields of each item in results. See Pagination.
-
event_idintegerThe RECEIVE event.
-
shipment_event_idinteger or nullThe SHIP event this receipt names as its parent, if any.
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
medicine_namestringFrom the product catalogue, by GTIN.
-
quantityinteger or nullThe number of units.
-
received_atdatetimeWhen the facility received it.
-
receiverobject-
typeenumfacility: a DawaTrack pharmacy; supplier: a supplier on DawaTrack; partner: an API account.
Possible values:facilitysupplierpartner -
schema_namestringThe facility's identifier; blank otherwise.
-
namestring
-
Example response
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"event_id": "5c0e7d2a-91b4-4f63-8a27-0d4e6b9c1f35",
"shipment_event_id": 1,
"gtin": "06164004321562",
"batch_number": "BTH-2026-041",
"medicine_name": "Amoxicillin 500 mg capsules",
"quantity": 2600,
"received_at": "2026-10-10T09:00:00Z",
"receiver": {
"type": "facility",
"schema_name": "pharmacy_a",
"name": "name"
}
}
]
}
Status codes
200 | OK |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
429 | Rate limit exceeded |
Trace a batch
https://api.dawatrack.com/partner-api/v1/batches/{gtin}/{batch_number}/
The deliveries of this batch you can see, as in the list above.
batches:read
Limit 5,000 per day
404 when there is none. Use the distribution tree for every hop, wholesale resale included.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
-
event_idintegerThe RECEIVE event.
-
shipment_event_idinteger or nullThe SHIP event this receipt names as its parent, if any.
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
medicine_namestringFrom the product catalogue, by GTIN.
-
quantityinteger or nullThe number of units.
-
received_atdatetimeWhen the facility received it.
-
receiverobject-
typeenumfacility: a DawaTrack pharmacy; supplier: a supplier on DawaTrack; partner: an API account.
Possible values:facilitysupplierpartner -
schema_namestringThe facility's identifier; blank otherwise.
-
namestring
-
Example response
[
{
"event_id": "5c0e7d2a-91b4-4f63-8a27-0d4e6b9c1f35",
"shipment_event_id": 1,
"gtin": "06164004321562",
"batch_number": "BTH-2026-041",
"medicine_name": "Amoxicillin 500 mg capsules",
"quantity": 2600,
"received_at": "2026-10-10T09:00:00Z",
"receiver": {
"type": "facility",
"schema_name": "pharmacy_a",
"name": "name"
}
}
]
Status codes
200 | OK |
400 | The request is invalid, for example a malformed GTIN or a missing field |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
404 | Not found, or not visible to your credential |
429 | Rate limit exceeded |
Get a batch's distribution tree
https://api.dawatrack.com/partner-api/v1/batches/{gtin}/{batch_number}/tree/
Every party this batch reached, on DawaTrack or not, hop by hop, each under the party it came from.
batches:read
Limit 5,000 per day
The same tree as the supplier portal's Trace page, from the same walk as a recall's reach.
Each node is a party (kind): you, supplier (a distributor on DawaTrack), partner (a connected system), pharmacy, outside (a party outside DawaTrack), sender (a party outside DawaTrack that sold the batch on), or an end (end: true, with quantity): patients, transit (not received yet), returned, gap (receiver not recorded). also points to a party shown elsewhere that this one also supplied.
A party's figures (received, dispensed, sent_on, on_hand, quarantined) come from its own events, read on every call. acknowledged is when a receiver answered a recall notice; disputed marks a party reached through a delivery its supplier disputes.
A manufacturer sees the whole tree, rooted at itself. A distributor or pharmacy sees only its own lots of the batch as roots, with their own downstream: never who supplied it.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/tree/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/tree/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/tree/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
-
keystringStable id of the party in this tree.
-
kindenumyou: your organisation; supplier: a distributor on DawaTrack; partner: a connected system; pharmacy: a pharmacy branch; outside: a party outside DawaTrack; sender: a party outside DawaTrack that sold the batch on; patients: units dispensed; transit: a shipment not yet received; returned: a return to a supplier; gap: a shipment whose receiver nobody recorded; also: a party shown elsewhere in the tree that this one also supplied.
Possible values:yousupplierpartnerpharmacyoutsidesenderpatientstransitreturnedgapalso -
namestring -
detailstring -
hopintegerParties from the root.
-
endbooleanTrue for patients, transit, returned and gap: quantity applies.
Default:
False -
quantityinteger or nullThe number of units.
-
occurred_atdatetime or nullWhen the event happened.
-
receivedinteger or null -
dispensedinteger or null -
sent_oninteger or null -
on_handinteger or null -
quarantinedinteger or null -
shippedinteger or nullFor you: units shipped.
-
shipmentsinteger or null -
acknowledgeddatetime or nullWhen the receiver acknowledged a recall notice.
-
disputedbooleanReached through a delivery its supplier disputes.
Default:
False -
branch_ofbooleanA branch of the pharmacy above it (a stock transfer).
Default:
False -
also_understring -
confirmationenum or nullrecorded: on DawaTrack by the receiver itself; scanned/typed: confirmed through its link, a scan matching the batch or the quantities typed; declared: on another party's word (declared_by); waiting: a shipment not confirmed yet; not-confirmed: not confirmed 7 days after it left. The weakest of a party's receipts.
Possible values:recordedscannedtypeddeclaredwaitingnot-confirmed -
declared_bystringThe party outside DawaTrack that declared it.
-
consignmentsarray of objects-
numberstring -
carrierstring -
waybillstring
-
-
shortintegerUnits its receiver reported short.
Default:
0 -
damagedintegerUnits it reported arrived damaged.
Default:
0 -
refusedintegerUnits it refused.
Default:
0 -
reachableboolean or nullA party outside DawaTrack: whether a recall can reach it (a verified email and a phone on file). Null for a party on DawaTrack.
-
senderstringA shipment waiting: who sent it.
-
childrenarray of objects Read-onlyThe facilities it passed the batch on to, in the same shape.
Example response
[
{
"key": "you",
"kind": "you",
"name": "Big Pharma",
"hop": 0,
"end": false,
"shipped": 1850,
"shipments": 5,
"children": [
{
"key": "pharmacy:bondo/1",
"kind": "pharmacy",
"name": "Blooming World International",
"detail": "",
"hop": 1,
"end": false,
"received": 1800,
"dispensed": 10,
"sent_on": 1575,
"on_hand": 215,
"quarantined": 0,
"disputed": false,
"children": [
{
"key": "patients:pharmacy:bondo/1",
"kind": "patients",
"name": "Patients",
"hop": 2,
"end": true,
"quantity": 10,
"children": []
},
{
"key": "outside:4367",
"kind": "outside",
"name": "dobling pharmacy",
"hop": 2,
"end": true,
"quantity": 870,
"occurred_at": "2026-10-23T09:12:00Z",
"acknowledged": "2026-10-25T08:30:00Z",
"children": []
},
{
"key": "transit:4452",
"kind": "transit",
"name": "Blooming World International",
"hop": 2,
"end": true,
"quantity": 50,
"occurred_at": "2026-10-30T10:02:00Z",
"children": []
}
]
}
]
}
]
Status codes
200 | OK |
400 | The request is invalid, for example a malformed GTIN or a missing field |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
404 | Not found, or not visible to your credential |
429 | Rate limit exceeded |
List a batch's events the graph can't connect
https://api.dawatrack.com/partner-api/v1/batches/{gtin}/{batch_number}/orphans/
Events of this batch that are on the ledger but not connected to the rest of it: the graph can't walk to or from them.
batches:read
Limit 5,000 per day
An orphan names no predecessor (parent_event, a receipt in its sources, or a receipt link) though its type follows from one: a RECEIVE, DISPENSE, QUARANTINE, RELEASE, TRANSFER, DISAGGREGATE or RECEIVE_LINK. A COMMISSION and an AGGREGATE never are.
A SHIP is an orphan when its sender received the batch on DawaTrack before it. When the sender didn't, the SHIP is the first movement DawaTrack saw, and isn't one.
Your own orphans show their event_id and facility. Another party's are withheld: their type and when they happened only. A batch you can't see is 404. Requires batches:read.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/orphans/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/orphans/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/orphans/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
countinteger -
orphansarray of objects-
event_typestringThe kind of event.
-
occurred_atdatetimeWhen the event happened.
-
withheldbooleanAnother party's event: only its type and time are shown.
-
event_idinteger -
facilitystringWhere it happened, as the graph keys a facility.
-
Example response
{
"gtin": "06164004321562",
"batch_number": "AMX-2026-041",
"count": 2,
"orphans": [
{
"event_type": "SHIP",
"occurred_at": "2026-10-20T09:15:00Z",
"withheld": false,
"event_id": 9123,
"facility": "partner:12/0614141000005"
},
{
"event_type": "RECEIVE",
"occurred_at": "2026-10-21T11:02:00Z",
"withheld": true
}
]
}
Status codes
200 | OK |
400 | The request is invalid, for example a malformed GTIN or a missing field |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
404 | Not found, or not visible to your credential |
429 | Rate limit exceeded |
Export a batch as EPCIS 2.0
https://api.dawatrack.com/partner-api/v1/batches/{gtin}/{batch_number}/epcis/
The batch's event history as a GS1 EPCIS 2.0 JSON-LD document, for EPCIS-based systems.
batches:read
Limit 5,000 per day
Unit identifiers use urn:epc:id:sgtin: and urn:epc:class:lgtin: when the manufacturer recorded its GS1 Company Prefix length, and GS1 Digital Link URIs otherwise.
A batch-level event is reported as a quantityList entry. Packing and unpacking appear as AggregationEvent ADD and DELETE.
A batch of a product you make or pack with no events yet returns 200 with an empty eventList, not 404.
The lot's details: a commissioning (ADD) event carries them as ilmd, the expiry as cbvmda:itemExpirationDate and the manufacture date as dawatrack:manufactureDate (CBV 2.0 has no production-date attribute). Other events carry the dates they declared as dawatrack:itemExpirationDate and dawatrack:manufactureDate. The lot's current details, after any correction by its owner, are in epcisHeader.epcisMasterData under the lot's class identifier.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/epcis/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/epcis/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/batches/06164004321562/BTH-2026-041/epcis/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Example response
{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld",
{
"dawatrack": "https://dawatrack.com/ns/epcis#"
}
],
"type": "EPCISDocument",
"schemaVersion": "2.0",
"creationDate": "2026-10-10T12:00:00+00:00",
"epcisBody": {
"eventList": [
{
"type": "ObjectEvent",
"eventTime": "2026-10-01T09:00:00+00:00",
"eventTimeZoneOffset": "+00:00",
"eventID": "urn:uuid:0b0f6c7e-5a3c-5b2e-9a51-3f2d7c1e8a44",
"action": "OBSERVE",
"bizStep": "shipping",
"disposition": "in_transit",
"readPoint": {
"id": "urn:dawatrack:facility:distributor_nairobi"
},
"bizLocation": {
"id": "urn:dawatrack:facility:distributor_nairobi"
},
"destinationList": [
{
"type": "location",
"destination": "urn:dawatrack:facility:pharmacy_c"
}
],
"quantityList": [
{
"epcClass": "https://id.gs1.org/01/06164004321562/10/BTH-2026-041",
"quantity": 2600
}
]
}
]
}
}
Status codes
200 | OK |
400 | The request is invalid, for example a malformed GTIN or a missing field |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
404 | Not found, or not visible to your credential |
429 | Rate limit exceeded |
List your lots
https://api.dawatrack.com/partner-api/v1/lots/
The lots you own, with their current expiry and manufacture date, most recently changed first.
batches:read
Limit 5,000 per day
You own a lot as the product's registered manufacturer, or as the first to declare a lot of a product with no manufacturer on DawaTrack. Filter with gtin. Needs batches:read.
Query parameters
-
orderingstring OptionalWhich field to use when ordering the results.
-
pageinteger OptionalA page number within the paginated result set.
-
page_sizeinteger OptionalNumber of results to return per page.
-
searchstring OptionalA search term.
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/lots/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/lots/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/lots/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
A page of results. These are the fields of each item in results. See Pagination.
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
expiry_datedate or nullThe batch's expiry date.
-
manufacture_datedate or null -
ownerstring -
declaredbooleanTrue when a party on DawaTrack declared these dates; false when they are only what a pharmacy receiving it from a sender not on DawaTrack reported (provisional until declared).
-
is_ownerboolean Read-only -
historyarray of valuess Read-only -
discrepanciesarray of valuess Read-onlyReceipts of a provisional lot whose pack disagreed with the record.
Example response
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"gtin": "06164004321562",
"batch_number": "BTH-2026-041",
"expiry_date": "2026-10-10",
"manufacture_date": "2026-10-10",
"owner": "owner",
"declared": false,
"is_owner": true,
"history": [
"string"
],
"discrepancies": [
"string"
]
}
]
}
Status codes
200 | OK |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
429 | Rate limit exceeded |
Read a lot's details
https://api.dawatrack.com/partner-api/v1/lots/{gtin}/{batch_number}/
A batch's expiry and manufacture date as its owner recorded them, who the owner is, and their history.
batches:read
Limit 5,000 per day
Every event for the batch carries these dates (see POST /events/). The owner is the product's registered manufacturer, or whoever first declared the batch when the product has no manufacturer on DawaTrack.
Visible when you can see an event of the batch, or you own it; otherwise 404. Needs batches:read.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Example request
curl -X GET https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN"
import requests
token = "..." # from POST /oauth/token/
response = requests.get(
"https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/",
headers={"Authorization": f"Bearer {token}"},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/", {
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
},
});
console.log(await response.json());
Response fields
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
expiry_datedate or nullThe batch's expiry date.
-
manufacture_datedate or null -
ownerstring -
declaredbooleanTrue when a party on DawaTrack declared these dates; false when they are only what a pharmacy receiving it from a sender not on DawaTrack reported (provisional until declared).
-
is_ownerboolean Read-only -
historyarray of valuess Read-only -
discrepanciesarray of valuess Read-onlyReceipts of a provisional lot whose pack disagreed with the record.
Example response
{
"gtin": "06164004321562",
"batch_number": "BTH-2026-041",
"expiry_date": "2026-10-10",
"manufacture_date": "2026-10-10",
"owner": "owner",
"declared": false,
"is_owner": true,
"history": [
"string"
],
"discrepancies": [
"string"
]
}
Status codes
200 | OK |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
429 | Rate limit exceeded |
Correct a lot's details
https://api.dawatrack.com/partner-api/v1/lots/{gtin}/{batch_number}/
The owner corrects a batch's expiry or manufacture date, with a reason.
products:write
Production credentials only
Limit 5,000 per day
Send expiry_date, optionally manufacture_date, and reason. The new dates replace the old everywhere: each pharmacy holding the batch has its stock corrected and is alerted, and each supplier that handled it is emailed with your reason. The history keeps both.
Only the owner (or a contract packer it authorized for the GTIN); anyone else is 403. No reason, no change, a manufacture date in the future or on or after the expiry is 400. Needs products:write and production credentials.
Path parameters
-
batch_numberstring Required -
gtinstring Required
Request body
JSON. Send Content-Type: application/json.
-
expiry_datedate OptionalThe batch's expiry date.
-
manufacture_datedate or null Optional -
reasonstring Optional
Example request
curl -X PATCH https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/ \
-H "Authorization: Bearer $DAWATRACK_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"expiry_date": "2028-06-30",
"manufacture_date": "2026-06-01",
"reason": "The expiry was keyed wrongly on the first shipment."
}'
import uuid
import requests
token = "..." # from POST /oauth/token/
response = requests.patch(
"https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/",
headers={"Authorization": f"Bearer {token}", "Idempotency-Key": str(uuid.uuid4())},
json={
"expiry_date": "2028-06-30",
"manufacture_date": "2026-06-01",
"reason": "The expiry was keyed wrongly on the first shipment."
},
)
response.raise_for_status()
print(response.json())
const token = "..."; // from POST /oauth/token/
const response = await fetch("https://api.dawatrack.com/partner-api/v1/lots/06164004321562/BTH-2026-041/", {
method: "PATCH",
headers: {
Authorization: `Bearer ${token}`,
"Idempotency-Key": crypto.randomUUID(),
"Content-Type": "application/json",
},
body: JSON.stringify({
"expiry_date": "2028-06-30",
"manufacture_date": "2026-06-01",
"reason": "The expiry was keyed wrongly on the first shipment."
}),
});
console.log(await response.json());
Response fields
-
gtinstringThe product's GS1 GTIN, as 14 digits.
-
batch_numberstringThe batch or lot number.
-
expiry_datedate or nullThe batch's expiry date.
-
manufacture_datedate or null -
ownerstring -
declaredbooleanTrue when a party on DawaTrack declared these dates; false when they are only what a pharmacy receiving it from a sender not on DawaTrack reported (provisional until declared).
-
is_ownerboolean Read-only -
historyarray of valuess Read-only -
discrepanciesarray of valuess Read-onlyReceipts of a provisional lot whose pack disagreed with the record.
Example response
{
"gtin": "06164004321562",
"batch_number": "BTH-2026-041",
"expiry_date": "2026-10-10",
"manufacture_date": "2026-10-10",
"owner": "owner",
"declared": false,
"is_owner": true,
"history": [
"string"
],
"discrepancies": [
"string"
]
}
Status codes
200 | OK |
400 | The request is invalid, for example a malformed GTIN or a missing field |
401 | No valid access token |
403 | Your credential lacks the scope, partner type or environment this needs |
409 | Conflict: a request with this Idempotency-Key is in progress, or the record already exists |
429 | Rate limit exceeded |
Partner API v1. The API reference is generated from the API's own code.