Zum Inhalt springen

API-Dokumentation

Mit der Do4U-API nutzt du dieselben Werkzeuge wie auf der Website aus deiner eigenen Software: zusammenfassen, vergleichen, Support-Antworten, Alt-Texte, umschreiben und übersetzen. Jede Anfrage verarbeiten wir auf eigenen Servern in Polen, EU.

Basis-URL: https://do4u.eu/api/v1

OpenAPI-3.1-Beschreibung (JSON) – Maschinenlesbare Beschreibung dieser API für Code-Generatoren und Werkzeuge wie Postman oder Insomnia. Ohne Schlüssel abrufbar.

Anmeldung

Leg unter „API-Schlüssel" in deinem Konto einen Schlüssel an. Schick ihn bei jeder Anfrage im Kopf Authorization: Bearer <Schlüssel> (oder X-API-Key: <Schlüssel>). Halte den Schlüssel geheim und bau ihn nie in eine Webseite ein. Du kannst ihn jederzeit widerrufen.

So funktioniert es

Aufträge laufen im Hintergrund. Du legst einen Auftrag an und bekommst sofort seine ID (HTTP 202). Dann fragst du den Auftrag ab, bis der Status done oder failed ist. Frag alle 2 bis 5 Sekunden; die meisten Aufträge dauern ein paar Sekunden.

Endpunkte

GET /tools Werkzeuge, Optionen und deine Eingabegrenzen
GET /balance Dein Guthaben
POST /jobs Auftrag anlegen (JSON, oder multipart/form-data mit einer Bilddatei)
GET /jobs/{id} Stand und Ergebnis eines Auftrags
DELETE /key Widerruft den Schlüssel, mit dem du diese Anfrage schickst, zum Beispiel beim Trennen einer Integration. Schon angelegte Aufträge laufen zu Ende.
POST /key/revoke Dasselbe wie DELETE /key, für Clients, die nur GET und POST senden können.

Beispiel

Auftrag anlegen, dann das Ergebnis abholen:

curl -X POST https://do4u.eu/api/v1/jobs \
  -H "Authorization: Bearer d4u_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool": "summarize", "text": "...", "options": {"length": "short"}, "language": "en"}'
HTTP/1.1 202 Accepted
{"id": "8f1c0b6a...", "tool": "summarize", "status": "queued", "model": "do4u-standard",
 "credits_estimate": 1, "links": {"self": "https://do4u.eu/api/v1/jobs/8f1c0b6a..."}}
curl https://do4u.eu/api/v1/jobs/8f1c0b6a... -H "Authorization: Bearer d4u_YOUR_KEY"

{"id": "8f1c0b6a...", "tool": "summarize", "status": "done", "model": "do4u-standard", "credits_estimate": 1,
 "result": {"summary": "...", "key_points": ["...", "..."]}, "credits": 1,
 "notice": "AI-generated, please check before use."}
curl -X POST https://do4u.eu/api/v1/jobs -H "Authorization: Bearer d4u_YOUR_KEY" \
  -F tool=alt_text -F language=de -F "text=Product page: hiking boots" -F image=@photo.jpg

Felder für POST /jobs

