Endpoint: https://login.hero-software.de/api/external/v7/graphql
| Token: aus ⚙ Einstellungen (localStorage)
⏳ Lade Token aus Settings…
⚠️ Diagnose: Cloudflare WAF — das ist der echte Root Cause
Alle 5 CORS-Proxies schlugen fehl — nicht wegen fehlendem Access-Control-Allow-Origin
auf der HERO-App, sondern weil der Server hinter Cloudflare WAF sitzt.
Postman funktioniert, weil es Session-Cookies mitschickt die Cloudflare ausgestellt hat: CLOUDWAFSESID · CLOUDWAFSESTIME · _LB
Browser-Requests dürfen keine Cookie-Header bei Cross-Origin-Requests senden
(Fetch-Spec, verboten). Cloudflare blockt deshalb jeden Browser-Request ohne gültige WAF-Session
— und antwortet ohne CORS-Header, was der Browser als NetworkError interpretiert.
Auch die CORS-Proxies bekommen keine WAF-Session, weil sie selbst keine Browser-Session mit
login.hero-software.de aufgebaut haben.
④ Cookie-Diagnose — Was der Browser NICHT senden darf
ℹ️ Info
Cookie-Name
Was es ist
Postman
Browser (CORS)
CLOUDWAFSESID
Cloudflare WAF Challenge-Session-ID
✓ mitgesendet
✗ verboten (Fetch-Spec)
CLOUDWAFSESTIME
Cloudflare WAF Session-Timestamp
✓ mitgesendet
✗ verboten (Fetch-Spec)
_LB
Load-Balancer Affinity Cookie
✓ mitgesendet
✗ verboten (Fetch-Spec)
Authorization (Header)
Bearer Token — HERO API Key
✓ mitgesendet
⚠ blockiert (Cloudflare blockt vor HERO)
Testet ob credentials: 'include' hilft (Spoiler: nein — WAF-Cookies vom Server gesetzt,
nicht vom Browser-User gepflegt)
① Direktzugriff Erwartet: CORS-Fehler
② CORS-Proxies testen
Alle fehlgeschlagen
⑤ Eigener Cloudflare Worker — die richtige Lösung
Noch nicht konfiguriert
Trage die URL deines deployte Workers ein (z.B.
https://hero-proxy.DEIN-NAME.workers.dev).
Der Worker-Code liegt in cloudflare-worker/hero-proxy.js.
Mutation erzeugt einen Entwurf in HERO (nicht published) — danach in HERO manuell löschen.
③ Echte Mutation via CORS-Proxy (funktioniert sobald Proxy OK)
⑧ create_document Payload-Diagnose
Noch nicht getestet
Testet create_document schrittweise. Alle Tests erzeugen einen Entwurf
(publish: false) — in HERO danach löschen.
project_match_id im Feld unten eintragen (aus Suche kopieren).
Vorgehen: ① → ② → ③ → ... bis der 500er auftritt — dann weiss man welcher Action-Typ das Problem verursacht.
⑥ Such-Diagnose — welche Query-Namen & Felder existieren?
Noch nicht getestet
Testet direkt über den CF Worker welche Queries die HERO-API anbietet und was
project_matches / contacts wirklich zurückgibt.
Worker-URL muss oben eingetragen sein.
⑨ Custom Fields — Schema entdecken + Werte lesen/schreiben
Noch nicht getestet
✅ Verifizierte Feldnamen (aus Postman Introspection, 2025-06): CustomFields_Schema: schemaId, relates, properties ·
CustomFields_Record: schema, relationId, properties
Query: custom_field_records(relation: Enum!, relationIds: [Int]) ·
Mutation: set_custom_field_value(schemaId, relationId, properties) Noch unbekannt: Felder von CustomFields_Property und
CustomFields_PropertyValue — werden via ②/③ ermittelt. Workflow:
① Alle CF-Typen · ② Property Felder · ③ PropertyValue + Input Felder ·
④ Schemas laden · ⑤ Werte lesen · ⑥ Input-Typ Details · ⑦ Wert setzen
→ Klicke einen Button um zu starten…
✅ Was tun? — CORS-Lösungswege
Weg 1 — HERO-Team anfragen (dauerhaft, ohne eigene Infrastruktur):
HERO / Cloudflare so konfigurieren dass die Genspark-Domain (und localhost
für Dev) in der WAF allowlisted ist und CORS-Header mitgeschickt werden.
→ Email-Template unten kopieren.
Weg 2 — Eigener Cloudflare Worker (self-hosted, kostenlos, 5 Min. Setup):
Code in cloudflare-worker/hero-proxy.js liegt bereit.
Im Cloudflare Dashboard als Worker deployen → URL oben in Feld ⑤ eintragen → testen.
Weg 3 — cors-anywhere selbst hosten (Heroku Free Tier): git clone https://github.com/Rob--W/cors-anywhere → Heroku deploy →
URL in settings.html als Proxy-URL eintragen.
📧 Email-Template an HERO-Team:
An: support@hero-software.de
Betreff: CORS / Cloudflare WAF Freigabe für API-Integration
Guten Tag,
wir nutzen die HERO External API (GraphQL, v7) zur Anbindung unseres
Sky-Frame Kalkulationstools. Der API-Key ist aktiv und in Postman funktioniert
die Verbindung einwandfrei.
Beim Zugriff aus dem Browser (JavaScript fetch) schlägt jeder Request fehl,
weil Cloudflare WAF die Anfragen blockiert bevor sie die HERO-API erreichen.
Der Browser erhält dabei keine CORS-Header — was zu einem NetworkError führt.
Konkret benötigen wir folgende Freigaben:
1. WAF-Rule: Requests mit gültigem Bearer-Token (Authorization: Bearer ac_...)
durchlassen ohne Challenge (Bot-Management Bypass für API-Routen).
2. CORS-Header auf /api/external/v7/graphql:
Access-Control-Allow-Origin: * (oder spezifisch unsere Domain)
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Authorization, Content-Type, Accept
Alternativ: IP/Domain-Whitelist für unsere Hosting-Domain.
Vielen Dank und freundliche Grüsse,
Sky-Frame AG — Digitales Team