Español
Cappi-Services

Documentación de la API de reventa

Vende nuestros servicios de Steam desde tu propio panel a precios de revendedor.

Crea pedidos, sigue su entrega y consulta tu saldo con simples solicitudes HTTP. Todas las respuestas son JSON y todos los precios están en USD.

Los pedidos realizados a través de la API tienen un 20% de descuento sobre los precios del panel. Los precios de abajo ya lo incluyen.

URL base

https://cappiservices.com/api/Reseller

Tu clave de API está en el panel del cliente, en API Key. Al crear una clave nueva, la anterior queda invalidada de inmediato. Abrir la página de API Key

Pruebas y uso

Para probar y usar la API, puedes usar Swagger UI:

https://cappiservices.com/swagger

Autenticación

Todas las solicitudes, excepto ServicesList, necesitan tu clave de API. Envíala de una de estas tres formas:

Las claves creadas antes de noviembre de 2026 pueden contener + y /: codifícalas como URL cuando las envíes en la query string; de lo contrario, + se convierte en un espacio y la clave es rechazada. Las claves nuevas tienen 64 caracteres hexadecimales y no necesitan codificación.

Solicitudes y respuestas

Los parámetros van en la query string o en el cuerpo de un formulario (POST). Si todo sale bien, se devuelve HTTP 200; un error de negocio devuelve HTTP 400 con un campo error (RegisterOrder también establece success en false). No se cobra nada cuando se rechaza un pedido.

Límite de 120 solicitudes cada 1 minuto(s) por dirección IP. Por encima de ese límite, la API responde HTTP 429 con un encabezado Retry-After.

Servicios

Esta tabla es en vivo: los precios ya incluyen tu descuento y max es la cantidad disponible en este momento (depende del stock de nuestras cuentas). RegisterOrder rechaza un servicio marcado como no disponible hasta que vuelva a estarlo; la misma información está en el campo active de ServicesList.

ID Servicio Tipo Precio por unidad Mín. / Máx. Estado
199825
Steam Like SharedFiles/Screenshots/Guides/Workshop

link: URL de la captura de pantalla, ilustración, guía o elemento del Workshop: steamcommunity.com/sharedfiles/filedetails/?id=... (o /workshop/filedetails/?id=...).

Default $ 0.0152 1 / 4797 Activo
199826
Steam Favorite SharedFiles/Screenshots/Guides/Workshop

link: URL de la captura de pantalla, ilustración, guía o elemento del Workshop: steamcommunity.com/sharedfiles/filedetails/?id=... (o /workshop/filedetails/?id=...).

Default $ 0.0152 1 / 4797 Activo
199827
Steam Group Members

link: URL pública del grupo: steamcommunity.com/groups/tugrupo. El grupo debe ser público.

Default $ 0.02 1 / 5467 Activo
199828
Steam Workshop Followers

link: SteamID64 del autor del Workshop (17 dígitos, p. ej. 76561198307708414) o steamcommunity.com/profiles/SteamID64. No se aceptan URL personalizadas (/id/nombre).

Default $ 0.012 1 / 4797 Activo
199829
Steam Curator Followers

link: Página del curador: store.steampowered.com/curator/12345678-Name/.

Default $ 0.024 1 / 5467 Activo
199830
Steam Game Review Rate Up (helpful votes)

link: URL del análisis: steamcommunity.com/id/user/recommended/appid/ o steamcommunity.com/profiles/SteamID64/recommended/appid/. Los votos siempre son "útil" (Rate Up).

Default $ 0.012 1 / 4797 Activo
199831
Steam Trade Boost (trade offers, 1 gem each)

link: URL de intercambio de Steam de la cuenta receptora: steamcommunity.com/tradeoffer/new/?partner=...&token=... El inventario debe ser público; cada unidad es una oferta de intercambio que incluye 1 gema.

Default $ 0.0022 1 / 1000 Activo
199832
Steam Profile Comments (ready-made packages)

