API de Proyectos
Crea, lista y actualiza proyectos; gestiona artículos y keywords por proyecto.
En Rankion un proyecto es el contenedor central — un dominio por proyecto, un team owner y todos los sub-recursos (artículos, keywords, mapas de internal-link, storylines) cuelgan de él. Aparte existen los Tracking Projects como recurso propio para la monitorización de AI Visibility (ver más abajo).
CRUD
| Method | Endpoint | Descripción | Créditos |
|---|---|---|---|
| GET | /v1/projects |
Lista de todos los proyectos del team (paginada) | — |
| POST | /v1/projects |
Crear nuevo proyecto | — |
| GET | /v1/projects/{id} |
Detalle del proyecto | — |
| PUT | /v1/projects/{id} |
Actualizar settings | — |
| DELETE | /v1/projects/{id} |
Eliminar proyecto (soft) | — |
# Lista
curl -H "Authorization: Bearer $TOKEN" "$BASE/projects"
# Crear
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 (recortada):
{
"data": {
"id": 12,
"name": "Mein Blog",
"domain": "meinblog.de",
"language": "de",
"country": "DE",
"team_id": 7,
"created_at": "2026-05-01T08:30:00Z"
}
}
Sub-recursos por proyecto
Articles
Todos los endpoints CRUD y de generación de artículos cuelgan del proyecto:
| Method | Endpoint | Descripción | Créditos |
|---|---|---|---|
| GET | /v1/projects/{project}/articles |
paginado (20/página) | — |
| POST | /v1/projects/{project}/articles |
Body: {title, slug?, content?, status?} |
— |
API completa de artículos → API de Artículos.
Keywords
| Method | Endpoint | Descripción | Créditos |
|---|---|---|---|
| GET | /v1/projects/{project}/keywords |
Keywords del proyecto | — |
| POST | /v1/projects/{project}/keywords |
Crear keyword | — |
| DELETE | /v1/keywords/{id} |
Eliminar keyword | — |
| POST | /v1/keywords/research |
Job de keyword research | 5 |
| POST | /v1/keywords/{id}/expand |
Expansión A-Z (async) | 10 |
| GET | /v1/keywords/{id}/expansions |
Resultados de una expansión | — |
Internal Linking
| Method | Endpoint | Descripción | Créditos |
|---|---|---|---|
| POST | /v1/projects/{project}/internal-links/analyze |
Calcular el mapa de internal links del proyecto (async) | 5 |
| GET | /v1/articles/{id}/link-suggestions |
Sugerencias para un artículo | — |
| PUT | /v1/link-suggestions/{id} |
Aceptar/rechazar sugerencia | — |
Otros sub-recursos del proyecto
| Familia de endpoints | 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 — el primario es /v1/images a nivel de team) |
Tracking Projects (¡recurso propio!)
Los Tracking Projects están separados de los proyectos normales. Son la base de datos para AI Visibility Tracking — por cada Tracking Project una marca, un set de keywords y un set de plataformas.
Namespace de endpoints: /v1/tracking-projects/...
Flujo del asistente
La interfaz web tiene un asistente de 5 pasos que puedes replicar 1:1 por API:
| Paso | Endpoint | Descripción |
|---|---|---|
| 1+2 | POST /v1/tracking-projects/analyze |
Analizar dominio/keyword, dispatcha AnalyzeDomainJob. Body: {mode:"domain"|"keyword", domain?, keyword?, name?, language?, country?} → 202 + project_id |
| 3+4 | GET /v1/tracking-projects/{id}/analysis-status |
Polling: devuelve {analysis_status, suggested_keywords, suggested_competitors, suggested_prompts, suggested_personas, classification} |
| 5 | POST /v1/tracking-projects/{id}/activate |
Atómico: crea keywords/prompts/competitors + pone status=active |
# Paso 1+2: arrancar el análisis
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)
# Paso 3+4: polling hasta completed
while [ "$(curl -s "$BASE/tracking-projects/$PID/analysis-status" \
-H "Authorization: Bearer $TOKEN" | jq -r .analysis_status)" != "completed" ]; do
sleep 3
done
# Paso 5: activación atómica
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
}'
Operaciones runtime
| Method | Endpoint | Descripción |
|---|---|---|
| GET | /v1/tracking-projects |
Todos los Tracking Projects del team |
| GET | /v1/tracking-projects/{id} |
Detalle con KPIs actuales |
| PUT | /v1/tracking-projects/{id} |
Actualizar settings (brand aliases, frecuencia, plataformas, toggle AVI) |
| POST | /v1/tracking-projects/{id}/run |
Dispatchar un tracking run manual |
| GET | /v1/tracking-projects/{id}/runs |
Historial de runs |
| GET | /v1/tracking-projects/{id}/scores |
Histórico de scores para gráficas |
| GET | /v1/tracking-projects/{id}/avi |
AI Visibility Index actual (Reality Check) |
| POST | /v1/tracking-projects/{id}/generate-report |
Reporte en Markdown (10 créditos, límite 1/30min) |
Tabla completa de los ~30 endpoints de tracking en docs/API_REFERENCE.md.
Workflow de ejemplo: proyecto + primer artículo
# 1) Crear proyecto
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) Crear stub de artículo
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) Generar el contenido del artículo (5 créditos, 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) Polling hasta listo
while [ "$(curl -s "$BASE/articles/$ART" \
-H "Authorization: Bearer $TOKEN" | jq -r .data.processing_status)" != "ready" ]; do
sleep 5
done
Workflows detallados de artículos: API de Artículos.
Relacionado: Autenticación y tokens de API · Créditos y rate limits · AI Visibility Tracking.