EuroMakers
  • Software
  • Lanceringen
  • Journal
  • Adverteren
Aanmelden
  • Software
  • Lanceringen
  • Journal
  • Adverteren
MaandagdigestOver ons
Je product aanmelden

API

Een gratis JSON-API, alleen lezen, voor de gepubliceerde catalogus. Geen sleutel nodig.

Snel aan de slag

Elk product in de catalogus, in één verzoek:

curl https://www.euromakers.org/api/software
[
  {
    "id": "proton-mail",
    "name": "Proton Mail",
    "description": "End-to-end encrypted email from Switzerland.",
    …
  },
  …
]

Welke gebruik ik?

  • Snapshotbestanden: gratis, leesbaar vanaf elke website, elke nacht opnieuw gemaakt, zonder limieten. Voor browsers en taken met de hele catalogus.
  • Live-API: voor je server, zo’n 60 verzoeken per minuut per IP-adres. Voor één product tegelijk en verser data.

Snapshotbestanden

De gepubliceerde catalogus als statische JSON-bestanden, elke nacht opnieuw gemaakt. Alleen gewijzigde bestanden worden herschreven, en geen ervan telt mee voor een limiet.

https://data.euromakers.org/v1/software.json

Een array van producten, gesorteerd op categorie-id en daarna op id. Dezelfde JSON als GET /api/software.

[
  {
    "id": "proton-mail",
    "name": "Proton Mail",
    "description": "End-to-end encrypted email from Switzerland.",
    …
  },
  …
]

https://data.euromakers.org/v1/countries.json

Een array van landnamen, elk één keer, in de volgorde van de catalogus (niet gesorteerd). Dezelfde JSON als GET /api/software/countries.

["Germany", "France", "Slovakia", "…"]

https://data.euromakers.org/v1/categories.json

Een object van categorie-id naar aantal producten. Categorieën zonder producten ontbreken. Dezelfde JSON als GET /api/categories/counts.

{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}

https://data.euromakers.org/v1/alternatives.json

Bekende tools, elk met de ids van de producten voor hetzelfde werk, zoals op de toolpagina’s.

[
  {
    "tool": "slack",
    "name": "Slack",
    "page": "https://www.euromakers.org/alternatives/slack",
    "ids": ["element", "rocket-chat", "…"]
  }
]

https://data.euromakers.org/v1/manifest.json

Wanneer de bestanden zijn gemaakt, hoeveel items elk bevat, hun grootte en SHA-256, en de voorwaarden.

{
  "version": "v1",
  "generatedAt": "2026-11-12T22:05:00.000Z",
  "docs": "https://www.euromakers.org/developers",
  "license": "Free for any use. Logos belong to their makers, and the directory can’t be resold in bulk.",
  "attribution": "Link back to EuroMakers (https://www.euromakers.org) where you show this data.",
  "terms": "https://www.euromakers.org/terms",
  "files": [
    {
      "name": "software.json",
      "url": "https://data.euromakers.org/v1/software.json",
      "items": "…",
      "bytes": "…",
      "sha256": "…"
    },
    "…"
  ]
}

Vanaf een webpagina:

const response = await fetch("https://data.euromakers.org/v1/software.json");
const products = await response.json();

Endpoints

Elk endpoint beantwoordt GET met JSON. De voorbeeldantwoorden zijn echt maar ingekort.

GET /api/software

Een array van producten, gesorteerd op categorie-id en daarna op id.

Parameters

Geen

Voorbeeld
curl https://www.euromakers.org/api/software
Antwoord
[
  {
    "id": "proton-mail",
    "name": "Proton Mail",
    "description": "End-to-end encrypted email from Switzerland.",
    …
  },
  …
]
Fouten

429 · 500 · 503

Cache

Tot 24 uur aan de edge bewaard en geleegd zodra de catalogus verandert. s-maxage=86400

GET /api/software/{id}

Eén product. Een onbekend of niet-gepubliceerd id geeft een 404.

Parameters
  • id · string · path · verplichtHet id van het product: kleine letters, cijfers en koppeltekens. ^[a-z0-9-]{1,80}$
Voorbeeld
curl https://www.euromakers.org/api/software/proton-mail
Antwoord
{
  "id": "proton-mail",
  "name": "Proton Mail",
  "description": "End-to-end encrypted email from Switzerland.",
  "audience": ["b2b", "individual"],
  "country": "Switzerland",
  "website": "https://proton.me/mail",
  "longDescription": "Proton Mail is the flagship encrypted email …",
  "features": ["End-to-end encrypted email", "…"],
  "useCases": ["business-email"],
  "category": "communication"
}
Fouten

404 · 429 · 500

Cache

Tot 24 uur aan de edge bewaard en geleegd zodra de catalogus verandert. s-maxage=86400

GET /api/software/countries

Een array van landnamen, elk één keer, in de volgorde van de catalogus (niet gesorteerd).

Parameters

Geen

Voorbeeld
curl https://www.euromakers.org/api/software/countries
Antwoord
["Germany", "France", "Slovakia", "…"]
Fouten

429 · 500 · 503

Cache

Tot 24 uur aan de edge bewaard en geleegd zodra de catalogus verandert. s-maxage=86400

GET /api/categories/counts

Een object van categorie-id naar aantal producten. Categorieën zonder producten ontbreken.

