EuroMakers
  • Ohjelmistot
  • Julkaisut
  • Journal
  • Mainosta
Lähetä
  • Ohjelmistot
  • Julkaisut
  • Journal
  • Mainosta
MaanantaikoosteTietoa meistä
Lähetä tuotteesi

API

Ilmainen, vain luku -JSON-API julkaistulle hakemistolle. Avainta ei tarvita.

Pikaopas

Kaikki hakemiston tuotteet yhdellä pyynnöllä:

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

Kumpaa käytän?

  • Snapshot-tiedostot: ilmaisia, luettavissa miltä tahansa sivustolta, koottu uudelleen joka yö, ei rajoja. Selaimiin ja koko hakemistoa käsitteleviin töihin.
  • Live-API: palvelimellesi, noin 60 pyyntöä minuutissa IP-osoitetta kohden. Yhteen tuotteeseen kerrallaan ja tuoreempaan dataan.

Snapshot-tiedostot

Julkaistu hakemisto staattisina JSON-tiedostoina, koottu uudelleen joka yö. Vain muuttuneet tiedostot kirjoitetaan uudelleen, eikä yksikään niistä kuluta rajaa.

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

Taulukko tuotteista, järjestettynä luokan id:n ja sitten id:n mukaan. Sama JSON kuin GET /api/software.

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

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

Taulukko maiden nimistä, kukin kerran, hakemiston järjestyksessä (ei lajiteltu). Sama JSON kuin GET /api/software/countries.

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

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

Objekti, jossa luokan id:tä vastaa tuotteiden määrä. Luokat ilman tuotteita jätetään pois. Sama JSON kuin GET /api/categories/counts.

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

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

Tunnetut työkalut, kukin samaan työhön tehtyjen tuotteiden id-tunnuksineen, kuten työkalusivuilla.

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

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

Milloin tiedostot tehtiin, montako kohdetta kussakin on, niiden koko ja SHA-256 sekä ehdot.

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

Verkkosivulta:

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

Rajapinnat

Jokainen rajapinta vastaa GET-pyyntöön JSONilla. Esimerkkivastaukset ovat aitoja mutta lyhennettyjä.

GET /api/software

Taulukko tuotteista, järjestettynä luokan id:n ja sitten id:n mukaan.

Parametrit

Ei mitään

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

429 · 500 · 503

Välimuisti

Säilytetään reunapalvelimilla enintään 24 tuntia ja tyhjennetään, kun hakemisto muuttuu. s-maxage=86400

GET /api/software/{id}

Yksi tuote. Tuntematon tai julkaisematon id antaa 404:n.

Parametrit
  • id · string · path · pakollinenTuotteen id: pieniä kirjaimia, numeroita ja yhdysmerkkejä. ^[a-z0-9-]{1,80}$
Esimerkki
curl https://www.euromakers.org/api/software/proton-mail
Vastaus
{
  "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"
}
Virheet

404 · 429 · 500

Välimuisti

Säilytetään reunapalvelimilla enintään 24 tuntia ja tyhjennetään, kun hakemisto muuttuu. s-maxage=86400

GET /api/software/countries

Taulukko maiden nimistä, kukin kerran, hakemiston järjestyksessä (ei lajiteltu).

Parametrit

Ei mitään

Esimerkki
curl https://www.euromakers.org/api/software/countries
Vastaus
["Germany", "France", "Slovakia", "…"]
Virheet

429 · 500 · 503

Välimuisti

Säilytetään reunapalvelimilla enintään 24 tuntia ja tyhjennetään, kun hakemisto muuttuu. s-maxage=86400

GET /api/categories/counts

Objekti, jossa luokan id:tä vastaa tuotteiden määrä. Luokat ilman tuotteita jätetään pois.

Parametrit

Ei mitään

Esimerkki
curl https://www.euromakers.org/api/categories/counts
Vastaus
{
  "artificial-intelligence": 13,
  "cloud": 16,
  "communication": 14
}
Virheet

429 · 500 · 503

Välimuisti

Säilytetään reunapalvelimilla enintään 24 tuntia ja tyhjennetään, kun hakemisto muuttuu. s-maxage=86400

Tuote

