Polski
Cappi-Services

Dokumentacja API dla resellerów

Sprzedawaj nasze usługi Steam z własnego panelu po cenach dla resellerów.

Składaj zamówienia, śledź ich realizację i sprawdzaj saldo za pomocą prostych żądań HTTP. Każda odpowiedź jest w formacie JSON, a wszystkie ceny podane są w USD.

Zamówienia złożone przez API mają 20% zniżki w porównaniu z cenami w panelu. Podane poniżej ceny już ją uwzględniają.

Bazowy URL

https://cappiservices.com/api/Reseller

Twój klucz API znajdziesz w panelu klienta, w sekcji API Key. Utworzenie nowego klucza natychmiast unieważnia poprzedni. Otwórz stronę API Key

Testowanie i użycie

Aby przetestować API i z niego korzystać, możesz użyć Swagger UI:

https://cappiservices.com/swagger

Uwierzytelnianie

Każde żądanie poza ServicesList wymaga Twojego klucza API. Możesz go przesłać na jeden z trzech sposobów:

Klucze utworzone przed listopadem 2026 mogą zawierać znaki + i /: zakoduj je (URL-encode) przy wysyłaniu w zapytaniu URL, w przeciwnym razie + zamieni się w spację i klucz zostanie odrzucony. Nowe klucze mają 64 znaki szesnastkowe i nie wymagają kodowania.

Żądania i odpowiedzi

Parametry przesyłaj w zapytaniu URL lub w treści formularza (POST). Powodzenie zwraca HTTP 200; błąd biznesowy zwraca HTTP 400 z polem error (RegisterOrder ustawia dodatkowo success na false). Gdy zamówienie zostaje odrzucone, nic nie jest pobierane z salda.

Limit 120 żądań co 1 min na adres IP. Po jego przekroczeniu API odpowiada HTTP 429 z nagłówkiem Retry-After.

Usługi

Ta tabela jest aktualizowana na żywo: ceny już uwzględniają Twoją zniżkę, a max to ilość dostępna w tej chwili (zależy od zapasu naszych kont). Usługa oznaczona jako niedostępna jest odrzucana przez RegisterOrder, dopóki nie wróci; ta sama informacja znajduje się w polu active w ServicesList.

ID Usługa Typ Cena za jednostkę Min / Max Status
199825
Steam Like SharedFiles/Screenshots/Guides/Workshop

link: Adres URL zrzutu ekranu, grafiki, poradnika lub elementu Warsztatu: steamcommunity.com/sharedfiles/filedetails/?id=... (lub /workshop/filedetails/?id=...).

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

link: Adres URL zrzutu ekranu, grafiki, poradnika lub elementu Warsztatu: steamcommunity.com/sharedfiles/filedetails/?id=... (lub /workshop/filedetails/?id=...).

Default $ 0.0152 1 / 4797 Aktywna
199827
Steam Group Members

link: Adres URL publicznej grupy: steamcommunity.com/groups/yourgroup. Grupa musi być publiczna.

Default $ 0.02 1 / 5467 Aktywna
199828
Steam Workshop Followers

link: SteamID64 autora Warsztatu (17 cyfr, np. 76561198307708414) lub steamcommunity.com/profiles/SteamID64. Niestandardowe adresy URL (/id/name) nie są akceptowane.

Default $ 0.012 1 / 4797 Aktywna
199829
Steam Curator Followers

link: Strona kuratora: store.steampowered.com/curator/12345678-Name/.

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

link: Adres URL recenzji: steamcommunity.com/id/user/recommended/appid/ lub steamcommunity.com/profiles/SteamID64/recommended/appid/. Głosy są zawsze "przydatne" (Rate Up).

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

link: Adres URL wymiany Steam konta odbierającego: steamcommunity.com/tradeoffer/new/?partner=...&token=... Ekwipunek musi być publiczny; każda jednostka to jedna oferta wymiany zawierająca 1 klejnot.

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

link: SteamID64 profilu (17 cyfr) lub steamcommunity.com/profiles/SteamID64. Profil musi zezwalać na komentarze. Komentarze pochodzą z naszych gotowych pakietów (wymagany parametr package).

