API: inteligencia artificial
Usar la IA de AtiendeFácil desde tu sistema (leer documentos, redactar, corregir plantillas) y pagarla con el saldo de tokens del negocio.
Revisado el 31 de octubre de 2026
Para qué sirve
Tu sistema puede usar la misma inteligencia artificial que atiende el WhatsApp del negocio, sin tener su propia cuenta con un proveedor: leer una foto o un PDF, redactar, resumir, corregir una plantilla de impresión… Lo que gaste se descuenta del saldo de tokens del negocio dueño de la clave, igual que las respuestas del bot.
Las rutas y los cuerpos son los de la API de Gemini (generateContent). Si tu código ya habla con Gemini, solo cambias la dirección y la clave.
El permiso de la clave
La clave necesita el permiso Usar la IA, que viene apagado. Lo enciende el dueño en Ajustes → Integraciones, en la clave, desde el panel o la app (ver Integraciones). Solo lo pueden tener las claves de acceso completo. Sin él, todas las rutas de /ai responden 403 ai_not_allowed, también las consultas: así probar la clave ya avisa.
Modelos
{
"models": [
{
"name": "models/gemini-2.5-flash",
"displayName": "gemini-2.5-flash (normal)",
"outputTokenLimit": 65536,
"supportedGenerationMethods": ["generateContent"]
},
{
"name": "models/gemini-2.5-flash-lite",
"displayName": "gemini-2.5-flash-lite (ligero, más barato)",
"outputTokenLimit": 65536,
"supportedGenerationMethods": ["generateContent"]
}
]
}Hay dos: el normal, el mismo con que atiende el bot (lee fotos y PDF y usa herramientas), y el ligero, más rápido y que gasta menos, para tareas sencillas. GET /ai/models/{modelo} devuelve la ficha de uno; con un modelo que no está en la lista, 404.
Pedir una respuesta
curl https://api.atiendefacil.com/api/v1/ai/models/gemini-2.5-flash:generateContent \
-H "Authorization: Bearer af_live_..." \
-H "Content-Type: application/json" \
-d '{
"systemInstruction": { "parts": [{ "text": "Responde en español, en una frase." }] },
"contents": [{ "role": "user", "parts": [{ "text": "Resume esta factura: ..." }] }],
"generationConfig": { "temperature": 0.2 }
}'{
"candidates": [
{
"content": { "role": "model", "parts": [{ "text": "Factura de 3 productos por 45,00 USD." }] },
"finishReason": "STOP"
}
],
"usageMetadata": { "promptTokenCount": 41, "candidatesTokenCount": 12, "thoughtsTokenCount": 0 }
}| Campo | Qué es |
|---|---|
contents | Obligatorio. Los turnos de la conversación, con texto, fotos o PDF en base64 (inline_data), y las respuestas de tus funciones. |
systemInstruction | Las instrucciones. |
tools | Funciones que la IA puede pedirte que ejecutes (functionDeclarations). |
toolConfig | Cómo usa esas funciones. |
generationConfig | Temperatura, respuesta en JSON con esquema (responseMimeType, responseSchema), razonamiento (thinkingConfig) y maxOutputTokens, que se acota a 65.536. |
Cualquier otro campo se ignora. La respuesta es la de Gemini, tal cual. No se ofrece generar imágenes ni audio, subir archivos ni cachés.
El cuerpo admite hasta 30 MB. Límite: 30 peticiones por minuto y por clave.
Cuánto se cobra
Se cobra según lo que la IA reporta en usageMetadata:
- Lo que lee (
promptTokenCount): un token de tu saldo por cada token. - Lo que escribe y razona (
candidatesTokenCountythoughtsTokenCount): dos tokens de tu saldo por cada token, porque escribir le cuesta a la IA bastante más que leer.
Ejemplo: leer una plantilla de 10.000 tokens y devolverla corregida (10.000 más 2.000 de razonamiento) descuenta 10.000 + 24.000 = 34.000 tokens. Para gastar menos, usa el modelo ligero, pide respuestas cortas o baja el razonamiento con thinkingConfig.thinkingBudget.
En el historial de consumo del panel y de la app sale como IA usada desde la API · nombre de la clave. Una petición que la IA rechaza por mal formada no cobra nada.
Errores propios
| Código | HTTP | Cuándo |
|---|---|---|
ai_not_allowed | 403 | La clave no tiene el permiso Usar la IA. |
no_credit | 402 | El negocio se quedó sin saldo. Se recarga desde el panel o la app. |
invalid_body | 400 | Falta contents o la IA no aceptó la petición; el mensaje dice por qué. |
not_found | 404 | Ese modelo no se ofrece, o la ruta no termina en :generateContent. |
rate_limited | 429 | La IA está saturada. Reintenta en unos segundos. |
ai_error | 502 / 504 | La IA no respondió o tardó demasiado (más de 8 minutos). Reintenta. |
Preguntas frecuentes
¿Puedo usar el SDK de Gemini?
Solo si deja cambiar la dirección base y mandar la clave como Authorization: Bearer. Lo más sencillo es un fetch a la ruta de arriba.
¿Lo que mando lo ve el bot o el negocio?
No. No se guarda ni entra en ninguna conversación; solo queda la línea del consumo en el historial.
