← Documentation home

Canonical Markdown source · Jul 7, 2026

Linked Art API: Discovery

linked-art/api/discovery.md · 72 lines · SHA-256 407a0f6a9de4

Last refreshed: 2026-07-07

Source: Discovery APIs, part of Linked Art API 1.0, published by the Linked Art Editorial Board under CC BY 4.0. This is a project summary; the upstream page is authoritative.

Purpose

Linked Art Discovery describes how other web pages, APIs, and harvesters can find Linked Art records. It covers two complementary patterns:

  • HTML-to-data signposting for clients that start from a public human page.
  • Harvesting and synchronization through IIIF Change Discovery-style activity streams.

HTML Data Visibility

Public HTML pages should expose a machine-readable Linked Art record with `describedby` links.

For HTTP responses, the preferred signpost is a `Link` header:


Link: <https://example.com/data/object/1>; rel="describedby"; type="application/ld+json;profile='https://linked.art/ns/v1/linked-art.json'"

For browser-facing HTML, the page head must include exactly one matching link:


<link
  rel="describedby"
  href="https://example.com/data/object/1"
  type="application/ld+json;profile='https://linked.art/ns/v1/linked-art.json'"
/>

The one-link rule matters: if an HTML page advertises more than one Linked Art record, clients cannot know which JSON-LD record describes the page.

Linked Art notes that this pattern follows the FAIR Signposting Profile.

Harvesting

For harvestable synchronization, Linked Art points to the IIIF Change Discovery API. Linked Art record classes can be made available in the change stream by adding the Linked Art record-types context alongside the IIIF discovery context:


{
  "@context": [
    "https://linked.art/ns/v1/record-types.json",
    "http://iiif.io/api/discovery/1/context.json"
  ]
}

That lets entries describe Linked Art records directly, for example an `Update` whose `object.type` is `HumanMadeObject`.

Meta Museum Notes

Meta Museum already has substantial Discovery coverage:

  • Public artwork and entity pages expose exactly one canonical `rel="describedby"` link using the Linked Art profile media type constant.
  • Dereferenced record responses expose canonical Linked Art JSON-LD record URLs and align `_links.self.href` with record IDs.
  • Activity feed responses provide ActivityStreams and IIIF Change Discovery-compatible synchronization layers through `/api/activity`, `/api/activity/collection`, and `/api/activity/page/{page}`.
  • `/api/providers/capabilities` advertises activity-syndication endpoints and callback-signing metadata for follow-your-nose consumer setup.
  • Dataset reuse discovery is advertised through capabilities and dataset distribution metadata, with format URLs, checksums, and license links.

The main refinement opportunity is to extend the HTML signposting guard from in-page `<link>` declarations to HTTP response headers where Next route/page mechanics make that practical. The current tests already prove the one-canonical-HTML-link requirement; a future route-level smoke should also prove a `Link: rel="describedby"` header on public HTML responses.

Test Ideas

  • Keep the existing one-canonical-`describedby` HTML link test for public record pages.
  • Add route-level smoke for `Link` response headers on public object/entity HTML pages.
  • Assert the `describedby` link uses `application/ld+json;profile="https://linked.art/ns/v1/linked-art.json"`.
  • Assert ActivityStreams collection responses include Linked Art/IIIF discovery contexts when exposing Linked Art object types.
  • Assert capabilities discovery points clients to dataset distributions, activity feeds, and callback registration without out-of-band URLs.