Un solo endpoint, solo POST, respuesta JSON. El mismo catálogo y los mismos precios del panel, desde tu propio sitio, bot o hoja de cálculo.
Genérala en la página de la cuenta. Autoriza el gasto, así que su lugar está en la configuración del servidor. Rótala si alguna vez pasó por un navegador, un chat o una captura de pantalla.
La cantidad mínima y máxima se fija de forma individual: un servicio empieza en 10 unidades y el siguiente en 500 000. Léelos desde services y valídalos antes de enviar un pedido.
No hay paso de factura. add solo funciona mientras el saldo cubre el pedido, así que consulta balance y detén tu cola antes de que llegue a cero.
PerfectPanel y la mayoría de scripts de panel leen este formato de forma nativa. En tu admin ve a Providers → Add provider y pega la dirección del sitio — https://autosmo.com/, solo eso, no el endpoint. Añade tu clave, sincroniza el catálogo y fija tu margen.
curl -X POST https://autosmo.com/api/v2 \\
-d key=YOUR_KEY \\
-d action=add \\
-d service=6758 \\
-d link=https://instagram.com/yourprofile \\
-d quantity=100
{"order": 8231455}
curl -X POST https://autosmo.com/api/v2 -d key=YOUR_KEY -d action=status -d order=8231455
{"charge": "0.016", "start_count": "2841", "status": "Completed",
"remains": "0", "currency": "USD"}
El servicio 6758 es un id real del catálogo. Las cantidades por debajo del mínimo de un servicio se rechazan, no se redondean hacia arriba.
Pega esto en ChatGPT, Claude o Cursor, indica tu lenguaje y obtendrás un cliente funcional. Lleva la lista completa de llamadas más el comportamiento que es fácil de equivocar.
Build me a client for the AutoSMO SMM API (v2), in a language I will name.
ENDPOINT
POST https://autosmo.com/api/v2 — form-encoded body, JSON response, no other verbs.
Authentication is the field `key`, sent with every call. Server-side only.
CALLS
action=services -> array of { service, name, type, category, rate (per 1000),
min, max, refill:bool, cancel:bool }
action=add params: service, link, quantity [, runs, interval] -> { "order": id }
custom comments: service, link, comments
action=status params: order | orders (comma separated, max 100)
-> { charge, start_count, status, remains, currency }
action=refill params: order | orders (max 100) -> { "refill": id }
action=refill_status params: refill | refills -> { "status": ... }
action=cancel params: orders (max 100)
action=balance -> { balance, currency }
BEHAVIOUR THAT COSTS MONEY IF IGNORED
- A timed-out `add` is not a failed `add`. The order may exist and be paid for.
Surface it for a human; do not resend it on a timer.
- Quantity outside a service's own min/max is refused outright, so read those
bounds from the catalogue and check before sending.
- Status is polled with `orders` and up to 100 ids at once. Per-order polling
works in testing and dies in production.
- A 200 response can still contain per-entry errors when several ids were
requested. Walk the entries; do not trust the envelope.
- "Partial" is a delivery that stopped early: `remains` is the shortfall and
`charge` is the real cost. Pass that difference back to your buyer.
- Refill and cancel exist only where the catalogue flags say so.
WHAT I EXPECT FROM YOU
- One function per call, with the response parsed into typed structures.
- My order reference stored next to the id this API returns.
- Two background jobs: refresh the catalogue, and follow orders still open.
- A rehearsal switch that logs calls without sending them, and a single
end-to-end test using the cheapest service in the catalogue.
Ni en el JavaScript del front-end, ni en un paquete móvil, ni en un repositorio público. Cualquiera que la tenga puede hacer pedidos contra tu saldo.
Como add no tiene clave de idempotencia, un reintento automático es la forma en que un pedido de un cliente se convierte en dos pedidos pagados.
Las tarifas, los límites y la disponibilidad cambian cuando los proveedores cambian los suyos. Una copia local desactualizada vende a precios que ya no tienes.
Integra remains en tu propia lógica de reembolsos. Marcar una entrega parcial como completada es la vía más rápida para ganarte un contracargo.
Haz el pedido más pequeño que permita el catálogo, consúltalo hasta que se complete y confirma que tu lado coincide con charge al céntimo antes de derivar el tráfico.
| Método HTTP | POST |
| URL de la API | https://autosmo.com/api/v2 |
| Formato de respuesta | JSON |
| Parameters | Description |
|---|---|
| key | Your API key |
| action | services |
Ejemplo de respuesta
[
{
"service": 1,
"name": "Followers",
"type": "Default",
"category": "First Category",
"rate": "0.90",
"min": "50",
"max": "10000",
"refill": true,
"cancel": true
},
{
"service": 2,
"name": "Comments",
"type": "Custom Comments",
"category": "Second Category",
"rate": "8",
"min": "10",
"max": "1500",
"refill": false,
"cancel": true
}
]
Ejemplo de respuesta
{
"order": 23501
}
| Parameters | Description |
|---|---|
| key | Your API key |
| action | status |
| order | Order ID |
Ejemplo de respuesta
{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
}
| Parameters | Description |
|---|---|
| key | Your API key |
| action | status |
| orders | Order IDs (separated by a comma, up to 100 IDs) |
Ejemplo de respuesta
{
"1": {
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
},
"10": {
"error": "Incorrect order ID"
},
"100": {
"charge": "1.44219",
"start_count": "234",
"status": "In progress",
"remains": "10",
"currency": "USD"
}
}
| Parameters | Description |
|---|---|
| key | Your API key |
| action | refill |
| order | Order ID |
Ejemplo de respuesta
{
"refill": "1"
}
| Parameters | Description |
|---|---|
| key | Your API key |
| action | refill |
| orders | Order IDs (separated by a comma, up to 100 IDs) |
Ejemplo de respuesta
[
{
"order": 1,
"refill": 1
},
{
"order": 2,
"refill": 2
},
{
"order": 3,
"refill": {
"error": "Incorrect order ID"
}
}
]
| Parameters | Description |
|---|---|
| key | Your API key |
| action | refill_status |
| refill | Refill ID |
Ejemplo de respuesta
{
"status": "Completed"
}
| Parameters | Description |
|---|---|
| key | Your API key |
| action | refill_status |
| refills | Refill IDs (separated by a comma, up to 100 IDs) |
Ejemplo de respuesta
[
{
"refill": 1,
"status": "Completed"
},
{
"refill": 2,
"status": "Rejected"
},
{
"refill": 3,
"status": {
"error": "Refill not found"
}
}
]
| Parameters | Description |
|---|---|
| key | Your API key |
| action | cancel |
| orders | Order IDs (separated by a comma, up to 100 IDs) |
Ejemplo de respuesta
[
{
"order": 9,
"cancel": {
"error": "Incorrect order ID"
}
},
{
"order": 2,
"cancel": 1
}
]
| Parameters | Description |
|---|---|
| key | Your API key |
| action | balance |
Ejemplo de respuesta
{
"balance": "100.84292",
"currency": "USD"
}
Ejemplo de código PHP