link: SteamID64 del perfil (17 dígitos) o steamcommunity.com/profiles/SteamID64. El perfil debe permitir comentarios. Los comentarios provienen de nuestros paquetes predefinidos (parámetro obligatorio package).

Parámetros opcionales: package

Default $ 0.0264 1 / 10000 Activo
199833
Steam Screenshot/Artwork/Workshop Comments (ready-made packages)

link: URL de la captura de pantalla, ilustración o elemento del Workshop (steamcommunity.com/sharedfiles/filedetails/?id=...). Los comentarios provienen de nuestros paquetes predefinidos (parámetro obligatorio package).

Parámetros opcionales: package

Default $ 0.0264 1 / 10000 Activo
199834
Steam Group Comments (ready-made packages)

link: URL pública del grupo: steamcommunity.com/groups/tugrupo. Los comentarios provienen de nuestros paquetes predefinidos (parámetro obligatorio package).

Parámetros opcionales: package

Default $ 0.0264 1 / 10000 Activo
199835
Steam Profile Comments (your own comments)

link: SteamID64 del perfil o steamcommunity.com/profiles/SteamID64, más tus propios comentarios en el parámetro comments (uno por línea). Parámetro delay opcional.

Parámetros opcionales: delay, comments_json, package, allow_partial

Custom Comments $ 0.0264 1 / 10000 Activo
199836
Steam Screenshot/Artwork/Workshop Comments (your own comments)

link: URL de la captura de pantalla, ilustración o elemento del Workshop, más tus propios comentarios en el parámetro comments (uno por línea). Parámetro delay opcional.

Parámetros opcionales: delay, comments_json, package, allow_partial

Custom Comments $ 0.0264 1 / 10000 Activo
199837
Steam Group Comments (your own comments)

link: URL pública del grupo, más tus propios comentarios en el parámetro comments (uno por línea). Parámetro delay opcional.

Parámetros opcionales: delay, comments_json, package, allow_partial

Custom Comments $ 0.0264 1 / 10000 Activo

Servicios de comentarios

Paquetes oficiales: usa lib:<id> en el parámetro package. Haz clic en un nombre para ver sus comentarios:

En los servicios de comentarios predefinidos el parámetro package es obligatorio. Acepta cat:<category>[:<language>] (comentarios aprobados de nuestra biblioteca en una categoría; sin el idioma, inglés más los comentarios sin palabras) y lib:<id> (un paquete oficial o publicado de la biblioteca, o uno de tus paquetes; hasta 10 por pedido). Separa varios con comas: el pedido usa hasta quantity comentarios distintos de ellos, sorteados sin repetir (uno por comentario), y necesita al menos 5 comentarios.

Categorías de la biblioteca:

cat:praise Compliments cat:friendly Greetings & Wishes cat:funny Funny cat:game Skill & Gameplay cat:counter_strike Counter-Strike cat:teammate Teammates & GG cat:rep +Rep (gameplay) cat:emoji Emoji cat:ascii_art ASCII Art cat:birthday Birthday cat:halloween Halloween cat:christmas Christmas cat:new_year New Year cat:valentines Valentine's Day cat:festive Other Holidays cat:toxic Toxic cat:spicy Spicy (18+) cat:other Other

Códigos de idioma: en, pt, es, ru, tr, de, pl, zh, ja, fr, it, ko, uk, ar, th, vi, id, ms, tl, hi, he, cs, sk, nl, hu, ro, sv, da, fi, no, el, bg, sr, none, other (none = comentarios sin palabras, como emoji).

Tus propios comentarios (parámetro comments): un comentario por línea, hasta 500 líneas de 1000 caracteres cada una. Las líneas vacías se ignoran. Envíalo en el cuerpo del formulario, no en la URL.

Los servicios de comentarios propios aceptan exactamente un origen: comments (un comentario por línea, como arriba), comments_json (solo en el cuerpo del formulario: un array JSON de strings, un comentario por elemento; se mantienen los saltos de línea y la sangría; hasta 999 bytes y 30 líneas por comentario, y quantity puede ser como máximo 25 veces el número de comentarios distintos) o package=lib:<id> (tus paquetes privados de la biblioteca, separados por comas).

