Zum Inhalt springen

Daten-API

Die API öffnet, sobald ihr Datenspeicher in Betrieb ist. Schlüssel werden noch nicht ausgestellt.

Stand

Die API liefert noch keine Daten. Bis sie öffnet, wird jede Anfrage abgelehnt, es werden keine Schlüssel ausgestellt, und man kann sich nicht darauf verlassen, dass etwas auf dieser Seite funktioniert. Diese Seite beschreibt, was künftig angeboten wird.

Was die API ist

Ein Endpunkt pro Vergleich (mobile, internet, tv, phone). Er liefert die Angebote, die meconomy.ch mit gespeichertem Beleg zeigt, jeweils mit ihrer Quelle und der Angabe in evidence.reader, wer sie erfasst hat: parser (MEconomyBot, von der eigenen Seite des Anbieters), official (eine amtliche Quelle) oder human (eine Person bei einer begleiteten Erfassung).

Nicht enthalten: Preise, die wir von Hand führen, andere Vergleiche, der eigene Text des Anbieters und die gespeicherten Belegdateien. Ist eine Angabe nicht genannt, ist das Feld null; das heisst «nicht angegeben», nicht «keine».

Einen Schlüssel erhalten

Fragen Sie über die Kontaktseite an, mit dem Thema «API-Schlüssel», und nennen Sie die Organisation oder das Projekt sowie den Zweck. Schlüssel sind kostenlos und werden von MEconomy ausgestellt. Pro Organisation oder Projekt wird ein Schlüssel ausgestellt.

Halten Sie den Schlüssel geheim und auf einem Server. Anfragen aus einer Browserseite werden nicht unterstützt: Die API sendet keine CORS-Header, und ein Schlüssel im Seitencode ist für alle sichtbar, die die Seite öffnen.

Anfrage

Senden Sie eine GET-Anfrage mit dem Schlüssel im Header Authorization. Der einzige Parameter ist provider, optional, ein Anbieter-Slug. Ein Schlüssel in der Adresse wird abgelehnt.

curl -H "Authorization: Bearer mek_your-key" \
  "https://meconomy.ch/api/v1/mobile/offers?provider=example"

Antwort

Die Form einer Antwort, jedes Feld mit seinem Typ; das Beispiel enthält keinen Wert. Der Inhalt hat das Format meconomy-offers-v1, den Zeitpunkt der Erzeugung, die Zahl der Angebote, die Zahl der zurückgehaltenen Angebote, weil ein Datensatz unsere Prüfungen nicht bestanden hat, die Lizenz und den Geltungsbereich.

{
  "format": "meconomy-offers-v1",
  "vertical": "<mobile | internet | tv | phone>",
  "provider": "<string | null>",
  "generated_at": "<string>",
  "count": "<integer>",
  "withheld": "<integer>",
  "licence": {
    "id": "CC-BY-4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "MEconomy, meconomy.ch"
  },
  "scope": "<string>",
  "offers": [
    {
      "offer_id": "<string>",
      "provider": "<string>",
      "vertical": "<string>",
      "plan_name": "<string>",
      "currency": "<string>",
      "price_unit": "<string>",
      "price": "<number>",
      "price_after": "<number | null>",
      "promo_kind": "<string>",
      "promo_months": "<integer | null>",
      "valid_until": "<string | null>",
      "offer_until": "<string | null>",
      "list_price": "<number | null>",
      "setup_fee": "<number | null>",
      "setup_fee_promo": "<number | null>",
      "setup_fee_after": "<number | null>",
      "initial_free_months": "<integer | null>",
      "min_term_months": "<integer | null>",
      "condition_kind": "<string>",
      "availability_scope": "<string>",
      "now": {
        "price": "<number>",
        "price_after": "<number | null>",
        "display": "<string>",
        "cheapest_eligible": "<boolean>"
      },
      "evidence": {
        "source_url": "<string>",
        "read_at": "<string>",
        "last_checked_at": "<string>",
        "evidence_sha256": "<string>",
        "parser_version": "<string>",
        "reader": "<string>"
      }
    }
  ]
}
Felder eines Angebots
FeldTypBedeutung
offer_idstringStabile Kennung des Angebots (der Abo-Fingerabdruck, den meconomy.ch verwendet).
providerstringAnbieter-Slug, zum Beispiel der Wert für den Parameter provider.
verticalstringDer Vergleich, zu dem das Angebot gehört: mobile, internet, tv oder phone.
plan_namestringName des Abos, wie das Produkt heisst.
currencystringWährung jedes Betrags im Angebot. CHF.
price_unitstringWorauf sich der Preis bezieht: month, 28d, 30d, year, once oder unit.
pricenumberListenpreis in der Währung, wie er auf der Seite des Anbieters erfasst wurde.
price_afternumber | nullPreis nach Ende einer befristeten Aktion; null, wenn keiner angegeben ist.
promo_kindstringArt der Aktion: none, struck, indefinite_discount, duration, dated, lifetime oder window.
promo_monthsinteger | nullDauer einer Aktion mit fester Dauer in Monaten; null, wenn nicht angegeben.
valid_untilstring | nullDatum, an dem eine Aktion mit festem Enddatum endet (YYYY-MM-DD); null, wenn nicht angegeben.
offer_untilstring | nullDatum, bis zu dem das Angebot bestellt werden kann (YYYY-MM-DD); null, wenn nicht angegeben.
list_pricenumber | nullRegulärer Preis, den der Anbieter durchgestrichen zeigt; null, wenn nicht angegeben.
setup_feenumber | nullEinmalige Aktivierungs- oder Einrichtungsgebühr; null, wenn nicht angegeben.
setup_fee_promonumber | nullReduzierte Einrichtungsgebühr während einer Aktion; null, wenn nicht angegeben.
setup_fee_afternumber | nullEinrichtungsgebühr nach Ende der Aktion; null, wenn nicht angegeben.
initial_free_monthsinteger | nullMonate ohne Kosten zu Beginn; null, wenn nicht angegeben.
min_term_monthsinteger | nullMindestvertragsdauer in Monaten; 0 bedeutet keine.
condition_kindstringFür wen das Angebot gilt: none, new_customer, existing_customer, youth, family, combo oder other.
availability_scopestringWo das Angebot erhältlich ist: national, regional oder address.
nowobjectDer zum Zeitpunkt generated_at geltende Preis, aus den Aktionsfeldern berechnet.
evidenceobjectWo und wann die Zahlen erfasst wurden, und der Hash der gespeicherten Seite.
Felder von now
FeldTypBedeutung
pricenumberZum Zeitpunkt generated_at geltender Preis.
price_afternumber | nullPreis, der folgt, wenn die laufende Aktion endet; null, wenn keiner folgt.
displaystringregular, special oder special_ended.
cheapest_eligiblebooleanOb das Angebot das günstigste seiner Abo-Gruppe ist, das eine Kundin oder ein Kunde bestellen kann.
Felder von evidence
FeldTypBedeutung
source_urlstringDie Anbieterseite, von der die Zahlen abgerufen wurden (https).
read_atstringWann sich die Zahlen auf dieser Seite zuletzt geändert haben (UTC, ISO 8601).
last_checked_atstringWann die Seite zuletzt geprüft wurde (UTC, ISO 8601).
evidence_sha256stringSHA-256 (64 Hex-Zeichen) der gespeicherten Seite, von der die Zahlen abgerufen wurden.
parser_versionstringCommit (40 Hex-Zeichen) des Programms, das die Zahlen extrahiert hat.
readerstringWer die Seite erfasst hat: parser, official oder human.

