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

POST/v1/generate

Cuerpo JSON:

CampoTipoDescripción
countryCode"EC" | "AR" | "CO" | "PE"Obligatorio. País cuya jerga se usa.
platform"tiktok" | "instagram" | "other"Opcional. Por defecto "other".
postDescriptionstringObligatorio. De 1 a 500 caracteres: de qué trata tu publicación.
tonestringOpcional. 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

GET/v1/me
{
  "credits": {
    "balance": 41.5,
    "costPerGeneration": 1,
    "translationSurcharge": 0.5
  }
}

Países disponibles

GET/v1/countries
[
  { "code": "EC", "name": "Ecuador", "language": "es" },
  …
]

Errores

Los errores responden JSON con un campo error:

HTTPerrorQué significa
400validation_failedEl cuerpo no es válido. Incluye details con los campos que fallaron.
401invalid_api_keyFalta la clave, es incorrecta o fue revocada.
402insufficient_creditsNo tienes créditos suficientes. Incluye balance y cost.
429too_many_requestsSuperaste 60 solicitudes por minuto con esa clave.
502generation_failedFalló 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.