Cada comentario propio se revisa antes de crear el pedido. Solo se rechazan las estafas: reputación de intercambio o de confianza, enlaces, contacto fuera de Steam, hacerse pasar por el soporte de Valve o Steam, sorteos falsos o publicidad, datos personales reales y contenido sexual con menores. Se permiten bromas, groserías y contenido tóxico o adulto. Si algún comentario no se aprueba, el pedido se rechaza y no se cobra nada; envía allow_partial=1 para continuar solo con los aprobados (mismo precio). Una lista comments_json con más comentarios distintos que quantity se recorta a una muestra aleatoria (truncatedComments).

Parámetro delay (solo comentarios personalizados): intervalo entre dos comentarios. Valores aceptados: 10 Seconds, 7 Minutes, 15 Minutes, 30 Minutes, 1 Hour, 3 Hours, 6 Hours. Predeterminado: 10 Seconds. El precio por comentario es el del intervalo elegido; el rate de la tabla es el precio de 10 Seconds.

Endpoints

GET /ServicesList

Lista de todos los servicios con ID, precio por unidad, límites y cómo rellenar el link. No requiere autenticación.

Ejemplo de solicitud

curl "https://cappiservices.com/api/Reseller/ServicesList"

Ejemplo de respuesta

[
  {
    "rate": 0.0152,
    "service": 199825,
    "category": "Steam",
    "name": "Steam Like SharedFiles/Screenshots/Guides/Workshop",
    "desc": "link: a steamcommunity.com/sharedfiles/filedetails/?id=... URL ...",
    "type": "Default",
    "min": 1,
    "max": 1100,
    "active": true,
    "optionalParams": []
  },
  {
    "rate": 0.0264,
    "service": 199835,
    "category": "Steam",
    "name": "Steam Profile Comments (your own comments)",
    "desc": "link: the profile SteamID64 ... Send \"comments\", \"comments_json\" or package=lib:<id> ...",
    "type": "Custom Comments",
    "min": 1,
    "max": 10000,
    "active": true,
    "optionalParams": ["delay", "comments_json", "package", "allow_partial"]
  }
]

Parámetros de la respuesta

ParámetroTipoDescripción
serviceintegerEl ID del servicio.
ratedecimalPrecio por unidad; todos los precios están en USD.
categorystringLa categoría del servicio.
namestringEl nombre del servicio.
descstringDescripción del servicio o de cómo usarlo.
typestringDefault (link + quantity; los servicios de comentarios también requieren package) o Custom Comments (además requiere comments, comments_json o package=lib:).
minintegerLa cantidad mínima permitida para el servicio.
maxintegerLa cantidad máxima permitida para el servicio.
activebooleanfalse cuando el servicio está desactivado o sin stock: RegisterOrder lo rechaza.
optionalParamsstring[]Parámetros opcionales de RegisterOrder que acepta el servicio.

GET /Balance

Saldo actual de la cartera de la cuenta propietaria de la clave de API.

Parámetros de la solicitud

ParámetroTipoDescripción
keystringLa clave de API para la autenticación.

Ejemplo de solicitud

curl -H "X-Api-Key: YOUR_API_KEY" "https://cappiservices.com/api/Reseller/Balance"

Ejemplo de respuesta

{ "balance": 250.75, "currency": "USD" }

POST /RegisterOrder

Crea un pedido y cobra de tu cartera de inmediato (quantity × rate). El link se valida antes del cobro; el pedido se rechaza, sin cobrar nada, cuando el servicio no está disponible, la cantidad está fuera de rango, el link no corresponde al servicio o el saldo es insuficiente.

Parámetros de la solicitud

