EuroMakers
  • Oprogramowanie
  • Premiery
  • Journal
  • Reklama
Zgłoś
  • Oprogramowanie
  • Premiery
  • Journal
  • Reklama
Poniedziałkowy przeglądO nas
Zgłoś swój produkt

API

Darmowe API JSON tylko do odczytu dla opublikowanego katalogu. Bez klucza.

Szybki start

Wszystkie produkty z katalogu w jednym zapytaniu:

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

Którego użyć?

  • Pliki snapshot: bezpłatne, czytelne z każdej strony, odbudowywane co noc, bez limitów. Do przeglądarek i zadań na całym katalogu.
  • API na żywo: dla twojego serwera, około 60 zapytań na minutę na adres IP. Do jednego produktu naraz i świeższych danych.

Pliki snapshot

Opublikowany katalog jako statyczne pliki JSON, odbudowywane co noc. Zapisywane są tylko zmienione pliki i żaden nie wlicza się do limitu.

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

Tablica produktów, posortowana według id kategorii, a potem według id. Ten sam JSON co GET /api/software.

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

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

Tablica nazw krajów, każda raz, w kolejności katalogu (bez sortowania). Ten sam JSON co GET /api/software/countries.

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

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

Obiekt z id kategorii i liczbą produktów. Kategorie bez produktów są pomijane. Ten sam JSON co GET /api/categories/counts.

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

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

Znane narzędzia, każde z identyfikatorami produktów do tej samej pracy, jak na stronach narzędzi.

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

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

Kiedy powstały pliki, ile elementów ma każdy, ich rozmiar i SHA-256 oraz warunki.

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

Ze strony internetowej:

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

Endpointy

Każdy endpoint odpowiada na GET w formacie JSON. Przykładowe odpowiedzi są prawdziwe, ale skrócone.

GET /api/software

Tablica produktów, posortowana według id kategorii, a potem według id.

Parametry

Brak

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

429 · 500 · 503

Cache

Przechowywane na brzegu sieci do 24 godzin i czyszczone, gdy katalog się zmienia. s-maxage=86400

GET /api/software/{id}

Jeden produkt. Nieznane lub nieopublikowane id daje 404.

Parametry
  • id · string · path · wymaganyId produktu: małe litery, cyfry i myślniki. ^[a-z0-9-]{1,80}$
Przykład
curl https://www.euromakers.org/api/software/proton-mail
Odpowiedź
{
  "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"
}
Błędy

404 · 429 · 500

Cache

Przechowywane na brzegu sieci do 24 godzin i czyszczone, gdy katalog się zmienia. s-maxage=86400

GET /api/software/countries

Tablica nazw krajów, każda raz, w kolejności katalogu (bez sortowania).

Parametry

Brak

Przykład
curl https://www.euromakers.org/api/software/countries
Odpowiedź
["Germany", "France", "Slovakia", "…"]
Błędy

429 · 500 · 503

Cache

Przechowywane na brzegu sieci do 24 godzin i czyszczone, gdy katalog się zmienia. s-maxage=86400

GET /api/categories/counts

Obiekt z id kategorii i liczbą produktów. Kategorie bez produktów są pomijane.

Parametry

Brak

Przykład
curl https://www.euromakers.org/api/categories/counts
Odpowiedź
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Błędy

429 · 500 · 503

Cache

Przechowywane na brzegu sieci do 24 godzin i czyszczone, gdy katalog się zmienia. s-maxage=86400

Produkt

Każdy produkt ma te pola. Opcjonalne są pomijane, gdy są puste.

id · string
Stałe id, także końcówka adresu strony produktu.
name · string
Nazwa produktu.
description · string
Opis w jednym zdaniu.
audience · string[]
Dla kogo jest: b2b, individual lub oba.
country · string
Kraj pochodzenia.
website · uri
Strona internetowa produktu.
longDescription · string
Kilka akapitów o produkcie.
features · string[]
Główne funkcje.
useCases · string[]
Od jednego do czterech id zastosowań.
category · string
Id kategorii, jak w /categories/{id}.
verified · boolean
opcjonalne · true, gdy twórca potwierdził, że produkt jest jego; w przeciwnym razie brak.
logoUrl · uri
opcjonalne · Logo (PNG, JPEG lub WebP); brak, gdy go nie ma.

To samo jako typy TypeScript:

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

Błędy

Błędy to JSON z komunikatem, stałym kodem i wskazówką:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
StatusKodKiedy
404not_foundNieznane id albo brak endpointu pod tą ścieżką.
429rate_limitedPrzekroczony limit zapytań.
500internal_errorCoś poszło nie tak po naszej stronie.
503catalog_unavailableNie udało się wczytać katalogu.

Limity zapytań

60 zapytań na 60 sekund na adres IP, wspólnie dla wszystkich endpointów, łącznie z odpowiedziami z cache. Po przekroczeniu limitu dostajesz 429 z nagłówkami Retry-After (w sekundach) i X-RateLimit-Limit. Gdy całe API jest bardzo obciążone, może odpowiedzieć 429, zanim dojdziesz do swojego limitu.

Rozsądne użycie: jeśli potrzebujesz więcej, użyj plików snapshot.

Zapytania warunkowe

Każda odpowiedź ma ETag. Odeślij go w If-None-Match, a niezmieniona odpowiedź będzie 304 bez treści.

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

CORS

API na żywo nie wysyła nagłówków CORS, więc przeglądarka na innej stronie nie może go odczytać. W przeglądarce używaj plików snapshot: każda strona może je czytać.

Wersje

To wersja 1 API i plików snapshot. Tylko dodajemy: żadna ścieżka, pole ani typ się nie zmienia ani nie znika. Zmiana niezgodna wstecz przyszłaby jako nowa wersja obok tej.

Korzystanie i podanie źródła

API jest darmowe do każdego użytku. Dodaj link do EuroMakers tam, gdzie pokazujesz jego dane. Logo należą do ich twórców, a katalogu nie można odsprzedawać hurtowo.

Warunki korzystania

Do odczytu maszynowego

  • /openapi.json · Opis OpenAPI 3.1 każdego endpointu
  • /llms.txt · Podsumowanie strony dla modeli językowych
  • https://data.euromakers.org/v1/manifest.json · Kiedy powstały pliki, ile elementów ma każdy, ich rozmiar i SHA-256 oraz warunki.
EuroMakers

Dom europejskiego oprogramowania.

Odkrywaj

  • Całe oprogramowanie
  • Według narzędzia
  • Premiery
  • Mapa

Społeczność

  • Journal
  • Poniedziałkowy przegląd
  • Twój feed

Dla twórców

  • Zgłoś swój produkt
  • Przejmij swój wpis
  • Reklama
  • Kryteria wpisu

EuroMakers

  • O nas
  • Kontakt
  • API
  • Prywatność
  • Regulamin
Zobacz mapę →

© 2026 EuroMakers. Stworzone z przekonaniem w Europie. Loga produktów należą do ich twórców.

Język: Polski
  • 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