Limiten

  • 600 Aufrufe pro Tag und Schlüssel. Die Zählung beginnt um 00:00 UTC neu.
  • Die Antworten 200 und 429 enthalten RateLimit-Limit, RateLimit-Remaining und RateLimit-Reset (Sekunden bis zum Neubeginn); andere Fehlerantworten nicht.
  • Ist das Limit aufgebraucht, lautet die Antwort 429 mit Retry-After.

Fehler

Ein Fehler hat die Form {"error": {"code": "…", "message": "…"}} mit dem unten stehenden Status.

Fehlercodes
CodeStatusBedeutung
missing_key401Es wurde kein Authorization-Header gesendet.
bad_key401Der Schlüssel ist fehlerhaft oder unbekannt.
revoked403Der Schlüssel wurde widerrufen.
limit_reached429Das Tageslimit des Schlüssels ist aufgebraucht; siehe Retry-After.
unknown_vertical404Der Vergleich im Pfad existiert nicht.
bad_request400Ein Parameter ist nicht erlaubt oder nicht gültig.
method_not_allowed405Es wird nur GET unterstützt.
not_available503Der Datenspeicher ist noch nicht in Betrieb.
upstream502Der Datenspeicher hat nicht geantwortet.

Lizenz und Namensnennung

Die Daten stehen unter der Lizenz CC BY 4.0. Nennen Sie «MEconomy, meconomy.ch» mit einem Link auf https://meconomy.ch, wo immer Sie die Daten zeigen. Preise sind Tatsachen, wie wir sie zum genannten Zeitpunkt erfasst haben; sie können sich jederzeit ändern, und massgebend ist die eigene Seite des Anbieters. Keine Gewährleistung. Wir können einen Schlüssel widerrufen, der weitergegeben, weiterverkauft oder über sein Limit hinaus genutzt wird.

Ihre Daten

Pro Schlüssel speichern wir den Namen der Organisation oder des Projekts, eine Kontakt-E-Mail-Adresse, den genannten Zweck und die tägliche Anzahl Aufrufe pro Vergleich; keine IP-Adresse und keinen Inhalt der Anfragen. Wir bewahren sie auf, solange der Schlüssel aktiv ist. 12 Monate nachdem ein Schlüssel widerrufen wurde, löschen wir den Namen, die Kontakt-E-Mail-Adresse und den Zweck; die täglichen Zahlen bleiben. Mehr in der Datenschutzerklärung.

Änderungen

Version 1 erhält nur zusätzliche Felder. Eine Änderung, die ein Feld entfernt oder umbenennt, wird zu Version 2 und 90 Tage vorher auf dieser Seite angekündigt.