ParámetroTipoDescripción
keystringLa clave de API para la autenticación.
serviceIdintegerEl ID del servicio.
linkstringDestino del pedido: URL, SteamID64 o URL de intercambio, según el servicio (consulta la tabla de servicios).
quantityintegerUnidades a entregar, entre el mínimo y el máximo del servicio.
commentsstringSolo servicios de comentarios personalizados: tus comentarios, uno por línea.
comments_jsonstringSolo servicios de comentarios propios y solo en el cuerpo del formulario: array JSON de strings, un comentario por elemento (se permiten saltos de línea). Úsalo en lugar de comments.
packagestringSolo servicios de comentarios. Obligatorio en los servicios de comentarios predefinidos; varios valores separados por comas. Acepta cat:<category>[:<language>] y lib:<id> (hasta 10 lib:<id> por pedido). En los servicios de comentarios personalizados: lib:<id> de tus paquetes privados.
delaystringSolo servicios de comentarios personalizados: intervalo entre comentarios; el precio por comentario es el de este intervalo. Opcional, predeterminado 10 Seconds.
allow_partialstringSolo servicios de comentarios propios: 1 = continuar con los comentarios aprobados cuando alguno no se apruebe (mismo precio). Opcional.

Ejemplo de solicitud

curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
  -d "serviceId=199825" \
  -d "link=https://steamcommunity.com/sharedfiles/filedetails/?id=123456789" \
  -d "quantity=100" \
  "https://cappiservices.com/api/Reseller/RegisterOrder"

# custom comments (199835): one comment per line, URL-encoded line breaks (%0A) in the form body
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
  --data-urlencode "serviceId=199835" \
  --data-urlencode "link=76561198307708414" \
  --data-urlencode "quantity=20" \
  --data-urlencode "delay=7 Minutes" \
  --data-urlencode $'comments=Nice profile!\nGreat games.\n+rep' \
  "https://cappiservices.com/api/Reseller/RegisterOrder"

# comments_json (199835-199837, form body only): one comment per item, line breaks kept
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
  --data-urlencode "serviceId=199835" \
  --data-urlencode "link=76561198307708414" \
  --data-urlencode "quantity=20" \
  --data-urlencode 'comments_json=["Nice profile!","GG WP\nsee you next match"]' \
  "https://cappiservices.com/api/Reseller/RegisterOrder"

# library (199832-199834, package required): categories and/or packages, comma separated
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
  --data-urlencode "serviceId=199832" \
  --data-urlencode "link=76561198307708414" \
  --data-urlencode "quantity=20" \
  --data-urlencode "package=cat:praise:en,cat:emoji,lib:12" \
  "https://cappiservices.com/api/Reseller/RegisterOrder"

Ejemplo de respuesta

{ "success": true, "error": null, "insufficientFunds": false, "orderId": 12345, "charge": 1.52 }

{ "success": false, "error": "Insufficient Funds!!", "insufficientFunds": true, "orderId": 0, "charge": 1.52 }

{ "success": false, "error": "Some comments were not approved (see rejectedIndexes). ...", "insufficientFunds": false, "orderId": 0, "charge": 0,
  "acceptedComments": 2, "rejectedComments": 1, "reviewComments": 0, "unverifiedComments": 0, "truncatedComments": 0,
  "rejectedIndexes": [2], "rejectedReasons": ["link"] }

Parámetros de la respuesta

ParámetroTipoDescripción
successbooleanIndica si el pedido se registró correctamente.
orderIdintegerEl ID del pedido registrado.
chargedecimalImporte cobrado (USD): quantity × rate.
insufficientFundsbooleanIndica si el pedido no se procesó por saldo insuficiente.
errorstringMensaje de error si el registro del pedido falló.
acceptedComments
rejectedComments
reviewComments
unverifiedComments
truncatedComments
integerSolo en pedidos de comentarios propios: cuántos comentarios de tu lista se aprobaron, se rechazaron, se enviaron a revisión manual, quedaron sin revisar (inténtalo más tarde) y quedaron fuera por el recorte a quantity.
rejectedIndexes
rejectedReasons
integer[]
string[]
Solo en pedidos de comentarios propios: posiciones (desde 0) de los comentarios rechazados en tu lista y el motivo de cada uno (format, link, contact o policy).

GET /OrderStatus

