Projekte-API
Projekte erstellen, listen, updaten, Articles und Keywords pro Projekt verwalten.
In Rankion ist ein Projekt der zentrale Container — pro Projekt eine Domain, ein Team-Owner, und alle Sub-Resourcen (Artikel, Keywords, Internal-Link-Maps, Storylines) hängen daran. Daneben gibt es Tracking-Projekte als eigene Ressource für AI-Visibility-Monitoring (siehe unten).
CRUD
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| GET | /v1/projects |
Liste aller Team-Projekte (paginiert) | — |
| POST | /v1/projects |
Neues Projekt anlegen | — |
| GET | /v1/projects/{id} |
Projekt-Detail | — |
| PUT | /v1/projects/{id} |
Settings updaten | — |
| DELETE | /v1/projects/{id} |
Projekt löschen (soft) | — |
# Liste
curl -H "Authorization: Bearer $TOKEN" "$BASE/projects"
# Anlegen
curl -X POST "$BASE/projects" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Mein Blog","domain":"meinblog.de","language":"de","country":"DE"}'
Response (gekürzt):
{
"data": {
"id": 12,
"name": "Mein Blog",
"domain": "meinblog.de",
"language": "de",
"country": "DE",
"team_id": 7,
"created_at": "2026-05-01T08:30:00Z"
}
}
Projekt-bezogene Subressourcen
Articles
Alle artikel-bezogenen CRUD- und Generierungs-Endpoints hängen am Projekt:
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| GET | /v1/projects/{project}/articles |
paginiert (20/Seite) | — |
| POST | /v1/projects/{project}/articles |
Body: {title, slug?, content?, status?} |
— |
Volle Artikel-API → Artikel-API.
Keywords
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| GET | /v1/projects/{project}/keywords |
Projekt-Keywords | — |
| POST | /v1/projects/{project}/keywords |
Keyword anlegen | — |
| DELETE | /v1/keywords/{id} |
Keyword löschen | — |
| POST | /v1/keywords/research |
Keyword-Research-Job | 5 |
| POST | /v1/keywords/{id}/expand |
A-Z Expansion (async) | 10 |
| GET | /v1/keywords/{id}/expansions |
Ergebnisse einer Expansion | — |
Internal Linking
| Method | Endpoint | Beschreibung | Credits |
|---|---|---|---|
| POST | /v1/projects/{project}/internal-links/analyze |
Internal-Link-Map für das Projekt rechnen (async) | 5 |
| GET | /v1/articles/{id}/link-suggestions |
Vorschläge für einen Artikel | — |
| PUT | /v1/link-suggestions/{id} |
Vorschlag annehmen/ablehnen | — |
Weitere Projekt-Subressourcen
| Endpoint-Familie | Top-Endpoint |
|---|---|
| Storylines | GET/POST /v1/projects/{project}/storylines |
| Style-Profiles | GET/POST /v1/projects/{project}/style-profiles |
| Knowledge-Base | GET/POST /v1/projects/{project}/knowledge-base |
| Link-Lists | GET/POST /v1/projects/{project}/link-lists |
| Orphan-Scans | POST /v1/projects/{project}/orphan-scans/discover |
| Calendar | GET/POST /v1/projects/{project}/calendar |
| Project-Images | GET /v1/projects/{project}/images (legacy — primär ist team-weite /v1/images) |
Tracking-Projekte (eigene Ressource!)
Tracking-Projekte sind getrennt von normalen Projekten. Sie sind die Datenbasis für AI-Visibility Tracking — pro Tracking-Projekt eine Brand, ein Set Keywords, ein Set Plattformen.
Endpoint-Namespace: /v1/tracking-projects/...
Wizard-Flow
Das Web-UI hat einen 5-Schritt-Wizard, den du 1:1 über die API nachstellen kannst:
| Step | Endpoint | Beschreibung |
|---|---|---|
| 1+2 | POST /v1/tracking-projects/analyze |
Domain/Keyword analysieren, dispatcht AnalyzeDomainJob. Body: {mode:"domain"|"keyword", domain?, keyword?, name?, language?, country?} → 202 + project_id |
| 3+4 | GET /v1/tracking-projects/{id}/analysis-status |
Polling: liefert {analysis_status, suggested_keywords, suggested_competitors, suggested_prompts, suggested_personas, classification} |
| 5 | POST /v1/tracking-projects/{id}/activate |
Atomic: erstellt Keywords/Prompts/Competitors + setzt status=active |
# Step 1+2: Analyse starten
RESP=$(curl -s -X POST "$BASE/tracking-projects/analyze" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"mode":"domain","domain":"example.com","language":"de","country":"DE"}')
PID=$(echo $RESP | jq -r .project_id)
# Step 3+4: Pollen bis completed
while [ "$(curl -s "$BASE/tracking-projects/$PID/analysis-status" \
-H "Authorization: Bearer $TOKEN" | jq -r .analysis_status)" != "completed" ]; do
sleep 3
done
# Step 5: Atomic-Activate
curl -X POST "$BASE/tracking-projects/$PID/activate" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"keywords":["best crm","crm software"],
"competitors":[{"domain":"hubspot.com"}],
"prompts":[{"prompt":"What is the best CRM?","category":"recommendation"}],
"platforms":["chatgpt","perplexity"],
"frequency":"weekly",
"with_search":true,
"reality_check_enabled":true
}'
Laufende Operations
| Method | Endpoint | Beschreibung |
|---|---|---|
| GET | /v1/tracking-projects |
alle Tracking-Projekte des Teams |
| GET | /v1/tracking-projects/{id} |
Detail mit aktuellen KPIs |
| PUT | /v1/tracking-projects/{id} |
Settings updaten (Brand-Aliases, Frequenz, Plattformen, AVI-Toggle) |
| POST | /v1/tracking-projects/{id}/run |
manuellen Tracking-Run dispatchen |
| GET | /v1/tracking-projects/{id}/runs |
Run-Historie |
| GET | /v1/tracking-projects/{id}/scores |
Score-Historie für Charts |
| GET | /v1/tracking-projects/{id}/avi |
aktueller AI-Visibility-Index (Reality-Check) |
| POST | /v1/tracking-projects/{id}/generate-report |
Markdown-Report (10 Credits, 1/30min Limit) |
Komplette Tabelle aller ~30 Tracking-Endpoints in docs/API_REFERENCE.md.
Beispiel-Workflow: Projekt + erster Artikel
# 1) Projekt anlegen
PID=$(curl -s -X POST "$BASE/projects" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"name":"Demo Site","domain":"demo.example","language":"de","country":"DE"}' \
| jq -r .data.id)
# 2) Artikel-Stub anlegen
ART=$(curl -s -X POST "$BASE/projects/$PID/articles" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"title":"Beste AI-Tools 2026","status":"draft"}' \
| jq -r .data.id)
# 3) Artikel-Inhalt generieren (5 Credits, async)
curl -X POST "$BASE/articles/$ART/generate" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"keyword":"AI Tools 2026","article_type":"blog","target_length":1500}'
# 4) Pollen bis fertig
while [ "$(curl -s "$BASE/articles/$ART" \
-H "Authorization: Bearer $TOKEN" | jq -r .data.processing_status)" != "ready" ]; do
sleep 5
done
Detail-Workflows für Artikel: Artikel-API.
Verwandt: Authentifizierung & API-Tokens · Credits & Rate-Limits · AI-Visibility Tracking.