Skip to content

Enrichment providers

A node enriches atoms from the providers on this page. All of them are in the default preset. Some work without configuration, and the rest need an API key. Every key is optional.

Available without a key

ProviderPlugin IDsWhat it provides
OpenGraph, microdata and JSON-LD, oEmbedopengraph, microdata, oembedTitles, descriptions, images, and embeddable media for web pages
FaviconsfaviconSite icons
Wikipedia and Wikidatawikipedia, wikidataArticle extracts, canonical entities, and sameAs links
GitHubgithubRepositories and profiles, at unauthenticated rate limits
npmnpmPackage metadata and weekly downloads
CrossrefcrossrefScholarly works, by DOI
MusicBrainz and Apple Musicmusicbrainz, apple-musicArtists, releases, and recordings
Open LibraryopenlibraryBooks
CoinGeckocoingeckoToken prices and market data, at public rate limits
SpotifyspotifyTitles and artwork from Spotify's public oEmbed

Enabled by a key

VariablesProviderEnablesGet a key from
GITHUB_TOKENGitHubHigher rate limits: 5,000 requests an hour instead of 60GitHub, under Settings > Developer settings > Personal access tokens. A read-only fine-grained token is enough
SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, and optionally SPOTIFY_MARKETSpotifyFull track, album, artist, and playlist metadatadeveloper.spotify.com/dashboard (opens in a new tab)
ETHERSCAN_API_KEYEtherscanContract names, token metadata, and verified sourceetherscan.io/apis (opens in a new tab)
TMDB_API_KEYTMDBFilms, television series, and creditsthemoviedb.org/settings/api (opens in a new tab)
COINGECKO_API_KEYCoinGeckoThe rate limits of a CoinGecko Demo plancoingecko.com/en/api (opens in a new tab)
YOUTUBE_API_KEYYouTubeVideo metadataGoogle Cloud Console (opens in a new tab), with the YouTube Data API v3 enabled
GOOGLE_PLACES_API_KEYPlacesBusinesses and placesGoogle Cloud Console (opens in a new tab), with the Places API enabled
X_BEARER_TOKENXX profilesdeveloper.x.com (opens in a new tab)
BRANDFETCH_API_KEYBrandLogos and brand assets from Brandfetchbrandfetch.com/developers (opens in a new tab)
PODCAST_INDEX_API_KEY, PODCAST_INDEX_API_SECRETPodcast IndexPodcasts and episodesapi.podcastindex.org (opens in a new tab)
CANOPY_API_KEYProduct listingAmazon product listingscanopyapi.co (opens in a new tab)

The Spotify, X, Etherscan, and Canopy credentials also enable the matching classification plugins.

Without its key, a provider runs a reduced keyless lookup, skips the atom, or records an error for itself. In every case, the run continues and the other providers' artifacts are stored.

example.env also lists OPENAI_API_KEY, ANTHROPIC_API_KEY, and GOOGLE_GENERATIVE_AI_API_KEY. Classification and enrichment do not use them.

Enable a provider

  1. Add the key to .env in the root of the repository.

  2. Restart the services that read it. Docker Compose recreates any container whose configuration changed.

    docker compose up -d atom-services workers-classification workers-enrichment
  3. Send atom services an input from the provider's domain:

    curl -X POST http://localhost:4010/v1/process \
      -H 'Content-Type: application/json' \
      -d '{"rawInput":"https://open.spotify.com/track/<track-id>"}'

    Replace <track-id> with the identifier from any Spotify track URL.

The provider's artifact appears in the response's enrichment.artifacts. If the key is missing or rejected, the provider appears in enrichment.skipped or enrichment.errors instead.

Presets

A preset is a named set of enrichment plugins. The workers use WORKERS_DEFAULT_PRESET and atom services use ATOM_SERVICES_DEFAULT_PRESET. Both default to default. A request to atom services can also choose a preset in its enrichment.preset field.

PresetPlugins
defaultEvery provider on this page
companyOpenGraph, Brand, and Favicon
musicOpenGraph, Spotify, MusicBrainz, and Apple Music
cryptoEtherscan and CoinGecko
academicCrossref and Wikipedia
customThe same plugins as default

Share a cache between replicas

Each worker and atom services instance caches enrichment results in memory. To share one cache between replicas, use Upstash Redis:

WORKERS_CACHE_PROVIDER=upstash
ATOM_SERVICES_CACHE_PROVIDER=upstash
UPSTASH_REDIS_REST_URL=<url>
UPSTASH_REDIS_REST_TOKEN=<token>

Replace <url> and <token> with the REST credentials of an Upstash Redis database. If the URL or the token is missing, the service falls back to the in-memory cache and logs a warning. Set a cache provider to none to disable caching.

Add a source

See Enrichment plugins.