toolName des Werkzeugs, siehe Tabelle unten. Pflicht.
textEingabetext. Bei compare: Text A. Bei alt_text: optional der Seitenkontext.
text_bText B (nur compare).
urlÖffentliche Webseite, die statt eines Textes gelesen wird (summarize, accessibility_check).
htmlHTML einer Seite zum Prüfen (accessibility_check), bis 300.000 Zeichen.
focus_keywordOptionales Fokus-Stichwort für seo_meta. Ohne target schreibt seo_meta in language.
faqOptionale FAQ-Ausschnitte (nur support_reply).
questionsOptional bei seo_meta, content_brief und faq_schema: häufige Besucherfragen als Liste von Texten oder {"text": ..., "count": n} (bis 50, genutzt werden höchstens 20). faq_schema beantwortet sie zuerst, wenn die Quelle die Antwort enthält; visitor_questions im Ergebnis sagt, was mit jeder Frage passiert ist.
imageBild für alt_text: Dateifeld in multipart/form-data oder Base64 / data-URI im JSON. JPG, PNG, WebP oder GIF, bis 5 MB.
image_urlOptional bei alt_text statt image: öffentliche Adresse des Bildes (http oder https; JPEG, PNG, WebP oder GIF; höchstens 5 MB). Do4U lädt es einmal im Hintergrund. Klappt das nicht, schlägt der Auftrag mit dem Fehler image_unavailable fehl und kostet nichts.
optionsObjekt mit den Optionen des Werkzeugs, zum Beispiel {"length": "short"}.
languageSprache des Ergebnisses und der Hinweise: en, de oder pl. Vorgabe en. Beim Übersetzen ist die Zielsprache die Option target.
no_storetrue: Die Eingabe wird direkt nach der Verarbeitung gelöscht, das Ergebnis nach dem ersten Abholen.
brand_voiceOptional: false schaltet deine Markenstimme für diesen Auftrag ab (Vorgabe: Die Markenstimme gilt, wenn du eine angelegt hast).
ai_labelOptional: true zeigt in der Weboberfläche beim Ergebnis den sichtbaren Hinweis „Als KI-Inhalt gekennzeichnet“, false blendet ihn aus. Vorgabe: die Einstellung in deinem Konto. Der maschinenlesbare KI-Vermerk steht immer im Ergebnis und lässt sich nicht abschalten: die Felder ai_generated und generator, ein HTML-Kommentar in HTML-Ergebnissen, ai_notice bei Bildbeschreibungen. ai_generated ist false, wenn das Ergebnis nur aus automatischen Prüfungen stammt.
callback_urlOptional: öffentliche https-Adresse, die einen signierten POST bekommt, sobald der Auftrag fertig ist (siehe Webhooks).
render_jsOptional: true lädt die Seite zuerst mit JavaScript (Seiten, die ihren Inhalt im Browser bauen; Werkzeuge mit url). Der Aufpreis fällt nur an, wenn wirklich so geladen wurde; das Ergebnisfeld render sagt, was passiert ist.
no_cacheOptional: true startet immer einen neuen KI-Auftrag. Ohne das Feld wird ein fertiges, noch gespeichertes Ergebnis deines Kontos (bzw. Arbeitsbereichs) mit gleichem Werkzeug, gleichen Optionen und gleicher Eingabe übernommen: Der Auftrag ist sofort fertig, from_history ist true und er kostet 0 % der Credits des Originals. Nie mit no_store, nie bei einer url.
allow_same_languageOptional bei translate, translate_html und translate_file: true übersetzt auch dann, wenn der Text schon in der Zielsprache ist. Ohne das Feld wird so ein Auftrag mit same_language (400) abgewiesen – nur, wenn die Prüfung sicher ist.

Anfragen sicher wiederholen (Idempotency-Key)

Schick bei POST /jobs den Kopf Idempotency-Key mit, zum Beispiel eine zufällige UUID je Auftrag (1 bis 255 druckbare ASCII-Zeichen). Bricht die Verbindung ab und du schickst dieselbe Anfrage mit demselben Idempotency-Key und demselben API-Schlüssel innerhalb von 24 Stunden noch einmal, bekommst du dieselbe Antwort: derselbe Auftrag, kein zweiter Auftrag und keine zweite Abbuchung. Die Antwort trägt dann den Kopf Idempotent-Replayed: true. Nimm für jeden neuen Auftrag einen neuen Schlüssel. Schickst du denselben Schlüssel mit einer anderen Anfrage, kommt 422 idempotency_conflict. Fehler werden nicht gespeichert: Nach einem Fehler kannst du die Anfrage mit demselben Schlüssel noch einmal schicken.

curl -X POST https://do4u.eu/api/v1/jobs \
  -H "Authorization: Bearer d4u_YOUR_KEY" \
  -H "Idempotency-Key: 5f0c2a8e-7d1b-4c3a-9e2f-1b6d8a4c0e77" \
  -H "Content-Type: application/json" \
  -d '{"tool": "summarize", "text": "..."}'

Werkzeuge und Optionen

