Base URL: https://tuwasgutes.app
Alle Endpunkte geben JSON zurück. Sprache wählbar via lang=de oder lang=en (Default: de).
cause. Beide Begriffe meinen dasselbe Objekt.
Die TuWasGutes API gibt deiner App oder Plattform täglich eine kuratierte zivile Aktion — spenden, Petition unterschreiben, Brief schreiben. Ein API-Call, vollständig automatisiert, kein Redaktionsteam nötig. Inhalte stammen aus verifizierten deutschen NGOs, werden KI-angereichert mit Dringlichkeitskontext und Wirkungsaussagen, und täglich um 02:00 Uhr CET aktualisiert.
Sende deinen API-Key als HTTP-Header in jedem Request:
X-Api-Key: your-key-here
Fehlende oder ungültige Keys liefern HTTP 401. Keys werden manuell ausgestellt — siehe „API-Key anfragen" unten.
Zur technischen Missbrauchsprävention gilt ein Limit von 1 Request pro Sekunde pro API-Key. Dieses Limit wird bei normalem Nutzungsverhalten niemals ausgelöst.
Bei Überschreitung: HTTP 429, Body {"error":"Rate limit exceeded. Retry after 1 second."} — nach 1 Sekunde erneut versuchen.
/api/v1/daily-actionGibt die algorithmisch ausgewählte Aktion des Tages zurück (cause-Objekt + action-Objekt). Für alle API-Key-Inhaber an einem Tag identisch. Aktualisierung täglich um 02:00 Uhr CET.
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
lang | string | de | Sprachcode: de oder en |
Response 200:
{
"cause": {
"id": "abc123",
"slug": "seenotrettung-im-mittelmeer-stoppen",
"title": "Seenotrettung im Mittelmeer stoppen",
"summary": "Tausende Menschen riskieren ihr Leben auf der Flucht...",
"category": "Petition",
"organisationName": "WeAct",
"organisationUrl": "https://weact.campact.de",
"imageUrl": "https://assets.tuwasgutes.app/causes/abc123.jpg",
"fundingProgressPct": 94,
"deadline": "2026-05-31",
"urgency_score": {
"total": 80,
"breakdown": {
"deadline_proximity": 60,
"funding_gap": 20,
"recency": 0,
"engagement": 0
},
"signals": {
"days_until_deadline": 5,
"progress_percentage": 94,
"days_since_import": 18,
"has_above_average_ctr": false
}
},
"source_name": "betterplace",
"source_url": "https://www.betterplace.org/...",
"original_platform": "betterplace",
"refreshed_at": "2026-05-17T02:00:00Z"
},
"action": {
"type": "Petition",
"headline": "Jetzt unterzeichnen und den Druck erhöhen",
"whyNow": "Der Bundestag stimmt nächste Woche über neue Grenzschutzgesetze ab...",
"whyYou": "Deine Unterschrift zählt — 132 Abgeordnete sind noch unentschlossen.",
"impactStatement": "Mit deiner Unterschrift erhöhst du den öffentlichen Druck...",
"isAiGenerated": true,
"language": "de"
}
}
| Feld | Nullable | Hinweise |
|---|---|---|
cause.deadline | Ja | Null wenn keine Deadline existiert |
cause.imageUrl | Ja | Null wenn die Quelle kein Bild liefert |
cause.fundingProgressPct | Ja | Null wenn keine Funding- oder Unterschriftendaten vorhanden |
cause.urgency_score | Nein | Immer vorhanden — live berechnet aus den gespeicherten Signalen |
cause.urgency_score.signals.has_above_average_ctr | Nein | Proxy: cause.urgencyScore > 75 — echte CTR wird derzeit nicht pro Cause gespeichert |
cause.source_name / source_url / original_platform | Nein | Pflichtattribution — muss in der Integration sichtbar bleiben |
action | Ja | Null wenn noch keine KI-Aktion für diese Cause und Sprache generiert wurde |
action.whyNow / impactStatement | Nein | KI-generiert — immer vorhanden wenn action nicht null |
/api/v1/causes
Paginierte Liste aller aktiven Aktionen (cause-Objekte), sortiert nach Urgency Score absteigend.
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
page | integer | 1 | Seitennummer, 1-basiert |
pageSize | integer | 20 | Einträge pro Seite, max. 50 |
category | string | – | Filter: Spenden, Petition, Brief |
lang | string | de | Sprachcode: de oder en |
{
"total": 142,
"page": 1,
"pageSize": 20,
"items": [
{
/* cause object: gleiche Felder wie cause in /daily-action */
/* inkl. urgency_score breakdown, source_name, source_url, original_platform */
/* ohne: description, fundingGoal, fundingCurrent, leverageScore, actionsToTippingPoint */
/* kein action-Objekt in der Liste */
}
]
}
/api/v1/causes/{slug}
Einzelne Aktion nach Slug, inklusive vollständigem Urgency Score.
cause-Objekte) in /api/v1/causesDer Urgency Score ist der Kernalgorithmus von TuWasGutes. Er bestimmt, welche Aktion als Tagesaktion ausgewählt wird, und wie Aktionen in der Gesamtliste gereiht werden. Der Score ist transparent und in jeder API-Antwort vollständig enthalten.
{
"urgency_score": {
"total": 80,
"breakdown": {
"deadline_proximity": 60,
"funding_gap": 20,
"recency": 0,
"engagement": 0
},
"signals": {
"days_until_deadline": 5,
"progress_percentage": 94,
"days_since_import": 18,
"has_above_average_ctr": false
}
}
}
| Signal | Bedingung | Punkte |
|---|---|---|
deadline_proximity | Deadline innerhalb 30 Tage | +30 |
deadline_proximity | Deadline innerhalb 7 Tage | +60 (ersetzt +30) |
deadline_proximity | Keine Deadline | 0 |
funding_gap | Fortschritt zwischen 70% und 95% | +20 |
funding_gap | Außerhalb dieses Bereichs oder unbekannt | 0 |
recency | Importiert innerhalb der letzten 14 Tage | +10 |
recency | Älter als 14 Tage | 0 |
engagement | Überdurchschnittliche CTR (min. 10 Impressions) | +10 |
engagement | Unterdurchschnittlich oder unzureichende Daten | 0 |
Maximal möglicher Score: 100 Punkte.
/api/v1/daily-action, aber mit intaktem Score in /api/v1/causes.
Petition, 94% unterschrieben, Deadline in 5 Tagen, importiert vor 18 Tagen
Spendenkampagne, 40% finanziert, keine Deadline, importiert vor 3 Tagen
Petition, 88% unterschrieben, Deadline in 25 Tagen, hohe CTR
Pauschalpreis. Keine Call-Limits, kein Usage-Metering, keine Überraschungen.
Kein Risiko. Einfach anfangen.
Alles inklusive, monatlich kündbar.
Alle Preise zzgl. MwSt. Monatlich kündbar. Größere Integration geplant? Schreib uns einfach.
Alle Integrationen müssen überall, wo eine Cause angezeigt wird, folgende Attribution sichtbar darstellen:
Quelle: TuWasGutes (tuwasgutes.app)
Das Feld source_url in jeder Antwort muss als anklickbarer Attributionslink gerendert werden.
const response = await fetch( 'https://tuwasgutes.app/api/v1/daily-action?lang=de', { headers: { 'X-Api-Key': 'your-key-here' } } ); const cause = await response.json(); console.log(cause.title); console.log(`Urgency score: ${cause.urgency_score.total}`); console.log(`Days until deadline: ${cause.urgency_score.signals.days_until_deadline}`);
using var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-Api-Key", "your-key-here"); var cause = await client.GetFromJsonAsync<CauseDto>( "https://tuwasgutes.app/api/v1/daily-action?lang=de" ); Console.WriteLine(cause.Title); Console.WriteLine($"Urgency score: {cause.UrgencyScore.Total}");
Schreib eine E-Mail an api@tuwasgutes.app mit:
Keys werden innerhalb von 48 Stunden ausgestellt.
Jetzt API-Key anfragenErster Monat kostenlos · kein Vertrag · kein Call-Limit ← API für Unternehmen