curl --request GET \
--url https://www.closient.com/epcis/api/2.0/epcs/{epc}/events \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/epcis/api/2.0/epcs/{epc}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/epcis/api/2.0/epcs/{epc}/events")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/epcis/api/2.0/epcs/{epc}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
],
"epcisBody": {
"queryResults": {
"eventList": [
{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
],
"action": "ADD",
"bizStep": "commissioning",
"disposition": "active",
"epcList": [
"/01/00012345678906/21/SERIAL001"
],
"eventID": "urn:uuid:f47ac10b-58cc-4372-a567-0e02b2c3d479",
"eventTime": "2026-08-25T03:40:00+00:00",
"eventTimeZoneOffset": "+00:00",
"recordTime": "2026-08-25T03:40:05+00:00",
"type": "ObjectEvent"
}
]
}
},
"type": "EPCISQueryDocument"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}Query EPCIS events naming one EPC
GET /events restricted to events naming one EPC in any role (GS1 EPCIS 2.0 REST binding, /epcs/{epc}/events). Takes every GET /events query parameter; the EPC is ANDed onto them. Same EPCISQueryDocument body and Link pagination. An EPC the caller’s organization has no events about is 404.
curl --request GET \
--url https://www.closient.com/epcis/api/2.0/epcs/{epc}/events \
--header 'X-API-Key: <api-key>'import requests
url = "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://www.closient.com/epcis/api/2.0/epcs/{epc}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://www.closient.com/epcis/api/2.0/epcs/{epc}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://www.closient.com/epcis/api/2.0/epcs/{epc}/events")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.closient.com/epcis/api/2.0/epcs/{epc}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
],
"epcisBody": {
"queryResults": {
"eventList": [
{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
],
"action": "ADD",
"bizStep": "commissioning",
"disposition": "active",
"epcList": [
"/01/00012345678906/21/SERIAL001"
],
"eventID": "urn:uuid:f47ac10b-58cc-4372-a567-0e02b2c3d479",
"eventTime": "2026-08-25T03:40:00+00:00",
"eventTimeZoneOffset": "+00:00",
"recordTime": "2026-08-25T03:40:05+00:00",
"type": "ObjectEvent"
}
]
}
},
"type": "EPCISQueryDocument"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}{
"detail": "The requested resource was not found.",
"error_code": "not_found",
"retryable": false,
"status": 404,
"timestamp": "2026-03-31T12:00:00+00:00",
"title": "Not Found",
"type": "https://closient.com/docs/errors/not_found"
}Authorizations
Path Parameters
An EPC, as an EPC URN or a GS1 Digital Link URI exactly as captured. A Digital Link's slashes may be sent as-is or percent-encoded.
Query Parameters
Filter by EPCIS event type. One of ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, or AssociationEvent per GS1 EPCIS 2.0 §7.3.
ObjectEvent, AggregationEvent, TransactionEvent, TransformationEvent, AssociationEvent Events with eventTime >= this value (inclusive lower bound). ISO-8601 / RFC 3339 with timezone offset per GS1 EPCIS 2.0 §8.2.7.2.
Events with eventTime < this value (exclusive upper bound). ISO-8601 / RFC 3339 with timezone offset per GS1 EPCIS 2.0 §8.2.7.2.
Filter by exact CBV business step. Accepts either the bare CBV token (shipping) or the URN-prefixed form (urn:epcglobal:cbv:bizstep:shipping); matching is exact-string against what was captured. The CBV 2.0 vocabulary is extensible — vendor-specific URNs are valid input.
^[^\x00]{0,}$Filter by exact CBV disposition (state of objects after the event). Accepts either the bare CBV token (in_transit) or the URN-prefixed form (urn:epcglobal:cbv:disp:in_transit); matching is exact-string against what was captured. The CBV 2.0 vocabulary is extensible — vendor-specific URNs are valid input.
^[^\x00]{0,}$Filter by exact read point URI (where the event was observed) per GS1 EPCIS 2.0 §7.4.2 / CBV 2.0 §10. Accepts the GS1 Digital Link form (https://id.gs1.org/414/{gln}) or the legacy SGLN URN (urn:epc:id:sgln:{company}.{location}.{extension}); matching is exact-string against what was captured.
^[^\x00]{0,}$Filter by exact business location URI (where the objects logically are after the event) per GS1 EPCIS 2.0 §7.4.2. Accepts the GS1 Digital Link form or the legacy SGLN URN — same encoding as EQ_readPoint. Matching is exact-string against what was captured.
^[^\x00]{0,}$Filter events referencing this single EPC (per GS1 EPCIS 2.0 §8.2.7.2 MATCH_epc). Searches epcList, childEPCs, inputEPCList, and outputEPCList simultaneously. Accepts either GS1 Digital Link (https://id.gs1.org/01/{gtin14}/10/{lot}[/21/{serial}]) or the legacy SGTIN URN form.
^[^\x00]{0,}$Comma-separated list of EPCs; matches events referencing any one of them (per GS1 EPCIS 2.0 §8.2.7.2 MATCH_anyEPC). Each token is trimmed before matching. Use MATCH_epc for a single EPC.
^[^\x00]{0,}$Filter by action. Per GS1 EPCIS 2.0 §7.4.2 the only valid values are ADD, OBSERVE, or DELETE (uppercase). Blank action is reserved for TransformationEvent and cannot be filtered on.
ADD, OBSERVE, DELETE Maximum number of events to return per page (1-100, default 30). When more results are available the response carries a Link header with rel="next" — request that URL to fetch the next page.
1 <= x <= 100Cursor for the next page. The Link header's next-page URL already carries it; opaque to the client — do not construct or modify.
^[^\x00]{0,}$Response
OK
200 response body for GET /events: a JSON-LD EPCISQueryDocument.
JSON-LD context; the EPCIS 2.0 context.
Always EPCISQueryDocument.
Envelope holding queryResults.eventList.
Show child attributes
Show child attributes
{
"queryResults": {
"eventList": [
{
"@context": [
"https://ref.gs1.org/standards/epcis/2.0.0/epcis-context.jsonld"
],
"action": "ADD",
"bizStep": "commissioning",
"disposition": "active",
"epcList": ["/01/00012345678906/21/SERIAL001"],
"eventID": "urn:uuid:f47ac10b-58cc-4372-a567-0e02b2c3d479",
"eventTime": "2026-08-25T03:40:00+00:00",
"eventTimeZoneOffset": "+00:00",
"recordTime": "2026-08-25T03:40:05+00:00",
"type": "ObjectEvent"
}
]
}
}