WerkzeugEingaben Optionen (der erste Wert ist die Vorgabe)ErgebnisfelderPreis
moderate_commentKommentare auf Spam prüfen text – classification, reason, suggestion, action, note meist 1–3 Credits
document_htmlDokumente in HTML umwandeln image, pdf, text page: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 html, plain_text, notes, page, note meist 2–3 Credits
image_textText in Seitenbildern finden url image_index: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 html, plain_text, notes, images, image_index, coverage, note meist 2–3 Credits
pdf_accessibilityPDF-Barrierefreiheit prüfen pdf – checks, pages, truncated, repaired, note, convert_url meist 1–2 Credits
summarizeZusammenfassen text, url length: medium | short | long summary, key_points meist 1–3 Credits
compareVergleichen text, text_b focus: overall | facts | tone | seo summary, similarities, differences meist 1–3 Credits
support_replySupport-Antwort text, faq tone: friendly | neutral | formal reply, concerns, questions meist 1–3 Credits
alt_textAlt-Texte image, text, filename, image_url – alt, caption, description, filename, filename_base, extension, language, alt_length, alt_max, alt_status, caption_length, caption_max, caption_status meist 2–3 Credits
rewriteUmschreiben text style: simpler | shorter | more_formal | more_casual | more_persuasive | easy_to_read text, changes, language, style_label, readability, easy_check, easy_note, review_status, review_limit, diff meist 1–4 Credits
accessibility_checkBarrierefreiheits-Check url, html – summary, page, counts, findings, checks, readability, note fest 3 Credits je Auftrag
seo_metaSEO-Titel & Beschreibung url, text, focus_keyword, questions target: en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv variants, current, focus_keyword, limits, keywords, note fest 1 Credit je Auftrag
translate_htmlHTML übersetzen html target: en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv html, segments, check, glossary, notes, note, review_status, alignment meist 1–4 Credits
product_descriptionProduktbeschreibungen text tone: neutral | friendly | persuasive | formallength: medium | short | longchannel: shop | marketplacetarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svmeta_description: no | yes products, language, detected_language, channel, format, limits, counts, check, note meist 1–3 Credits
headlinesÜberschriften und Betreffzeilen text kind: page | newsletter | adtone: neutral | friendly | persuasive | formalcount: 5 | 3 | 8target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv kind, fields, variants, limits, counts, enough, report, language, detected_language, note fest 1 Credit je Auftrag
faq_schemaFAQ und Schema-Markup url, text, questions type: faq | organization | localbusiness | productcount: 8 | 5 | 10target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv type, kind, jsonld, html, valid, faq, fields, checks, counts, unverified, dropped, existing, existing_errors, existing_same, page, language, detected_language, notes, note, visitor_questions fest 2 Credits je Auftrag
content_briefContent-Briefing text, audience, questions target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv title, title_length, title_max, title_status, goal, intent, outline, questions, length, markdown, counts, dropped, limits, language, detected_language, notes, note meist 1–2 Credits
review_replyAntworten auf Bewertungen text, company stars: 0 | 1 | 2 | 3 | 4 | 5platform: general | google | trustpilot | booking | tripadvisor | airbnb | yelp | app_store | google_playtone: friendly | neutral | formalcount: 3 | 2target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv assessment, variants, limits, platform, stars, tone, counts, dropped, enough, report, hints, checks, language, detected_language, note meist 1–2 Credits
social_postsSocial-Posts aus Artikel url, text channels: all | linkedin | facebook | instagram | linkedin+facebook | linkedin+instagram | facebook+instagramtone: friendly | neutral | persuasive | formal | casualvariants: 1 | 2 | 3target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv channels, posts, limits, counts, enough, report, link, link_in_bio, language, detected_language, source, notes, note meist 1–3 Credits
explain_termsFachbegriffe erklären url, text level: simple | general | expertexamples: no | yestarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv terms, level, language, detected_language, source, text_length, text_clipped, counts, dropped, adjusted, limits, other_candidates, checks, markdown, html, notes, note meist 1–3 Credits
extract_dataDaten herausziehen url, text types: all | hours | prices | hours+prices | addresses | hours+addresses | prices+addresses | hours+prices+addresses | events | hours+events | prices+events | hours+prices+events | addresses+events | hours+addresses+events | prices+addresses+events | hours+prices+addresses+events | contact | hours+contact | prices+contact | hours+prices+contact | addresses+contact | hours+addresses+contact | prices+addresses+contact | hours+prices+addresses+contact | events+contact | hours+events+contact | prices+events+contact | hours+prices+events+contact | addresses+events+contact | hours+addresses+events+contact | prices+addresses+events+contacttarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv kinds, hours, prices, addresses, events, contact, counts, empty, unverified, dropped, limits, source, language, detected_language, notes, note meist 1–3 Credits
redirect_planWeiterleitungsplan old_urls, new_urls, old_domain, new_domain ai: yes | no old_base, new_base, mappings, counts, unused_new, invalid, dropped, ai, legend, language, domain_ignored, notes, note meist 1–3 Credits
contrast_checkFarbkontrast prüfen colors level: aa | aaatext_size: normal | large colors, pairs, counts, invalid, settings, palette_check, legend, language, note meist 1–2 Credits
language_levelSprachniveau anpassen (A1–C1) text level: B1 | A1 | A2 | B2 | C1target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svkeep_terms: no | yes text, changes, level, language, detected_language, translated, summary, within_guideline, measures, over_guideline, over_count, readability, content, kept_terms, checks, hints, note meist 1–4 Credits
llms_txtllms.txt-Generator url target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv name, summary, details, file, filename, sections, counts, pages_read, read, existing, dropped, hints, language, detected_language, notes, note meist 1–3 Credits
internal_linksInterne Verlinkung text, pages, sitemap_url, page_url – links, text, text_is_html, counts, pages, dropped, ai, limits, language, detected_language, timeout, notes, note meist 1–3 Credits
outdated_contentVeraltete Inhalte finden url, text, html, reference_date target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv reference_date, reference_date_given, findings, summary, counts, source, dropped, ai, limits, language, detected_language, timeout, notes, note meist 1–3 Credits
inclusive_languageInklusive und verständliche Sprache text scope: both | exclusion | complexitygender: not_prescribed | neutral | pair | star | colon | brand_voice language, scope, gender, summary, counts, findings, candidates, measures, applied, changed, revised_text, diff, dropped, checks, hints, note meist 1–3 Credits
review_analysisBewertungen auswerten text focus: all | criticismtarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv format, columns, language, detected_language, focus, counts, selection, stars, period, languages, languages_unknown, personal_data, themes, praise, criticism, page, faq, cited, dropped, limits, hints, notes, note meist 1–3 Credits
ai_visibility_checkKI-Sichtbarkeits-Check url, text, html, topic, questions target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv coverage, coverage_level, counts, questions, faq_questions, sections, qa_on_page, structured_data, llms_txt, robots_txt, readability, hints, source, topic, dropped, ai, limits, files, language, detected_language, note, how meist 1–3 Credits
events_calendarVeranstaltungen in den Kalender url, text, time_zone, year target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv events, counts, unverified, dropped, timezone, year, today, limits, ics, jsonld, filename, source, language, detected_language, notes, note meist 1–3 Credits
product_photoProduktfoto zu Text image, image_url, text, languages target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svcategory_list: google | free language, detected_language, title, title_length, title_max, title_status, short_description, short_length, short_max, short_status, description, description_length, description_max, description_status, bullets, bullets_count, bullets_max_length, bullets_status, alt_text, alt_length, alt_max, alt_status, category_group, attributes, attribute_sources, attribute_list, translations, removed, hints, claims_checked, claims_unchecked, counts, limits, notes, category_list, jsonld, jsonld_check, product_json, check, note meist 2–3 Credits
chart_descriptionDiagramme und Infografiken beschreiben image, image_url, text target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svlength: normal | short chart_type, title, language, detected_language, alt, alt_length, alt_max, alt_status, description, description_length, description_max, description_status, description_size, axes, data, data_rows, table, data_csv, html, image_text, pie_check, hints, counts, limits, notes, verify_numbers, check, note meist 2–3 Credits
design_feedbackDesign-Feedback aus Screenshot image, image_url, text target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svdevice: auto | phone | desktop language, detected_language, device, summary, findings, image, image_basis, counts, removed, hints, limits, notes, estimate, check, note, text, markdown meist 2–3 Credits
job_ad_checkStellenanzeige prüfen url, text, html jurisdiction: auto | eu | de | pltarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv language, detected_language, jurisdiction, title, checklist, counts, pay, structure, length, findings, titles, summary, source, text_cut, dropped, ai, hints, note meist 1–3 Credits
green_claims_checkUmweltaussagen prüfen url, text, html target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv findings, summary, counts, source, dropped, ai, limits, legal, language, detected_language, timeout, notes, note meist 1–3 Credits
third_party_scanDrittanbieter-Check url, html – url, host, page_from, static_only, counts, consent, groups, cookies, legend, notes, check, note, truncated, checked_at meist 1–2 Credits
broken_link_checkDefekte Links finden url resources: yes | noexternal: no | yes language, url, host, counts, broken, more_broken, redirects, more_redirects, soft, start_soft, suggestions, not_reached, limits, note, truncated meist 1–2 Credits
duplicate_content_checkSEO-Duplikate finden url, text – language, mode, url, host, summary, counts, findings, passed, hints, thresholds, pages, limits, note, truncated meist 1–2 Credits
hreflang_checkhreflang-Prüfung url – language, url, counts, findings, pages, matrix, annotations, legend, limits, note meist 1–2 Credits
ai_robots_txtKI-Crawler in der robots.txt site_url, robots_txt, groups, crawlers – file, file_complete, ai_section, crawlers, counts, source, existing, changes, checks, notes, legend, sources, verified_on, language, note meist 1–2 Credits
faq_from_supportFAQ aus Kundenanfragen text, faq_url target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv format, input_kind, columns, language, detected_language, languages, counts, selection, faq_page, personal_data, topics, gaps, cited, dropped, limits, placeholder, hints, notes, note, export meist 1–3 Credits
price_display_checkPreisangaben prüfen url, text, html ai: yes | nojurisdiction: auto | de | pl jurisdiction, jurisdiction_auto, jurisdiction_label, source, price, previous_prices, prior_30_days, unit_prices, quantities, discounts, hints, structured, findings, counts, checks, ai, dropped, legal_sources, language, notes, note meist 1–3 Credits
form_text_checkFormulartexte url, html, error_messages target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svtone: neutral | friendly | formal language, detected_language, tone, required_word, forms, errors, counts, criteria, summary, source, dropped, ai, hints, note meist 1–3 Credits
newsletter_checkNewsletter prüfen html, eml, text, subject, preheader target: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv language, detected_language, input, subject, preheader, checklist, counts, links, links_total, images, eml, pairs, improvements, text_cut, dropped, ai, hints, note meist 1–3 Credits
privacy_policy_matchDatenschutzerklärung abgleichen website_url, pages, policy_url, policy_text – website, pages, policy, not_in_policy, not_found, matched, categories, counts, dropped, ai, limits, legal, notes, check, note, checked_at meist 1–3 Credits
social_card_checkSocial-Vorschau prüfen url – language, url, counts, preview, findings, tags, images, snippet, guidance, limits, note meist 1–2 Credits
image_performance_checkBilder prüfen url – language, url, counts, total, formats, lcp, page_findings, summary, images, more_images, legend, limits, note, truncated meist 1–2 Credits
ai_transparency_checkKI-Hinweise nach der KI-Verordnung url, text, html chatbot: auto | yes | nomedia: unknown | no | realistic | artistic | illustrativearticles: unknown | no | unreviewed | reviewedtarget: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv language, detected_language, source, answers, checklist, detected, notices, summary, counts, dropped, ai, legal, hints, note meist 1–3 Credits
structured_data_checkStrukturierte Daten prüfen url, html – language, url, input, counts, formats, findings, items, rules, visible, limits, truncated, note meist 1–2 Credits
legal_notice_checkImpressum prüfen url, text, html ai: yes | nojurisdiction: auto | de | pl jurisdiction, jurisdiction_auto, jurisdiction_basis, jurisdiction_label, source, entity, items, extra, counts, ai, dropped, legal_sources, language, notes, note, truncated meist 1–3 Credits
glossary_builderGlossar erstellen url, text, html, languages source: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svmax_pages: 1 | 2 | 3 | 5 | 10 language, language_name, language_source, targets, target_names, items, existing, counts, pages, reading, source, text_cut, dropped, glossary, hints, note, export meist 1–3 Credits
local_business_checkBetriebsdaten prüfen url, text ai: no | yes language, url, host, mode, country, table, findings, counts, structured, suggestion, handover, pages, failed, not_reached, limits, ai, dropped, notes, note meist 1–2 Credits
consent_preload_checkLädt etwas vor der Einwilligung? url – url, final_url, host, loaded, counts, timing, consent, groups, cookies, storage, notes, check, law, note, truncated, checked_at meist 1–2 Credits
ai_literacy_policyKI-Kompetenz-Regel (AI Act Art. 4) text, uses, roles, data, company_name company_size: 1-9 | 10-49 | 50-249 | 250+sector: general | retail | services | crafts | health | finance | education | public_sector | media | it | manufacturing | tourism | socialreview_months: 12 | 6 | 24language: auto | en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv language, title, sections, training, record_columns, markdown, text, profile, counts, dropped, legal, hints, note meist 1–2 Credits
withdrawal_button_checkWiderrufsbutton prüfen url, text, html ai: yes | nojurisdiction: auto | de | pl | eusubscriptions: auto | yes | no jurisdiction, jurisdiction_auto, jurisdiction_basis, jurisdiction_label, law, source, subscription, items, candidates, counts, ai, dropped, legal_sources, language, notes, note, truncated meist 1–3 Credits
product_safety_checkProduktseiten-Check (GPSR) url, text, html market_language: auto | bg | cs | da | de | el | en | es | fi | fr | hr | hu | it | lt | nl | pl | pt | ro | sk | sl | sv language, market_language, market_language_label, market_basis, page_language, source, product, manufacturer_seat, items, counts, dropped, ai, hints, notes, legal, legal_sources, note meist 1–3 Credits
website_checkWebsite-Check url scope: short | full score, categories, findings, counts, snippet, llms_txt, summary, actions, note fest 5 Credits je Auftrag
translateÜbersetzen text target: en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | sv translation, notes, review_status, alignment meist 1–4 Credits
proofreadKorrektorat text text_language: auto | en | de | pl | fr | es | it | pt | nl | cs | sk | uk | ru | bg | ro | hu | sv | da | fi | tr | el | ar | fa | he | hi | zh | ja | ko | th text, html, language, identical, summary, counts, changed_share, changes, notes, beta, note meist 1–4 Credits
translate_fileSprachdateien übersetzen text target: en | de | pl | fr | es | it | nl | cs | sk | uk | bg | da | el | fi | hr | hu | lt | pt | ro | sl | svscope: auto | all | missingline_endings: lf | crlf | lf_no_final_newline | crlf_no_final_newline format, target, filename, mime, file, entries, counts, flagged, preview, check, notes, note meist 5–8 Credits

