Una solicitud de saldo es la forma más rápida de confirmar su clave, el formato de la solicitud y que la integración funcione de ida y vuelta antes de comenzar a realizar pedidos.
Envíe la clave API de su cuenta en Autorización: Bearer YOUR_API_KEY o como campo de solicitud de clave. Elija un método; el campo de clave funciona con los paneles de revendedor comunes. Guarde las claves en variables de entorno del servidor y rote desde Cuenta.
Todas las acciones usan POST https://smm.africa/api/v3.. Cuerpos admitidos: application/json, application/x-www-form-urlencoded y multipart/form-data con campos de texto únicamente. Las respuestas son JSON. El campo de acción selecciona la operación.
¿Por qué los pagos de mis clientes están separados de mi billetera SMM.Africa?
Su cliente paga su negocio según su propio acuerdo. Su billetera SMM.Africa paga los pedidos que envía aquí. Cobrar el pago de un cliente no financia automáticamente esa billetera, y un reembolso de billetera no reembolsa automáticamente a su cliente. Concilie los dos registros por separado, incluidas las tarifas y cualquier reembolso aprobado al cliente.
Comience con los ejemplos de autenticación y saldo de API, luego revise el servicio, el formato objetivo, los límites y el precio. Utilice un objetivo que controle y una cantidad dentro de los límites establecidos. La acción de agregar gasta el saldo de la billetera. Guarde el ID del pedido devuelto y verifique su estado. Lea la documentación API actual antes de elegir una estrategia de reintento.
Abrir esta respuesta¿Debo enviar otro pedido de API si la primera solicitud caduca?
Primero verifique si la solicitud original creó un pedido. Un tiempo de espera puede dejar el resultado incierto incluso cuando el procesamiento se realizó correctamente. Conserve la referencia de la solicitud y cualquier ID del pedido, y utilice el mecanismo de idempotencia documentado cuando sea compatible. No genere una nueva solicitud paga simplemente porque falta la primera respuesta; Póngase en contacto con el servicio de asistencia si el resultado no está claro.
Su clave API, utilizada para autenticar la solicitud. Obligatorio solo cuando Autorización: Portador no está presente.
action
string
Sí
add Usar el valor de acción exacto que se muestra.
service
integer
Sí
El ID del servicio que desea solicitar. Usar un ID de la respuesta del servicio actual; su tipo determina los campos siguientes.
link
string
Condicional
La URL de perfil, publicación o contenido de destino. Obligatorio para el tipo de servicio seleccionado; proporcionar la URL de destino.
quantity
integer
Condicional
La cantidad que desea pedir. Debe cumplir con los valores mínimo y máximo del servicio seleccionado. Omitir cuando su tipo no acepte cantidad.
max_charge
number / decimal string
No
Optional maximum USD charge, including discounts, with up to six decimal places. PRICE_LIMIT_EXCEEDED (409) creates no order or debit. Changing a ceiling changes request intent. Cargo máximo permitido en USD, con un máximo de seis decimales.
idempotency_key
string
Recomendado
Use one unique value per logical order. If the request times out without a response, retry with the same value so the order cannot be charged twice. Conservar un valor único por orden lógica; reutilizar solo con una carga útil de reintento idéntica.
Campos por tipo de servicio
Seleccione el tipo devuelto por los servicios; no envíe un campo de tipo por separado. Los valores de la lista son texto separado por saltos de línea, incluso en JSON. La API obtiene la cantidad facturable para comentarios, listas personalizadas, paquetes y suscripciones, y luego verifica los límites del servicio.
Tipo de servicio
Campos obligatorios
Campos/restricciones opcionales
Default
link, quantity
URL de destino estándar y cantidad solicitada.
Package
link
Sin cantidad.
SEO
link, quantity, keywords
Coloque una palabra clave en cada línea.
Custom Comments
link, comments
Un comentario por línea; el recuento de comentarios es la cantidad del pedido.
Custom Comments Package
link, comments
Un comentario por línea; sin cantidad.
Comment Replies
link, username, comments
nombre de usuario es el propietario del comentario; ponga una respuesta por línea.
Comment Likes
link, username
nombre de usuario es el propietario del comentario; sin cantidad.
Mentions
link, quantity, usernames
Pon un nombre de usuario por línea.
Mentions with Hashtags
link, quantity, usernames, hashtags
Coloque los nombres de usuario y los hashtags en líneas separadas.
Mentions Custom List
link, usernames
Pon un nombre de usuario por línea; sin cantidad.
Mentions Hashtag
link, quantity, hashtags
Pon un hashtag por línea.
Mentions User Followers
link, quantity, username
nombre de usuario es la URL del perfil de origen que se va a extraer.
Mentions Media Likers
link, quantity, media
media es la URL del medio de origen que se va a extraer.
Poll
link, quantity, answer
la respuesta es el texto exacto de la opción de encuesta que espera el proveedor.
Invites from Groups
link, quantity, groups
Pon un grupo en cada línea.
Web Traffic
link, quantity, country, device, type_of_traffic
el dispositivo es móvil o de escritorio. type_of_traffic es 1 (requiere google_keyword), 2 (requiere reference_url) o 3.
Campos de atribución opcionales
Parámetro
Tipo
Obligatorio
Descripción y restricciones
goal_key
string
No
Clave de objetivo opcional para atribución de crecimiento guiado. Metadatos de atribución opcionales.
recommendation_tier
string
No
Nivel de recomendación opcional. Metadatos de atribución opcionales.
user_intent_label
string
No
Etiqueta opcional que describe la intención del usuario. Metadatos de atribución opcionales.
source_flow
string
No
Identificador opcional para el flujo que creó el pedido. Metadatos de atribución opcionales.
Su clave API, utilizada para autenticar la solicitud. Obligatorio solo cuando Autorización: Portador no está presente.
action
string
Sí
status Usar el valor de acción exacto que se muestra.
order
integer / string
Sí
El ID del pedido SMM Africa devuelto por add. Conservar el ID de orden devuelto por la función de agregar; no sustituir por un ID de orden del proveedor.
orders
array / string
Condicional
For bulk status, send 1–20 IDs as a JSON array or comma-separated form string instead of order. Inspect each item's http_status and retry_after. Usa order u orders, nunca ambos. Cada elemento del lote tiene su propio http_status.
Su clave API, utilizada para autenticar la solicitud. Obligatorio solo cuando Autorización: Portador no está presente.
action
string
Sí
refill Usar el valor de acción exacto que se muestra.
order
integer / string
Sí
El ID del pedido SMM Africa devuelto por add. Conservar el ID de orden devuelto por la función de agregar; no sustituir por un ID de orden del proveedor.
Su clave API, utilizada para autenticar la solicitud. Obligatorio solo cuando Autorización: Portador no está presente.
action
string
Sí
cancel Usar el valor de acción exacto que se muestra.
order
integer / string
Sí
El ID del pedido SMM Africa devuelto por add. Conservar el ID de orden devuelto por la función de agregar; no sustituir por un ID de orden del proveedor.
Consulta el saldo, obtén los servicios, selecciona el tipo, guarda un identificador de operación, envía el pedido, guarda su identificador y consulta su estado. Los precios son en USD; las tarifas son por 1.000 unidades o por paquete según el servicio. Trata los identificadores como cadenas opacas. Las cadenas decimales y los campos monetarios numéricos conservan sus tipos; los cargos usan seis decimales de USD.
Los clientes de Node.js y PHP 3.3 guardan claves de operación y respuestas correctas, respetan Retry-After y detienen las modificaciones sin resolver antes de que venza el plazo de repetición de 24 horas. Mantén el estado privado, persistente y separado para cada cuenta. Prueba primero con el entorno local, sin conexión a monederos ni proveedores reales.
node sandbox.mjs
# Endpoint: http://127.0.0.1:4013/api/v3
# Key: sandbox_test_key (never use a live key)
webhook_set
Configura un receptor HTTPS verificado por cuenta. Requiere activación en el despliegue. Genera un secreto base64url aleatorio de 32–128 caracteres. Verifica X-SMM-Signature y devuelve el desafío webhook.verify en JSON. La reconfiguración invalida los eventos pendientes anteriores.
Lea hasta 20 entregas, su carga útil, intentos, último estado HTTP y hora del próximo intento. Pase after=next_cursor para las páginas siguientes. El historial se conserva durante 30 días.
Vuelve a poner en cola un evento entregado o fallido para la misma versión del receptor. Se conserva el identificador del evento. Los consumidores deben eliminar duplicados; la repetición nunca repite un pedido ni una modificación del monedero.
La firma X-SMM contiene t=UNIX_SECONDS,v1=HEX_HMAC_SHA256. Firmar marca de tiempo + "." + el cuerpo exacto de la solicitud sin procesar con su secreto. Utilice la comparación de tiempo constante y rechace las marcas de tiempo de más de cinco minutos de su reloj. Conserve cada ID de evento antes de devolver 2xx. La entrega es al menos una vez y puede llegar fuera de servicio. Los eventos cubren la actividad de los pedidos de la cuenta, incluidos los pedidos del sitio web. Obtener el estado de los detalles actuales de entrega y reembolso; Las encuestas siguen siendo la opción alternativa para la reconciliación. Reintentos de entrega fallidos hasta ocho veces con retroceso; las redirecciones son rechazadas.
Verifique el estado HTTP y el campo de error JSON. Los errores de autenticación utilizan HTTP 400; quienes llaman a la API no son redirigidos al inicio de sesión. Registre los errores técnicos de forma privada y muestre a los clientes un mensaje neutral.
Añadir respuesta de repetición durante 24 horas. Después del vencimiento, la misma clave puede crear otra orden: conciliar primero. REQUEST_IN_PROGRESS permite la misma solicitud/clave después de Reintentar después. IDEMPOTENCY_CONFLICT requiere restaurar la carga útil original. ACTION_OUTCOME_UNCONFIRMED requiere revisión de soporte: nunca cambie las claves para evitarlo. PRICE_LIMIT_EXCEEDED significa que no se realizó ningún débito ni pedido. Registre request_id (también X-Request-Id) para obtener asistencia.
HTTP
Error/Condición
Qué hacer
400
Invalid API key
Verifique la clave y los campos obligatorios. Corrija la solicitud antes de volver a intentarlo.
402
Insufficient balance
Deposite fondos en la billetera de la cuenta antes de volver a enviar el pedido.
409
A matching API order request is already being processed
Espere antes de volver a intentar la solicitud idéntica con su clave de idempotencia original.
409
This idempotency key was already used for a different API order request
Restaure la carga útil original para volver a intentarlo. Utilice una nueva clave sólo para un nuevo orden lógico.
415
Unsupported content type
Envíe JSON, campos de formulario codificados en URL o campos de texto de varias partes.
423
Account suspended (message varies)
Resolver la restricción de cuenta con soporte; no lo vuelva a intentar repetidamente.
429
Too many requests. Please slow down and try again shortly.
Espere el intervalo de reintento después y luego vuelva a intentarlo con retroceso.
500 / 503
Server failure or temporary unavailability (message varies)
Retrocede. Para envíos de pedidos, mantenga la misma carga útil y clave de idempotencia.
Reintente un pedido sin cobrar dos veces
Cree y guarde una clave de idempotencia única para cada pedido lógico antes de enviar la solicitud. Reemplace la clave de ejemplo con su propio valor único.
Espere hasta 60 segundos para la solicitud del servidor. Después de 20 segundos, muestre un mensaje de espera al cliente mientras continúa la solicitud al servidor.
Si no llega respuesta, reintente la misma carga útil con la misma clave después de un tiempo. No genere una nueva clave. Un reintento completado reproduce la respuesta con X-Idempotent-Replay: true.
Una vez que reciba un ID de pedido, guárdelo y use el estado para realizar el seguimiento de ese pedido. Una respuesta en cola significa que se ha aceptado para su procesamiento, no que la entrega se ha completado.
También se admiten los encabezados Idempotency-Key y X-Idempotency-Key. Sin una clave de cliente, aún se puede enviar un pedido, pero reintentar después de un tiempo de espera no permite identificar de forma segura el intento original.
Límites de tarifas
Los límites son específicos de la acción y configurables en la implementación. En HTTP 429, respete Retry-After (segundos). Sin ese encabezado, utilice un retroceso exponencial con fluctuación, por ejemplo, 2, 4, 8 y luego 16 segundos, más un pequeño retraso aleatorio. Limite los reintentos y notifique los fallos persistentes a su operador.
Almacene en caché el catálogo obtenido con POST /api/v3 y action=services. Actualícelo periódicamente y verifique los ID de servicio, las tarifas y las restricciones mínimas/máximas actuales antes de realizar el pedido.
Ciclo de vida del pedido
Envíe action=status con un ID de pedido por solicitud. Como política inicial para el cliente, realice sondeos cada 30 segundos y aumente el intervalo para pedidos de larga duración; respete los límites de velocidad. Distribuya las solicitudes entre los pedidos. Actualmente no se admiten webhooks.
queued → pending → processing
Estados activos: continúe el sondeo. Los pedidos pueden omitir estados intermedios.
completed · partial · refunded · canceled
Estados terminales: detenga el sondeo de entrega rutinario. "Parcial" significa que la entrega fue incompleta; revise el cargo y el saldo restante. Las solicitudes de recarga y cancelación están sujetas a la elegibilidad del servicio y del pedido.
unknown
Estado no reconocido: no lo considere un éxito ni genere un pedido de reemplazo automáticamente. Reintente el estado con retroceso y contacte con soporte si persiste.
Notas de integración para uso en producción
Trate la API como infraestructura. Estas notas cubren las cosas que importan una vez que ejecuta pedidos automatizados, un panel de clientes o una tienda de gran volumen.
Saldo de billetera compartida
Los pedidos directos, los pedidos de tienda y los pedidos de API se obtienen del mismo saldo de billetera. Financialo desde cualquier canal, úsalo desde cualquier canal.
Asegure su clave
Nunca exponga la clave, el nombre de host de API, el nombre del proveedor configurado ni los errores de transporte sin formato en el código del lado del cliente o en los mensajes del escaparate. Llamadas proxy a través de su backend, registra detalles técnicos de forma privada y, después de 20 segundos, muestra a los clientes un texto neutral como: El envío del pedido está tardando más de lo esperado. Revisa tus pedidos antes de volver a intentarlo.
Respuestas rápidas
¿Cómo obtengo una clave API?
Inicie sesión en SMM Africa, abra la cuenta, copie su clave API y gírela desde el mismo lugar en cualquier momento.
¿La API es gratuita?
No hay tarifa API adicional. Sólo paga por los servicios que solicita. La misma billetera financia pedidos directos, pedidos de tienda y pedidos de API.
¿Cuáles son los límites de tarifas?
Los límites son específicos de la acción y pueden cambiar. Espacie las llamadas masivas, las encuestas de estado por lotes y, cuando la API devuelva 429, espere el intervalo de reintento después antes de volver a intentarlo.
¿Cómo debo manejar los reintentos?
Envíe un encabezado Idempotency-Key único o un campo idempotency_key para cada orden de adición lógica. Si la solicitud se agota, vuelva a intentar la carga útil idéntica con la misma clave para que se reproduzca un intento completo sin otro cargo.
¿Existe un webhook?
El sondeo de estado es la ruta admitida actualmente. Presione la acción de estado para los pedidos que está viendo y almacene en caché el resultado en su propio sistema.
¿Qué países son compatibles?
La API está disponible en todo el mundo, con un fuerte soporte para los mercados africanos y financiación de billetera compatible con M-Pesa.
Vocabulario API
Términos que los revendedores deben comprender
API de revendedor
Una interfaz de servidor a servidor que permite que otro panel o flujo de trabajo realice y rastree los pedidos de SMM Africa desde su propia aplicación.
Catálogo de servicios
La lista en vivo de ID de servicio, precios, límites, soporte de recarga y soporte de cancelación utilizados antes de realizar un pedido.
Acción
El campo JSON que elige la operación de API, como saldo, servicios, agregar, estado, recargar o cancelar.
Pedido respaldado por Wallet
Un modelo de pedidos en el que los pedidos directos, de tienda y API se obtienen del mismo saldo financiado de la billetera SMM Africa. URL base