Estado y cifras de entrega de uno de tus pedidos.

Parámetros de la solicitud

ParámetroTipoDescripción
keystringLa clave de API para la autenticación.
orderIdintegerEl número de identificación del pedido.

Ejemplo de solicitud

curl -H "X-Api-Key: YOUR_API_KEY" "https://cappiservices.com/api/Reseller/OrderStatus?orderId=12345"

Ejemplo de respuesta

{
  "status": "Complete",
  "charge": 1.52,
  "walletReturn": 0.0304,
  "mode": "Like_SharedFile",
  "sucess": 98,
  "success": 98,
  "failed": 2,
  "quantity": 100,
  "remains": 2,
  "observation": "Info - Your order was finalized due to a lack of accounts in the database...",
  "currency": "USD",
  "date": "2026-11-01T14:03:27.1234567Z"
}

Parámetros de la respuesta

ParámetroTipoDescripción
statusstringEstado del pedido: EnviarParaBackEnd (pagado, esperando el envío), NaFila (en cola), Processing (en entrega) o Complete (finalizado: entregado por completo, entregado parcialmente, fallido o cancelado).
chargedecimalImporte cobrado de tu cartera al crear el pedido (USD).
walletReturndecimalImporte devuelto a tu cartera por las unidades que no se pudieron entregar (USD). 0 hasta que el pedido esté Complete.
modestringNombre interno del servicio (MODE).
successintegerUnidades entregadas.
sucessintegerMismo valor que success. Se mantiene por compatibilidad (ortografía antigua).
failedintegerUnidades no entregadas (definitivo solo cuando el estado es Complete).
quantityintegerUnidades pedidas.
remainsintegerUnidades que aún faltan por entregar.
observationstringMensaje sobre el resultado (enlace no válido, sin cuentas, cancelado...). Vacío cuando todo se entregó.
currencystringLa moneda de los importes cobrados.
datestringFecha y hora de creación (UTC).

Ciclo de vida del pedido y reembolsos

La cartera se cobra al crear el pedido. Los pedidos pasan por EnviarParaBackEnd, NaFila, Processing y Complete. Complete es el único estado final: compara quantity, success y failed para saber si el pedido se entregó por completo o parcialmente. Las unidades que no se pudieron entregar se reembolsan automáticamente a la cartera cuando el pedido termina (walletReturn), y observation explica el motivo. Los pedidos no se pueden cancelar a través de la API; usa el panel del cliente mientras el pedido esté en Processing.

Mensajes de error

Todos los errores usan HTTP 400 y el campo error. Los más comunes:

{ "error": "Invalid ApiKey." }
errorDescripción
Invalid parameterskey, serviceId, link o quantity ausentes o no válidos.
Invalid ApiKey.La clave no pertenece a ninguna cuenta (revisa la codificación URL de las claves antiguas).
Your account has been disabled, please contact support.
Before accessing the panel you need to confirm your email.
Cuenta desactivada o correo electrónico aún sin confirmar.
Service:{id} Not FoundserviceId desconocido.
Service temporarily unavailable.Servicio desactivado o sin stock en este momento (consulta active en ServicesList).
Quantity must be between 1 and {max}.Cantidad fuera del mín./máx. del servicio.
Invalid URL Link
Invalid Parameters: Only the user's SteamID64 must be entered, not a URL
El link no corresponde al formato que espera el servicio.
Insufficient Funds!!Saldo de la cartera inferior a quantity × rate. No se cobró nada.
Unknown comments package "..."
Unknown comments category "..."
Some comments were not approved ...
Comment review limit reached, try again later
Comentarios: paquete o categoría desconocidos, selección demasiado pequeña, comentarios no aprobados o revisión temporalmente no disponible. No se cobra nada.
Order not found.
Access denied.
El pedido no existe o pertenece a otra cuenta.
Too many requests... (HTTP 429)Límite de 120 solicitudes cada 1 minuto(s) por dirección IP. Por encima de ese límite, la API responde HTTP 429 con un encabezado Retry-After.