Status eines Auftrags

queued und running: läuft noch (position und wait_seconds helfen beim Warten). done: result enthält die Felder des Werkzeugs. failed: Es wurde nichts berechnet (credits ist 0); error.code nennt den Grund: address_blocked (Do4U öffnet diese Adresse nicht, zum Beispiel eine private oder interne; schick stattdessen Text oder HTML), input_too_large (Eingabe kürzen), image_unavailable oder job_failed. expired: Das Ergebnis ist nicht mehr gespeichert.

Webhooks

Gib bei POST /api/v1/jobs "callback_url" mit, dann schickt Do4U einen signierten POST (Ereignis job.finished mit Status, Credits und dem Link auf das Ergebnis - nicht das Ergebnis selbst), sobald der Auftrag fertig ist. Nur öffentliche Adressen auf Port 80 oder 443; wir versuchen es bis zu 6-mal mit wachsenden Pausen.

Beispiel: Auftrag mit callback_url anlegen – und die Anfrage, die Do4U an diese Adresse schickt, sobald der Auftrag fertig ist:

curl -X POST https://do4u.eu/api/v1/jobs \
  -H "Authorization: Bearer d4u_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"tool": "summarize", "text": "...", "callback_url": "https://example.com/do4u-hook"}'
POST /do4u-hook
Content-Type: application/json
X-Do4U-Event: job.finished
X-Do4U-Signature: t=1793180000,v1=6b1f...

