EuroMakers
  • Software
  • Lansări
  • Journal
  • Publicitate
Trimite
  • Software
  • Lansări
  • Journal
  • Publicitate
Rezumatul de luniDespre
Trimite-ți produsul

API

Un API JSON gratuit, doar pentru citire, pentru directorul publicat. Fără cheie.

Pornire rapidă

Toate produsele din director, într-o singură cerere:

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

Pe care îl folosesc?

  • Fișiere snapshot: gratuite, citibile de pe orice site, refăcute în fiecare noapte, fără limite. Pentru browsere și lucrări cu tot directorul.
  • API live: pentru serverul tău, cam 60 cereri pe minut pentru fiecare adresă IP. Pentru câte un produs și date mai proaspete.

Fișiere snapshot

Directorul publicat ca fișiere JSON statice, refăcute în fiecare noapte. Se rescriu doar fișierele schimbate și niciunul nu intră într-o limită.

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

O listă de produse, ordonată după id-ul categoriei și apoi după id. Același JSON ca GET /api/software.

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

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

O listă de nume de țări, fiecare o dată, în ordinea directorului (nesortată). Același JSON ca GET /api/software/countries.

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

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

Un obiect de la id-ul categoriei la numărul de produse. Categoriile fără produse lipsesc. Același JSON ca GET /api/categories/counts.

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

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

Instrumente cunoscute, fiecare cu id-urile produselor făcute pentru aceeași muncă, ca pe paginile instrumentelor.

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

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

Când au fost create fișierele, câte elemente are fiecare, dimensiunea și SHA-256 lor, plus condițiile.

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

Dintr-o pagină web:

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

Endpointuri

Fiecare endpoint răspunde la GET cu JSON. Răspunsurile din exemple sunt reale, dar scurtate.

GET /api/software

O listă de produse, ordonată după id-ul categoriei și apoi după id.

Parametri

Niciunul

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

429 · 500 · 503

Cache

Păstrat la marginea rețelei până la 24 de ore și șters când directorul se schimbă. s-maxage=86400

GET /api/software/{id}

Un produs. Un id necunoscut sau nepublicat dă 404.

Parametri
  • id · string · path · obligatoriuId-ul produsului: litere mici, cifre și cratime. ^[a-z0-9-]{1,80}$
Exemplu
curl https://www.euromakers.org/api/software/proton-mail
Răspuns
{
  "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"
}
Erori

404 · 429 · 500

Cache

Păstrat la marginea rețelei până la 24 de ore și șters când directorul se schimbă. s-maxage=86400

GET /api/software/countries

O listă de nume de țări, fiecare o dată, în ordinea directorului (nesortată).

Parametri

Niciunul

Exemplu
curl https://www.euromakers.org/api/software/countries
Răspuns
["Germany", "France", "Slovakia", "…"]
Erori

429 · 500 · 503

Cache

Păstrat la marginea rețelei până la 24 de ore și șters când directorul se schimbă. s-maxage=86400

GET /api/categories/counts

Un obiect de la id-ul categoriei la numărul de produse. Categoriile fără produse lipsesc.

Parametri

Niciunul

Exemplu
curl https://www.euromakers.org/api/categories/counts
Răspuns
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Erori

429 · 500 · 503

Cache

Păstrat la marginea rețelei până la 24 de ore și șters când directorul se schimbă. s-maxage=86400

Un produs

Fiecare produs are aceste câmpuri. Cele opționale lipsesc când sunt goale.

id · string
Id stabil, și finalul adresei paginii produsului.
name · string
Numele produsului.
description · string
Descriere într-o propoziție.
audience · string[]
Pentru cine este: b2b, individual sau ambele.
country · string
Țara de origine.
website · uri
Site-ul produsului.
longDescription · string
Câteva paragrafe despre produs.
features · string[]
Funcții principale.
useCases · string[]
Între unul și patru id-uri de utilizări.
category · string
Id-ul categoriei, ca în /categories/{id}.
verified · boolean
opțional · true când creatorul a confirmat proprietatea; altfel lipsește.
logoUrl · uri
opțional · Siglă (PNG, JPEG sau WebP); lipsește când nu există.

Același lucru ca tipuri 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[];
}

Erori

Erorile sunt JSON cu un mesaj, un cod stabil și un indiciu:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
StareCodCând
404not_foundId necunoscut sau niciun endpoint la acea cale.
429rate_limitedLimita de cereri a fost depășită.
500internal_errorCeva n-a mers bine la noi.
503catalog_unavailableDirectorul nu a putut fi încărcat.

Limite de cereri

60 cereri la 60 secunde pentru fiecare adresă IP, comune tuturor endpointurilor, inclusiv răspunsurile din cache. Peste limită primești un 429 cu antetele Retry-After (în secunde) și X-RateLimit-Limit. Când API-ul în ansamblu este foarte aglomerat, poate răspunde cu 429 înainte să ajungi la limita ta.

Utilizare corectă: dacă ai nevoie de mai mult, folosește fișierele snapshot.

Cereri condiționale

Fiecare răspuns are un ETag. Trimite-l înapoi în If-None-Match și un răspuns neschimbat va fi un 304 fără conținut.

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

CORS

API-ul live nu trimite antete CORS, deci un browser de pe alt site nu îl poate citi. Într-un browser folosește fișierele snapshot: orice site le poate citi.

Versiuni

Aceasta este versiunea 1 a API-ului și a fișierelor snapshot. Doar adăugăm: nicio cale, niciun câmp sau tip nu se schimbă și nu dispare. O schimbare incompatibilă ar veni ca o versiune nouă, alături de aceasta.

Utilizare și atribuire

API-ul este gratuit pentru orice utilizare. Pune un link către EuroMakers acolo unde îi afișezi datele. Siglele aparțin creatorilor lor, iar directorul nu poate fi revândut în bloc.

Termeni de utilizare

Pentru mașini

  • /openapi.json · Descrierea OpenAPI 3.1 a fiecărui endpoint
  • /llms.txt · Rezumatul site-ului pentru modele de limbaj
  • https://data.euromakers.org/v1/manifest.json · Când au fost create fișierele, câte elemente are fiecare, dimensiunea și SHA-256 lor, plus condițiile.
EuroMakers

Casa software-ului european.

Descoperă

  • Tot software-ul
  • După instrument
  • Lansări
  • Hartă

Comunitate

  • Journal
  • Rezumatul de luni
  • Feedul tău

Pentru creatori

  • Trimite-ți produsul
  • Revendică-ți fișa
  • Publicitate
  • Criterii de listare

EuroMakers

  • Despre
  • Contact
  • API
  • Confidențialitate
  • Termeni
Vezi harta →

© 2026 EuroMakers. Făcut cu convingere în Europa. Siglele produselor aparțin creatorilor lor.

Limbă: Română
  • 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