Schnittstelle für Programme (API)
ResearchRadar gibt sein ganzes Verzeichnis auch maschinenlesbar als JSON aus. Die Adressen unten liefern dieselben Einträge wie die Website, und die Filterwörter, die sie kennen, bedeuten genau dasselbe wie die Filterknöpfe dort. Welche Wörter eine Adresse kennt, steht bei ihr; eine Volltextsuche gibt es hier nicht.
Gedacht ist das für Programme, nicht für Leserinnen und Leser: etwa für die Seite eines Forschungsservice, die die nächsten Einreichfristen der Psychologie von selbst anzeigt.
Bedingungen
- Die Daten sind öffentlich und frei nutzbar.
- Jeder Verzeichniseintrag nennt die Seite, von der er stammt — im Feld website, und wo es eine eigene Ausschreibungsseite gibt, zusätzlich in application_url. Ein Fund trägt seine Adresse im Feld url.
- Die Schnittstelle liest nur. Daten liefert ausschließlich GET; eine schreibende Methode wird abgelehnt.
- Kein Schlüssel, keine Anmeldung, keine Registrierung.
Basisadresse
https://researchradar.at/api/v1
Alle Adressen unten stehen unter dieser Basis. Geantwortet wird mit application/json in UTF-8.
Aufbau der Antwort
Jede Antwort besteht aus zwei Teilen: meta beschreibt die Antwort selbst, data ist die Liste der Einträge.
{
"meta": {
"generated_at": "2026-08-02T06:20:11+02:00",
"count": 61,
"version": "1.84",
"source": "https://researchradar.at"
},
"data": [ … ]
}
meta.generated_at— Zeitpunkt der Antwort, mit Zeitzone.meta.count— Anzahl der Einträge in data.meta.version— Version des Dienstes, der geantwortet hat.meta.source— Öffentliche Adresse dieses Dienstes.meta.deprecated— Nur bei den beiden ersetzten Adressen weiter unten: ein Satz, der die Adresse nennt, die an ihre Stelle getreten ist.
Die Adressen
Mehrere Werte werden durch Komma getrennt. Ein Wert, der nicht in der Liste steht, wird stillschweigend übergangen — die Antwort bleibt gültig, der Filter greift dann nur nicht. Genauso wird ein Abfrageparameter übergangen, den die Adresse nicht kennt.
GET /api/v1/grants
Das Förderverzeichnis: jedes Programm mit Frist, Betrag, Zielgruppe, Fachrichtung und Quelle.
Ohne Parameter kommt das ganze Verzeichnis außer den eingestellten Programmen. Anders als die Website filtert die Schnittstelle nicht von sich aus auf Österreich.
Abfrageparameter
stages=— Karrierestufe, für die das Programm offen ist.
Werte:R1, R2, R3, R4, ORGstatus=— Zustand der Frist. Abgelaufene Einträge sind auch ohne diesen Parameter in der Antwort — anders als auf der Website, die sie ausblendet. Nur die eingestellten Programme fehlen, bis sie hier oder mit discontinued=1 verlangt werden. Achtung: das gleichnamige Feld in der Antwort ist etwas anderes — es sagt nur active oder discontinued. Der Fristzustand ist kein Feld; er ist das, wonach dieser Parameter filtert, und wer ihn selbst braucht, rechnet ihn aus deadline_dates und deadline_rolling nach.
Werte:open, rolling, unclear, expired, discontinueddisciplines=— Fachrichtung, für die das Programm offen ist. Fachübergreifende Einträge kommen bei jeder Wahl mit.
Werte:psychology, communication, clinical_health, neuroscience, education, allcountries=— Land, in dem eine Bewerberin oder ein Bewerber sitzen muss. Einträge ohne Landesbedingung und EU-weite Programme kommen bei jeder Wahl mit.
Werte:AT, DE, CHnew=— Nur Einträge, die in den letzten so vielen Wochen ins Verzeichnis gekommen sind.
Werte:1, 2, 4, 8discontinued=— Mit dem Wert 1 kommen die eingestellten Programme mit dazu.
Werte:1
Felder je Eintrag
id, institution_id, name, name_en, description_de, description_en, website, application_url, amount_range, target_group_de, target_group_en, career_stages, deadline_info_de, deadline_info_en, deadline_dates, deadline_rolling, disciplines, eligibility_countries, discipline_note_de, discipline_note_en, tags, mobility, first_seen, source_checked, status, funding_category
Beispiel
curl 'https://researchradar.at/api/v1/grants?disciplines=psychology&status=open,rolling'
Antwort, gekürzt
{
"meta": { … },
"data": [
{
"id": "fwf-esprit",
"institution_id": "fwf",
"name": "ESPRIT-Programm",
"name_en": "ESPRIT Programme",
"website": "https://www.fwf.ac.at/foerdern/…/esprit",
"career_stages": ["R2"],
"deadline_rolling": true,
"deadline_dates": [],
"disciplines": ["all"],
"eligibility_countries": ["AT"],
"status": "active",
"funding_category": "research",
"source_checked": "2026-07-30",
…
}
]
}
GET /api/v1/conferences
Das Konferenzverzeichnis: Tagungen mit Ort, Terminen und Frist für Beiträge.
Ohne Parameter kommen alle Konferenzen, auch die bereits vergangenen — auf der Website sind die ausgeblendet. Sortiert wird nach dem Zustand der Einreichfrist in der Reihenfolge der Werte unten, dann nach diesem Datum, das früheste zuerst: der Frist, und wo keine steht, dem Beginn der Veranstaltung. In den abgelaufenen Gruppen heißt das die älteste zuerst.
Abfrageparameter
disciplines=— Fachrichtung der Konferenz. Fachübergreifende Einträge kommen bei jeder Wahl mit.
Werte:psychology, communication, clinical_health, neuroscience, education, allstatus=— Zustand der Einreichfrist beziehungsweise des Termins.
Werte:cfp_open, cfp_unknown, cfp_closed, over
Felder je Eintrag
id, source_id, organiser_id, name, name_en, website, event_start, event_end, city, country, cfp_deadline, registration_deadline, submission_type_de, submission_type_en, disciplines, discipline_note_de, discipline_note_en, first_seen, source_checked
Beispiel
curl 'https://researchradar.at/api/v1/conferences?status=cfp_open'
Antwort, gekürzt
{
"meta": { … },
"data": [
{
"id": "boep-avm-tagung-2026",
"organiser_id": "boep",
"name": "28. wissenschaftliche Tagung der AVM",
"website": "https://www.boep.or.at/veranstaltungen/…",
"event_start": "2026-10-22",
"event_end": "2026-10-25",
"city": "St. Georgen am Längsee",
"cfp_deadline": "2026-08-31",
"disciplines": ["psychology"],
…
}
]
}
GET /api/v1/organizations
Fördergeber und Konferenzveranstalter in einem Verzeichnis, jeweils mit dem ganzen Datensatz der Organisation.
Ohne Parameter und immer vollständig. Jeder Datensatz trägt mindestens die Felder unten — bis auf name_en, das nur dort steht, wo die Organisation einen englischen Namen hat. Manche Datensätze tragen zusätzlich Felder, deren Name mit einem Unterstrich beginnt; das sind interne Notizen zur Herkunft einer Angabe.
Abfrageparameter
Diese Adresse nimmt keine Abfrageparameter.
Felder je Eintrag
id, name, name_en, short_name, type, country, website, description_de, description_en
Beispiel
curl 'https://researchradar.at/api/v1/organizations'
Antwort, gekürzt
{
"meta": { … },
"data": [
{
"id": "fwf",
"name": "FWF – Fonds zur Förderung der wissenschaftlichen Forschung",
"short_name": "FWF",
"type": "federal",
"country": "AT",
"website": "https://www.fwf.ac.at",
…
}
]
}
GET /api/v1/findings
Was der tägliche Abgleich neu auf den Seiten der Fördergeber gefunden hat, das Neueste zuerst.
Ein Fund ist ein Titel mit einer Adresse, kein Verzeichniseintrag — das Verzeichnis selbst steht unter /grants.
Abfrageparameter
sources=— Nur Funde dieser Quellen. Die Kennung ist die, die im Feld source steht.
Höchstzahl der Funde je Antwort: 100
Felder je Eintrag
source, source_name, id, title, url, found_at
Beispiel
curl 'https://researchradar.at/api/v1/findings?sources=fwf'
Antwort, gekürzt
{
"meta": { … },
"data": [
{
"source": "fwf",
"source_name": "FWF",
"id": "esprit-2026",
"title": "ESPRIT – Ausschreibung 2026",
"url": "https://www.fwf.ac.at/…/esprit",
"found_at": "2026-07-31T06:17:04+02:00"
}
]
}
Ein durchgerechnetes Beispiel
Die nächsten Einreichfristen der Psychologie für eine eigene Seite: Programme der Fachrichtung Psychologie, fachübergreifende inbegriffen, deren Frist noch bevorsteht.
curl 'https://researchradar.at/api/v1/grants?disciplines=psychology&status=open'
/grants sortiert nicht — die Antwort kommt in der Reihenfolge des Verzeichnisses. Die nächsten fünf holt sich das aufrufende Programm, indem es je Eintrag das früheste noch nicht vergangene Datum aus deadline_dates nimmt und danach sortiert.
Zwischenspeichern und Einbinden
Cache-Control: public, max-age=300— So lange darf eine Antwort zwischengespeichert werden, in Sekunden.ETag/If-None-Match— Die Antwort trägt eine Kennung ihres Inhalts. Wird sie beim nächsten Aufruf mitgeschickt und hat sich nichts geändert, kommt 304 und kein Inhalt zurück. Gedacht ist das für Programme außerhalb des Browsers: If-None-Match löst im Browser eine Vorabfrage aus, die diese Schnittstelle nicht beantwortet.Access-Control-Allow-Origin: *— Ein einfaches GET aus dem Browser heraus darf die Schnittstelle von jeder Seite aus lesen; Accept, Accept-Language und Content-Language darf es dabei setzen. Erst eine Kopfzeile, die ein Browser nicht von selbst schickt — If-None-Match zum Beispiel —, macht daraus eine Vorabfrage, und die wird nicht beantwortet.
Begrenzung
Gezählt wird je aufrufender Adresse in einem gleitenden Zeitfenster, über alle Adressen der Schnittstelle zusammen. Wer darüber kommt, bekommt 429 und im Kopf Retry-After die Sekunden bis zum nächsten Versuch.
- Anfragen je Zeitfenster und Adresse:
200 - Zeitfenster in Minuten:
15
Fehler
304— Unverändert seit der Kennung, die mitgeschickt wurde.404— Unbekannte Adresse unter der Basis — als JSON, nie als Webseite.405— Eine schreibende Methode wie POST oder DELETE. Der Kopf Allow nennt, was diese Adresse erlaubt.429— Zu viele Anfragen.
HTTP/1.1 404 Not Found
Content-Type: application/json; charset=utf-8
{"error": "not found"}
Ersetzte Adressen
Zwei Adressen sind durch eine neuere ersetzt worden und antworten trotzdem weiter — eine einmal veröffentlichte Adresse wird hier nicht abgeschaltet. Ihr meta-Block trägt zusätzlich das Feld deprecated mit einem Satz, der die neue Adresse nennt.
GET /api/v1/institutions— Liefert dieselben Datensätze wie die neue Adresse.
Ersetzt durch:/api/v1/organizationsGET /api/v1/conference-sources— Liefert die Organisationen, die mindestens eine Konferenz im Verzeichnis veranstalten.
Ersetzt durch:/api/v1/organizations
Woher die Daten kommen
Jedes Feld jedes Verzeichniseintrags stammt von der abgerufenen Seite der Quelle — beim Förderprogramm die des Fördergebers, bei einer Konferenz die des Veranstalters. Steht dort nichts, bleibt das Feld leer. Förderungen und Konferenzen tragen zusätzlich source_checked, wann die Felder zuletzt mit dieser Seite verglichen wurden, und first_seen, wann der Eintrag ins Verzeichnis gekommen ist.