{"event":"job.finished","id":"8f1c0b6a...","tool":"summarize","status":"done","credits":1,
 "created":"2026-10-28T10:00:00+01:00","finished":"2026-10-28T10:00:04+01:00","result_url":"https://do4u.eu/api/v1/jobs/8f1c0b6a..."}

Prüfe die Kopfzeile X-Do4U-Signature: t=<zeit>,v1=<hex>, mit v1 = HMAC-SHA256(Geheimnis, "<zeit>.<roher Rumpf>"). Weise alte Zeiten ab (z. B. älter als 5 Minuten). Dein Geheimnis beginnt mit whsec_ und steht auf der Seite API-Schlüssel.

// Node.js: rawBody = the request body exactly as received (string)
const crypto = require('crypto');
function do4uSignatureOk(rawBody, header, secret) {
  const t = (header.match(/t=(\d+)/) || [])[1];
  const v1 = (header.match(/v1=([0-9a-f]{64})/) || [])[1];
  if (!t || !v1 || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = crypto.createHmac('sha256', secret).update(t + '.' + rawBody).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
// PHP
function do4u_signature_ok(string $raw, string $header, string $secret): bool {
    if (!preg_match('/t=(\d+),v1=([0-9a-f]{64})/', $header, $m) || abs(time() - (int)$m[1]) > 300) return false;
    return hash_equals(hash_hmac('sha256', $m[1] . '.' . $raw, $secret), $m[2]);
}
$ok = do4u_signature_ok(file_get_contents('php://input'), $_SERVER['HTTP_X_DO4U_SIGNATURE'] ?? '', 'whsec_YOUR_SECRET');

credits.low

Fällt das Guthaben eines Kontos unter die Schwelle, schickt Do4U einmal einen signierten POST an die Webhook-Adresse des Kontos. Das Ereignis enthält keine personenbezogenen Daten, nur Guthaben, Schwelle und Zeitpunkt (UTC). Das nächste kommt erst, wenn wieder Credits dazugekommen sind (Kauf, Free-Credits des Monats oder Gutschein). Signatur und Geheimnis sind dieselben wie bei job.finished.

POST /do4u-hook
Content-Type: application/json
X-Do4U-Event: credits.low
X-Do4U-Signature: t=1793180000,v1=6b1f...

{"event":"credits.low","balance":18,"threshold":20,"ts":"2026-10-29T10:00:04Z"}

Adresse und Schwelle stellst du hier ein: API-Schlüssel

n8n

Fertiger Workflow: Ein Webhook nimmt den Aufruf von Do4U an, prüft die Signatur, holt das Ergebnis ab und gibt es an deinen nächsten Schritt weiter.

Vorlage für n8n herunterladen (JSON)

Vorlage, noch nicht in einer echten n8n- bzw. Make-Instanz getestet – bitte teste die Signaturprüfung vor dem Einsatz.

In n8n: Workflows → Import from file. Dann im Knoten „Check signature" dein Geheimnis und in „Do4U: get result" deinen API-Schlüssel eintragen, den Workflow aktivieren und die Production-URL des Webhooks als callback_url nutzen. Selbst betriebenes n8n braucht für die Signaturprüfung die Umgebungsvariable NODE_FUNCTION_ALLOW_BUILTIN=crypto.

Make

  1. Nimm das Modul Webhooks → Custom webhook als Auslöser und schalte in seinen erweiterten Einstellungen „JSON pass-through" und „Get request headers" ein.
  2. Nutze die Adresse dieses Webhooks als callback_url.
  3. Prüfe die Signatur: Vergleiche v1 aus der Kopfzeile X-Do4U-Signature mit sha256(t + "." + roher Rumpf; hex; dein Geheimnis).
  4. Füge HTTP → Make a request hinzu: GET auf result_url mit der Kopfzeile Authorization: Bearer <dein API-Schlüssel>.
  5. Nutze das Feld result in deinen nächsten Modulen.

Vorlage, noch nicht in einer echten n8n- bzw. Make-Instanz getestet – bitte teste die Signaturprüfung vor dem Einsatz.

Rezepte: Werkzeuge verketten

Ein Rezept führt 2 bis 4 Werkzeuge nacheinander als einen Auftrag aus. Sende „recipe“ statt „tool“: entweder den Namen eines fertigen Rezepts oder eine Liste von Schritten. Der Text geht in den ersten Schritt; das Ergebnis jedes Schritts ist der Text für den nächsten. GET /api/v1/recipes listet die fertigen Rezepte, die nutzbaren Werkzeuge und das Feld, das jedes Werkzeug weitergibt.

curl -X POST https://do4u.eu/api/v1/jobs \
  -H "Authorization: Bearer d4u_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipe": [{"tool": "summarize", "options": {"length": "short"}},
               {"tool": "translate", "options": {"target": "pl"}}], "text": "..."}'
curl -X POST https://do4u.eu/api/v1/jobs \
  -H "Authorization: Bearer d4u_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recipe": "summary_translate_meta", "options": {"target": "pl"}, "text": "..."}'