Parameters

Geen

Voorbeeld
curl https://www.euromakers.org/api/categories/counts
Antwoord
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Fouten

429 · 500 · 503

Cache

Tot 24 uur aan de edge bewaard en geleegd zodra de catalogus verandert. s-maxage=86400

Een product

Elk product heeft deze velden. Optionele velden ontbreken als ze leeg zijn.

id · string
Vast id, ook het einde van het adres van de productpagina.
name · string
Productnaam.
description · string
Beschrijving in één zin.
audience · string[]
Voor wie het is: b2b, individual of beide.
country · string
Land van herkomst.
website · uri
De website van het product.
longDescription · string
Een paar alinea’s over het product.
features · string[]
Belangrijkste functies.
useCases · string[]
Eén tot vier toepassings-id’s.
category · string
Categorie-id, zoals in /categories/{id}.
verified · boolean
optioneel · true als de maker het eigendom heeft bevestigd; anders ontbreekt het.
logoUrl · uri
optioneel · Logo (PNG, JPEG of WebP); ontbreekt als er geen is.

Hetzelfde als TypeScript-types:

export interface Software {
  /** Stable id, also the end of the product’s page address. */
  id: string;
  /** Product name. */
  name: string;
  /** One-sentence description. */
  description: string;
  /** Who it’s for: b2b, individual or both. */
  audience: ("b2b" | "individual")[];
  /** Country of origin. */
  country: string;
  /** The product’s website. */
  website: string;
  /** A few paragraphs about the product. */
  longDescription: string;
  /** Main features. */
  features: string[];
  /** One to four use-case ids. */
  useCases: string[];
  /** Category id, as in /categories/{id}. */
  category: string;
  /** true when the maker verified ownership; absent otherwise. */
  verified?: true;
  /** Logo (PNG, JPEG or WebP); absent when there is none. */
  logoUrl?: string;
}

/** countries.json, GET /api/software/countries */
export type Countries = string[];

/** categories.json, GET /api/categories/counts */
export type CategoryCounts = Record<string, number>;

/** One entry of alternatives.json */
export interface Alternative {
  tool: string;
  name: string;
  page: string;
  ids: string[];
}

Fouten

Fouten zijn JSON met een melding, een vaste code en een hint:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
StatusCodeWanneer
404not_foundOnbekend id, of geen endpoint op dat pad.
429rate_limitedBoven de rate limit.
500internal_errorEr ging bij ons iets mis.
503catalog_unavailableDe catalogus kon niet worden geladen.

Rate limits

60 verzoeken per 60 seconden per IP-adres, gedeeld door alle endpoints, antwoorden uit de cache meegeteld. Boven de limiet krijg je een 429 met de headers Retry-After (in seconden) en X-RateLimit-Limit. Als de API als geheel heel druk is, kan die al 429 geven voordat je je limiet bereikt.

Redelijk gebruik: heb je meer nodig, gebruik dan de snapshotbestanden.

Voorwaardelijke verzoeken

Elk antwoord heeft een ETag. Stuur die terug in If-None-Match, en een ongewijzigd antwoord is een 304 zonder inhoud.

curl -i https://www.euromakers.org/api/software/proton-mail -H 'If-None-Match: "<ETag of the last answer>"'

CORS

De live-API stuurt geen CORS-headers, dus een browser op een andere site kan hem niet lezen. Gebruik in een browser de snapshotbestanden: elke website mag die lezen.

Versies

Dit is versie 1 van de API en de snapshotbestanden. We voegen alleen toe: geen pad, veld of type verandert of verdwijnt. Een brekende wijziging zou als nieuwe versie naast deze komen.

Gebruik en bronvermelding

De API is gratis voor elk gebruik. Link naar EuroMakers waar je de gegevens toont. Logo’s zijn van hun makers, en de catalogus mag niet in zijn geheel worden doorverkocht.

Gebruiksvoorwaarden

Machineleesbaar

  • /openapi.json · OpenAPI 3.1-beschrijving van elk endpoint
  • /llms.txt · Samenvatting van de site voor taalmodellen
  • https://data.euromakers.org/v1/manifest.json · Wanneer de bestanden zijn gemaakt, hoeveel items elk bevat, hun grootte en SHA-256, en de voorwaarden.
EuroMakers

Het thuis van Europese software.

Ontdekken

  • Alle software
  • Per tool
  • Lanceringen
  • Kaart

Community

  • Journal
  • Maandagdigest
  • Jouw feed

Voor makers

  • Je product aanmelden
  • Je vermelding claimen
  • Adverteren
  • Vermeldingscriteria

EuroMakers

  • Over ons
  • Contact
  • API
  • Privacy
  • Voorwaarden
Bekijk de kaart →

© 2026 EuroMakers. Met overtuiging gemaakt in Europa. Productlogo’s zijn van hun makers.

Taal: Nederlands
  • English
  • Български
  • Čeština
  • Dansk
  • Deutsch
  • Ελληνικά
  • Español
  • Eesti
  • Suomi
  • Français
  • Gaeilge
  • Hrvatski
  • Magyar
  • Italiano
  • Lietuvių
  • Latviešu
  • Malti
  • Nederlands
  • Polski
  • Português
  • Română
  • Slovenčina
  • Slovenščina
  • Svenska