EuroMakers
  • Software
  • Launches
  • Journal
  • Werben
Einreichen
  • Software
  • Launches
  • Journal
  • Werben
Montags-DigestÜber uns
Produkt einreichen

API

Eine kostenlose JSON-API nur zum Lesen, für das veröffentlichte Verzeichnis. Kein Schlüssel nötig.

Schnellstart

Jedes Produkt im Verzeichnis, mit einer Anfrage:

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

Was nehme ich?

  • Snapshot-Dateien: kostenlos, von jeder Website lesbar, jede Nacht neu erstellt, ohne Limits. Für Browser und Jobs mit dem ganzen Verzeichnis.
  • Live-API: für deinen Server, etwa 60 Anfragen pro Minute je IP-Adresse. Für einzelne Produkte und frischere Daten.

Snapshot-Dateien

Das veröffentlichte Verzeichnis als statische JSON-Dateien, jede Nacht neu erstellt. Nur geänderte Dateien werden neu geschrieben, und keine zählt für ein Limit.

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

Ein Array von Produkten, sortiert nach Kategorie-ID und dann nach ID. Dasselbe JSON wie GET /api/software.

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

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

Ein Array von Ländernamen, jeder einmal, in der Reihenfolge des Verzeichnisses (nicht sortiert). Dasselbe JSON wie GET /api/software/countries.

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

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

Ein Objekt von Kategorie-ID zur Anzahl der Produkte. Kategorien ohne Produkte fehlen. Dasselbe JSON wie GET /api/categories/counts.

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

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

Bekannte Tools, jeweils mit den IDs der Produkte für dieselbe Arbeit, wie auf den Tool-Seiten.

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

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

Wann die Dateien erstellt wurden, wie viele Einträge jede enthält, ihre Größe und SHA-256 sowie die Bedingungen.

{
  "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": "…"
    },
    "…"
  ]
}

Aus einer Webseite:

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

Endpunkte

Jeder Endpunkt antwortet auf GET mit JSON. Die Beispielantworten sind echt, aber gekürzt.

GET /api/software

Ein Array von Produkten, sortiert nach Kategorie-ID und dann nach ID.

Parameter

Keine

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

429 · 500 · 503

Cache

Bis zu 24 Stunden am Edge gespeichert und geleert, sobald sich das Verzeichnis ändert. s-maxage=86400

GET /api/software/{id}

Ein Produkt. Eine unbekannte oder nicht veröffentlichte ID ergibt eine 404.

Parameter
  • id · string · path · erforderlichDie ID des Produkts: Kleinbuchstaben, Ziffern und Bindestriche. ^[a-z0-9-]{1,80}$
Beispiel
curl https://www.euromakers.org/api/software/proton-mail
Antwort
{
  "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"
}
Fehler

404 · 429 · 500

Cache

Bis zu 24 Stunden am Edge gespeichert und geleert, sobald sich das Verzeichnis ändert. s-maxage=86400

GET /api/software/countries

Ein Array von Ländernamen, jeder einmal, in der Reihenfolge des Verzeichnisses (nicht sortiert).

Parameter

Keine

Beispiel
curl https://www.euromakers.org/api/software/countries
Antwort
["Germany", "France", "Slovakia", "…"]
Fehler

429 · 500 · 503

Cache

Bis zu 24 Stunden am Edge gespeichert und geleert, sobald sich das Verzeichnis ändert. s-maxage=86400

GET /api/categories/counts

Ein Objekt von Kategorie-ID zur Anzahl der Produkte. Kategorien ohne Produkte fehlen.

Parameter

Keine

Beispiel
curl https://www.euromakers.org/api/categories/counts
Antwort
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Fehler

429 · 500 · 503

Cache

Bis zu 24 Stunden am Edge gespeichert und geleert, sobald sich das Verzeichnis ändert. s-maxage=86400

Ein Produkt

Jedes Produkt hat diese Felder. Optionale fehlen, wenn sie leer sind.

id · string
Feste ID, auch das Ende der Adresse der Produktseite.
name · string
Produktname.
description · string
Beschreibung in einem Satz.
audience · string[]
Für wen es ist: b2b, individual oder beides.
country · string
Herkunftsland.
website · uri
Die Website des Produkts.
longDescription · string
Ein paar Absätze über das Produkt.
features · string[]
Wichtigste Funktionen.
useCases · string[]
Eine bis vier Anwendungsfall-IDs.
category · string
Kategorie-ID, wie in /categories/{id}.
verified · boolean
optional · true, wenn der Macher den Besitz bestätigt hat; sonst fehlt das Feld.
logoUrl · uri
optional · Logo (PNG, JPEG oder WebP); fehlt, wenn es keins gibt.

Dasselbe als TypeScript-Typen:

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[];
}

Fehler

Fehler sind JSON mit einer Meldung, einem festen Code und einem Hinweis:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
StatusCodeWann
404not_foundUnbekannte ID oder kein Endpunkt unter diesem Pfad.
429rate_limitedÜber dem Rate Limit.
500internal_errorBei uns ist etwas schiefgegangen.
503catalog_unavailableDas Verzeichnis konnte nicht geladen werden.

Rate Limits

60 Anfragen pro 60 Sekunden je IP-Adresse, gemeinsam für alle Endpunkte, Antworten aus dem Cache eingeschlossen. Über dem Limit bekommst du eine 429 mit den Headern Retry-After (in Sekunden) und X-RateLimit-Limit. Wenn die API insgesamt sehr ausgelastet ist, kann sie schon vor deinem Limit mit 429 antworten.

Faire Nutzung: Wenn du mehr brauchst, nimm die Snapshot-Dateien.

Bedingte Anfragen

Jede Antwort hat ein ETag. Schick es in If-None-Match zurück, und eine unveränderte Antwort ist eine 304 ohne Inhalt.

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

CORS

Die Live-API sendet keine CORS-Header, ein Browser auf einer anderen Website kann sie also nicht lesen. Im Browser nimmst du die Snapshot-Dateien: Jede Website darf sie lesen.

Versionen

Das ist Version 1 der API und der Snapshot-Dateien. Wir ergänzen nur: Kein Pfad, kein Feld und kein Typ ändert sich oder fällt weg. Eine inkompatible Änderung käme als neue Version neben dieser.

Nutzung und Quellenangabe

Die API ist für jede Nutzung kostenlos. Verlinke EuroMakers, wo du ihre Daten zeigst. Logos gehören ihren Machern, und das Verzeichnis darf nicht im Ganzen weiterverkauft werden.

Nutzungsbedingungen

Maschinenlesbar

  • /openapi.json · OpenAPI-3.1-Beschreibung aller Endpunkte
  • /llms.txt · Zusammenfassung der Website für Sprachmodelle
  • https://data.euromakers.org/v1/manifest.json · Wann die Dateien erstellt wurden, wie viele Einträge jede enthält, ihre Größe und SHA-256 sowie die Bedingungen.
EuroMakers

Das Zuhause europäischer Software.

Entdecken

  • Alle Software
  • Nach Tool
  • Launches
  • Karte

Community

  • Journal
  • Montags-Digest
  • Dein Feed

Für Macher

  • Produkt einreichen
  • Eintrag beanspruchen
  • Werben
  • Aufnahmekriterien

EuroMakers

  • Über uns
  • Kontakt
  • API
  • Datenschutz
  • Nutzungsbedingungen
Zur Karte →

© 2026 EuroMakers. Mit Überzeugung in Europa gemacht. Produktlogos gehören ihren Machern.

Sprache: Deutsch
  • 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