Du bekommst eine Schätzung für alle Schritte (credits_estimate). Dieser Betrag wird zu Beginn reserviert. Nach jedem Schritt wird der echte Verbrauch gebucht, der Rest bleibt bis zum Ende reserviert und wird dann freigegeben. Ein fehlgeschlagener Schritt kostet nichts, die übrigen Schritte entfallen, und schon fertige Schritte werden berechnet.

HTTP/1.1 202 Accepted
{"id": "3c9e0d1a...", "tool": "recipe", "recipe": null, "status": "queued", "model": "do4u-standard", "credits_estimate": 4,
 "steps": [{"n": 1, "tool": "summarize", "credits_estimate": 2}, {"n": 2, "tool": "translate", "credits_estimate": 2}],
 "links": {"self": "https://do4u.eu/api/v1/jobs/3c9e0d1a..."}}

GET /api/v1/jobs/{id} zeigt jeden Schritt mit Status (pending, queued, running, done, failed, skipped), seinen Credits, dem Hinweis input_shortened, wenn der Text für das nächste Werkzeug gekürzt werden musste, und dem Ergebnis jedes Schritts, sobald das Rezept zu Ende ist. Mit no_store werden die Ergebnisse einmal gezeigt. callback_url wird genau einmal ausgelöst, am Ende des Rezepts.

