---
title: "License URL catalog (26,945 entries)"
method: GET
path: "/api/v1/research/crossref/license-catalog"
tags: ["Research"]
---

# License URL catalog (26,945 entries)

`GET /api/v1/research/crossref/license-catalog`

Return the aggregated license-URL catalog - the distinct set of license URLs that publishers have deposited across the Crossref corpus. Each entry carries the URL and the count of works depositing that exact URL. Useful for analytics of open-access licensing distribution. Values vary in casing and normalisation because Crossref preserves publisher-supplied strings. The catalog shifts slowly; Sugra caches for 7 days. Data licensed CC0 by Crossref.

## Query parameters

- `limit` integer — Items per page (1 to 1000).
- `offset` integer — Zero-based offset into the catalog.

## Response `200`

License URL entries with work counts, plus pagination block.

- EnvelopeCrossrefLicenseCatalogPayload
  - `data` CrossrefLicenseCatalogPayload, required — Response payload for `/api/v1/research/crossref/license-catalog`.
    - `items` CrossrefLicenseCatalogEntry[], required — License URL entries each with the count of works depositing that URL.
      - `URL` string, nullable — License URL as deposited by publishers (casing is provider-dependent).
      - `work-count` integer, nullable — Number of works in the Crossref corpus that deposit this exact URL as a license.
    - `list_meta` CrossrefListMeta, required — Pagination and totals block echoed on every list endpoint.
      - `total_results` integer, nullable — Total number of items matching the query across all pages.
      - `items_per_page` integer, nullable — Page size used for this response (`rows`).
      - `next_cursor` string, nullable — Opaque cursor for the next page when cursor pagination is in use. Null when no next page.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/versions/4c4530760ba1/schema)
