Darstellung
Quickstart: In zehn Minuten zum ersten API-Aufruf
Die Work7 Public API v1 gibt Drittsystemen Zugriff auf Projekte, Kontakte, Rapporte, Angebote, Rechnungen, Zeiten, Termine und Anfragen eines Betriebs. Sie nutzt dieselbe Geschäftslogik wie die Web-App und der WhatsApp-Assistent, Mandantentrennung und Berechtigungen gelten serverseitig.
Basis-URL: https://app.work7.net/api/v1 (Test-System: https://app.test.work7.net/api/v1)
Voraussetzung
Das Modul Public API & Webhooks muss für den Betrieb freigeschaltet sein (Einstellungen › Module). Ist es das nicht, antworten alle Endpunkte mit 403 module_disabled.
1. API-Schlüssel anlegen
- Als Administrator in der Work7-App anmelden.
- Einstellungen › Integrationen › API & Webhooks öffnen.
- Unter API-Schlüssel einen Namen vergeben (zum Beispiel „Buchhaltung“) und die Scopes anhaken, die das Drittsystem braucht. Für diesen Quickstart:
core:readundanfragen:write. - Schlüssel erstellen klicken. Der Schlüssel wird genau einmal angezeigt. Kopieren und sicher ablegen.
Der Schlüssel hat die Form w7_<umgebung>_<prefix>_<secret> — w7_live_… in der Produktivumgebung, w7_test_… in einer Testumgebung. Work7 speichert nur einen Hash, verlorene Schlüssel lassen sich nicht wiederherstellen, nur widerrufen und neu anlegen.
2. Erster Aufruf: Wer bin ich?
GET /me liefert Betrieb, Scopes des Schlüssels und die freigeschalteten Bereiche. Damit prüfst du Zugang und Konfiguration in einem Schritt.
bash
curl https://app.work7.net/api/v1/me \
-H "Authorization: Bearer w7_live_abc12345_..."js
const res = await fetch('https://app.work7.net/api/v1/me', {
headers: { Authorization: `Bearer ${process.env.WORK7_API_KEY}` },
})
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`)
const { data } = await res.json()
console.log(data.companyId, data.key.scopes, data.active.map((m) => m.label))php
<?php
$ch = curl_init('https://app.work7.net/api/v1/me');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WORK7_API_KEY')],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("HTTP $status: $body");
}
$data = json_decode($body, true)['data'];
echo $data['companyId'], PHP_EOL;Antwort:
json
{
"data": {
"companyId": "muster-malerei",
"key": { "id": 3, "name": "Buchhaltung", "prefix": "abc12345", "scopes": ["core:read", "anfragen:write"] },
"plan": "komplett",
"modules": ["core", "anfragen", "rapport", "..."],
"active": [{ "id": "anfragen", "label": "Anfragen" }, { "id": "rapport", "label": "Rapport" }],
"inactive": [{ "id": "lager", "label": "Lager" }]
}
}3. Daten lesen: Projekte auflisten
Listen sind paginiert über limit und offset, durchsuchbar über q.
bash
curl "https://app.work7.net/api/v1/projects?limit=20&status=active" \
-H "Authorization: Bearer $WORK7_API_KEY"js
const res = await fetch('https://app.work7.net/api/v1/projects?limit=20&status=active', {
headers: { Authorization: `Bearer ${process.env.WORK7_API_KEY}` },
})
const { data, pagination } = await res.json()
for (const project of data) console.log(project.id, project.project_number, project.name)
if (pagination.hasMore) {
// nächste Seite: offset = pagination.offset + pagination.limit
}php
<?php
$url = 'https://app.work7.net/api/v1/projects?' . http_build_query(['limit' => 20, 'status' => 'active']);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WORK7_API_KEY')],
]);
$json = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($json['data'] as $project) {
echo $project['project_number'], ' ', $project['name'], PHP_EOL;
}4. Daten schreiben: Anfrage anlegen
Typischer Anwendungsfall: Das Kontaktformular der eigenen Website legt direkt eine Anfrage in Work7 an. Der Betrieb sieht sie im Posteingang der Anfragen-Pipeline und, wenn eingerichtet, als WhatsApp-Benachrichtigung.
bash
curl -X POST https://app.work7.net/api/v1/anfragen \
-H "Authorization: Bearer $WORK7_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Fassade streichen, EFH Dornbirn",
"description": "Ca. 220 m² Putzfassade, Termin ab Mai.",
"source": "website",
"contact_name": "Maria Huber",
"contact_email": "maria.huber@example.at",
"contact_phone": "+43 664 1234567",
"objekt_street": "Marktstraße",
"objekt_house_number": "12",
"objekt_postal_code": "6850",
"objekt_city": "Dornbirn"
}'js
const res = await fetch('https://app.work7.net/api/v1/anfragen', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.WORK7_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'Fassade streichen, EFH Dornbirn',
description: 'Ca. 220 m² Putzfassade, Termin ab Mai.',
source: 'website',
contact_name: 'Maria Huber',
contact_email: 'maria.huber@example.at',
objekt_postal_code: '6850',
objekt_city: 'Dornbirn',
}),
})
if (res.status !== 201) throw new Error(await res.text())
const { data } = await res.json()
console.log('Anfrage angelegt:', data.anfrage_number ?? data.id)php
<?php
$payload = [
'title' => 'Fassade streichen, EFH Dornbirn',
'description' => 'Ca. 220 m² Putzfassade, Termin ab Mai.',
'source' => 'website',
'contact_name' => 'Maria Huber',
'contact_email' => 'maria.huber@example.at',
'objekt_postal_code' => '6850',
'objekt_city' => 'Dornbirn',
];
$ch = curl_init('https://app.work7.net/api/v1/anfragen');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('WORK7_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);
if ($status !== 201) {
throw new RuntimeException("Anfrage fehlgeschlagen: HTTP $status $body");
}5. Auf Ereignisse reagieren: Webhook einrichten
Statt zu pollen, lässt du dich benachrichtigen, etwa wenn ein Rapport abgeschlossen oder eine Rechnung bezahlt wurde.
- Einstellungen › Integrationen › API & Webhooks, unter Ausgehende Webhooks Name,
https-URL und Events wählen (zum Beispielrapport.completed,invoice.*). - Webhook anlegen. Das Secret wird einmalig angezeigt.
- Auf deinem Server die Signatur prüfen, bevor du das Ereignis verarbeitest. Code für JavaScript und PHP steht unter Webhooks.
Wie es weitergeht
- Authentifizierung und Scopes: welcher Scope welchen Bereich öffnet, was bei abgeschalteten Modulen passiert.
- API-Referenz: alle Endpunkte mit Parametern, Feldern und Beispielen, interaktiv zum Ausprobieren.
- Webhooks: Events, Payload, Signaturprüfung, Wiederholungen.
- Datenablage: Datei-Uploads von Drittsystemen empfangen (z. B. von ERP-Software).
- Fehler und Limits: Fehlerformat, Statuscodes, Rate-Limit.