01Lo que necesitas
| Dato | Valor |
|---|---|
| URL base | https://ai.test.talo.systems (producción)https://ai.test.talo.systems (pruebas) |
| API key | La recibes de TALO por un canal seguro. Empieza por talo_live_ (producción) o talo_test_ (pruebas). |
| Formato | JSON (Content-Type: application/json), UTF-8 |
- Úsala solo desde tu servidor. Nunca la pongas en una web, una app móvil, un repositorio ni en logs.
- Si crees que se filtró, avísanos: la revocamos de inmediato y te entregamos una nueva.
- TALO no puede recuperar una llave perdida, porque solo guarda una huella cifrada de ella.
02Autenticación
Envía tu API key en una de estas cabeceras:
Authorization: Bearer talo_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-API-Key: talo_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXUna llave inválida, vencida o revocada recibe 401 unauthenticated.
03Primera llamada
curl -sS https://ai.test.talo.systems/v1/generate \
-H "Authorization: Bearer $TALO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"function": "text.standard",
"operation": "soporte.resumen",
"input": "Resume en una frase: el cliente reporta que la app se cierra al pagar."
}'Respuesta:
{
"request_id": "req_01JC8Z4R6M2V8K3N5P7Q9S1T3W",
"function": "text.standard",
"provider": "anthropic",
"resolved_model": "anthropic/claude-haiku-5-5",
"output": [{ "type": "text", "text": "La app se cierra durante el proceso de pago." }],
"finish_reason": "stop",
"usage": { "input_tokens": 31, "output_tokens": 12, "source": "provider" },
"cost": { "amount_micros": 10, "currency": "USD", "billing_status": "confirmed", "price_version": "anthropic-2026-10-06" },
"duration_ms": 842,
"warnings": []
}04Ejemplos por lenguaje
La misma llamada de la sección anterior desde tu backend. Guarda la URL base y la API key en variables de entorno.
PHP (Laravel)
use Illuminate\Support\Facades\Http;
$res = Http::withToken(env('TALO_API_KEY'))
->timeout(120)
->post(env('TALO_AI_URL') . '/v1/generate', [
'function' => 'text.standard',
'operation' => 'crm.resumen_llamada',
'input' => $transcripcion,
]);
if ($res->failed()) {
$error = $res->json('error'); // code, message, request_id, retryable
throw new RuntimeException("TALO AI {$error['code']}: {$error['message']} ({$error['request_id']})");
}
$texto = collect($res->json('output'))->where('type', 'text')->pluck('text')->implode('');Python
import os
import requests
res = requests.post(
f"{os.environ['TALO_AI_URL']}/v1/generate",
headers={"Authorization": f"Bearer {os.environ['TALO_API_KEY']}"},
json={
"function": "text.standard",
"operation": "crm.resumen_llamada",
"input": transcripcion,
},
timeout=120,
)
if res.status_code != 200:
error = res.json()["error"] # code, message, request_id, retryable
raise RuntimeError(f"TALO AI {error['code']}: {error['message']} ({error['request_id']})")
texto = "".join(p["text"] for p in res.json()["output"] if p["type"] == "text")05Funciones disponibles
Consulta las funciones habilitadas para tu empresa:
curl -sS https://ai.test.talo.systems/v1/functions -H "Authorization: Bearer $TALO_API_KEY"| Función | Para qué sirve | Endpoint |
|---|---|---|
text.standard | Resúmenes, clasificación, extracción de datos y redacción corta. Rápida y económica. | POST /v1/generate |
text.advanced | Razonamiento, análisis extensos y redacción de alta calidad. | POST /v1/generate |
text.vision | Análisis de imágenes por URL: extrae números, textos o campos y responde JSON con tu esquema (sección 9). | POST /v1/generate |
audio.music | Música a partir de una descripción. | POST /v1/audio/generate |
audio.sound_effects | Efectos de sonido. | POST /v1/audio/generate |
Tu contrato define qué funciones tienes habilitadas. GET /v1/functions devuelve, para cada función, su status (available o unavailable) y sus límites: tiempo máximo, tokens, duración de audio y longitud del prompt.
06Servicios de la API
Todos los servicios usan tu API key, excepto el de estado. La URL base es https://ai.test.talo.systems.
| Servicio | Para qué sirve | Respuesta |
|---|---|---|
GET /v1/functions | Funciones habilitadas para tu empresa, con su estado y límites. Filtra con ?kind=text o ?kind=audio. | JSON |
GET /v1/functions/{name} | Detalle de una función. Responde 404 si no existe o no está en tu contrato. | JSON |
POST /v1/generate | Genera texto, completo o en streaming (secciones 7 y 8), y analiza imágenes (sección 9). | JSON o SSE |
POST /v1/audio/generate | Genera música o efectos de sonido (sección 10). | Audio |
GET /v1/limits | Presupuesto, consumo y límites del mes en curso (sección 11). | JSON |
GET /v1/usage/summary | Consumo agregado por día, mes, función u operación (sección 11). | JSON |
GET /health/live | Estado del servicio. No requiere credencial. | JSON |
Respuesta de GET /v1/functions
{
"catalog_version": "2026-10-24.3",
"functions": [
{
"name": "text.standard",
"kind": "text",
"description": "Procesamiento de texto estándar: resúmenes, clasificación, extracción y redacción corta.",
"capabilities": ["text.generate"],
"input_modalities": ["text"],
"output_modalities": ["text"],
"limits": { "timeout_seconds": 90, "max_output_tokens": 4096, "default_max_output_tokens": 1024 },
"status": "available",
"default": true
},
{
"name": "audio.music",
"kind": "audio",
"description": "Generación de música a partir de una descripción.",
"capabilities": ["music.generate"],
"input_modalities": ["text"],
"output_modalities": ["audio"],
"limits": { "timeout_seconds": 300, "max_prompt_chars": 2000, "max_duration_seconds": 300, "default_duration_seconds": 30 },
"status": "available"
}
]
}status: "unavailable" indica que la función no puede atenderse en este momento; reintenta más tarde. max_output_tokens es el máximo efectivo para tu empresa.
Cabeceras comunes
| Cabecera | Dirección | Uso |
|---|---|---|
Authorization / X-API-Key | Petición | Tu API key (sección 2). |
X-Request-ID | Petición y respuesta | Puedes enviar el tuyo para correlacionar logs; TALO siempre devuelve el identificador de la solicitud. |
Idempotency-Key | Petición | Evita cobros duplicados al reintentar (sección 14). |
Retry-After | Respuesta | Segundos a esperar antes de reintentar un 429 o 503. |
07Generar texto POST/v1/generate
| Campo | Requerido | Descripción |
|---|---|---|
function | No | Función a usar. Si la omites, se usa la función por defecto de tu empresa. |
operation | Sí | Nombre corto de tu caso de uso (^[a-z0-9_.-]{1,64}$), por ejemplo crm.resumen_llamada. Te permite ver el consumo por funcionalidad. |
input | Uno de los dos | Texto simple (equivale a un mensaje de usuario). |
messages | Uno de los dos | Conversación: [{ "role": "system" | "user" | "assistant", "content": [{ "type": "text", "text": "…" }] }] |
options.max_output_tokens | No | Máximo de tokens de respuesta, dentro del límite de tu contrato. |
options.stop | No | Hasta 4 secuencias de parada. |
options.temperature, options.top_p | No | Solo si la función lo soporta; si no, recibes 422 unsupported_capability. |
stream | No | true para recibir la respuesta progresivamente (sección 8). |
end_user_ref | No | Identificador opaco de tu cliente final, sin datos personales, para tu reporte de consumo. |
metadata | No | Hasta 10 pares clave/valor de texto corto. |
Un campo desconocido produce 400 invalid_request. El cuerpo puede medir hasta 1 MiB.
Conversación con instrucciones
{
"function": "text.advanced",
"operation": "legal.revision_contrato",
"messages": [
{ "role": "system", "content": [{ "type": "text", "text": "Eres un asistente legal. Responde en español y en viñetas." }] },
{ "role": "user", "content": [{ "type": "text", "text": "Revisa esta cláusula: …" }] }
],
"options": { "max_output_tokens": 800 }
}finish_reason
| Valor | Significado |
|---|---|
stop | La respuesta terminó normalmente. |
length | Se alcanzó max_output_tokens. Pide más tokens o un texto más corto. |
content_filter | El proveedor bloqueó el contenido por sus políticas. |
other | Otro motivo. |
08Streaming "stream": true
La respuesta es text/event-stream (Server-Sent Events). Cada evento trae event: y un data: JSON con request_id y seq, un contador creciente.
event: response.started
data: {"type":"response.started","request_id":"req_…","seq":0,"function":"text.standard"}
event: output.delta
data: {"type":"output.delta","request_id":"req_…","seq":1,"text":"La app "}
event: output.delta
data: {"type":"output.delta","request_id":"req_…","seq":2,"text":"se cierra…"}
event: usage.final
data: {"type":"usage.final","request_id":"req_…","seq":3,"usage":{…},"cost":{…}}
event: response.completed
data: {"type":"response.completed","request_id":"req_…","seq":4,"provider":"anthropic","resolved_model":"…","finish_reason":"stop","duration_ms":2310,"warnings":[]}- Concatena los
textdeoutput.deltaen orden. - Errores antes del inicio (credencial, límites, validación): llegan como respuesta HTTP JSON normal, con código 4xx o 5xx.
- Fallo con el stream ya iniciado: recibes
response.failedconerrory elcostconsumido. Después deresponse.failednunca llegaresponse.completed. usage.estimatedreemplaza ausage.finalcuando el proveedor no informó el consumo exacto.- Las líneas que empiezan con
:son keepalive; ignóralas. - Si cierras la conexión, TALO cancela la generación y cobra solo lo ya generado (estimado).
- Un stream dura como máximo 5 minutos.
Ejemplo en Node.js 18+
const res = await fetch("https://ai.test.talo.systems/v1/generate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.TALO_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ function: "text.standard", operation: "chat.respuesta", input: "Hola", stream: true }),
});
if (!res.ok) throw new Error(JSON.stringify(await res.json())); // error previo al stream
const decoder = new TextDecoder();
let buffer = "";
for await (const chunk of res.body) {
buffer += decoder.decode(chunk, { stream: true });
let sep;
while ((sep = buffer.indexOf("\n\n")) >= 0) {
const raw = buffer.slice(0, sep); buffer = buffer.slice(sep + 2);
const event = /^event: (.*)$/m.exec(raw)?.[1];
const data = /^data: (.*)$/m.exec(raw)?.[1];
if (!event || !data) continue; // keepalive
const payload = JSON.parse(data);
if (event === "output.delta") process.stdout.write(payload.text);
if (event === "response.failed") throw new Error(payload.error.message);
}
}09Analizar imágenes POST/v1/generate
Con la función text.vision envías la URL pública de una imagen y tus instrucciones. TALO descarga la imagen, la analiza con IA y responde un JSON con la forma exacta que tú defines. Sirve para leer números de medidores, totales de comprobantes, placas, etiquetas o cualquier dato visible.
Ejemplo: leer los números de una foto
curl -sS https://ai.test.talo.systems/v1/generate \
-H "Authorization: Bearer $TALO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"function": "text.vision",
"operation": "medidores.lectura",
"messages": [
{ "role": "system", "content": [{ "type": "text",
"text": "Extrae todos los números visibles en la imagen, en el orden en que aparecen. Usa punto decimal. Si no hay números, devuelve una lista vacía." }] },
{ "role": "user", "content": [
{ "type": "image", "url": "https://cdn.tuempresa.com/fotos/medidor-123.jpg" },
{ "type": "text", "text": "Es la foto de un medidor de agua; la lectura principal está en el visor negro." }
] }
],
"options": {
"response_format": {
"type": "json_schema",
"schema": {
"type": "object",
"required": ["numeros", "lectura_principal"],
"properties": {
"numeros": { "type": "array", "items": { "type": "number" } },
"lectura_principal": { "type": ["number", "null"], "description": "Número del visor principal; null si no se ve" }
}
}
}
}
}'Respuesta:
{
"request_id": "req_01JC9A2B3C4D5E6F7G8H9J0K1M",
"function": "text.vision",
"provider": "gemini",
"resolved_model": "gemini/gemini-2.5-flash-lite",
"output": [{ "type": "text", "text": "{\"numeros\":[2024,1532.75,3],\"lectura_principal\":1532.75}" }],
"output_json": { "numeros": [2024, 1532.75, 3], "lectura_principal": 1532.75 },
"finish_reason": "stop",
"usage": { "input_tokens": 1412, "output_tokens": 21, "source": "provider" },
"cost": { "amount_micros": 150, "currency": "USD", "billing_status": "confirmed", "price_version": "gemini-2026-10-23" },
"duration_ms": 1830,
"warnings": []
}Usa output_json: TALO ya verificó que cumple tu esquema. output[0].text trae el mismo JSON como texto.
Reglas
| Tema | Regla |
|---|---|
| Imagen | {"type": "image", "url": "https://..."} dentro de un mensaje user, junto a partes de texto. Hasta 4 imágenes por solicitud. |
| URL | Pública, https, puerto 443 y sin usuario ni contraseña. Se siguen hasta 3 redirecciones. Las URL firmadas sirven si siguen vigentes al menos 1 minuto. |
| Formato y tamaño | JPEG, PNG, WEBP o HEIC/HEIF (se detecta por el contenido, no por la extensión). Máximo 5 MB. La descarga debe terminar en 10 s. |
| Direcciones no públicas | Las URL que apuntan a redes internas o privadas se rechazan con 422 image_fetch_failed. |
response_format | type: "json_schema" y un schema JSON Schema con "type": "object" en la raíz, hasta 16 KB, sin $ref externos. Palabras clave útiles: type, properties, required, items, enum, minimum, maximum, minItems, maxItems, description. Para valores opcionales usa "type": ["number", "null"]. |
| Streaming | No disponible con imágenes ni con response_format. La idempotencia sí aplica. |
| Costo | La imagen se cobra como tokens de entrada: unos 258 tokens por cada bloque de 768×768 px. El costo es confirmed. |
| Privacidad | TALO no guarda las imágenes ni las URL; solo se envían al modelo para esta solicitud. |
Errores propios de imágenes
| HTTP | code | Qué hacer |
|---|---|---|
| 422 | image_fetch_failed | La imagen no se pudo descargar: URL privada, no https, respuesta distinta de 200, más de 5 MB o más de 10 s. No se cobra. |
| 422 | unsupported_media | El archivo no es JPEG, PNG, WEBP ni HEIC/HEIF. No se cobra. |
| 502 | invalid_model_output | El modelo respondió algo que no cumple tu esquema. Se cobra el uso; puedes reintentar o simplificar el esquema. |
PHP (Laravel)
$res = Http::withToken(env('TALO_API_KEY'))
->timeout(90)
->post(env('TALO_AI_URL') . '/v1/generate', [
'function' => 'text.vision',
'operation' => 'medidores.lectura',
'messages' => [
['role' => 'system', 'content' => [['type' => 'text', 'text' => 'Extrae todos los números visibles. Usa punto decimal.']]],
['role' => 'user', 'content' => [
['type' => 'image', 'url' => $urlImagen],
['type' => 'text', 'text' => 'Foto de un medidor de agua.'],
]],
],
'options' => ['response_format' => [
'type' => 'json_schema',
'schema' => [
'type' => 'object',
'required' => ['numeros'],
'properties' => ['numeros' => ['type' => 'array', 'items' => ['type' => 'number']]],
],
]],
]);
if ($res->failed()) {
$error = $res->json('error');
throw new RuntimeException("TALO AI {$error['code']}: {$error['message']} ({$error['request_id']})");
}
$numeros = $res->json('output_json.numeros');Python
res = requests.post(
f"{os.environ['TALO_AI_URL']}/v1/generate",
headers={"Authorization": f"Bearer {os.environ['TALO_API_KEY']}"},
json={
"function": "text.vision",
"operation": "medidores.lectura",
"messages": [
{"role": "system", "content": [{"type": "text", "text": "Extrae todos los números visibles. Usa punto decimal."}]},
{"role": "user", "content": [
{"type": "image", "url": url_imagen},
{"type": "text", "text": "Foto de un medidor de agua."},
]},
],
"options": {"response_format": {"type": "json_schema", "schema": {
"type": "object",
"required": ["numeros"],
"properties": {"numeros": {"type": "array", "items": {"type": "number"}}},
}}},
},
timeout=90,
)
if res.status_code != 200:
error = res.json()["error"]
raise RuntimeError(f"TALO AI {error['code']}: {error['message']} ({error['request_id']})")
numeros = res.json()["output_json"]["numeros"]Consejos para mejores resultados
- Di en el mensaje
systemexactamente qué datos quieres y en qué formato (punto decimal, sin separador de miles, unidades aparte). - Indica qué hacer si el dato no se ve: lista vacía o
null, para que el modelo no invente. - Usa
descriptionen cada propiedad del esquema: el modelo la lee como instrucción. - Fotos nítidas y bien encuadradas mejoran la lectura; recorta la zona de interés si puedes.
- Para datos críticos, valida rangos en tu sistema (por ejemplo, que la lectura no sea menor que la anterior).
10Generar audio POST/v1/audio/generate
La respuesta es el archivo de audio en binario. Los metadatos vienen en cabeceras.
| Campo | Requerido | Descripción |
|---|---|---|
function | No | audio.music o audio.sound_effects. |
operation | Sí | Tu caso de uso. |
prompt | Sí | Descripción del audio: hasta 2 000 caracteres en música y 1 000 en efectos. |
duration_seconds | No | Música: hasta 300 s (por defecto 30). Efectos: hasta 30 s (por defecto 5). |
format | No | mp3 (por defecto), opus o wav. |
instrumental | No | Solo música: true para música sin voz. |
loop | No | Solo efectos: true para un sonido que se repite sin cortes. |
curl -sS https://ai.test.talo.systems/v1/audio/generate \
-H "Authorization: Bearer $TALO_API_KEY" -H "Content-Type: application/json" \
-D cabeceras.txt -o intro.mp3 \
-d '{"function":"audio.music","operation":"video.intro","prompt":"Intro lofi relajada con piano","duration_seconds":30,"instrumental":true}'| Cabecera | Contenido |
|---|---|
Content-Type | audio/mpeg, audio/ogg o audio/wav |
X-Request-ID | Identificador de la solicitud. Cítalo en soporte. |
X-AI-Function | Función ejecutada. |
X-AI-Cost-Micros | Costo en micro-USD (1 000 000 = 1 USD). |
X-AI-Billing-Status | estimated: el audio se cobra por segundos solicitados. |
X-AI-Duration-Seconds | Duración solicitada. |
X-AI-Warnings | Avisos, si los hay. |
Si hay un error, la respuesta es JSON (sección 13), nunca audio.
11Consumo y límites
Tu presupuesto del mes
curl -sS https://ai.test.talo.systems/v1/limits -H "Authorization: Bearer $TALO_API_KEY"{
"app_id": "acme",
"currency": "USD",
"scopes": [{
"scope": "app:acme", "period": "2026-10",
"monthly_budget_micros": 50000000, "spent_micros": 1234567, "reserved_micros": 2000, "remaining_micros": 48763433,
"requests_per_minute": 60, "concurrent_requests": 5, "max_output_tokens": 4096
}]
}Tu consumo agregado
El rango máximo es de 366 días.
curl -sS "https://ai.test.talo.systems/v1/usage/summary?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z&group_by=operation" \
-H "Authorization: Bearer $TALO_API_KEY"group_by admite day, month, function, operation y organization. Cada fila trae requests, failed_requests, input_tokens, output_tokens, cost_micros (desglosado en confirmed_cost_micros y estimated_cost_micros) y unknown_requests.
Cómo funcionan los límites
| Límite | Al superarlo |
|---|---|
Por minuto requests_per_minute | 429 rate_limited con la cabecera Retry-After. |
Simultáneas concurrent_requests | 429 quota_exceeded. Reintenta en unos segundos. |
| Presupuesto mensual | Antes de ejecutar, TALO reserva el costo máximo posible de la solicitud. Si no alcanza, recibes 429 budget_exceeded y no se ejecuta ni se cobra nada. Al terminar se cobra el costo real y se libera el resto. El presupuesto se renueva el día 1 de cada mes (UTC). |
12Costos
Cada respuesta incluye cost:
| Campo | Significado |
|---|---|
amount_micros | Costo en micro-USD: 1 000 000 = 1 USD. Vale null si es desconocido. |
billing_status | confirmed: el proveedor informó el consumo exacto.estimated: lo calculó TALO (audio, streams cortados).unknown: no se pudo determinar (por ejemplo, un timeout); TALO lo concilia después. |
Los precios pueden cambiar. Cada costo registra la versión de tarifa aplicada en price_version.
13Errores
Todos los errores tienen el mismo formato:
{
"error": {
"code": "budget_exceeded",
"message": "monthly budget exhausted for scope application",
"request_id": "req_01JC8Z4R6M2V8K3N5P7Q9S1T3W",
"retryable": false,
"source": "gateway"
}
}source vale gateway si el error es de TALO, o provider si viene del proveedor de IA; en ese caso incluye provider y upstream_status.
| HTTP | code | Qué hacer |
|---|---|---|
| 400 | invalid_request | Corrige la solicitud según message. |
| 401 | unauthenticated | Revisa la API key: puede estar vencida o revocada. |
| 403 | forbidden, model_not_allowed | La función o el permiso no está en tu contrato. |
| 404 | model_not_found, not_found | La función o la ruta no existe. |
| 409 | idempotency_* | Ver sección 14. |
| 413 | payload_too_large | Reduce el texto o el cuerpo. |
| 422 | image_fetch_failed, unsupported_media | La imagen no se pudo descargar o no es un formato admitido (sección 9). |
| 422 | unsupported_capability | La función no soporta lo pedido (opción, tipo de contenido o endpoint). |
| 429 | rate_limited, quota_exceeded, provider_rate_limited | Espera lo que indique Retry-After y reintenta. |
| 429 | budget_exceeded | Presupuesto agotado. Contacta a TALO. |
| 502 | provider_error | El proveedor rechazó la solicitud. |
| 502 | invalid_model_output | La respuesta del modelo no cumple tu esquema. Se cobra; puedes reintentar. |
| 502 | unknown_result | Resultado incierto. No reintentes automáticamente, porque podría cobrarse dos veces; usa idempotencia. |
| 503 | provider_unavailable, dependency_unavailable | Temporal. Reintenta con espera. |
| 504 | provider_timeout | Tiempo agotado; el resultado es incierto, igual que unknown_result. |
Reintentos: reintenta solo si retryable es true. Usa espera exponencial con variación aleatoria (por ejemplo 1 s, 2 s y 4 s, hasta 3 intentos) y respeta Retry-After.
14Idempotencia
Evita cobros duplicados. En POST /v1/generate sin streaming y en POST /v1/audio/generate puedes enviar una clave única por operación de negocio, de 8 a 128 caracteres (letras, números y ._:-):
Idempotency-Key: pedido-48213-resumen| Caso | Resultado |
|---|---|
| Primer envío | Se ejecuta normalmente. |
| Reintento con el mismo cuerpo | No se ejecuta ni se cobra de nuevo. Recibes 409 idempotency_replay con original_request_id. El contenido no se guarda, así que conserva la primera respuesta. |
| Mismo cuerpo, primera solicitud en curso | 409 idempotency_in_progress. Reintenta en 1 s. |
| Misma clave, otro cuerpo | 409 idempotency_conflict. |
15Privacidad y datos
- Sin almacenamiento de contenido: TALO no guarda tus prompts, respuestas ni audios.
- Lo que sí se registra: metadatos (fecha, función, operación, tokens, costo y estado) para tu consumo y para soporte.
- Proveedores: el contenido se envía al proveedor de IA que ejecuta la función (Anthropic, Google, OpenAI o ElevenLabs), bajo sus condiciones.
- Datos sensibles: no envíes datos personales sensibles salvo que tu contrato con TALO lo contemple.
end_user_ref: usa identificadores opacos, nunca correos ni nombres.
16Buenas prácticas
- Llama a TALO solo desde tu backend. Si tienes una app o una web, que pasen por tu servidor.
- Usa nombres estables en
operationpara entender tu consumo. - Guarda el
request_idde cada respuesta y cítalo al pedir soporte. - Revisa
/v1/limitsperiódicamente o configura alertas internas. - Rota tu API key al menos una vez al año: pide una nueva, despliégala y luego solicita revocar la anterior.
Timeouts recomendados para tu cliente HTTP
| Función | Timeout |
|---|---|
text.standard | 120 s |
text.advanced | 200 s |
audio.music | 320 s |
audio.sound_effects | 70 s |
17Soporte
Escríbenos con el request_id, la fecha y hora (UTC) y la función. Nunca envíes tu API key completa: basta con su prefijo, por ejemplo talo_live_AbCd.