GET https://do4u.eu/api/v1/jobs/3c9e0d1a...

{"id": "3c9e0d1a...", "tool": "recipe", "status": "done", "credits_estimate": 4, "credits": 3, "steps_total": 2,
 "steps": [{"n": 1, "tool": "summarize", "status": "done", "credits": 1, "result": {"summary": "...", "key_points": ["..."]}},
           {"n": 2, "tool": "translate", "status": "done", "credits": 2, "notices": ["input_shortened"], "result": {"translation": "...", "notes": []}}],
 "result": {"translation": "...", "notes": []}}

GET https://do4u.eu/api/v1/recipes

Fehler

Fehler haben immer dieselbe Form: {"error": {"code": "...", "message": "..."}}. Bei 429 und 503 sagt der Kopf Retry-After, wie viele Sekunden du warten sollst.

CodeHTTPBedeutung
missing_key401Kein API-Schlüssel mitgeschickt.
invalid_key401Schlüssel unbekannt oder widerrufen.
rate_limited429Zu viele Anfragen in dieser Minute.
invalid_json400Der Inhalt ist kein JSON-Objekt.
unknown_tool400Kein Werkzeug mit diesem Namen.
invalid_option400Unbekannte Option oder unbekannter Wert.
invalid_field400Ein Feld hat den falschen Typ.
invalid_language400language ist nicht en, de oder pl.
empty_input400Kein Text und keine URL.
text_b_required400compare braucht text und text_b.
input_too_long400Eingabe länger als deine Grenze.
input_too_large400Eingabe zu groß für einen Auftrag: kürzen oder auf mehrere Aufträge aufteilen.
invalid_url400URL nicht erlaubt oder nicht lesbar.
invalid_image400Bild fehlt, falsches Format oder zu groß.
payload_too_large413Anfrage größer als 8 MB.
insufficient_credits402Nicht genug Credits.
email_not_verified402Bestätige zuerst deine E-Mail-Adresse.
daily_limit429Kostenloses Tageskontingent aufgebraucht (website_check, scope short).
too_many_open_jobs429Zu viele offene Aufträge in deinem Konto.
package_required403Das Werkzeug braucht ein gekauftes Paket.
busy503Die Warteschlange ist voll, versuch es gleich noch einmal.
tool_unavailable503Das Werkzeug ist gerade nicht verfügbar.
not_found404Unbekannter Endpunkt oder Auftrag.
method_not_allowed405Falsche HTTP-Methode.
internal_error500Fehler auf unserer Seite.
invalid_idempotency_key400Idempotency-Key ist leer, zu lang oder hat Zeichen, die kein druckbares ASCII sind.
idempotency_conflict422Dieser Idempotency-Key wurde schon mit einer anderen Anfrage verwendet.
idempotency_in_progress409Eine Anfrage mit diesem Idempotency-Key läuft noch. Warte kurz (Retry-After).
idempotency_unavailable503Idempotency-Key ist gerade nicht nutzbar. Versuch es später noch einmal.
same_language400Der Text ist schon in der Zielsprache (Übersetzungswerkzeuge). Mit allow_same_language: true wird trotzdem übersetzt.