Parametry opcjonalne: package

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

link: Adres URL zrzutu ekranu, grafiki lub elementu Warsztatu (steamcommunity.com/sharedfiles/filedetails/?id=...). Komentarze pochodzą z naszych gotowych pakietów (wymagany parametr package).

Parametry opcjonalne: package

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

link: Adres URL publicznej grupy: steamcommunity.com/groups/yourgroup. Komentarze pochodzą z naszych gotowych pakietów (wymagany parametr package).

Parametry opcjonalne: package

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

link: SteamID64 profilu lub steamcommunity.com/profiles/SteamID64 oraz Twoje własne komentarze w parametrze comments (jeden w wierszu). Opcjonalny parametr delay.

Parametry opcjonalne: delay, comments_json, package, allow_partial

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

link: Adres URL zrzutu ekranu, grafiki lub elementu Warsztatu oraz Twoje własne komentarze w parametrze comments (jeden w wierszu). Opcjonalny parametr delay.

Parametry opcjonalne: delay, comments_json, package, allow_partial

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

link: Adres URL publicznej grupy oraz Twoje własne komentarze w parametrze comments (jeden w wierszu). Opcjonalny parametr delay.

Parametry opcjonalne: delay, comments_json, package, allow_partial

Custom Comments $ 0.0264 1 / 10000 Aktywna

Usługi komentarzy

Oficjalne pakiety: użyj lib:<id> w parametrze package. Kliknij nazwę, aby zobaczyć jego komentarze:

W usługach z gotowymi komentarzami parametr package jest wymagany. Przyjmuje cat:<category>[:<language>] (zatwierdzone komentarze z naszej biblioteki w jednej kategorii; bez języka: angielskie oraz komentarze bez słów) i lib:<id> (oficjalny lub opublikowany pakiet biblioteki albo jeden z Twoich pakietów; do 10 na zamówienie). Kilka wartości oddziel przecinkami: zamówienie używa do quantity różnych komentarzy z nich, losowanych bez powtórzeń (jeden na komentarz), i wymaga co najmniej 5 komentarzy.

Kategorie biblioteki:

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

Kody języków: 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 = komentarze bez słów, np. emoji).

Własne komentarze (parametr comments): jeden komentarz w wierszu, maksymalnie 500 wierszy po 1000 znaków każdy. Puste wiersze są ignorowane. Wysyłaj je w treści formularza, a nie w adresie URL.

Usługi z własnymi komentarzami przyjmują dokładnie jedno źródło: comments (jeden komentarz w wierszu, jak wyżej), comments_json (tylko w treści formularza: tablica JSON z tekstami, jeden komentarz na element; podziały wierszy i wcięcia są zachowane; do 999 bajtów i 30 wierszy na komentarz, a quantity może wynosić najwyżej 25 razy liczbę różnych komentarzy) lub package=lib:<id> (Twoje prywatne pakiety biblioteki, oddzielone przecinkami).

Każdy własny komentarz jest sprawdzany przed utworzeniem zamówienia. Odrzucane są tylko oszustwa: reputacja wymian lub zaufania, linki, kontakt poza Steam, podszywanie się pod wsparcie Valve lub Steam, fałszywe rozdania lub reklamy, prawdziwe dane osobowe i treści seksualne z udziałem nieletnich. Żarty, przekleństwa oraz treści toksyczne lub dla dorosłych są dozwolone. Jeśli któryś komentarz nie zostanie zatwierdzony, zamówienie jest odrzucane i nic nie jest pobierane; wyślij allow_partial=1, aby kontynuować tylko z zatwierdzonymi (ta sama cena). Lista comments_json z większą liczbą różnych komentarzy niż quantity jest przycinana do losowej próbki (truncatedComments).

Parametr delay (tylko własne komentarze): odstęp między dwoma komentarzami. Dozwolone wartości: 10 Seconds, 7 Minutes, 15 Minutes, 30 Minutes, 1 Hour, 3 Hours, 6 Hours. Domyślnie: 10 Seconds. Cena za komentarz to cena wybranego odstępu; rate w tabeli to cena dla 10 Seconds.

