API de captions con jerga real
Genera captions con la jerga de Ecuador, Argentina, Colombia y Perú desde tu propio servidor. Mismo motor y mismo precio que la web: 1 crédito por generación de 3 captions, 1,5 si además pides la traducción al inglés.
Autenticación
Crea una clave en la app, en la pestaña API de tu cuenta (/app). Envíala en cada solicitud con uno de estos encabezados:
Authorization: Bearer psq_...
X-API-Key: psq_...- La clave se muestra una sola vez al crearla: guárdala en un lugar seguro.
- Puedes revocarla en cualquier momento desde la misma pantalla.
- Máximo 5 claves activas por cuenta.
- Límite: 60 solicitudes por minuto por clave.
No expongas tu clave en código del navegador (React, Vue, apps móviles, etc.). Cualquiera podría copiarla y gastar tus créditos. Llama a la API desde tu servidor y guarda la clave en una variable de entorno.
Base URL: https://api.pesquisidor.com/api/v1
Generar captions
Cuerpo JSON:
| Campo | Tipo | Descripción |
|---|---|---|
countryCode | "EC" | "AR" | "CO" | "PE" | Obligatorio. País cuya jerga se usa. |
platform | "tiktok" | "instagram" | "other" | Opcional. Por defecto "other". |
postDescription | string | Obligatorio. De 1 a 500 caracteres: de qué trata tu publicación. |
tone | string | Opcional. Máximo 40 caracteres (p. ej. "divertido"). |
translateTo | "en" | Opcional. "en" devuelve además una traducción natural al inglés de cada caption en translations (+0,5 crédito). Si la traducción no se puede generar, recibes los captions igual, translationFailed: true y se reembolsa el recargo. |
Respuesta 200: tres captions (en el español del país), los términos de jerga usados (con su significado y registro), las traducciones si las pediste, el costo cobrado y tu saldo restante.
{
"id": 1234,
"captions": ["…", "…", "…"],
"slang": [
{ "term": "…", "meaning": "…", "register": "casual" }
],
"translations": ["…", "…", "…"],
"cost": 1.5,
"creditsRemaining": 41.5
}Consultar tu saldo
{
"credits": {
"balance": 41.5,
"costPerGeneration": 1,
"translationSurcharge": 0.5
}
}Países disponibles
[
{ "code": "EC", "name": "Ecuador", "language": "es" },
…
]Errores
Los errores responden JSON con un campo error:
| HTTP | error | Qué significa |
|---|---|---|
| 400 | validation_failed | El cuerpo no es válido. Incluye details con los campos que fallaron. |
| 401 | invalid_api_key | Falta la clave, es incorrecta o fue revocada. |
| 402 | insufficient_credits | No tienes créditos suficientes. Incluye balance y cost. |
| 429 | too_many_requests | Superaste 60 solicitudes por minuto con esa clave. |
| 502 | generation_failed | Falló la generación. Los créditos se reembolsan automáticamente. |
{ "error": "insufficient_credits", "balance": 0.5, "cost": 1 }Ejemplos
curl
curl -X POST https://api.pesquisidor.com/api/v1/generate \
-H "Authorization: Bearer $PESQUISIDOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"countryCode": "EC",
"platform": "instagram",
"postDescription": "Foto del atardecer en la playa con mis amigos",
"tone": "divertido",
"translateTo": "en"
}'JavaScript (fetch)
// Node.js 18+ (servidor). Nunca pongas la clave en código del navegador.
const res = await fetch("https://api.pesquisidor.com/api/v1/generate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PESQUISIDOR_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
countryCode: "AR",
platform: "tiktok",
postDescription: "Video probando el café nuevo del barrio",
}),
});
const data = await res.json();
if (!res.ok) throw new Error(`${res.status} ${data.error}`);
console.log(data.captions, data.creditsRemaining);Python (requests)
import os
import requests
res = requests.post(
"https://api.pesquisidor.com/api/v1/generate",
headers={"X-API-Key": os.environ["PESQUISIDOR_API_KEY"]},
json={
"countryCode": "CO",
"platform": "other",
"postDescription": "Lanzamiento de mi nueva colección de camisetas",
"translateTo": "en",
},
timeout=30,
)
data = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {data.get('error')}")
print(data["captions"], data.get("translations"), data["creditsRemaining"])Precios
Cada generación cuesta 1 crédito, igual que en la web, y 1,5 con translateTo. Los créditos son los mismos de tu cuenta: puedes ver tu saldo en la app o con GET /v1/me. Si una generación falla (502), los créditos se reembolsan automáticamente.