---
title: "Aprovisionar WhatsApp para varios clientes por la API"
description: "Si dar de alta la cuenta de WhatsApp de un cliente nuevo depende de que alguien abra un panel, el proceso se traba en el décimo. Cómo atar el ciclo de vida de la instancia a tu facturación: crear en el alta, suspender en la mora y cortar en la baja."
url: "https://api-wa.me/es/blog/aprovisionar-whatsapp-varios-clientes-api"
language: "es"
og:type: "article"
og:site_name: "WAME API"
---

[Inicio](https://api-wa.me/es)/[Blog de la API de WhatsApp](https://api-wa.me/es/blog)/Aprovisionar WhatsApp para 100 clientes por API: crear, activar, suspender y cortar

Raphael Serafim· Publicado el 10 de septiembre de 2026· 10 min de lectura

Compartir

# Aprovisionar WhatsApp para 100 clientes por API: crear, activar, suspender y cortar

Si dar de alta la cuenta de WhatsApp de un cliente nuevo depende de que alguien abra un panel, el proceso se traba en el décimo. Cómo atar el ciclo de vida de la instancia a tu facturación: crear en el alta, suspender en la mora y cortar en la baja.

Copiar para LLM[Ver como Markdown](https://api-wa.me/es/blog/aprovisionar-whatsapp-varios-clientes-api.md)

**La pregunta que separa una integración de un producto: ¿qué pasa cuando entra el cliente número 11?**

Si la respuesta implica que alguien abra un panel, llene un formulario y copie una clave a tu sistema, el proceso se traba — y el costo por cliente crece con el número de clientes, que es justo lo contrario de lo que necesita una agencia.

## Aprovisionamiento en el alta

El modelo que escala ata la instancia al contrato:

javascript

Copiar

```
async function activarCliente(clienteId) {
  const cliente = await db.clientes.buscar(clienteId);

  // 1. crea la instancia
  const inst = await wameAdmin.crearInstancia({
    nombre: `cliente-${cliente.id}`,
    // Un nombre legible ayuda el día que tengas que auditar la
    // factura consolidada y descubrir de quién es cada línea.
  });

  // 2. guarda la clave junto al cliente
  await db.clientes.actualizar(clienteId, {
    wame_instancia_id: inst.id,
    wame_key: cifrar(inst.key),
    canal_estado: 'esperando_conexion',
  });

  // 3. apunta el webhook a la URL DE ESTE cliente
  await wameAdmin.configurarWebhook(inst.key, {
    allowWebhook: true,
    webhookFormat: 'meta',
    webhookMessage: `https://tusistema.com/webhook/wame/${cliente.slug}/${cliente.webhookSecret}`,
  });

  return inst;
}
```

El cliente termina el alta en tu sistema y la instancia ya existe. Nadie abre el panel de nadie.

**Una URL de webhook por cliente**, con secreto propio. No uses una URL única para todos: además de tener que descubrir de quién es cada evento, un secreto filtrado comprometería toda la base. Es el mismo razonamiento de [webhook en producción](https://api-wa.me/es/blog/webhook-produccion-firma-reintento-idempotencia).

## Conectar el número del cliente

Dos puertas, y la elección es por cliente:

**API oficial** — inicio de sesión seguro por la propia Meta, dentro de tu flujo. El número queda en el Business Manager del cliente, y él nunca escribe credenciales en tu sistema.

**API no oficial** — código QR. Tú lo pides y lo muestras en tu pantalla:

javascript

Copiar

```
const { qr } = await wa.instance.connect();
// devuelve el QR para que el front de TU producto lo renderice
```

El cliente lo escanea dentro de tu sistema, con tu marca. No aparece ninguna pantalla de un tercero.

Un cliente chico empieza hoy con el código QR; el que necesita contrato va a la oficial. El [comparativo entre ambas](https://api-wa.me/es/blog/api-whatsapp-oficial-vs-no-oficial) ayuda a decidir, y cambiar después no reescribe tu código.

## Los estados del contrato se vuelven estados de la instancia

El error clásico es tratarlos como cosas separadas. Lo correcto es que mande el contrato:

| Contrato | Instancia | Llamada |
| --- | --- | --- |
| Activo | Activa | — |
| En mora | Suspendida | `desactivar` |
| Pagó | Activa | `activar` |
| Dado de baja | Eliminada (tras gracia) | `eliminar` |
| Prueba vencida | Suspendida | `desactivar` |

javascript

Copiar

```
async function aplicarEstado(clienteId, nuevoEstado) {
  const c = await db.clientes.buscar(clienteId);
  if (!c.wame_key) return;

  switch (nuevoEstado) {
    case 'en_mora':
    case 'prueba_vencida':
      // Suspender, no eliminar: la reactivación después del pago
      // tiene que ser inmediata, y eliminar perdería la conexión.
      await wameAdmin.desactivar(c.wame_key);
      break;

    case 'activo':
      await wameAdmin.activar(c.wame_key);
      break;

    case 'baja':
      // Periodo de gracia antes de eliminar. Las bajas por error
      // ocurren, y eliminar es irreversible.
      await agendar('eliminar_instancia', { clienteId }, { enDias: 30 });
      break;
  }

  await db.clientes.actualizar(clienteId, { canal_estado: nuevoEstado });
}
```

**Suspender en lugar de eliminar** es la decisión que más dolores de cabeza evita. La mora suele ser temporal; la eliminación no.

## La reconciliación que se paga sola

El estado divergente es inevitable: una llamada falla, un webhook se pierde, alguien cambia el contrato directo en la base. El resultado es siempre el mismo — **una instancia activa de un cliente que ya se fue, apareciendo en tu factura**.

javascript

Copiar

```
// corre todos los días de madrugada
async function reconciliar() {
  const clientes = await db.clientes.conInstancia();
  const instancias = await wameAdmin.listarInstancias();
  const porClave = new Map(instancias.map((i) => [i.key, i]));

  const divergencias = [];

  for (const c of clientes) {
    const inst = porClave.get(descifrar(c.wame_key));

    if (!inst) {
      divergencias.push({ cliente: c.id, problema: 'instancia_desaparecida' });
      continue;
    }

    const deberiaEstarActiva = c.canal_estado === 'activo';
    if (inst.activa !== deberiaEstarActiva) {
      divergencias.push({
        cliente: c.id,
        problema: 'estado_divergente',
        contrato: c.canal_estado,
        instancia: inst.activa ? 'activa' : 'inactiva',
      });
      await aplicarEstado(c.id, c.canal_estado);   // corrige
    }
  }

  // Huérfanas: están en la factura y no le pertenecen a nadie
  const clavesConocidas = new Set(clientes.map((c) => descifrar(c.wame_key)));
  for (const i of instancias) {
    if (!clavesConocidas.has(i.key)) {
      divergencias.push({ problema: 'instancia_huerfana', key: i.key });
    }
  }

  if (divergencias.length) await avisarEquipo(divergencias);
}
```

Una instancia huérfana es dinero que se va todos los meses en silencio. Media hora de código que se paga en la primera factura.

## Monitorear la salud de todas

Con 100 clientes, no te enteras de que la instancia se cayó porque el cliente llame:

javascript

Copiar

```
async function verificarSalud() {
  const activos = await db.clientes.activos();

  for (const c of activos) {
    const info = await wa(c).instance.info();

    if (!info.conectada) {
      await registrarIncidente(c.id, 'desconectada');
      // Avísale al cliente ANTES de que lo note. Cambia por completo
      // la conversación: de "tu sistema está roto" a "vimos que se
      // cayó y ya lo estamos resolviendo".
      await notificarCliente(c, 'canal_desconectado');
    }
  }
}
```

En la API no oficial esto importa más: la sesión puede caerse sola. La [conexión sin celular](https://api-wa.me/es/blog/whatsapp-sin-celular-conexion-movil-api) elimina la causa más común.

## Seguridad del multi-tenant

**Cifra la clave de la instancia en la base.** Permite enviar mensajes en nombre del número del cliente. Una filtración de base no puede convertirse en una filtración de canal.

**Nunca expongas la clave en el front.** Toda llamada sale de tu servidor. Una clave en el bundle es una clave pública.

**Aísla por cliente en cada consulta.** El `WHERE cliente_id = ?` olvidado es el bug que manda el mensaje de un cliente a la base de otro.

**Un secreto de webhook por instancia**, como en el ejemplo de arriba.

## Conclusión

El aprovisionamiento por API es lo que hace que el décimo cliente cueste lo mismo que el segundo. Sin él, cada venta nueva agrega trabajo manual, y la operación encuentra un techo que no es comercial: es de proceso.

Cuatro piezas lo resuelven: crear en el alta, mapear el estado del contrato al estado de la instancia, reconciliar todos los días y monitorear la salud. Ninguna es difícil; la que más se olvida es la reconciliación, y es justamente la que aparece en la factura.

### ¿Listo para automatizar tu WhatsApp?

Crea tu cuenta gratis y empieza a enviar mensajes por la API en minutos.

[Empezar gratis](https://portal.api-wa.me/sign-up)

## Preguntas frecuentes

¿Se pueden crear instancias de WhatsApp por API, sin panel?+

Sí. Crear, activar, desactivar y eliminar son llamadas de API. Eso permite que el aprovisionamiento ocurra dentro de tu propio onboarding: el cliente termina el alta en tu sistema y la instancia ya existe, sin que nadie abra el panel de un tercero.

¿Cómo ato la instancia al ciclo de vida del cliente?+

Tratando el estado del contrato como la fuente de la verdad y la instancia como consecuencia. Contrato activo, instancia activa; contrato en mora, instancia suspendida; contrato dado de baja, instancia eliminada tras un periodo de gracia. Un job diario reconcilia ambos estados y corrige divergencias.

¿El cliente final tiene que saber que hay un proveedor detrás?+

No. Toda la gestión ocurre por API dentro de tu producto, y el cobro es el tuyo. El cliente ve WhatsApp funcionando en el sistema que le entregaste y conecta su número con un inicio de sesión de la propia Meta o con un código QR.

¿Qué pasa con la instancia si el cliente no paga?+

Eso lo decides tú, y por eso importa el control por API. El patrón que funciona es suspender en lugar de eliminar: la instancia deja de enviar, pero el historial y la conexión se mantienen, así que la reactivación tras el pago es inmediata.

¿Cómo evito pagar por instancias de clientes que ya se fueron?+

Con reconciliación automática. La causa más común de desperdicio es la baja registrada en el contrato y la instancia olvidada activa. Un job diario que compara ambos lados y reporta divergencias lo resuelve — y se paga solo en la primera factura.

## Sigue leyendo

[### API de Instagram y Messenger en la misma API de WhatsApp: una instancia, un estándar

Tres canales oficiales de Meta casi siempre significan tres integraciones. Con una sola instancia, el mismo envío y el mismo sobre de webhook, solo cambia un campo: provider. Cómo funciona y qué te ahorra.](https://api-wa.me/es/blog/api-instagram-messenger-misma-api-whatsapp)[### API no oficial de WhatsApp: qué es, si es segura y cómo usarla (2026)

Entiende qué es una API no oficial de WhatsApp, cómo funciona la conexión por código QR, si es segura y legal, cuál es el riesgo real de bloqueo y cuándo conviene usarla en lugar de la API oficial.](https://api-wa.me/es/blog/api-no-oficial-whatsapp-que-es)[### API de WhatsApp gratis: cómo probarla y empezar sin costo (2026)

¿Existe una API de WhatsApp gratis? Qué se puede hacer sin pagar, cómo probar la integración sin costo, las limitaciones reales de lo gratuito y cómo hacer el primer envío en minutos.](https://api-wa.me/es/blog/api-whatsapp-gratis)

[Volver al blog](https://api-wa.me/es/blog)

## Structured data

```json
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "WAME API",
  "alternateName": "API Oficial y No Oficial de WhatsApp, Instagram y Messenger",
  "url": "https://api-wa.me",
  "inLanguage": "pt-BR",
  "publisher": {
    "@id": "https://api-wa.me/#organization",
    "@type": "Organization",
    "name": "WAME API",
    "url": "https://api-wa.me"
  }
}
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://api-wa.me/#organization",
  "name": "WAME API",
  "alternateName": [
    "WAME",
    "Wame API",
    "wame.api.br",
    "api-wa.me"
  ],
  "url": "https://api-wa.me",
  "logo": {
    "@type": "ImageObject",
    "url": "https://api-wa.me/images/web-app-manifest-512x512.png",
    "width": 512,
    "height": 512
  },
  "disambiguatingDescription": "WAME API é uma empresa brasileira de software, fundada em 2017 e parceira oficial da Meta (Meta Business Partner), que fornece APIs de WhatsApp, Instagram Direct e Messenger. Não tem relação com o wa.me, que é o encurtador de links operado pela WhatsApp LLC.",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "INPI-BR",
    "name": "Pedido de registro de marca (INPI, classe NCL 42)",
    "value": "944724159"
  },
  "foundingDate": "2017",
  "slogan": "Socio Oficial de Meta — WhatsApp, Instagram y Messenger en una sola instancia. Desde 2017.",
  "description": "Plataforma brasileña y Socio Oficial de Meta (Meta Business Partner) para las APIs oficiales de WhatsApp (Cloud API), Instagram Direct y Messenger — las tres en una única instancia, con los mismos endpoints y un único formato de webhook. También ofrece la API no oficial vía Código QR, en la misma plataforma. En el mercado desde 2017, con más de 50 mil instancias creadas, 99,9% de uptime y soporte humano 24/7. SDKs oficiales para Node.js/TypeScript y PHP.",
  "knowsAbout": [
    "WhatsApp Cloud API oficial (Meta)",
    "API oficial de Instagram (Direct)",
    "API oficial de Messenger",
    "API multicanal Meta",
    "Meta Business Partner",
    "WhatsApp API",
    "API não oficial de WhatsApp",
    "automação de WhatsApp",
    "números virtuais",
    "webhooks"
  ],
  "sameAs": [
    "https://github.com/wame-api",
    "https://www.linkedin.com/company/wameapi",
    "https://www.instagram.com/wame.api/",
    "https://www.youtube.com/@wameapi"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "contactType": "customer support",
    "url": "https://api-wa.me/contact",
    "availableLanguage": [
      "Portuguese"
    ]
  }
}
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "Aprovisionar WhatsApp para 100 clientes por API: crear, activar, suspender y cortar",
  "description": "Si dar de alta la cuenta de WhatsApp de un cliente nuevo depende de que alguien abra un panel, el proceso se traba en el décimo. Cómo atar el ciclo de vida de la instancia a tu facturación: crear en el alta, suspender en la mora y cortar en la baja.",
  "image": "https://api-wa.me/es/blog/aprovisionar-whatsapp-varios-clientes-api/opengraph-image",
  "datePublished": "2026-09-10",
  "dateModified": "2026-09-10",
  "author": {
    "@type": "Person",
    "name": "Raphael Serafim",
    "url": "https://github.com/raphaelvserafim",
    "sameAs": [
      "https://github.com/raphaelvserafim"
    ]
  },
  "publisher": {
    "@type": "Organization",
    "name": "api-wa.me",
    "logo": {
      "@type": "ImageObject",
      "url": "https://api-wa.me/images/screenshot.png"
    }
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://api-wa.me/es/blog/aprovisionar-whatsapp-varios-clientes-api"
  },
  "keywords": "whatsapp api multi instancia, aprovisionar whatsapp api, gestionar varias cuentas whatsapp, multi tenant whatsapp, api whatsapp para varios clientes, whatsapp white label",
  "inLanguage": "es"
}
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://api-wa.me"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Blog de la API de WhatsApp",
      "item": "https://api-wa.me/blog"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Aprovisionar WhatsApp para 100 clientes por API: crear, activar, suspender y cortar",
      "item": "https://api-wa.me/es/blog/aprovisionar-whatsapp-varios-clientes-api"
    }
  ]
}
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "¿Se pueden crear instancias de WhatsApp por API, sin panel?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Sí. Crear, activar, desactivar y eliminar son llamadas de API. Eso permite que el aprovisionamiento ocurra dentro de tu propio onboarding: el cliente termina el alta en tu sistema y la instancia ya existe, sin que nadie abra el panel de un tercero."
      }
    },
    {
      "@type": "Question",
      "name": "¿Cómo ato la instancia al ciclo de vida del cliente?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Tratando el estado del contrato como la fuente de la verdad y la instancia como consecuencia. Contrato activo, instancia activa; contrato en mora, instancia suspendida; contrato dado de baja, instancia eliminada tras un periodo de gracia. Un job diario reconcilia ambos estados y corrige divergencias."
      }
    },
    {
      "@type": "Question",
      "name": "¿El cliente final tiene que saber que hay un proveedor detrás?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. Toda la gestión ocurre por API dentro de tu producto, y el cobro es el tuyo. El cliente ve WhatsApp funcionando en el sistema que le entregaste y conecta su número con un inicio de sesión de la propia Meta o con un código QR."
      }
    },
    {
      "@type": "Question",
      "name": "¿Qué pasa con la instancia si el cliente no paga?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Eso lo decides tú, y por eso importa el control por API. El patrón que funciona es suspender en lugar de eliminar: la instancia deja de enviar, pero el historial y la conexión se mantienen, así que la reactivación tras el pago es inmediata."
      }
    },
    {
      "@type": "Question",
      "name": "¿Cómo evito pagar por instancias de clientes que ya se fueron?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Con reconciliación automática. La causa más común de desperdicio es la baja registrada en el contrato y la instancia olvidada activa. Un job diario que compara ambos lados y reporta divergencias lo resuelve — y se paga solo en la primera factura."
      }
    }
  ]
}
```