Endpointy

GET /ServicesList

Lista wszystkich usług z ID, ceną za jednostkę, limitami i opisem sposobu wypełnienia pola link. Uwierzytelnianie nie jest wymagane.

Przykładowe żądanie

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

Przykładowa odpowiedź

[
  {
    "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"]
  }
]

Parametry odpowiedzi

ParametrTypOpis
serviceintegerID usługi.
ratedecimalCena za jednostkę, wszystkie ceny są podane w USD.
categorystringKategoria usługi.
namestringNazwa usługi.
descstringOpis usługi lub sposób jej użycia.
typestringDefault (link + quantity; usługi komentarzy wymagają także package) lub Custom Comments (wymaga także comments, comments_json lub package=lib:).
minintegerMinimalna dozwolona ilość dla usługi.
maxintegerMaksymalna dozwolona ilość dla usługi.
activebooleanfalse, gdy usługa jest wyłączona lub brakuje zapasu: RegisterOrder ją odrzuca.
optionalParamsstring[]Opcjonalne parametry RegisterOrder, które usługa akceptuje.

GET /Balance

Aktualne saldo portfela konta, do którego należy klucz API.

Parametry żądania

ParametrTypOpis
keystringKlucz API do uwierzytelniania.

Przykładowe żądanie

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

Przykładowa odpowiedź

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

POST /RegisterOrder

Tworzy zamówienie i od razu pobiera środki z portfela (quantity × rate). Link jest sprawdzany przed pobraniem środków; zamówienie jest odrzucane, bez żadnej opłaty, gdy usługa jest niedostępna, ilość wykracza poza zakres, link nie pasuje do usługi albo saldo jest niewystarczające.

Parametry żądania

ParametrTypOpis
keystringKlucz API do uwierzytelniania.
serviceIdintegerID usługi.
linkstringCel zamówienia: adres URL, SteamID64 lub adres URL wymiany, zależnie od usługi (zobacz tabelę Usługi).
quantityintegerLiczba jednostek do dostarczenia, między min a max usługi.
commentsstringTylko usługi własnych komentarzy: Twoje komentarze, jeden w wierszu.
comments_jsonstringTylko usługi z własnymi komentarzami i tylko w treści formularza: tablica JSON z tekstami, jeden komentarz na element (podziały wierszy dozwolone). Używaj zamiast comments.
packagestringTylko usługi komentarzy. Wymagany w usługach z gotowymi komentarzami; kilka wartości oddzielonych przecinkami. Przyjmuje cat:<category>[:<language>] i lib:<id> (do 10 lib:<id> na zamówienie). W usługach z własnymi komentarzami: lib:<id> Twoich prywatnych pakietów.
delaystringTylko usługi własnych komentarzy: odstęp między komentarzami; cena za komentarz to cena tego odstępu. Opcjonalny, domyślnie 10 Seconds.
allow_partialstringTylko usługi z własnymi komentarzami: 1 = kontynuuj z zatwierdzonymi komentarzami, gdy niektóre nie zostaną zatwierdzone (ta sama cena). Opcjonalny.

Przykładowe żądanie

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"

Przykładowa odpowiedź

{ "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"] }

Parametry odpowiedzi

ParametrTypOpis
successbooleanOkreśla, czy zamówienie zostało pomyślnie złożone.
orderIdintegerID złożonego zamówienia.
chargedecimalPobrana kwota (USD): quantity × rate.
insufficientFundsbooleanOkreśla, czy zamówienie nie zostało zrealizowane z powodu niewystarczającego salda.
errorstringKomunikat błędu, jeśli nie udało się złożyć zamówienia.
acceptedComments
rejectedComments
reviewComments
unverifiedComments
truncatedComments
integerTylko zamówienia z własnymi komentarzami: ile komentarzy z Twojej listy zatwierdzono, odrzucono, wysłano do ręcznej weryfikacji, nie sprawdzono (spróbuj później) i pominięto przez przycięcie do quantity.
rejectedIndexes
rejectedReasons
integer[]
string[]
Tylko zamówienia z własnymi komentarzami: pozycje (od 0) odrzuconych komentarzy na Twojej liście i powód każdego z nich (format, link, contact lub policy).