Grenzen

Credits

Ein neuer Auftrag zeigt eine Schätzung (credits_estimate); berechnet wird der tatsächliche Verbrauch (credits). Fehlgeschlagene Aufträge kosten nichts. Gratis-Credits werden zuerst verbraucht.

Daten

Eingaben und Ergebnisse speichern wir 7 Tage (Free) bzw. 30 Tage (bezahlte Pakete), danach werden sie gelöscht. Bilder löschen wir direkt nach der Verarbeitung. Die Ergebnisse sind KI-generiert: Bitte prüf sie, bevor du sie verwendest.

E-Mails beantworten, ohne das Postfach zu wechseln

Do4U betreibt kein Postfach und speichert nie Zugangsdaten zu deinem Postfach. Zwei Wege, trotzdem Antwortentwürfe zu bekommen:

S1 – Vorlage für n8n oder Make

  1. Auslöser: neue E-Mail in deinem Postfach (IMAP-Auslöser in n8n oder Make – die Zugangsdaten bleiben dort)
  2. POST /api/v1/jobs mit tool support_reply, dem Text der E-Mail und no_store: true
  3. Ein paar Sekunden warten und GET /api/v1/jobs/{id} abfragen, bis der Status done ist
  4. Im Postfach einen Entwurf mit dem Text aus result.reply anlegen (Gmail- oder Outlook-Modul)

n8n-Vorlage herunterladen (JSON)

In Make baust du dasselbe Szenario aus den Modulen E-Mail (E-Mails beobachten), HTTP (Anfrage senden), Sleep und Gmail oder Outlook (Entwurf anlegen).

Dev-Erweiterungen und Shop-Plugins

ZIP entpacken und die beiliegende Anleitung lesen. Browser-Erweiterung lokal laden; Shop-Plugins zuerst im Testshop prüfen. Ein eigener Dev-API-Schlüssel ist erforderlich. Shopware bietet zunächst eine CLI.