Los endpoints principales de la API (TariffPro, CamtomDocs, Quoter, etc.) no tienen rate limiting global por peticiones por minuto. En su lugar, el control se realiza mediante:
Concurrencia: TariffPro Mini tiene un limite de 50 peticiones simultaneas por worker del servicio. Si se alcanza este limite, las peticiones adicionales esperan hasta que haya capacidad.
Creditos: Cada llamada consume creditos de la suscripcion de tu organizacion. Cuando los creditos se agotan, las peticiones son rechazadas.
Suscripcion: Solo organizaciones con suscripcion pro o enterprise pueden usar API keys.
El modulo KYB (Know Your Business) es el unico con rate limiting explicito por peticiones. Estos limites aplican a rutas internas de onboarding, no a los endpoints publicos de la API:
Operacion
Ventana
Max peticiones
Creacion de verificacion
1 minuto
5
Consultas
1 minuto
30
Cambios de estado
1 minuto
10
Verificaciones EFOS
1 minuto
10
Operaciones de documentos
1 minuto
15
Cierre de verificaciones
1 minuto
5
Webhooks
1 minuto
50
Al exceder estos limites, la respuesta es:
{ "error": "RATE_LIMITED", "message": "Too many ... requests. Try again in a minute."}
Aunque no hay rate limiting estricto en los endpoints principales, es buena practica implementar backoff exponencial para manejar errores transitorios (5xx):
import timeimport requestsdef request_with_retry(url, headers, data, files=None, params=None, max_retries=5): for attempt in range(max_retries): response = requests.post(url, headers=headers, data=data, files=files, params=params) if response.status_code == 200: return response.json() if response.status_code == 429: # Limite excedido (solo aplica en ciertos endpoints) wait_time = 2 ** attempt print(f"Limite excedido. Esperando {wait_time}s (intento {attempt + 1}/{max_retries})") time.sleep(wait_time) continue if response.status_code >= 500: wait_time = 2 ** attempt # 1s, 2s, 4s, 8s, 16s print(f"Error {response.status_code}. Reintentando en {wait_time}s...") time.sleep(wait_time) continue # Para errores 4xx (excepto 429), no reintentar error_body = response.json() raise Exception(f"Error {response.status_code}: {error_body.get('message', 'Error desconocido')}") raise Exception(f"Fallo despues de {max_retries} intentos")
Para clasificar grandes volumenes de productos, considera usar los endpoints batch de TariffPro (/xlsx, /items-to-excel, /tariff-tables) que procesan multiples items en una sola peticion y devuelven un job_id para consultar el progreso.
No intentes evadir los limites de creditos creando multiples organizaciones o cuentas. Esta practica viola los terminos de uso y puede resultar en la suspension de tu cuenta.
Si los creditos o la concurrencia de tu plan actual no son suficientes para tu caso de uso, contacta al equipo de ventas para conocer los planes Enterprise con limites personalizados:
Contactar ventas
Solicita un plan Enterprise con capacidad personalizada para tu volumen de operaciones.