This API will replace the current file-based deliverables of book metadata from Bogportalen.
This API is intended for retrieving product metadata in bulk.
In this version, the API is not designed for high volumes of requests for individual products, for example through direct calls when product pages are displayed on a webshop. Misuse of the API may result in account suspension.
1. Overview
Purpose: Access product metadata from Bogportalen for integration with your systems.
Base URL (Production): TBA
Base URL (Sandbox): TBA
Formats: xml in onix format; charset=utf-8 (requests & responses). See Onix data format here
2) Authentication & Authorization
Auth method: User name + password
mTLS (optional/high-security clients): Supported
Headers
- Idempotency-Key: <uuid> (required on POST/GET with side-effects)
3) Versioning & Lifecycle
Onix version: Onix 3.X
API URI versioning: /v1/…
Deprecation policy: 6 months minimum notice before removing fields/endpoints.
Change types:
- Non-breaking: new fields (nullable), new endpoints.
- Breaking: contract changes; only in new major version.
4) Environments & Data
Sandbox: Synthetic data; standalone auth, same functionality as production.
Production: Live data; standalone auth, same functionality as sandbox.
5) Pagination, Filtering, Sorting, Field Selection
Pagination: n/a.=>Use filters
Filtering: Query params
- ean: 13 digit EAN numbers (eg.: 9788702152098)
- publisher: DBK customer number (eg.: xxx). Please notice that publishers and expeditions can only see their own data!
- updated-after: ISO 8601-date/timestring (eg.: 20250204T0930-0400)
- thema-code: 2 digits or more (eg.: WB or WBHS. See theme codes here)
- expedition: the expedition that handles the book. (Allowed values: DBK|DAF|Egen). Please notice that expeditions can only see their own data
- bookstore-qualification: id from the bookstore qualification list. (See allowed values here)
- publishing-date: Format YYYYMMDD eg: 20250901
- product-availability: (Onix codelist 65 values)
- market-publishing-status: (Onix codelist 68 values)
- stock: (0|1) 0=no stock available, 1=stock available
- cover-image-modified-time: (basic ISO 8601 date-time-format: YYYYMMDD’T’HHMMSS eg.: 20250917T141530)
Sorting: n/a. Results will be sorted by TBA
6) Rate Limits & Quotas
Policy: e.g., 600 requests/minute per client in prod; 120/min in sandbox.
Headers:
- X-RateLimit-Limit
- X-RateLimit-Remaining
- X-RateLimit-Reset
429 handling: Backoff with jitter; retry after X-RateLimit-Reset.
7) Status codes and errors
Status codes:
- 2xx success
- 4xx client error
- 5xx server error
The list of error codes will be further extended when the sandbox version of the API is ready.
Error body:
{
"error": {
"code": "invalid_parameter",
"message": "Unknown filter 'foo'.",
"details": [{"field": "foo", "issue": "unsupported"}]
},
"correlation_id": "b9c3e7c0-…"
8) Caching & Performance
Compression: gzip & br supported via Accept-Encoding.
9) Security
Transport: HTTPS only (TLS 1.2+).
Auditing: We log auth, rate-limit, and error events with correlation IDs.
10) SLs & Status
Uptime target: 99.9% monthly.
Maintenance windows: Announced 7 days ahead (non-critical).
Status page: Public status + historical incidents. · Support: FAQ/Support page on dbk.dk. Email + ticketing portal, business hours CET/CEST.