GET /OrderStatus

Status i liczby realizacji jednego z Twoich zamówień.

Parametry żądania

ParametrTypOpis
keystringKlucz API do uwierzytelniania.
orderIdintegerNumer identyfikacyjny zamówienia.

Przykładowe żądanie

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

Przykładowa odpowiedź

{
  "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"
}

Parametry odpowiedzi

ParametrTypOpis
statusstringStatus zamówienia: EnviarParaBackEnd (opłacone, czeka na wysłanie), NaFila (w kolejce), Processing (w trakcie realizacji) lub Complete (zakończone: w pełni zrealizowane, częściowo zrealizowane, nieudane lub anulowane).
chargedecimalKwota pobrana z portfela w chwili utworzenia zamówienia (USD).
walletReturndecimalKwota zwrócona do portfela za jednostki, których nie udało się dostarczyć (USD). 0, dopóki zamówienie nie osiągnie statusu Complete.
modestringWewnętrzna nazwa usługi (MODE).
successintegerDostarczone jednostki.
sucessintegerTa sama wartość co success. Zachowane ze względu na zgodność (dawna pisownia).
failedintegerJednostki niedostarczone (ostateczna wartość dopiero przy statusie Complete).
quantityintegerZamówione jednostki.
remainsintegerJednostki, które jeszcze zostały do dostarczenia.
observationstringKomunikat o wyniku (nieprawidłowy link, brak kont, anulowanie...). Pusty, gdy wszystko zostało dostarczone.
currencystringWaluta opłat.
datestringData i godzina utworzenia (UTC).

Cykl życia zamówienia i zwroty

Środki z portfela są pobierane w chwili utworzenia zamówienia. Zamówienia przechodzą przez EnviarParaBackEnd, NaFila, Processing i Complete. Complete jest jedynym statusem końcowym: porównaj quantity, success i failed, aby sprawdzić, czy zamówienie zostało zrealizowane w całości, czy częściowo. Jednostki, których nie udało się dostarczyć, są automatycznie zwracane do portfela po zakończeniu zamówienia (walletReturn), a observation wyjaśnia powód. Zamówień nie można anulować przez API; użyj panelu klienta, gdy zamówienie ma status Processing.

Komunikaty o błędach

Wszystkie błędy używają HTTP 400 i pola error. Najczęstsze:

{ "error": "Invalid ApiKey." }
errorOpis
Invalid parametersBrakujący lub nieprawidłowy key, serviceId, link lub quantity.
Invalid ApiKey.Klucz nie należy do żadnego konta (sprawdź kodowanie URL starszych kluczy).
Your account has been disabled, please contact support.
Before accessing the panel you need to confirm your email.
Konto wyłączone lub adres e-mail nie został jeszcze potwierdzony.
Service:{id} Not FoundNieznany serviceId.
Service temporarily unavailable.Usługa jest teraz wyłączona lub brakuje zapasu (zobacz active w ServicesList).
Quantity must be between 1 and {max}.Ilość poza zakresem min/max usługi.
Invalid URL Link
Invalid Parameters: Only the user's SteamID64 must be entered, not a URL
Link nie pasuje do formatu oczekiwanego przez usługę.
Insufficient Funds!!Saldo portfela niższe niż quantity × rate. Nic nie zostało pobrane.
Unknown comments package "..."
Unknown comments category "..."
Some comments were not approved ...
Comment review limit reached, try again later
Komentarze: nieznany pakiet lub kategoria, za mały wybór, niezatwierdzone komentarze lub weryfikacja chwilowo niedostępna. Nic nie jest pobierane.
Order not found.
Access denied.
Zamówienie nie istnieje lub należy do innego konta.
Too many requests... (HTTP 429)Limit 120 żądań co 1 min na adres IP. Po jego przekroczeniu API odpowiada HTTP 429 z nagłówkiem Retry-After.