Troubleshooting
Common errors and their resolutions for API integrations and the operator portal.
API Errors
401 Unauthorized — "API key missing or invalid"
Cause: The Authorization: Bearer {apiKey} header is missing, malformed, or the API key has been revoked or has expired.
Check:
- Confirm the
Authorizationheader is present and formatted exactly asBearer <key>(note the space, not an equals sign). - Verify the API key is active in Settings → API Keys — revoked keys return 401 immediately.
- API keys are case-sensitive and must be copied in full. Keys are
pk_live_…(live) orpk_test_…(sandbox), each with an expiry — a response served with a key nearing rotation age carries aWarning: 299header, and an expired or revoked key returns 401. Rotate before expiry.
# Correct
curl -H "Authorization: Bearer pk_live_a1b2c3d4..."
# Incorrect — missing Bearer prefix
curl -H "Authorization: pk_live_a1b2c3d4..."
403 Forbidden — "API key lacks the required scope or module"
Cause: The API key is valid but lacks a scope or module the endpoint requires (FORBIDDEN_SCOPE / FORBIDDEN_MODULE), targets a company other than its own (FORBIDDEN_COMPANY), or is the wrong mode for the endpoint (CROSS_MODE_DENIED — for example a sandbox key on a live-only GDPR endpoint).
Resolution: Confirm the key carries the scopes your integration needs and that you are using the correct key for its own company account.
Requesting an unknown resource, or a resource owned by another tenant, returns 404 — never a 403 "exists but forbidden". The API never confirms that another tenant's data exists (no existence oracle). A key issued for Company A cannot see Company B's products, and such a lookup is indistinguishable from a genuinely unknown id.
404 Not Found on GET /api/dpp/{slug}
Cause: One of the following:
- The product slug is incorrect (slugs are case-sensitive)
- The product exists but has not yet been published — draft products are not accessible via the public API
- The product has been unpublished
Check:
- Verify the slug exactly as it appears in the operator portal URL for the product
- Confirm the product status is Published (green badge in the product list)
429 Too Many Requests
Cause: Rate limit exceeded. Limits apply in three layers: a per-IP edge limit of 120 requests/minute on all /api/* routes, a per-IP route limit of 100 requests/minute on GET /api/dpp/{slug} (so the effective public-DPP ceiling is 100/minute), and a per-API-key limit of 100 requests/minute on the Integration API (/api/v1), counting reads and writes, with separate live and sandbox quotas. GET /api/health is exempt.
Resolution: Inspect the Retry-After header in the 429 response — it gives the number of seconds to wait before retrying. There is no retryAfter field in the response body; read the header. Implement exponential backoff with jitter for sustained integrations. See Rate Limiting for p-queue configuration examples.
{
"error": "Rate limit exceeded",
"code": "RATE_LIMITED"
}
503 — Health endpoint returns "status": "degraded"
Cause: One of the platform's backing services (database or cache) is experiencing connectivity issues.
Resolution: Check the services object in the response to identify which service is affected. Retry with exponential backoff. Subscribe to Traceable's status updates via the Changelog for incident notifications (RSS feed: https://dev.traceable.digital/changelog/rss.xml).
BMS Endpoint — BAD_SIGNATURE
Cause: The HMAC-SHA256 signature does not match. Common causes:
| Cause | Fix |
|---|---|
| Timestamp outside the 5-minute replay window | Ensure the signing timestamp is generated immediately before the request, not cached |
| Body was re-serialised | Build the JSON body string once and use the same string for both signing and the HTTP body |
| Whitespace difference between signed and sent body | Use the same serialisation (e.g. JSON.stringify with no extra spaces) |
| Wrong secret | Confirm the X-Traceable-BMS-Secret header contains the same secret used as the HMAC key |
See BMS Endpoints for the reference signing implementations.
Operator Portal Issues
Products not appearing in the list
Check:
- Active filters: the filter bar may be excluding your products by category, status, or compliance score range. Click Clear All to reset.
- Status filter: by default, archived products are hidden. If you archived products, they won't appear unless you select "Archived" in the status filter.
- Account access: confirm you are logged into the correct company account if you have access to multiple tenants.
Document AI extraction returns low confidence scores
Cause: The uploaded document may be a scanned image (not a text-based PDF), have low resolution, use non-standard fonts, or contain handwritten content.
Resolution:
- Where possible, use text-based PDFs from the original document source rather than scans.
- For scanned documents, ensure the scan resolution is at least 300 DPI.
- Low-confidence fields are flagged for review — manually verify and correct the extracted value before accepting.
- If extraction consistently fails for a specific document type, contact support@traceable.digital with a redacted sample.
QR code does not resolve after publishing
Cause: DNS propagation or CDN cache delay after initial publishing. QR codes resolve to https://app.traceable.digital/dpp/<slug>.
Resolution: Wait 60 seconds after publishing and retry. If the QR code still does not resolve after 5 minutes, verify:
- The product status shows Published in the portal
GET /api/dpp/<slug>returns a 200 response (this confirms the data is live)- If the API returns 200 but the QR URL 404s, contact support@traceable.digital
Compliance score is stuck below 100% despite all fields being filled
Cause: Compliance score considers three components: field population, attached documents, and verification task completion. You can have all fields filled but score below 100% if:
- No compliance document is attached (navigate to Compliance → Documents and upload at least one)
- No verification task has been completed with an "Approved" outcome (navigate to Verification → Create Task, assign a verifier, and complete the review)
Check the compliance score breakdown on the product dashboard — it lists which component is incomplete.
Supplier data request shows "No response" after the deadline
Cause: The supplier did not respond within the deadline period. The request status changes to "Overdue" but is not automatically closed.
Resolution:
- Send a reminder via the data request page (Suppliers → [Supplier] → Data Requests → [Request] → Send Reminder).
- If the supplier is unresponsive, you can manually enter the data yourself or mark the fields as "Not available" with a note.
- For suppliers who have not activated their Traceable account, check that the invitation email was received (check the supplier's spam folder) and resend if needed.
Account & Access Issues
Team member cannot see certain features
Cause: Feature visibility in the operator portal depends on the team member's role and on which modules are active for your company account. See Module Access for details on module gating.
Resolution: Check Settings → Team Management to confirm the team member has the appropriate role. If the feature appears greyed out or locked, it may require module activation — contact support@traceable.digital.
API key stops working after team member is removed
Cause: API keys are associated with the company account, not the individual user who created them. Removing a team member does not automatically revoke their API keys.
Resolution: If a team member with API key access leaves the organisation, navigate to Settings → API Keys, review all active keys, and revoke any that were created for that individual's integration use.
Getting Help
If you cannot resolve an issue using this guide:
- Changelog: Check the Changelog for recent platform changes that may have affected your integration. An RSS feed is available at
https://dev.traceable.digital/changelog/rss.xml. - Email support: support@traceable.digital — include your company name, the affected product slug or API endpoint, and the full error response body.
- Security issues: For security vulnerabilities, see the Vulnerability Disclosure policy.