Saltar al contenido principal
Esta guía explica cómo eliminar varias cuentas usando la Automation API cumpliendo con los límites de velocidad de la API. Utiliza el endpoint Delete account.

Requisitos previos

Antes de usar la Automation API, debe obtener un token de acceso. Para obtener instrucciones, consulte la guía de autenticación.
Incluya su token en el encabezado Authorization de cada solicitud:
Authorization: Bearer YOUR_ACCESS_TOKEN

Gestionar los límites de velocidad

La Automation API aplica dos ventanas de limitación de velocidad para controlar el tráfico de solicitudes:
Ventana de tiempoSolicitudes máximas
10 segundos50 solicitudes
1 hora1.000 solicitudes
Si envía solicitudes con demasiada rapidez, la API devuelve un código de estado HTTP 429 Too Many Requests.
Para evitar estos límites, procese sus solicitudes en lotes controlados:
  • Envíe un máximo de 50 solicitudes cada 10 segundos.
  • Envíe un máximo de 1.000 solicitudes por hora.

Ejemplo: Eliminar 230 cuentas

Para eliminar 230 cuentas, divida sus solicitudes en los siguientes lotes:
LoteSolicitudesTiempo de espera
150Esperar 10 segundos
250Esperar 10 segundos
350Esperar 10 segundos
450Esperar 10 segundos
530Completado

Eliminar cuentas usando Python

Utilice el siguiente script de Python para enviar solicitudes de eliminación secuencialmente y gestionar los límites de velocidad automáticamente:
delete_accounts.py
import time
import requests

API_URL = "https://api.kameleoon.com/accounts/"
ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"

ACCOUNT_IDS = [12345, 54321]

MAX_PER_10_SECONDS = 50
MAX_PER_HOUR = 1000

TEN_SECONDS = 10
ONE_HOUR = 3600


def delete_account(session, account_id):
    headers = {
        "Authorization": f"Bearer {ACCESS_TOKEN}",
    }

    url = f"{API_URL}{account_id}"

    try:
        response = session.delete(url, headers=headers)

        if response.status_code == 429:
            return "rate_limited", None

        if response.status_code in (200, 204):
            return True, response.json() if response.content else {}

        return False, response.text

    except requests.exceptions.RequestException as e:
        return False, str(e)


def process_accounts(account_ids):

    session = requests.Session()

    start_hour = time.monotonic()
    hour_count = 0

    for i in range(0, len(account_ids), MAX_PER_10_SECONDS):

        batch = account_ids[i:i + MAX_PER_10_SECONDS]

        # Enforce hourly limit BEFORE sending requests
        if hour_count + len(batch) > MAX_PER_HOUR:
            elapsed = time.monotonic() - start_hour
            sleep_time = max(0, ONE_HOUR - elapsed)

            print(f"Hourly limit reached. Sleeping {sleep_time:.2f} seconds")
            time.sleep(sleep_time)

            start_hour = time.monotonic()
            hour_count = 0

        batch_start = time.monotonic()

        for account_id in batch:

            while True:
                # Check hourly limit before EACH request
                if hour_count >= MAX_PER_HOUR:
                    elapsed = time.monotonic() - start_hour
                    sleep_time = max(0, ONE_HOUR - elapsed)

                    print(f"Hourly limit reached. Sleeping {sleep_time:.2f} seconds")
                    time.sleep(sleep_time)

                    start_hour = time.monotonic()
                    hour_count = 0

                result, data = delete_account(session, account_id)

                # Count every attempt as a request
                hour_count += 1

                if result == True:
                    print(f"Account {account_id} deleted")
                    break

                elif result == "rate_limited":
                    elapsed = time.monotonic() - start_hour

                    # If close to hourly limit, wait for full reset
                    if hour_count >= MAX_PER_HOUR or elapsed >= ONE_HOUR:
                        sleep_time = max(0, ONE_HOUR - elapsed)
                        print(f"429 likely due to hourly limit. Sleeping {sleep_time:.2f} seconds")
                        time.sleep(sleep_time)

                        start_hour = time.monotonic()
                        hour_count = 0
                    else:
                        print("429 received. Waiting 10 seconds...")
                        time.sleep(TEN_SECONDS)

                    continue

                else:
                    print(f"Failed to delete {account_id}: {data}")
                    break

        # Enforce 10-second window
        elapsed = time.monotonic() - batch_start

        if elapsed < TEN_SECONDS:
            sleep_time = TEN_SECONDS - elapsed
            print(f"Waiting {sleep_time:.2f} seconds before next batch")
            time.sleep(sleep_time)


def main():
    process_accounts(ACCOUNT_IDS)


if __name__ == "__main__":
    main()
El script gestiona la eliminación de cuentas cumpliendo con los límites de velocidad de la Automation API mediante:
  • El envío secuencial de solicitudes.
  • El procesamiento de cuentas en lotes de 50.
  • La espera entre lotes para cumplir con el límite de 10 segundos.
  • La pausa cuando el proceso alcanza el límite por hora de 1.000 solicitudes.
Este enfoque previene los errores de límite de velocidad y garantiza una eliminación de cuentas fiable durante operaciones de limpieza u offboarding a gran escala.