API Reference
La API de Hrvst te permite enviar trabajos de scraping, consultar su estado y descargar resultados de forma programática. Todos los endpoints devuelven JSON. Base URL: https://hrvst.donostia.ai
Quick Start
Extrae datos en 4 pasos:
Ve a /api-keys y genera una nueva clave. Tendrá el formato hv_ + 64 caracteres hex.
curl -X POST https://hrvst.donostia.ai/api/jobs \
-H "Authorization: Bearer hv_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"scraperSlug": "search",
"name": "Cafes Barcelona",
"params": {
"query": "cafes in Barcelona",
"limit": 20
}
}'Consulta el estado cada pocos segundos hasta que status sea COMPLETED, FAILED o CANCELLED.
# Repeat until status != PENDING and != PROCESSING curl https://hrvst.donostia.ai/api/jobs/JOB_ID \ -H "Authorization: Bearer hv_your_api_key"
Los resultados están en el campo results del objeto job. También puedes descargarlos como CSV o JSON:
# CSV curl "https://hrvst.donostia.ai/jobs/JOB_ID/export?format=csv" \ -H "Authorization: Bearer hv_your_api_key" -o results.csv # JSON curl "https://hrvst.donostia.ai/jobs/JOB_ID/export?format=json" \ -H "Authorization: Bearer hv_your_api_key" -o results.json
Authentication
Todos los endpoints requieren una API key válida. Genera una desde tu cuenta.
Envía la clave en el header Authorization:
Authorization: Bearer hv_your_api_key_here
Las API keys tienen el formato hv_ + 64 caracteres hex. Requieren verificación de email para funcionar.
Créditos
Hrvst es de pago por uso. Compras créditos y los gastas en trabajos. Los créditos no caducan.
You can also use template slugs (e.g. google-maps, amazon-products) which map to these actions with pre-configured params. See Templates.
Las cuentas nuevas reciben 100 créditos gratis. Los primeros 2 desbloqueos de hrvst-agent son siempre gratuitos.
Los créditos se descuentan cuando el trabajo completa, no al crearlo. Los trabajos fallidos no consumen créditos.
Errores
Todos los errores tienen el mismo formato:
{ "error": "error description" }Rate Limits
Los límites se aplican por usuario autenticado (sesión o API key).
Cuando se supera el límite de trabajos la API devuelve 429 Too Many Requests con el mensaje "Job limit exceeded. Maximum 50 jobs per hour."
POST/api/jobs
Crea y encola un nuevo trabajo de scraping. Responde inmediatamente — consulta el ID del trabajo para ver el progreso.
Campos del body
Respuesta — 201 Created
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"userId": "user-id",
"scraperSlug": "search",
"status": "PENDING",
"params": { "query": "cafes in Barcelona", "limit": 20 },
"results": null,
"creditsUsed": 0,
"error": null,
"createdAt": "2026-03-14T10:30:45Z",
"updatedAt": "2026-03-14T10:30:45Z",
"completedAt": null,
"unlockCost": 0,
"unlockedAt": null,
"freeUnlock": false
}GET/api/jobs
Lista todos los trabajos del usuario autenticado, del más reciente al más antiguo.
Query params
{
"jobs": [ ...job objects... ],
"total": 42,
"page": 1,
"limit": 20,
"total_returned": 20
}GET/api/jobs/:id
Recupera un trabajo concreto. Usa este endpoint para hacer polling hasta que finalice.
curl https://hrvst.donostia.ai/api/jobs/550e8400-... \ -H "Authorization: Bearer hv_your_api_key"
Transición de estado: PENDING → PROCESSING → COMPLETED | FAILED | CANCELLED
Para hrvst-agent: el campo resultsPreview contiene 5 registros enmascarados. Llama a POST /api/jobs/:id/unlock para obtener resultsFull.
DELETE/api/jobs/:id
Cancela y elimina un trabajo. Los trabajos en curso se marcan como cancelados antes de eliminarse.
{ "status": "deleted" }GET/jobs/:id/export
Descarga los resultados de un trabajo completado como CSV o JSON. Solo funciona con trabajos en estado COMPLETED.
Query params
# Download as CSV curl "https://hrvst.donostia.ai/jobs/JOB_ID/export?format=csv" \ -H "Authorization: Bearer hv_your_api_key" \ -o results.csv # Download as JSON curl "https://hrvst.donostia.ai/jobs/JOB_ID/export?format=json" \ -H "Authorization: Bearer hv_your_api_key" \ -o results.json
POST/api/jobs/:id/unlock
Desbloquea los resultados completos de un trabajo hrvst-agent. Los primeros 2 desbloqueos por cuenta son gratuitos. Solo funciona con trabajos COMPLETED.
curl -X POST https://hrvst.donostia.ai/api/jobs/JOB_ID/unlock \
-H "Authorization: Bearer hv_your_api_key"
# Response
{ "resultsFullURL": "/jobs/JOB_ID/export?format=json" }Después de desbloquear, el campo resultsFull en GET /api/jobs/:id contiene los datos completos sin enmascarar.
GET/api/scrapers
Devuelve todos los scrapers disponibles con sus slugs, créditos y campos de salida.
curl https://hrvst.donostia.ai/api/scrapers \ -H "Authorization: Bearer hv_your_api_key"
GET/api/user/me
Devuelve el perfil y saldo de créditos del usuario autenticado.
{
"id": "user-id",
"email": "you@email.com",
"name": "Your Name",
"credits": 500,
"freeSearchesUsed": 1
}Actions
Each action maps to a specific data extraction method. Use the action slug as scraperSlug when creating jobs.
search 1 cr / resultSearch the web and return organic results with titles, URLs, and descriptions.
Params
Output
position, title, url, displayUrl, description
scrape 1 cr / flatScrape a single URL with optional AI-powered extraction. Supports custom prompts and JSON schemas for structured output.
Params
crawl 1 cr / page asyncCrawl an entire website. Follows internal links and extracts content from every page. Returns markdown, metadata, and URLs.
Params
Output
url, markdown, metadata (per page)
map 1 cr / flatDiscover all URLs on a website. Returns a sitemap-like list of links found on the domain.
Params
Output
url (per discovered link)
extract 3 cr / URL asyncExtract structured data from one or more URLs using AI-powered schemas. Supports validation and web search enrichment.
Params
agent coste variable al desbloquear asyncAgente IA que acepta un prompt en lenguaje natural y determina qué extraer y cómo. Los resultados están enmascarados hasta desbloquear. Los primeros 2 desbloqueos son gratuitos.
Ejemplo completo con hrvst-agent
# 1. Create agent job
curl -X POST https://hrvst.donostia.ai/api/jobs \
-H "Authorization: Bearer hv_..." \
-H "Content-Type: application/json" \
-d '{"scraperSlug":"agent","name":"Hotels Berlin","params":{"prompt":"Top 30 hotels in Berlin with price, email and website"}}'
# 2. Wait for completion (polling)
curl https://hrvst.donostia.ai/api/jobs/JOB_ID \
-H "Authorization: Bearer hv_..."
# → "status": "COMPLETED", "resultsPreview": [5 masked records]
# 3. Unlock full results
curl -X POST https://hrvst.donostia.ai/api/jobs/JOB_ID/unlock \
-H "Authorization: Bearer hv_..."
# 4. Download results
curl "https://hrvst.donostia.ai/jobs/JOB_ID/export?format=csv" \
-H "Authorization: Bearer hv_..." -o hotels_berlin.csvTemplates
Templates are pre-configured actions with default prompts, schemas, and parameters. Use a template slug as scraperSlug for common use cases without configuring params manually.
Template slugs resolve to their underlying action with pre-filled defaults. Any additional params you send override the template defaults.
# Using a template - same as using the "search" action with preconfigured params
curl -X POST https://hrvst.donostia.ai/api/jobs \
-H "Authorization: Bearer hv_..." \
-H "Content-Type: application/json" \
-d '{"scraperSlug": "amazon-products", "name": "Headphones", "params": {"query": "wireless headphones"}}'