EuroMakers
  • Software
  • Lanci
  • Journal
  • Pubblicità
Proponi
  • Software
  • Lanci
  • Journal
  • Pubblicità
Digest del lunedìChi siamo
Proponi il tuo prodotto

API

Un’API JSON gratuita e di sola lettura per la directory pubblicata. Nessuna chiave.

Per iniziare

Tutti i prodotti della directory, con una sola richiesta:

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

Quale uso?

  • File snapshot: gratuiti, leggibili da qualsiasi sito, rigenerati ogni notte, senza limiti. Per i browser e per i lavori su tutta la directory.
  • API live: per il tuo server, circa 60 richieste al minuto per indirizzo IP. Per un prodotto alla volta e dati più freschi.

File snapshot

La directory pubblicata come file JSON statici, rigenerati ogni notte. Vengono riscritti solo i file cambiati, e nessuno conta per un limite.

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

Un array di prodotti, ordinati per id di categoria e poi per id. Lo stesso JSON di GET /api/software.

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

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

Un array di nomi di paesi, ognuno una volta, nell’ordine della directory (non ordinato). Lo stesso JSON di GET /api/software/countries.

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

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

Un oggetto che associa ogni id di categoria al numero di prodotti. Le categorie senza prodotti mancano. Lo stesso JSON di GET /api/categories/counts.

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

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

Strumenti noti, ognuno con gli id dei prodotti fatti per lo stesso lavoro, come nelle pagine degli strumenti.

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

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

Quando sono stati creati i file, quanti elementi contiene ciascuno, dimensioni e SHA-256, e le condizioni.

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

Da una pagina web:

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

Endpoint

Ogni endpoint risponde a GET con JSON. Le risposte di esempio sono reali ma accorciate.

GET /api/software

Un array di prodotti, ordinati per id di categoria e poi per id.

Parametri

Nessuno

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

429 · 500 · 503

Cache

Conservata all’edge fino a 24 ore e svuotata quando la directory cambia. s-maxage=86400

GET /api/software/{id}

Un prodotto. Un id sconosciuto o non pubblicato dà un 404.

Parametri
  • id · string · path · obbligatorioL’id del prodotto: lettere minuscole, cifre e trattini. ^[a-z0-9-]{1,80}$
Esempio
curl https://www.euromakers.org/api/software/proton-mail
Risposta
{
  "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"
}
Errori

404 · 429 · 500

Cache

Conservata all’edge fino a 24 ore e svuotata quando la directory cambia. s-maxage=86400

GET /api/software/countries

Un array di nomi di paesi, ognuno una volta, nell’ordine della directory (non ordinato).

Parametri

Nessuno

Esempio
curl https://www.euromakers.org/api/software/countries
Risposta
["Germany", "France", "Slovakia", "…"]
Errori

429 · 500 · 503

Cache

Conservata all’edge fino a 24 ore e svuotata quando la directory cambia. s-maxage=86400

GET /api/categories/counts

Un oggetto che associa ogni id di categoria al numero di prodotti. Le categorie senza prodotti mancano.

Parametri

Nessuno

Esempio
curl https://www.euromakers.org/api/categories/counts
Risposta
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Errori

429 · 500 · 503

Cache

Conservata all’edge fino a 24 ore e svuotata quando la directory cambia. s-maxage=86400

Un prodotto

Ogni prodotto ha questi campi. Quelli facoltativi mancano quando sono vuoti.

id · string
Id stabile, anche la parte finale dell’indirizzo della pagina del prodotto.
name · string
Nome del prodotto.
description · string
Descrizione in una frase.
audience · string[]
A chi si rivolge: b2b, individual o entrambi.
country · string
Paese di origine.
website · uri
Il sito web del prodotto.
longDescription · string
Qualche paragrafo sul prodotto.
features · string[]
Funzioni principali.
useCases · string[]
Da uno a quattro id di casi d’uso.
category · string
Id di categoria, come in /categories/{id}.
verified · boolean
facoltativo · true quando il creatore ha verificato di esserne il proprietario; altrimenti manca.
logoUrl · uri
facoltativo · Logo (PNG, JPEG o WebP); manca se non c’è.

Lo stesso come tipi 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[];
}

Errori

Gli errori sono JSON con un messaggio, un codice stabile e un suggerimento:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
StatoCodiceQuando
404not_foundId sconosciuto, o nessun endpoint a quell’indirizzo.
429rate_limitedLimite di frequenza superato.
500internal_errorQualcosa non ha funzionato da parte nostra.
503catalog_unavailableNon è stato possibile caricare la directory.

Limiti di frequenza

60 richieste ogni 60 secondi per indirizzo IP, condivise da tutti gli endpoint, risposte in cache comprese. Oltre il limite ricevi un 429 con gli header Retry-After (in secondi) e X-RateLimit-Limit. Quando l’API nel suo insieme è molto carica, può rispondere 429 prima che tu raggiunga il tuo limite.

Uso corretto: se ti serve di più, usa i file snapshot.

Richieste condizionali

Ogni risposta ha un ETag. Rimandalo in If-None-Match e una risposta invariata sarà un 304 senza corpo.

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

CORS

L’API live non invia header CORS, quindi un browser su un altro sito non può leggerla. In un browser usa i file snapshot: qualsiasi sito può leggerli.

Versioni

Questa è la versione 1 dell’API e dei file snapshot. Aggiungiamo soltanto: nessun percorso, campo o tipo cambia o sparisce. Una modifica incompatibile arriverebbe come nuova versione accanto a questa.

Uso e attribuzione

L’API è gratuita per qualsiasi uso. Metti un link a EuroMakers dove mostri i suoi dati. I loghi appartengono ai loro creatori, e la directory non può essere rivenduta in blocco.

Termini di servizio

Leggibile dalle macchine

  • /openapi.json · Descrizione OpenAPI 3.1 di ogni endpoint
  • /llms.txt · Riepilogo del sito per i modelli linguistici
  • https://data.euromakers.org/v1/manifest.json · Quando sono stati creati i file, quanti elementi contiene ciascuno, dimensioni e SHA-256, e le condizioni.
EuroMakers

La casa del software europeo.

Scopri

  • Tutto il software
  • Per strumento
  • Lanci
  • Mappa

Community

  • Journal
  • Digest del lunedì
  • Il tuo feed

Per i maker

  • Proponi il tuo prodotto
  • Rivendica la tua scheda
  • Pubblicità
  • Criteri di inserimento

EuroMakers

  • Chi siamo
  • Contatti
  • API
  • Privacy
  • Termini
Vedi la mappa →

© 2026 EuroMakers. Fatto con convinzione in Europa. I loghi dei prodotti appartengono ai rispettivi maker.

Lingua: Italiano
  • 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