Jokaisella tuotteella on nämä kentät. Valinnaiset jätetään pois, kun ne ovat tyhjiä.

id · string
Pysyvä id, myös tuotesivun osoitteen loppu.
name · string
Tuotteen nimi.
description · string
Yhden lauseen kuvaus.
audience · string[]
Kenelle se on: b2b, individual tai molemmat.
country · string
Alkuperämaa.
website · uri
Tuotteen verkkosivusto.
longDescription · string
Muutama kappale tuotteesta.
features · string[]
Tärkeimmät ominaisuudet.
useCases · string[]
Yhdestä neljään käyttötarkoituksen id:tä.
category · string
Luokan id, kuten osoitteessa /categories/{id}.
verified · boolean
valinnainen · true, kun tekijä on vahvistanut omistajuuden; muuten puuttuu.
logoUrl · uri
valinnainen · Logo (PNG, JPEG tai WebP); puuttuu, jos sellaista ei ole.

Sama TypeScript-tyyppeinä:

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

Virheet

Virheet ovat JSONia, jossa on viesti, pysyvä koodi ja vihje:

{
  "code": "not_found",
  "error": "Software not found",
  "hint": "List known ids with GET /api/software, then retry with an existing kebab-case id."
}
TilaKoodiMilloin
404not_foundTuntematon id tai ei rajapintaa siinä polussa.
429rate_limitedPyyntöraja ylitetty.
500internal_errorJokin meni vikaan meidän päässämme.
503catalog_unavailableHakemistoa ei voitu ladata.

Pyyntörajat

60 pyyntöä 60 sekunnissa IP-osoitetta kohden, yhteinen kaikille endpointeille, välimuistin vastaukset mukaan lukien. Rajan yli saat vastauksen 429 ja otsakkeet Retry-After (sekunteina) ja X-RateLimit-Limit. Kun API on kokonaisuutena hyvin kuormitettu, se voi vastata 429 ennen kuin saavutat oman rajasi.

Kohtuullinen käyttö: jos tarvitset enemmän, käytä snapshot-tiedostoja.

Ehdolliset pyynnöt

Jokaisessa vastauksessa on ETag. Lähetä se takaisin If-None-Match-otsakkeessa, niin muuttumaton vastaus on 304 ilman sisältöä.

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

CORS

Live-API ei lähetä CORS-otsakkeita, joten toisen sivuston selain ei voi lukea sitä. Käytä selaimessa snapshot-tiedostoja: mikä tahansa sivusto saa lukea niitä.

Versiot

Tämä on API:n ja snapshot-tiedostojen versio 1. Lisäämme vain: mikään polku, kenttä tai tyyppi ei muutu tai katoa. Yhteensopimaton muutos tulisi uutena versiona tämän rinnalle.

Käyttö ja lähdemaininta

API on ilmainen kaikkeen käyttöön. Linkitä EuroMakersiin siellä, missä näytät sen tietoja. Logot kuuluvat tekijöilleen, eikä hakemistoa saa myydä eteenpäin kokonaisuutena.

Käyttöehdot

Koneluettava

  • /openapi.json · OpenAPI 3.1 -kuvaus jokaisesta rajapinnasta
  • /llms.txt · Sivuston tiivistelmä kielimalleille
  • https://data.euromakers.org/v1/manifest.json · Milloin tiedostot tehtiin, montako kohdetta kussakin on, niiden koko ja SHA-256 sekä ehdot.
EuroMakers

Eurooppalaisten ohjelmistojen koti.

Tutustu

  • Kaikki ohjelmistot
  • Työkaluittain
  • Julkaisut
  • Kartta

Yhteisö

  • Journal
  • Maanantaikooste
  • Oma syöte

Tekijöille

  • Lähetä tuotteesi
  • Ota listaus omaksesi
  • Mainosta
  • Listausehdot

EuroMakers

  • Tietoa meistä
  • Yhteystiedot
  • API
  • Tietosuoja
  • Käyttöehdot
Katso kartta →

© 2026 EuroMakers. Tehty vakaumuksella Euroopassa. Tuotelogot kuuluvat tekijöilleen.

Kieli: Suomi
  • 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