GS1 Digital Link Resolver Conformance Tester
Runs GS1's own resolver conformance test suite against any GS1 Digital Link resolver. The suite is loaded unchanged from its published source; this site only replaces the browser page and the helper script around it. Every verdict is the suite's own. The same check is available as an API whose findings are RFC 9457 problem objects.
Why this exists
API
Anonymous, rate-limited, CORS-open. One call runs the whole suite and returns the report.
Request
POST /api/conformance/resolver with a JSON body naming the digitalLink, or GET /api/conformance/resolver?dl=….
curl -sS https://ref.openepcis.org/api/conformance/resolver \
-H 'Content-Type: application/json' \
-d '{"digitalLink": "https://id.epc.is/01/09521000001428/21/WJ-2024-00142"}'Report
Status 200, media type application/vnd.openepcis.resolver-conformance+json. results lists every test the suite ran with its verdict. problems repeats each warning and failure as an RFC 9457 Problem Details object: type dereferences to the test's entry in the test catalogue, title is the suite's message, detail the criterion it quotes, instance the Digital Link under test, and severity is error for a failure and warning for a warning. The verdict is pass, warn, fail or incomplete.
{
"subject": "https://id.example/01/09506000134352",
"verdict": "fail",
"summary": { "pass": 30, "warn": 1, "fail": 2, "skip": 0, "total": 33 },
"suite": { "name": "GS1 Digital Link resolver conformance test suite",
"source": "https://github.com/gs1/GS1DL-resolver-testsuite", "commit": "32597c1", "date": "2026-08-07" },
"startedAt": "2026-10-30T09:12:44.102Z", "durationMs": 3597, "timedOut": false,
"results": [
{ "id": "corsCheck", "status": "fail", "criterion": "SHALL support CORS",
"message": "CORS headers not detected", "type": "https://ref.openepcis.org/conformance/resolver/tests#corsCheck" },
…
],
"problems": [
{ "type": "https://ref.openepcis.org/conformance/resolver/tests#corsCheck",
"title": "CORS headers not detected",
"detail": "SHALL support CORS",
"instance": "https://id.example/01/09506000134352",
"severity": "error", "test": "corsCheck" }
]
}Fail by status code
Add failOn=fail or failOn=warn and a verdict at that level answers 422 as application/problem+json, with the findings under errors. A CI step can then fail on the status code alone.
curl -sS --fail-with-body \
'https://ref.openepcis.org/api/conformance/resolver?failOn=fail&dl=https%3A%2F%2Fid.epc.is%2F01%2F09521000001428%2F21%2FWJ-2024-00142'HTTP/1.1 422 Unprocessable Content
Content-Type: application/problem+json
{
"type": "https://ref.openepcis.org/conformance/resolver#not-conformant",
"title": "Resolver not conformant",
"status": 422,
"detail": "2 of 33 tests failed for https://id.example/01/09506000134352.",
"instance": "https://id.example/01/09506000134352",
"verdict": "fail",
"summary": { "pass": 30, "warn": 1, "fail": 2, "skip": 0, "total": 33 },
"errors": [ … the same problems as in the report … ]
}Problem types
Every response that is not a report is an application/problem+json document with one of these types.
| Status | Type | Meaning |
|---|---|---|
| 400 | https://ref.openepcis.org/conformance/resolver#invalid-digital-link | No URI, not an absolute http(s) URL, a bare host name, or a host without a DNS record. |
| 403 | https://ref.openepcis.org/conformance/resolver#target-not-public | The host resolves to a private, loopback or link-local address. This service tests public resolvers only. |
| 422 | https://ref.openepcis.org/conformance/resolver#not-conformant | Only with failOn: the verdict reached the requested level. The findings are under errors. |
| 429 | https://ref.openepcis.org/conformance/resolver#rate-limited | Too many runs from one client, too many in total, or too many at once. Retry-After says when to come back. |
| 502 | https://ref.openepcis.org/conformance/resolver#runner-failed | The suite could not be started or produced no report. Logged on the server. |
| 503 | https://ref.openepcis.org/conformance/resolver#runner-unavailable | The headless suite is not installed on this server. |
| 504 | https://ref.openepcis.org/conformance/resolver#incomplete | Only with failOn: the suite did not finish in time. Without failOn the report comes back with verdict incomplete. |
Limits: 10 runs per 10 minutes per client address, 120 per 10 minutes in total, 2 at once. A run is given 60 seconds.
Test catalogue
28 tests, read from the suite at commit 32597c1. The type URI of every finding resolves to one of them.