Dokumentacja komend
Wszystkie komendy Zanfia CLI pogrupowane według zasobów w kolejności rejestracji w CLI: uwierzytelnianie, produkty, oferty, ustawienia koszyka, strona, e-maile, OTO, bumpy, kursy, certyfikaty, newslettery, społeczności, rozmowy, klienci, kampanie, segmenty, formularze, opinie, marka, zespół, zamówienia, subskrypcje, statystyki, rabaty, polecenia, reklamy Meta, workflowy, lejki, strony, social media, media.
Wszystkie komendy obsługują --json dla wyjścia czytelnego maszynowo; --api-key <key> nadpisuje zapisane poświadczenie na jedno wywołanie, a --verbose loguje szczegóły zapytań i odpowiedzi. Te flagi globalne działają w dowolnym miejscu (zanfia --json products list i zanfia products list --json znaczą to samo). Kwoty są w jednostkach podrzędnych (minor units) (1999 = 19,99), chyba że flaga mówi inaczej. Każda komenda odpowiada ścieżce Workspace API, więc wszystko, co tu znajdziesz, działa też jako zwykłe zapytanie HTTP. Poniżej jest każda końcowa komenda — po jednym wierszu; <komenda> --help wypisuje pełną listę flag.
Opcje przyjmujące JSON a flaga wyjścia --json
Wszędzie tam, gdzie komenda przyjmuje wartość JSON (--json, --patch, --config, --chapters, …), działa zarówno
--json <plik|inline>, jak i --json=<plik|inline>. Każda taka opcja przyjmuje JSON inline albo ścieżkę do pliku .json.
W komendach, w których --json niesie treść zapytania, wyjście czytelne maszynowo włączysz przez -o json
(albo podając flagę globalną przed komendą: zanfia --json offers update <id> --json body.json).
Uwierzytelnianie
| Komenda | Zastosowanie |
|---|---|
zanfia login [--address <url-platformy-twórcy>] [--api-url <url>] | Logowanie przez przeglądarkę (strona zgody OAuth); zapisuje token ważny 90 dni. --address loguje jako członka społeczności na platformie danego twórcy — tylko Community API |
zanfia register [--email <e>] [--name <n>] [--lang en|pl] [--access-code <c>] [--code <c>] | Utwórz nowe konto twórcy z terminala (6-cyfrowy kod e-mailem) i zaloguj CLI; pominięte wartości są dopytywane |
zanfia join <handle> [--email <e>] [--name <n>] [--code <c>] | Dołącz do publicznej społeczności z terminala (kod e-mailem) i zapisz klucz członka — bez konta i przeglądarki |
zanfia logout | Wyczyść zapisane dane logowania |
zanfia auth status | Pokaż, co CLI ma zapisane: ścieżkę, źródło poświadczeń, termin ważności, URL API |
zanfia auth set-key <key> [--api-url <url>] | Zapisz klucz API jako poświadczenie (klucze członków: podaj URL api-community twórcy) |
zanfia auth whoami | Workspace (albo członek społeczności) stojący za bieżącym poświadczeniem |
Produkty
| Komenda | Zastosowanie |
|---|---|
products list | Lista produktów w koncie |
products get <id> | Jeden produkt |
products create --name <n> --type <course|newsletter|community|…> [--description] [--free | --amount <major> --currency <c> [--period one_time|monthly|yearly]] | Nowy produkt; typy community/newsletter tworzą od razu pełną zawartość. --free / --amount dodatkowo tworzą domyślną ofertę (kwota tutaj w jednostkach głównych, np. 49.99) |
products update <id> [--name] [--description] | Zmień nazwę / opis |
products publish <id> | Status → opublikowany (widoczny dla klientów) |
products draft <id> | Status → draft (ukryty przed klientami) |
products archive <id> | Status → zarchiwizowany (to nie jest usunięcie) |
products prices list <pid> | Ceny zebrane ze wszystkich koszyków produktu |
products prices create <pid> --amount <minor> --currency pln|usd|eur|gbp [--label] | Dodaj jednorazową cenę płatną (tworzy domyślny koszyk, jeśli trzeba; synchronizacja bramki po stronie serwera) |
products appointment get <pid> | Konfiguracja rezerwacji produktu typu konsultacja / usługa / wydarzenie |
products appointment set <pid> [--config=<json|plik>] [--booking-method native|external] [--booking-url] [--duration <min>] [--location] [--deliverable …] [--delivery-time <n> --delivery-unit days|weeks] [--revision-rounds <n|unlimited>] [--brief-method] [--brief-url] [--event-mode online|offline] [--starts <iso>] [--ends <iso>] [--capacity <n>] [--show-on-success on|off] | Zaktualizuj konfigurację rezerwacji — najpierw czyta bieżącą, więc flagi częściowe wystarczą; pierwsza konfiguracja wymaga wszystkich pól obowiązkowych (albo --config) |
products after-purchase get <pid> | Ustawienia strony podziękowania i e-maili po zakupie |
products after-purchase set <pid> [--settings=<json|plik>] [--thank-you-type defaultPage|redirect] [--redirect-url] [--email-buyer-purchase on|off] [--notify-owner-purchase on|off] [--email-buyer-failed on|off] [--notify-owner-failed on|off] | Zaktualizuj ustawienia po zakupie (flagi częściowe się scalają); --settings dla pełnego obiektu z własną stroną podziękowania / treścią e-maili |
products images set <pid> --image <url> [--image <url> …] | Zastąp zdjęcia okładkowe (pełna zamiana; adresy https już hostowane — najpierw prześlij do biblioteki mediów) |
Plany i pakiety (products plans)
Poziomy z dołączonymi produktami. Reguły pilnuje serwer: unikalne id planów, najwyżej jeden domyślny, jeden poziom pakietowania, a planu sprzedawanego aktywnymi cenami nie da się usunąć.
| Komenda | Zastosowanie |
|---|---|
products plans get <pid> | Plany produktu: id, nazwa, aktywny, domyślny, dołączone produkty |
products plans set <pid> --json <plik|inline> | Pełna zamiana tablicy planów (albo {plans: [...]}) — wyślij każdy plan, który zostaje, z jego id; plany bez id są tworzone |
products plans count-clients <pid> [--plan <planId>] | Aktywni klienci, których efektywny plan to --plan (pomiń, by policzyć jeszcze niezapisany pierwszy/domyślny plan) |
products plans set-client-plan <pid> --plan <planId> (--client <wcid> | --email <e>) | Przenieś dostęp jednego klienta do innego planu — neutralne dla rozliczeń; członkostwo w społeczności uzgadnia serwer |
products plans backfill <pid> --community <communityProductId> --confirm | Utwórz od razu dokumenty członków społeczności dla każdego aktywnego klienta, którego plan ją zawiera |
Zawartość produktu do pobrania (products files)
| Komenda | Zastosowanie |
|---|---|
products files get --product <pid> | Obecność opisu + tabela plików produktu do pobrania |
products files set-content --product <pid> (--content <md> | --content-file <ścieżka>) | Zastąp opis Markdown wyświetlany nad listą plików |
products files add --product <pid> (--url <url> --name <n> [--media-id] [--size] | --files=<json|plik>) | Dołącz jeden plik albo kilka przez tablicę JSON {url, name, mediaId?, size?}; już dołączone mediaId są pomijane |
products files remove <uid> --product <pid> | Odłącz plik po jego uid |
products files reorder <uid...> --product <pid> | Zmień kolejność listy — podaj każdy obecny uid w nowej kolejności |
Baza wiedzy (products kb)
Produkt typu baza wiedzy adresujesz jego id produktu. Zapisy są zatwierdzonymi edycjami: czyszczą też niepublikowany szkic danego artykułu w edytorze panelu.
| Komenda | Zastosowanie |
|---|---|
products kb get <pid> | Kategorie (klucze drzewa = id do --category) i wszystkie artykuły, łącznie ze szkicami |
products kb tree set <pid> --json <plik|inline> | Zastąp całą kolejność — {"categories": [{"categoryId", "articleIds": []}, …]}, każda kategoria i artykuł; równoległa edycja jest odrzucana (tree-changed) — pobierz ponownie products kb get --json i ponów |
products kb article get <pid> <aid> | Jeden artykuł, pola opublikowane, pełna treść |
products kb article create <pid> --title <t> --category <cid> [--content | --content-file] [--status draft|available|unavailable] | Nowy artykuł (domyślnie draft) |
products kb article update <pid> <aid> [--title] [--status] [--category <cid>] [--content | --content-file] [--cover <mediaId>:<url> | --clear-cover] | Edytuj artykuł; --cover ustawia okładkę z biblioteki mediów (:<url> dla obrazu zewnętrznego) |
products kb article delete <pid> <aid> --confirm | Trwałe — aby zamiast tego ukryć, ustaw --status unavailable |
products kb category add <pid> --name <n> | Nowa kategoria główna |
products kb category rename <pid> <cid> --name <n> | Zmień nazwę (zdenormalizowana nazwa kategorii w artykułach podąża za nią) |
products kb category delete <pid> <cid> [--delete-articles] --confirm | Trwałe; niepusta kategoria wymaga --delete-articles |
Oferty (koszyki)
Oferta to koszyk (checkout) produktu; <cid> pochodzi z offers list.
| Komenda | Zastosowanie |
|---|---|
offers list [--product <pid>] | Przeglądaj oferty |
offers get <cid> | Jedna oferta z cenami i dołączonymi bumpami |
offers create --product <pid> [--free] [--name <n>] | Nowa oferta (oferty darmowe nie mają cen) |
offers update <cid> [--name] [--slug] [--title] [--description] [--success-url <url|none>] [--language <kod|none>] [--show-testimonials on|off] [--show-plan-includes on|off] [--invoice-as-option on|off] [--hide-country-field on|off] [--show-phone-field off|optional|required] [--allow-promotion-code off|subscriptions|all] [--force-b2b on|off] [--show-express-checkout on|off] [--promote-net-prices on|off] [--stripe-tax-behavior inclusive|exclusive] [--multiple-purchases on|off] [--allow-plan-upgrade on|off] [--terms-url] [--privacy-policy-url] [--claim] [--disable-invoice-issuing on|off] [--disable-purchase-email-client on|off] [--tracking-integration-ids <ids|none>] [--json <patch>] … | Edytuj dowolne ustawienie edytora koszyka — wygląd, formularz i UX, prawne, fakturowanie, powiadomienia, śledzenie (--help wypisuje wszystkie ~50 flag; wartości logiczne to on|off, none czyści). Głębokie pola (theme, deadline, afterPurchase, paymentMethodsDisplay, checkoutMedia, łańcuch oto …) idą przez --json; jawne flagi mają pierwszeństwo |
offers publish <cid> | Aktywuj (płatne oferty wymagają podłączonej bramki płatności) |
offers unpublish <cid> | Wstrzymaj — blokuje nowe zakupy |
offers duplicate <cid> [--with-prices] [--name <n>] | Skopiuj ofertę |
offers set-default <cid> | Ustaw jako domyślny koszyk produktu |
offers delete <cid> | Trwałe — ceny są archiwizowane w bramkach, a oferta odpinana od produktu; lepiej użyć offers unpublish |
offers recovery preview <cid> <sessionId> | Do kogo poszedłby e-mail ratujący koszyk i co by zawierał — nic nie jest wysyłane |
offers recovery send <cid> <sessionId> --confirm | Wysyła prawdziwy e-mail „dokończ zakup" do osoby, która porzuciła sesję — najpierw preview |
offers price add <cid> --type one_time|recurring|installments --amount <minor> --currency pln|usd|eur|gbp [--interval day|week|month|year] [--interval-count] [--cycles <n>] [--allow-cancellation] [--trial-days] [--label] [--invoice-name] [--hidden] [--description] [--sale-ends-at <iso> | --sale-days <n>] [--quantity-limit] [--show-available] [--compare-at <minor>] [--access-interval --access-count | --access-until <iso>] [--plan <planId>] | Dodaj wariant ceny |
offers price update <cid> <priceId> --operation activate|deactivate|hide|unhide|change-amount [--amount <minor>] | Zmień cenę |
offers price delete <cid> <priceId> [--remove] | Archiwizuj (domyślnie) lub usuń całkowicie |
offers price reorder <cid> --order id1,id2,… | Kolejność wyświetlania — podaj wszystkie id cen |
Ustawienia koszyka
Domyślne ustawienia całego konta, które czyta każda strona koszyka, o ile oferta nie nadpisuje danego pola sama.
| Komenda | Zastosowanie |
|---|---|
checkout-settings get [--lang pl] | Ustawienia strony koszyka dla konta |
checkout-settings update [--lang pl] [--terms-url] [--privacy-policy-url] [--claim] [--terms-content] [--privacy-policy-content] [--google-analytics-id] [--facebook-pixel-id] [--gtm-id] [--tiktok-pixel-id] [--promote-net-prices on|off] [--price-variants-placement belowDescription|aboveDescription|none] [--json <patch>] | Linki / treści prawne, id śledzenia, ceny netto; głębsze pola (embeddedForm, checkoutTheme, cartTheme) przez --json; none czyści pole |
checkout-settings consents list | Zgody (checkboxy), które kupujący widzą w koszyku, w kolejności wyświetlania |
checkout-settings consents upsert <name> --label <t> --required|--optional --apply-to all|'<json>' [--url <url|none>] [--marketing-opt-in|--no-marketing-opt-in] [--json <body>] | Dodaj lub edytuj jedną zgodę po jej stałej nazwie — id produktów/ofert są weryfikowane (nieznane id → 404) |
Strona
Twoja publiczna strona: ustawienia platformy (tytuł, język, motyw, branding, strona główna, prywatność, panel klienta, polityka dostępu klientów, bazowy adres linków do klientów), flaga „na żywo", slug i własne domeny, układ sklepu oraz dokumenty prawne. Każde site update <sekcja> zapisuje atomowo tylko tę sekcję; każda przyjmuje --json <plik|inline>, a flagi typowane mają pierwszeństwo przed kluczami z JSON-a. Zmiany slugu, domen, aktywacji i dokumentów prawnych wymagają --confirm.
| Komenda | Zastosowanie |
|---|---|
site get | Tabela podsumowania: slug, domeny, aktywna, język, strona główna, motyw, flagi brandingu, zgoda cookies, polityka dostępu, bazowy adres komunikacji — zanfia --json site get daje pełny payload |
site update general [--title <t>] [--description <t>] [--language pl|en|default] [--show-page-title on|off] [--json <patch>] | Tytuł/opis strony, język interfejsu; --json przyjmuje też mainPage, mainPageId, mainPageCommunityId |
site update theme [--theme <kolor>] [--gray-scale <skala>] [--radius <r>] [--style-variant solid|classic] [--from-brand on|off] [--json <patch>] | Kolor akcentu, skala szarości, zaokrąglenia, styl; --json dla customColors, customCheckoutTheme, typography |
site update branding [--logo-url <url|none>] [--logo-dark-url <url|none>] [--favicon-url <url|none>] [--hide-branding on|off] [--json <patch>] | Loga i favicon (URL-e albo referencje biblioteki mediów logo / logoDark / platformFavicon przez --json); ukrycie plakietki „Powered by Zanfia" wymaga funkcji remove_branding (inaczej 403) |
site update main-page --mode sales|dashboard|community [--page-id <id|none>] [--json <patch>] | Co renderuje główny adres strony — w trybie sales --page-id ustawia własną opublikowaną stronę jako główną (404 nieznana strona, 409 nieopublikowana) |
site update privacy --cookie-consent on|off [--json <patch>] | Baner zgody na cookies |
site update portal [--library-width full|boxed] [--library-layout grid|gallery|list] [--mobile-library-layout <l>] [--library-order newest|recently_purchased|alphabetical|custom] [--custom-order <ids>] [--group-by-type on|off] [--default-view library|community] [--messages on|off] [--client-messages on|off] [--clear] [--json <patch>] | Personalizacja panelu klienta — cały obiekt jest zastępowany (najpierw odczytaj site get --json); --custom-order przyjmuje id produktów po przecinku, od góry, i włącza własną kolejność; --group-by-type on pokazuje widok "Wszystkie" jako społeczności + sekcje per typ zamiast jednej listy; --clear przywraca domyślne |
site update communication --base-url app|platformSlug|platformDomain [--domain <host>] [--json <patch>] | Z jakiego hosta korzystają linki wysyłane do klientów |
site update access-policy --device-limit <n> [--replacement adaptive|always_allow|creator_approval_only] | --clear [--json <patch>] | Limit urządzeń per klient (anty-współdzielenie) i co się dzieje po jego przekroczeniu; --clear (albo limit 0) wyłącza politykę |
site activate --on|--off --confirm | Opublikuj lub wyłącz stronę (flaga „na żywo" platformy) |
site slug set <slug> --confirm | Zmień slug konta — ciężka operacja (przerejestrowuje hosty Stripe/Firebase/Vercel, czyści cache), każdy dotychczasowy link się zmienia; 409 slug-taken |
site domains set <d1,d2,…>|none --confirm | Zastąp listę własnych domen (same nazwy hostów); 409 domain-taken, 400 restricted-domain; potem skieruj DNS na Zanfia |
site domains verify [<d1,d2>] | Sprawdzenie DNS + TLS na żywo — status per domena, rekordy DNS do dodania, rekordy w konflikcie, stan certyfikatu |
site storefront get | Układ sklepu: preset, tryb, tabela sekcji — --json dla pełnej konfiguracji |
site storefront set --json <plik|inline> | Zastąp całą konfigurację sklepu (sections wymagane) — edytuj wynik site storefront get --json i odeślij |
site legal get [--language pl] | Regulamin i polityka prywatności: URL, slug /documents/<slug> i treść per język |
site legal set [--language pl] [--terms-content <md|plik> | --terms-url <url>] [--terms-slug <s>] [--privacy-content <md|plik> | --privacy-url <url>] [--privacy-slug <s>] --confirm | Wpisz dokument (markdown albo ścieżka do pliku → serwowany pod /documents/<slug>) lub podlinkuj zewnętrzny (--*-url); tryb wynika z podanej flagi |
E-maile systemowe
E-maile, które Zanfia wysyła do Twoich klientów w Twoim imieniu (Strona → E-maile): nadpisania tematu/nagłówka/układu per e-mail, ramka brandingu i wysyłki testowe. <key> pochodzi z emails list.
| Komenda | Zastosowanie |
|---|---|
emails list | Konfigurowalne e-maile systemowe ze statusem i efektywnym tematem |
emails get <key> | Jeden e-mail: temat/nagłówek (EN + PL), bloki układu, zmienne, cele linków |
emails set <key> [--subject-en <t|none>] [--subject-pl <t|none>] [--headline-en <t|none>] [--headline-pl <t|none>] [--enable | --disable] [--layout=<json|plik>] [--reset] | Dostosuj jeden e-mail — --layout zastępuje cały układ bloków, --disable działa tylko dla e-maili opcjonalnych, --reset przywraca wersję fabryczną |
emails branding get | Branding e-maili i domyślne wartości strony, z których dziedziczy |
emails branding set [--logo-url <url|none>] [--accent-color <hex|none>] [--sender-name <n|none>] [--reply-to <e|none>] | Logo w nagłówku, kolor akcentu, nazwa nadawcy, Reply-To — none wraca do wartości domyślnej strony |
emails test <key> [--lang en|pl] | Zakolejkuj wysyłkę testową (zapisana personalizacja, przykładowe dane) na Twój własny adres |
Oferty jednorazowe (OTO)
Wielokrotnego użytku upselle po zakupie, pokazywane raz, na pełnym ekranie, między sukcesem płatności a stroną podziękowania. Te komendy zarządzają tylko dokumentami ofert; do łańcucha koszyka podpinasz je przez offers update <cid> --json='{"oto":{"enabled":true,"steps":[{"otoOfferId":"…"}]}}'.
| Komenda | Zastosowanie |
|---|---|
oto list | Oferty OTO w koncie |
oto get <id> | Jedna oferta OTO w całości |
oto create --name <n> --product <pid> --price <priceId> --headline <t> [--product-name] [--description <md>] [--accept-cta <t>] [--decline-text <t>] [--timer-minutes <n|none>] [--json <body>] | Nowe OTO wskazujące istniejący produkt i cenę (twórcy zwykle dodają najpierw osobną, obniżoną cenę); galeria media tylko przez --json |
oto update <id> [te same flagi] [--json <body>] | Edytuj treść / pola cenowe; --timer-minutes none usuwa odliczanie |
oto delete <id> --confirm | Trwałe; kroki oto.steps koszyków wciąż wskazujące to id zostają „wiszące" |
Order bumpy
| Komenda | Zastosowanie |
|---|---|
bumps list | Order bumpy w koncie |
bumps create --product <pid> --price <priceId> --name <n> [--description] [--cta] | Nowy bump z istniejącej ceny (cena musi należeć do domyślnej oferty produktu) |
bumps update <bumpId> [--name] [--description] [--cta] [--product <pid> --price <priceId>] | Edytuj albo przepnij bump na inny produkt/cenę |
bumps delete <bumpId> | Usuń (oferty, które go używają, przestają go pokazywać) |
bumps attach <cid> <bumpId> [--prices id,id] | Pokaż bump w ofercie (bez --prices = wszystkie ceny; ponowne dołączenie zmienia zakres) |
bumps detach <cid> <bumpId> | Odepnij bump od oferty |
Kursy
Wszystko adresujesz id produktu (z products list). Statusy: draft, public, hidden, locked; nowe moduły i lekcje zaczynają jako draft. Treść lekcji to Markdown, a aktualizacja zastępuje całe ciało treści — dla dłuższych tekstów używaj --content-file.
| Komenda | Zastosowanie |
|---|---|
courses get <pid> | Pełna struktura modułów/lekcji ze statusami |
courses analytics <pid> [--learners-limit <n>] [--learners-sort progress-desc|progress-asc|last-activity-desc] | Zaangażowanie per lekcja, zdawalność quizów i lista kursantów |
courses transcripts <pid> | Mapa lekcja → wideo/transkrypcja (transkrypcję odczytasz przez media transcript <mediaId>) |
courses module add <pid> --name <n> [--description] | Nowy moduł w statusie draft |
courses module update <pid> <mid> [--name] [--description] [--status] [--unlock-days <n> | --unlock-date <iso> | --clear-unlock] [--require-quiz-pass | --require-all-lessons | --clear-requirement] | Edytuj moduł: nazwa, status, odblokowanie czasowe (drip), warunek ukończenia |
courses module delete <pid> <mid> | Trwałe, kaskadowo usuwa wszystkie lekcje modułu — aby zamiast tego ukryć, ustaw --status hidden |
courses lesson get <pid> <lid> [--content] | Szczegóły lekcji; --content wypisuje sam Markdown |
courses lesson add <pid> --module <mid> --title <t> [--type article|video|externalVideo|task|quiz] [--description] [--video-media <mediaId>] | Nowa lekcja w statusie draft |
courses lesson update <pid> <lid> [--title] [--description] [--status] [--content | --content-file] | Edytuj lekcję |
courses lesson set-video <pid> <lid> --video-media <mediaId> | Podepnij przesłane wideo |
courses lesson set-thumbnail <pid> <lid> --media <mediaId> | --url <httpsUrl> | --clear | Miniatura lekcji; przy lekcjach wideo ustawia też miniaturę odtwarzacza |
courses lesson set-attachments <pid> <lid> --media <id,id,…> | --clear | Zastąp załączniki lekcji plikami z biblioteki mediów, w podanej kolejności (pełna lista; lesson get pokazuje obecne uid); --clear usuwa wszystkie |
courses lesson video get <pid> <lid> | Rozdziały, momenty i meta tagi zapisane na wideo lekcji |
courses lesson video set <pid> <lid> [--chapters=<json|plik>] [--moments=<json|plik>] [--meta-tags=<json|plik>] --confirm | Zastąp podane listy (każda zastępuje całą swoją listę; pominięte zostają bez zmian). Rozdziały [{title, start, end}], momenty [{label, timestamp}] w sekundach, meta tagi [{property, value}] |
courses lesson chapters generate <pid> <lid> [--locale pl|en] [--out <plik>] | Propozycje rozdziałów AI z transkrypcji — wypisane (i opcjonalnie zapisane do pliku JSON), nie zapisywane; zastosuj przez courses lesson video set --chapters=<plik>. Zużywa kredyty AI (402 = kredyty wyczerpane) |
courses lesson moments generate <pid> <lid> [--locale pl|en] [--out <plik>] | Propozycje momentów AI, ten sam przepływ — zastosuj przez courses lesson video set --moments=<plik> |
courses lesson delete <pid> <lid> | Trwałe — aby zamiast tego ukryć lekcję, ustaw --status hidden |
courses quiz list <pid> <lid> | Pytania i ustawienia lekcji typu quiz |
courses quiz add <pid> <lid> --type single|multi|truefalse --question <t> [--option <t> …] [--correct 1,3] [--correct-answer true|false] [--explanation] [--points <n>] | --json <plik|inline> | Dodaj pytanie (typy wyboru: powtarzane --option + --correct liczone od 1; prawda/fałsz: --correct-answer) |
courses quiz update <pid> <lid> <qid> [te same flagi | --json <plik|inline>] | Zastąp pytanie w całości |
courses quiz delete <pid> <lid> <qid> | Trwałe |
courses quiz reorder <pid> <lid> --order id,id,… | Podaj każde id pytania |
courses quiz settings <pid> <lid> [--passing-score <pct> | --clear-passing-score] [--max-attempts <n> | --clear-max-attempts] [--time-limit <s> | --clear-time-limit] [--shuffle-questions on|off] [--shuffle-options on|off] [--show-correct-answers on|off] [--require-pass on|off] | Ocenianie, liczba podejść, losowa kolejność, blokady postępu |
courses publish <pid> (--module <mid> | --lessons id,id) [--status draft|public|hidden|locked] | Opublikuj moduł ze wszystkimi lekcjami albo zbiorczo zmień status wybranych lekcji |
courses reorder modules <pid> --order id1,id2,… | Ścisła permutacja — każde id modułu |
courses reorder lessons <pid> --module <mid> --order id1,id2,… | Ścisła permutacja — każde id lekcji w module |
Certyfikaty
Certyfikaty ukończenia kursu: wystawiaj je klientom kursu, cofaj lub przywracaj, usuwaj unieważnione na stałe, wysyłaj e-mail ponownie i zarządzaj szablonami z projektanta. Id certyfikatów daje certificates list, id szablonów — certificates templates list.
| Komenda | Zastosowanie |
|---|---|
certificates list [--product <value>] [--limit <n>] | Lista certyfikatów |
certificates issue <productId> --client <a,b,...> [--only-completed|--no-only-completed] [--template <value>] --confirm | Wystaw certyfikaty (asynchronicznie) |
certificates revoke <certificateId> --confirm | Unieważnij certyfikat |
certificates reinstate <certificateId> | Przywróć certyfikat |
certificates delete <certificateId> --confirm | Usuń unieważniony certyfikat |
certificates resend <certificateId> --confirm | Wyślij ponownie e-mail z certyfikatem |
certificates templates list | Lista szablonów certyfikatów |
certificates templates create --name <value> [--based-on <value>] [--design-config <json|file>] | Utwórz szablon certyfikatu |
certificates templates get <id> | Szczegóły szablonu certyfikatu |
certificates templates update <id> [--name <value>] [--template-json <json|file>] [--design-config <json|file>] [--default|--no-default] | Aktualizuj szablon certyfikatu |
certificates templates delete <id> --confirm | Usuń szablon certyfikatu |
Newslettery
Produkt typu newsletter adresujesz jego id produktu. Wydanie ma dwie widoczności: --status public|hidden (prywatne archiwum w strefie członkowskiej) i --landing public|hidden|locked (publiczna strona). Zmiany trafiają najpierw do szkicu i docierają do czytelników dopiero po draft publish.
| Komenda | Zastosowanie |
|---|---|
newsletters issues list --product <pid> [--limit] [--cursor] | Zarchiwizowane wydania, łącznie z ukrytymi |
newsletters issues create <pid> --subject <s> | Wydanie ręczne („napisz post bez wysyłki") — ukryte, w trybie artykułu, bez treści |
newsletters issues update <iid> --product <pid> [--status public|hidden] [--landing public|hidden|locked] [--render-mode snapshot|article] [--thumbnail <url>|none] | Widoczność, którą wersję widzą czytelnicy (snapshot = wysłany e-mail, article = markdown), miniatura |
newsletters issues copy <pid> --issue <id,id> --to <pid,pid> --confirm | Skopiuj wydania do innych produktów newsletterowych; cele niebędące newsletterem są raportowane jako pominięte |
newsletters issues draft save <pid> <iid> [--subject <s>] [--content <markdown|plik>] [--clear-subject] [--clear-content] | Zapisz temat / treść markdown w szkicu; --content przyjmuje markdown inline lub ścieżkę do pliku |
newsletters issues draft publish <pid> <iid> [--public] --confirm | Przenieś szkic do opublikowanego wydania (edytowana treść przełącza tryb renderowania na article; slug powstaje przy pierwszej publikacji); --public dodatkowo upublicznia wydanie |
newsletters issues draft discard <pid> <iid> --confirm | Porzuć zmiany ze szkicu; opublikowane wydanie zostaje bez zmian |
newsletters issues delete <iid> --product <pid> --confirm | Trwałe — aby zamiast tego ukryć, ustaw --status hidden |
newsletters settings update --product <pid> [--archive-enabled on|off] [--archive-access disabled|unlimited|from_subscribe_date] [--publication-delay <dni|none>] [--default-status] [--default-visibility] [--archive-inbox=<json|plik>] [--double-opt-in none|external] [--client-tag <tag>…] | Archiwum, skrzynka archiwum, double opt-in i tagi subskrybentów |
Społeczności
Adresujesz id społeczności (z communities list). Działasz we własnym imieniu — dostęp do kanałów i uprawnienia moderacyjne są rozstrzygane per zapytanie. Posty i komentarze żyją w kanałach typu feed; treść to Markdown. Pisanie wymaga profilu członka w społeczności — także dla członków zespołu workspace'u. Komendy tylko dla zespołu są oznaczone.
| Komenda | Zastosowanie |
|---|---|
communities list | Twoje społeczności (z id powiązanego produktu) |
communities channels <cid> | Kanały, które widzisz, wraz z Twoim poziomem dostępu |
communities posts <cid> <chid> [--limit] [--cursor] | Posty kanału feed, od najnowszych |
communities search <cid> <query> [--limit] | Wyszukiwanie pełnotekstowe w opublikowanych postach, które możesz czytać |
communities chat messages <cid> <chid> [--thread <messageId>] [--limit] [--cursor] | Wiadomości czatu, od najnowszych (usunięte jako tombstone); --thread wypisuje odpowiedzi w wątku |
communities chat send <cid> <chid> (--content <t> | --content-file <ścieżka>) [--reply-to <messageId>] | Wyślij wiadomość na czacie albo odpowiedź w wątku |
communities chat edit <cid> <chid> <messageId> (--content | --content-file) [--thread <parentId>] | Edytuj własną wiadomość |
communities chat delete <cid> <chid> <messageId> [--thread <parentId>] | Miękko usuń własną wiadomość (tombstone; wątki zostają) |
communities channel create <cid> --name <n> --type feed|chat|link|support [--description] [--group <gid>] [--url <url>] [--readonly] | Nowy kanał (--url wymagany dla kanałów link; --readonly = tryb ogłoszeń) |
communities channel update <cid> <chid> [--name] [--description] [--url] [--readonly true|false] | Edytuj kanał |
communities channel delete <cid> <chid> | Usuń kanał z całą zawartością — nieodwracalne |
communities group create <cid> --name <n> [--description] | Nowa sekcja paska bocznego |
communities group update <cid> <gid> [--name] [--description] | Edytuj sekcję |
communities group delete <cid> <gid> | Usuń sekcję — nieodwracalne |
communities move <cid> (--channel <chid> | --group <gid>) (--into-group <gid> | --to-root | --before <id> | --after <id>) | Zmień kolejność / położenie w pasku bocznym |
communities post get <cid> <postId> [--content] | Szczegóły posta; --content wypisuje sam Markdown |
communities post create <cid> <chid> --title <t> (--content <md> | --content-file <ścieżka>) | Nowy post w kanale feed |
communities post update <cid> <postId> [--title] [--content | --content-file] | Edytuj post |
communities post delete <cid> <postId> | Miękkie usunięcie (autor lub moderator) |
communities post pin <cid> <postId> | Przypnij na górze kanału (zespół) |
communities post unpin <cid> <postId> | Odepnij (zespół) |
communities comments <cid> <postId> [--limit] [--cursor] | Komentarze, od najstarszych; odpowiedzi niosą parentCommentId |
communities comment create <cid> <postId> (--content <md> | --content-file) [--reply-to <commentId>] | Komentarz lub odpowiedź w wątku |
communities comment update <cid> <commentId> (--content | --content-file) | Edytuj komentarz |
communities comment delete <cid> <commentId> | Miękkie usunięcie (autor lub moderator) |
communities support queue <cid> [--status open|in_progress|pending_customer|resolved|closed] [--limit] | Kolejka zgłoszeń do supportu (moderatorzy) |
communities support mine <cid> [--status] | Twoje własne zgłoszenia |
communities support show <cid> <ticketId> | Jedno zgłoszenie z wątkiem wiadomości |
communities support create <cid> --channel <chid> --subject <s> (--message <md> | --message-file <ścieżka>) | Załóż zgłoszenie w kanale supportu |
communities support reply <cid> <ticketId> (--content <md> | --content-file) | Odpowiedz w zgłoszeniu |
communities support status <cid> <ticketId> <status> | Zmień status zgłoszenia |
communities members <cid> [--role <roleId> | --disabled true|false | --email-prefix <p>] [--limit] [--cursor] | Lista członków (zespół); trzy filtry wykluczają się wzajemnie |
communities member set-roles <cid> <memberId> <roleId...> | W całości zastąp zestaw ról członka (zespół) |
communities member disable <cid> <memberId> | Odwracalny soft-ban (zespół) |
communities member enable <cid> <memberId> | Przywróć wyłączonego członka (zespół) |
communities member mute <cid> <memberId> --minutes <n> | Wyciszenie na 1..40320 minut (zespół) |
communities member unmute <cid> <memberId> | Zdejmij aktywne wyciszenie (zespół) |
communities settings get <cid> | Dokument ustawień (null = obowiązują domyślne) (zespół) |
communities settings update <cid> [--patch=<json|plik>] [--events-enabled on|off] [--direct-messages on|off] [--content-visible-from-join-date on|off] [--gamification on|off] [--auto-hide-after-reports <n|off>] | Zmień ustawienia — klucze patcha JSON: uploadVideo, membersDisplay, viewStyle, displayName, icon, publicAccess, gamification, moderation, assistant, digest, …; zagnieżdżone bloki w patchu zastępują swój podobiekt, przełączniki się scalają (zespół) |
communities roles <cid> | Role w kolejności pozycji (Owner pierwszy) |
communities role create <cid> --name <n> [--color <hex>] [--icon] [--position <n>] [--permissions=<json|plik>] [--content-access=<json|plik>] | Nowa rola własna (zespół) |
communities role update <cid> <roleId> [--name] [--color] [--icon] [--permissions=<json|plik>] [--content-access=<json|plik>] | Edytuj rolę — wbudowana rola Owner jest niezmienna (zespół) |
communities role delete <cid> <roleId> --confirm | Usuń rolę — jej posiadacze wracają do roli Member (zespół) |
communities role reorder <cid> <roleId...> | Podaj każde id roli w nowej kolejności, Owner pierwszy (zespół) |
communities events list <cid> [--from <iso>] [--to <iso>] [--exclude-cancelled] [--limit] | Wydarzenia z kalendarza, od najbliższych |
communities events create <cid> --title <t> --start <iso> --end <iso> --timezone <iana> --location=<json|plik> [--type liveCall|workshop|meetup|conference|retreat|other] [--all-day] [--description] [--json <plik>] | Nowe wydarzenie (zespół); --location = {"type":"online","url":…} lub {"type":"inPerson","address":…} |
communities events update <cid> <eventId> [te same flagi] [--all-day on|off] [--status scheduled|cancelled] [--json <plik>] | Edytuj / odwołaj / przywróć wydarzenie (zespół) |
communities events delete <cid> <eventId> --confirm | Usuń wydarzenie (zespół) |
communities moderation queue <cid> | Zgłoszone posty / komentarze — oczekujące plus ostatnio rozpatrzone (zespół) |
communities moderation resolve <cid> <reportId> --action remove|dismiss [--note] --confirm | Usuń treść (autor dostaje powiadomienie) lub odrzuć zgłoszenie |
Rozmowy (wiadomości do klientów)
Skrzynka wiadomości prywatnych twórca ↔ klient. Rozmowy są kluczowane id klienta (wcid).
| Komenda | Zastosowanie |
|---|---|
conversations list [--unread] [--limit] [--cursor] | Skrzynka, od ostatniej aktywności |
conversations get <clientId> | Jedna rozmowa (wiersz skrzynki) |
conversations messages <clientId> [--limit] [--cursor] | Wiadomości, od najnowszych (usunięte jako tombstone) |
conversations send <clientId> (--content <t> | --content-file <ścieżka>) [--message-id <id>] | Wyślij wiadomość od zespołu; --message-id to klucz idempotencji |
conversations edit <clientId> <messageId> (--content | --content-file) | Edytuj własną wiadomość |
conversations delete <clientId> <messageId> --confirm | Miękko usuń własną wiadomość (tombstone po obu stronach) |
conversations react <clientId> <messageId> --emoji <emoji> | Przełącz swoją reakcję emoji |
conversations read <clientId> | Oznacz jako przeczytane (wspólny znacznik zespołu) |
conversations broadcast (--recipients <id…> | --recipients-file <ścieżka>) (--content | --content-file) [--notify-by-email] --confirm | Wysyła DM do każdego z listy (maks. 5000), nieodwracalnie — rozsyłka działa asynchronicznie |
Klienci
| Komenda | Zastosowanie |
|---|---|
clients list [--search <q>] [--with-products | --without-products] [--limit] [--cursor] | Przeglądaj klientów, od najnowszych |
clients add --email <e> [--first-name] [--last-name] [--phone] [--language] | Utwórz wyłącznie kontakt — dostęp do produktu nadaje się osobno |
clients get <id> | Jeden klient |
clients tags | Rejestr tagów konta — id, które przyjmuje clients import --tag |
clients email-log <id> [--limit <n>] | E-maile wysłane do klienta przez Zanfię i ich status doręczenia |
clients accesses <id> [--status active|revoked|expired] | Wszystkie dostępy klienta do produktów, od najnowszych |
clients notes <id> | Wewnętrzne notatki CRM (tylko dla zespołu, klient ich nie widzi) |
clients add-note <id> --text <t> | Dodaj wewnętrzną notatkę (do 5000 znaków) |
clients update <id> [--first-name] [--last-name] [--phone] [--language] | Edytuj profil |
clients grant <productId> --email <e> [--first-name] [--last-name] [--price <priceId>] [--plan <planId>] [--until <data>] [--welcome-email] | Nadaj dostęp do produktu bez zakupu (darmowy zapis pod istniejącą ceną / planem, opcjonalnie ograniczony w czasie; bez e-maila, chyba że --welcome-email) |
clients revoke <productId> --email <e> [--run-automations] | Odbierz dostęp — nigdy nie zwraca pieniędzy i odmawia przy aktywnych płatnych subskrypcjach |
clients change-period <productId> --email <e> (--end <data> | --add-days <n>) | Zmień okres dostępu ograniczonego w czasie (data bezwzględna albo liczba dni; ujemna skraca) |
clients cancel-subscription <productId> --email <e> --confirm | Zatrzymaj rozliczanie subskrypcji klienta — dostęp trwa do końca opłaconego okresu (409 = to nie subskrypcja / bramka niepodłączona) |
clients change-email <id> --email <e> | Zmień e-mail (profil, dostępy i logowanie przechodzą razem z nim) |
clients import <plikCsv> [--tag <tagId> …] | Zaimportuj hurtowo kontakty z CSV (email + opcjonalnie firstName/lastName/phoneNumber/language); partie po 100, istniejące e-maile pomijane |
clients merge-preview --survivor <wcid> --duplicate <wcid> | Próbne scalenie — pokazuje, co by się stało, i wypisuje previewHash wymagany przez scalenie |
clients merge --survivor <wcid> --duplicate <wcid> --preview-hash <hash> | Nieodwracalnie scal duplikat z klientem docelowym (dostępy przechodzą/deduplikują się, treści w społeczności są przepinane, duplikat dostaje tombstone); nieaktualny hash jest odrzucany (409); aktywne subskrypcje blokują scalenie |
clients bulk-revoke <productId> (--email a,b,… | --all) [--run-tasks] --confirm | Odbierz dostęp wielu klientom w jednym przebiegu w tle (bez zwrotów) — 202 z id przebiegu Trigger; postęp w zakładce Zadania w panelu |
clients bulk-change-period <productId> (--email a,b,… | --all) (--end-date <iso> | --add-days <n>) --confirm | Przesuń koniec dostępu wielu klientom naraz (data bezwzględna albo liczba dni) — 202 z id przebiegu |
clients bulk-delete <productId> (--email a,b,… | --all) --confirm | Usuń dostępy wielu klientów do produktu w jednym przebiegu (rekordy klientów zostają; do nich służy clients delete) — 202 z id przebiegu |
clients bulk-revoke-filtered --product <id,id> --filter=<json|plik> [--run-tasks] --confirm | Odbierz dostęp każdemu klientowi pasującemu do filtra listy Klienci (productsFilter, search, tagIds, productIds, emailSubscriptionStatus, minTotalSpent, ordersFilter, …) w maks. 10 produktach — zbiór wyliczany po stronie serwera, 202 z id przebiegu |
clients delete --id <a,b,…> --confirm | Usuń (tombstone) klientów po id — id z aktywnym dostępem do produktu są pomijane (najpierw odbierz dostęp); partie po 200 |
clients export [--out <plik>] [--columns tags,stats,emailSubscription,activity,accesses,invoiceData,attribution,identifiers] [--created-from <iso>] [--created-to <iso>] [--limit <n>] [--search] [--with-products|--without-products] | CSV klientów zapisany do --out (domyślnie zanfia-clients.csv) — kolumny tożsamości zawsze, dodatkowe grupy przez --columns; podaje liczbę wierszy i czy limit uciął eksport |
clients devices list <id> | Aktywne sloty urządzeń klienta w ramach polityki dostępu (site update access-policy) — id, rodzaj, nazwa, pierwsze/ostatnie użycie, aktywne do |
clients devices revoke <id> <deviceId> --confirm | Wyloguj jedno urządzenie — musi ponownie zająć slot |
clients devices reset <id> --confirm | Wyloguj wszystkie urządzenia i wyczyść sloty klienta — zwraca revokedCount |
Odpowiedź 503 z komend bulk oznacza, że scheduler Trigger.dev nie jest skonfigurowany w tym środowisku.
Kampanie (wysyłki e-mail)
Szkice są bezpieczne; campaigns send wysyła e-maile do prawdziwych ludzi. Odbiorcy to zapisany segment (--segment, wyliczany ponownie w chwili wysyłki) albo wszyscy subskrybujący klienci (--all-subscribed, domyślnie).
| Komenda | Zastosowanie |
|---|---|
campaigns list | Kampanie e-mail |
campaigns get <id> | Jedna kampania: status, nadawca, odbiorcy, statystyki, treść |
campaigns create --name <n> [--subject] [--preheader] [--content <md> | --content-file <ścieżka>] [--from-name <n>] [--reply-to <e>] [--from-email <e>] [--segment <segmentId> | --all-subscribed] [--background-color <hex>] [--content-background-color <hex>] [--link-color <hex>] | Utwórz szkic — nic nie jest wysyłane; teraz wymagane jest tylko --name (temat/treść/nadawcę egzekwuje send); --from-email wymaga zweryfikowanej domeny wysyłkowej konta |
campaigns update <id> [te same flagi] | Edytuj szkic (kampanie po etapie szkicu są niezmienne poza anulowaniem); --content zastępuje całą treść |
campaigns delete <id> | Trwałe — tylko szkic/anulowana/nieudana (wysłane kampanie to zapis audytowy i zostają) |
campaigns send <id> [--at <iso>] --confirm | Wysyła prawdziwą masową korespondencję do całej wyliczonej grupy, nieodwracalnie; bez --at wysyła od razu, --at planuje (maks. 30 dni naprzód) |
campaigns cancel <id> | Anuluj zaplanowaną lub trwającą kampanię — zatrzymuje tylko pozostałe wysyłki |
campaigns recipients <id> [--status pending|sent|delivered|skipped-suppressed|skipped-muted|failed|bounced|complained|clicked] [--limit] [--cursor] | Lista odbiorców z raportu |
Segmenty
Zapisane zestawy warunków (łączonych AND) nad listą klientów — grupy odbiorców kampanii. Flagi warunków można powtarzać; --json-file przyjmuje warunki jako tablicę JSON zamiast flag.
| Komenda | Zastosowanie |
|---|---|
segments list | Segmenty odbiorców |
segments create --name <n> [--has-tag <tagId>] [--without-tag <tagId>] [--owns <pid>] [--not-owns <pid>] [--spent-gte <minor>] [--spent-lte <minor>] [--subscription pending|subscribed|unsubscribed] | --json-file <ścieżka> | Nowy segment (nazwa unikalna w koncie, maks. 80 znaków) |
segments update <id> [--name] [flagi warunków | --json-file <ścieżka>] | Zmień nazwę i/lub zastąp cały zestaw warunków |
segments delete <id> | Usuń — wysłane kampanie zostają bez zmian; szkice kierowane do segmentu nie wyślą się, dopóki ich nie przepniesz |
segments preview [flagi warunków | --json-file <ścieżka>] | Policz pasujących klientów bez zapisywania czegokolwiek |
Formularze zapisu
Samodzielne formularze zapisu (newsletter / lead capture). forms list pokazuje też stare formularze przypięte do produktu, które edytujesz tylko w edytorze produktu.
| Komenda | Zastosowanie |
|---|---|
forms list | Formularze zapisu (samodzielne + stare produktowe, oznaczone) |
forms get <id> | Jeden formularz: ustawienia + pełna konfiguracja osadzenia |
forms create --name <n> [--tags <id,id>] [--header] [--description] [--button-text] [--success-message] [--variant basic|card|richCard|minimal|split|gradient] | Nowy samodzielny formularz (domyślnie double opt-in) |
forms update <id> [--name] [--tags <ids>] [--opt-in double|single] [--redirect <url|none>] [--confirmation-subject] [--confirmation-intro] [--clear-confirmation-email] [--header] [--description] [--button-text] [--success-message] [--variant] [--json <patch>] | Edytuj — płaskie flagi konfiguracji są scalane z bieżącą konfiguracją osadzenia; obiekt config z --json jest wysyłany jako pełna zamiana (płaskie flagi nadal wygrywają); none czyści |
forms delete <id> --confirm | Trwałe; stare formularze produktowe API odrzuca |
forms submissions <id> [--limit <n>] | Zgłoszenia, od najnowszych |
Opinie (wall of love)
Moderacja, ręczne dodawanie, formularze zbierania i prośby do klientów o opinię. Statusy: pending, approved, hidden.
| Komenda | Zastosowanie |
|---|---|
testimonials list [--status pending|approved|hidden] [--product <pid>] [--tag <t>] [--limit] [--cursor] | Widok zarządzania — łącznie z oczekującymi/ukrytymi |
testimonials add --quote <t> --author <n> [--type text|imported] [--rating 1-5] [--role] [--avatar-url] [--products <id,id>] [--tags <a,b>] [--imported-from <źródło>] [--client <clientId>] | Dodaj opinię tekstową albo odnotuj zaimportowaną (opinii wideo nie da się dodać tą drogą) |
testimonials update <id> [--approve | --hide | --pending] [--feature | --unfeature] [--quote] [--rating <1-5|none>] [--author] [--role <r|none>] [--avatar-url <url|none>] [--products <ids>] [--tags <tagi>] [--client <id|none>] | Skróty moderacji plus zmiany pól; none czyści pola opcjonalne, pusty string czyści listy |
testimonials delete <id> --confirm | Trwałe |
testimonials request --client <clientId> [--product <pid>] [--form <formId>] --confirm | Wysyła prawdziwy e-mail z prośbą o opinię — formularz wybiera serwer (--form, inaczej aktywny formularz produktu, inaczej ogólny formularz konta) |
testimonials forms list | Formularze zbierania opinii (publiczne strony zgłoszeń) |
testimonials forms create --name <n> [--slug] [--product <pid>] [--headline] [--questions "P1|P2"] [--collect-rating on|off] [--collect-role on|off] [--allow-video on|off] [--thank-you <msg>] | Nowy formularz zbierania (bez --product = ogólny dla konta) |
testimonials forms update <id> [--name] [--slug] [--product <pid|none>] [--headline <t|none>] [--questions "P1|P2"] [--collect-rating on|off] [--collect-role on|off] [--allow-video on|off] [--thank-you <msg|none>] [--activate | --deactivate] | Edytuj / aktywuj / dezaktywuj formularz zbierania |
testimonials forms delete <id> --confirm | Trwałe |
Profile marki
Wyekstrahowana lub ręcznie zbudowana tożsamość marki (kolory, fonty, głos), używana przez generowanie treści i site update theme --from-brand.
| Komenda | Zastosowanie |
|---|---|
brand list | Profile marki |
brand get <id> | Jeden profil — tak też odpytujesz trwającą ekstrakcję |
brand create --name <n> | Pusty profil do wypełnienia przez brand update |
brand extract <url> [--name <n>] [--into <brandProfileId>] | Wyekstrahuj profil ze strony WWW (asynchronicznie — zaczyna jako pending; odpytuj brand get, aż będzie ready/failed); --into ekstrahuje ponownie do istniejącego profilu, zachowując pola edytowane ręcznie |
brand update <id> [--name <n>] [--json-file <ścieżka>] | Zmień nazwę albo zaaplikuj patch { name?, visual?, editorial? } — podane bloki najwyższego poziomu są zastępowane w całości |
brand delete <id> | Trwałe — bez cofnięcia i archiwum; generowanie treści, które go używało, działa dalej bez kontekstu marki |
Zespół
Członkowie zespołu konta i zaproszenia. Role: admin, editor, content_creator, viewer.
| Komenda | Zastosowanie |
|---|---|
team members | Członkowie zespołu |
team invitations | Oczekujące zaproszenia (przyjęte/cofnięte/wygasłe to historia) |
team invite <email> --role admin|editor|content_creator|viewer [--name <n>] | Zaproś osobę — link do akceptacji dostaje e-mailem |
team resend <invitationId> | Wyślij ponownie oczekujące zaproszenie ze świeżym linkiem (odstęp 60 s) |
team revoke <invitationId> | Cofnij oczekujące zaproszenie — link natychmiast przestaje działać |
team set-role <userId> <role> | Zmień rolę członka w koncie |
team remove <userId> | Usuń członka — traci dostęp natychmiast; nieodwracalne (zaproś ponownie, by przywrócić) |
Zamówienia
| Komenda | Zastosowanie |
|---|---|
orders list [--product] [--status paid|pending|refunded|failed] [--from/--to] [--search] [--include-test] [--limit/--cursor] | Historia zamówień, od najnowszych — ręczne zamówienia przelewem czekające na decyzję mają --status pending; symulowane zakupy testowe tylko z --include-test |
orders get <orderId> | Jedno zamówienie: płatność, zwrot, order bumpy, faktura |
orders approve <orderId> [--issue-invoice] --confirm | Zatwierdź ręczne zamówienie (przelew) — nadaje dostęp i wysyła e-mail zakupowy; --issue-invoice dodatkowo wystawia fakturę przez podłączone konto fakturowe (409 = już rozstrzygnięte) |
orders reject <orderId> --confirm | Odrzuć ręczne zamówienie — anuluje je i powiadamia kupującego (409 = już rozstrzygnięte) |
orders export --from <data> --to <data> [--product] [--status] [--search] [--include-test] [--max-rows <n>] [--out <plik>] | CSV zamówień do pliku — okno --from/--to jest wymagane; te same filtry co orders list (limit wierszy domyślnie 10000, maks. 20000) |
Subskrypcje
Obsługa płatności cyklicznych: nieudane obciążenia, klienci na planach z ręcznym odnowieniem i kończące się subskrypcje.
| Komenda | Zastosowanie |
|---|---|
subscriptions failed | Nieudane obciążenia subskrypcji / rat — klient, produkt, kwota, liczba prób i następna automatyczna próba Stripe, id faktury, link do faktury; informuje, gdy Stripe nie jest podłączony (brak danych na żywo) |
subscriptions retry <invoiceId> --confirm | Ponów nieudane obciążenie po id faktury Stripe (in_…) — prawdziwa próba obciążenia; wynik to paid, requires_action (podeślij klientowi link do faktury), card_declined, not_eligible albo failed |
subscriptions upcoming | Klienci na planach z ręcznym odnowieniem, którym wkrótce kończy się dostęp — dni do końca, ostatnie przypomnienie i link do odnowienia, który muszą kliknąć |
subscriptions ending | Aktywne subskrypcje z anulowaniem na koniec okresu — płacą do wskazanej daty, potem odchodzą, chyba że klient cofnie anulowanie |
Statystyki
Zakres przez --period 24h|7d|30d|90d albo --from/--to (data lub chwila ISO); --currency wymusza walutę raportu.
| Komenda | Zastosowanie |
|---|---|
stats overview | Ogólny przegląd przychodów / zamówień |
stats sales [--period] [--from] [--to] [--currency] | Raport sprzedaży: przychód, zwroty, AOV, rozbicie per produkt |
stats recurring [--currency] | Migawka MRR / ARR aktywnych subskrypcji |
stats mrr-history [--period] [--from] [--to] [--currency] | MRR w czasie + seria churnu z dziennych migawek |
stats funnel [--period] [--from] [--to] | Lejek koszyka: sesje → konwersje, per koszyk |
stats traffic [--period] [--from] [--to] | Ruch na stronach: wyświetlenia / wejścia / zakupy per strona i źródło |
stats sessions [--period] [--from] [--to] [--limit] | Ostatnie sesje koszyka ze wszystkich koszyków |
stats product <id> [--currency] | Puls produktu (ostatnie 30 dni): przychód, kursanci, zaangażowanie, uwaga |
stats conversion-events [--order] [--checkout] [--session] [--status a,b] [--client a,b] [--limit] | Dziennik zdarzeń śledzenia konwersji — czy Purchase dotarł do Meta / GA4 / TikToka i z jakim wynikiem |
stats conversion-health [--since-days <n>] | Ocena doręczalności per integracja (healthy / degraded / failing / inactive) |
Rabaty
| Komenda | Zastosowanie |
|---|---|
discounts list | Kody rabatowe |
discounts create --code <KOD> (--percent-off <pct> | --amount-off <minor> --currency <c>) [--product <id> …] [--max-redemptions <n>] [--starts <iso>] [--ends <iso>] [--forever] [--inactive] | Nowy kod — dokładnie jedno z --percent-off / --amount-off; --forever obejmuje każde odnowienie subskrypcji (domyślnie: tylko pierwsza płatność) |
discounts update <discountId> [--percent-off | --amount-off --currency] [--product <id> …] [--max-redemptions <n> | --clear-max-redemptions] [--ends <iso> | --clear-ends] [--forever] [--active | --inactive] | Zmień wartość, produkty, limity, daty, stan aktywności |
discounts archive <discountId> | Miękkie usunięcie — kod przestaje działać w koszyku |
discounts delete <discountId> | Trwałe — lepiej użyć discounts archive |
Polecenia
Programy poleceń i afiliacyjne: program obejmuje jeden lub więcej produktów, zapisani klienci dostają osobisty kod polecający, a zakupy przypisane do kodu liczą się jako polecenia. Nagrody za progi (rodzaj referral) są zatwierdzane automatycznie albo przez Ciebie; nagrody, których dostarczenie się nie powiodło, można ponowić. Id programów daje referrals list, id uczestników i wpisów — referrals get. Głęboka konfiguracja (milestones, commission, attribution) idzie jako jeden obiekt JSON — --json <plik|inline>.
| Komenda | Zastosowanie |
|---|---|
referrals list | Programy z rodzajem, statusem, trybem zapisów, liczbą produktów i głównymi statystykami (uczestnicy, ważne polecenia, nagrody czekające na zatwierdzenie) |
referrals get <programId> | Panel programu: podsumowanie, uczestnicy (kody, statystyki), nagrody czekające na zatwierdzenie i nieudane dostarczenia — --json zwraca pełne dokumenty |
referrals create --kind referral|affiliate --name <n> --product <id,id,…> [--enrollment open|inviteOnly|closed] [--status active|inactive] [--json <json|plik>] | Utwórz program — --json niesie milestones (drabinkę nagród), commission (warunki afiliacyjne) i attribution (okno, atrybucja kuponem, rabat dwustronny); flagi mają pierwszeństwo przed kluczami z --json |
referrals update <programId> [--name <n>] [--status active|inactive] [--product <id,id,…>] [--enrollment <tryb>] [--json <json|plik>] | Zaktualizuj program — --product i milestones z --json zastępują całość (najpierw odczytaj program) |
referrals archive <programId> --confirm | Zarchiwizuj program — nowe polecenia przestają się liczyć, a program znika z aktywnej listy |
referrals enroll <programId> (--client <clientId> | --email <email>) [--first-name <n>] [--last-name <n>] | Zapisz jednego klienta jako uczestnika i wypisz jego kod polecający — idempotentne, powtórka zwraca alreadyEnrolled |
referrals enroll-all <programId> --confirm | Zapisz każdego klienta z dostępem do któregoś z produktów programu — zwraca enrolled / alreadyEnrolled / skippedWithoutAccount (dostęp z czasów bez konta logowania) |
referrals resolve <programId> <entryId> --decision approve|reject --confirm | Zatwierdź (dostarcza nagrodę) lub odrzuć nagrodę czekającą na ręczne zatwierdzenie; odpowiedź mówi, czy dostarczenie już się odbyło |
referrals retry-delivery <programId> <entryId> | Ponów dostarczenie nagrody z listy nieudanych dostarczeń |
Reklamy (Meta)
Meta Ads na podłączonych kontach reklamowych: wydatki per reklama połączone z zamówieniami Zanfia (atrybucja przez id reklamy w utm_content, które niosą tagi URL reklam), katalog reklam stojący za tymi id oraz zarządzanie kampaniami / zestawami reklam / reklamami / kreacjami. Id połączenia znajdziesz w Ustawienia → Integracje → Meta, id konta reklamowego to act_… z Meta. Budżety są w jednostkach podrzędnych waluty konta. Każda komenda zmieniająca coś na żywym koncie reklamowym wymaga --confirm; nowe reklamy powstają zawsze wstrzymane. Treść create / creative idzie jako jeden obiekt JSON — --json <plik|inline>.
| Komenda | Zastosowanie |
|---|---|
ads performance [--from RRRR-MM-DD] [--to RRRR-MM-DD] [--checkout <checkoutId>] | Per reklama: wydatki, wyświetlenia, kliknięcia, zakupy wg Meta, zamówienia Zanfia, przychód i ROAS, plus sumy i dzienna seria wydatki / przychód; --checkout zawęża zamówienia i wydatki do jednego koszyka (spendScope: checkout) |
ads directory | Reklamy znane w koncie z pobierania statystyk: id i nazwy reklam / zestawów / kampanii, URL docelowy i koszyk — słownik dla id reklam z utm_content w zamówieniach i eksportach |
ads campaigns <connectionId> <adAccountId> [--include-archived] | Kampanie ze statusem, statusem efektywnym, celem i budżetami |
ads campaign update <connectionId> <adAccountId> <campaignId> [--status ACTIVE|PAUSED] [--name <n>] --confirm | Włącz / wyłącz kampanię, zmień jej dzienny budżet albo nazwę |
ads ad-sets <connectionId> <adAccountId> [--campaign <campaignId>] [--include-archived] | Zestawy reklam z budżetami, harmonogramem i statusem efektywnym (np. CAMPAIGN_PAUSED) |
ads ad-set get <connectionId> <adAccountId> <adSetId> | Jeden zestaw reklam — budżet, harmonogram, status |
ads ad-set update <connectionId> <adAccountId> <adSetId> [--daily-budget <minor>] [--lifetime-budget <minor>] [--end-time <iso>] [--status ACTIVE|PAUSED] --confirm | Zmień budżet zestawu (dzienny albo całkowity, nie oba), koniec harmonogramu lub status — dotyczy wszystkich reklam w zestawie |
ads list <connectionId> <adAccountId> [--after <cursor>] [--include-archived] | Reklamy konta, 50 na stronę — odpowiedź podaje kursor --after dla następnej strony |
ads create <connectionId> <adAccountId> --json <json|plik> --confirm | Zduplikuj istniejącą reklamę do nowej, wstrzymanej — sourceAdId i name są wymagane; message, headline, description, callToActionType, link, imageUrl nadpisują kreację źródłową |
ads update <connectionId> <adAccountId> <adId> [--status ACTIVE|PAUSED] [--name <n>] --confirm | Włącz / wyłącz reklamę albo zmień jej nazwę |
ads creative get <connectionId> <adAccountId> <adId> | Kreacja reklamy: tekst główny, nagłówek, opis, CTA, link, obraz, tagi URL — editable: no oznacza wideo / karuzelę / dynamiczną (te edytujesz w Menedżerze reklam) |
ads creative update <connectionId> <adAccountId> <adId> --json <json|plik> --confirm | Zbuduj nową kreację z obecnej plus podane message, headline, description, callToActionType, link, imageUrl, urlTags i przepnij na nią reklamę |
ads sync [--lookback-days <n>] | Pobierz statystyki reklam teraz dla każdego aktywnego połączenia Meta (przycisk „Synchronizuj teraz") — zwraca liczbę połączeń, zapisanych dni i błędów |
Workflowy
Automatyzacje (workflowy) edytujesz w panelu; CLI je podgląda, wstrzymuje/wznawia i (ponownie) uruchamia przebiegi. Przebiegi wykonują się naprawdę — wysyłają maile, nadają tagi, wołają webhooki — dlatego komendy uruchamiające wymagają --confirm.
| Komenda | Zastosowanie |
|---|---|
workflows list | Automatyzacje ze statusem, wyzwalaczami, zakresem produktów, liczbą węzłów i ostatnim przebiegiem |
workflows get <id> | Jeden workflow ze szczegółami |
workflows runs <id> [--limit] | Ostatnie przebiegi, od najnowszych |
workflows pause <id> | Przestań reagować na wyzwalacze |
workflows resume <id> | Wznów wstrzymany workflow (wymaga opublikowanej wersji) |
workflows retry <id> <runId> --confirm | Uruchom ponownie zakończony przebieg z jego pierwotnym kontekstem jako nowy przebieg (202 → runId) |
workflows test-run <id> --context=<json|plik> [--trigger-node <nodeId>] --confirm | Uruchom przebieg z ręcznie podanym kontekstem wyzwalacza (clientEmail, clientFirstName, productId, orderId, …) — to nie jest tryb próbny; 503 oznacza, że scheduler Trigger.dev nie jest skonfigurowany w tym środowisku |
Lejki
Lejki marketingowe to nazwane łańcuchy kroków, które odwołują się do istniejących koszyków, stron i workflowów — lejek nigdy nie jest właścicielem artefaktów, na które wskazują jego kroki. Tworzenie zaczyna się od przepisu; from-template dodatkowo generuje strony kroków przez AI.
| Komenda | Zastosowanie |
|---|---|
funnels list | Lejki ze statusem, przepisem i liczbą kroków |
funnels get <id> | Pełny łańcuch kroków, workflowy i produkty jednego lejka |
funnels create --recipe <lead_magnet|tripwire|sell_product> --product <id> --lang en|pl [--name] | Draft lejka na istniejących koszykach produktu plus sekwencja e-maili przepisu jako draft workflowu (409, gdy produkt nie ma darmowego/płatnego koszyka wymaganego przez przepis) |
funnels update <id> [--name] [--workflows a,b] [--json <patch>] | Zmień nazwę, podmień workflowy lub przepnij łańcuch kroków (steps/workflowIds to pełne zamiany) |
funnels status <id> --set draft|live|archived | Zmiany statusu (wszystkie odwracalne) |
funnels delete <id> --confirm | Twarde usunięcie samego dokumentu lejka; lepiej archiwizować |
funnels generate-page <id> --step <n|stepId> --lang en|pl [--brief] [--template] | Wygeneruj AI stronę jednego kroku typu strona i podepnij ją — synchronicznie, 1-3 minuty; zużywa kredyty AI |
funnels templates | Katalog szablonów stojący za from-template (id, przepis, wymaganie produktu, łańcuch kroków; available: no = wkrótce) |
funnels from-template <templateId> --product <id> --lang en|pl [--name] [--event-start <iso>] [--event-timezone] [--event-duration <min>] [--event-mode live|on_demand] --confirm | Utwórz lejek z szablonu i zakolejkuj generowanie AI jego stron (202 → tabela runId per krok + pominięte kroki; zużywa kredyty AI). Sprawdzaj funnels get <id>, aż kroki będą miały strony |
funnels from-pages --page <id,id,…> [--name] [--json <plik>] | Lejek na istniejących hostowanych stronach w kolejności odwiedzin (pierwsza = wejście); nic nie jest generowane |
funnels stats <funnelId> | Liczby per krok (wyświetlenia / wejścia / zapisy, sesje koszyka / zakończone, OTO wyświetlone / przyjęte) plus sumy; n/a = nie dotyczy tego rodzaju kroku |
Strony
Własne hostowane strony HTML, serwowane w domenie Twojego sklepu. Statusy: draft, published.
| Komenda | Zastosowanie |
|---|---|
pages list | Hostowane strony |
pages get <id> | Jedna strona wraz z ciałem HTML |
pages create --slug <s> --title <t> (--file <ścieżka> | --html <h>) [--publish] | Nowa strona, draft, chyba że podasz --publish |
pages update <id> [--slug] [--title] [--file | --html] | Edytuj |
pages publish <id> | Opublikuj |
pages unpublish <id> | Wróć do draftu |
pages delete <id> | Usuń stronę i jej HTML |
pages set-main <id> | Użyj opublikowanej strony jako strony głównej sklepu |
pages unset-main | Wróć do siatki produktów |
pages generate --intent <lead-magnet|webinar|sales-page|thank-you|waitlist|generic> --title <t> --brief <tekst|plik> [--template] [--product] [--checkout] [--form] [--source-url --source-mode rebuild|inspired] [--slug] [--delivery-url] [--delivery-name] [--event-start <iso>] [--event-timezone] [--event-duration <min>] [--event-mode live|on_demand] [--replay-media <mediaId>] [--opt-in-mode single|double] [--form-tags a,b] [--json <plik>] --confirm | Wygeneruj stronę AI jako draft (zużywa kredyty AI; 202 → runId, sprawdzaj pages list). Intencje zapisu tworzą też formularz, stronę podziękowania i draft automatyzacji dostarczania; 503 oznacza, że na tym środowisku nie ma skonfigurowanego schedulera Trigger.dev |
pages edit <pageId> --instruction <tekst|plik> --confirm | Edycja AI treści lub wyglądu strony na podstawie opisanej zmiany — synchronicznie, do 1-2 minut; wypisuje podsumowanie zmiany i id rewizji poprzedniego HTML |
pages templates | Szablony designu do użycia jako pages generate --template (id, nazwa, kategoria, intencje) |
pages revisions <pageId> | Migawki HTML robione przed każdym nadpisaniem (najnowsze pierwsze) |
pages restore <pageId> <revisionId> --confirm | Przywróć rewizję (bieżący HTML jest najpierw zapisywany jako migawka, więc przywrócenie też da się cofnąć) |
pages activate-automations <pageId> --confirm | Opublikuj draft automatyzacji dostarczania strony i zaplanuj jej webinarowe e-maile follow-up — e-maile wychodzą naprawdę; treści z placeholderami są pomijane |
Social media
Posty na podłączone konta społecznościowe (Marketing → Social). Statusy: draft, scheduled, published, failed. Zakresy: social:read / social:write.
| Komenda | Zastosowanie |
|---|---|
social accounts | Podłączone konta i ich klucze docelowe (linkedin, facebook:{pageId}, …) |
social posts [--status <s>] [--limit <n>] | Przeglądaj szkice, zaplanowane posty i historię publikacji |
social get <id> | Jeden post: treść, media, harmonogram, wyniki publikacji (permalinki) |
social draft --text <t> --targets <a,b> [--media <ids>] [--first-comment <t>] | Zapisz szkic (pojawia się w widoku Posty w panelu) |
social schedule [id] --at <iso> [--text … --targets … [--media] [--first-comment]] | Zaplanuj istniejący szkic albo nową treść (>= 1 min naprzód) |
social publish [id] [--text … --targets linkedin [--media] [--first-comment]] | Opublikuj teraz - tylko LinkedIn (tekst + obrazy) |
Biblioteka mediów
| Komenda | Zastosowanie |
|---|---|
media upload --file <ścieżka> [--name] [--mime] [--folder] [--description] | Prześlij plik; wypisuje id mediów i publiczny URL |
media upload-video --file <ścieżka> [--title] [--mime] [--wait] [--poll-timeout <s>] | Prześlij wideo do lekcji (Bunny); transkodowanie rusza po przesłaniu |
media list [--folder <nazwa>] | Przeglądaj |
media get <id> | Jeden element; pokazuje uploadStatus |
media rename <mediaId> [--name] [--description | --clear-description] | Zmień nazwę i/lub opis |
media move <mediaId...> (--folder <nazwa> | --unfile) | Przenieś elementy do folderu albo wypnij je z folderu |
media transcript <mediaId> [--words] [--out <plik>] | Transkrypcja wideo (czysty tekst; --words dodaje czasy słów i wymusza JSON) |
media delete <id> [--force] | Usuń (--force, jeśli plik jest jeszcze gdzieś używany) |
media folder list | Foldery |
media folder create <nazwa> | Nowy folder (idempotentne po nazwie) |
media folder rename <nazwa> --to <nowaNazwa> | Zmień nazwę — zmiana na nazwę istniejącego folderu scala z nim zawartość |
media folder delete <nazwa> | Usuń folder — jego pliki są tylko odpinane, nigdy kasowane |
Wideo wymaga transkodowania
media upload-video bez --wait kończy się, gdy wideo wciąż się przetwarza. Odpytuj
media get <id>, aż uploadStatus będzie mieć wartość ready, a następnie podepnij plik
komendą courses lesson set-video.
Czy ten artykuł był pomocny?

