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, a <komenda> --help --short tylko nazwy komend (podkomendy wcięte, bez opisów) — szybka mapa grupy albo całego CLI (zanfia --help --short).
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 | --description-file <path>] [--free | --amount <major> --currency <c> [--period one_time|monthly|yearly]] [--cover <pathOrUrl>] [--file <path>…] | 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). Dodatki w jednym kroku: --cover ustawia okładkę (lokalny plik trafia najpierw do biblioteki mediów; adres https jest użyty bez zmian), --file (wielokrotnie) wgrywa lokalne pliki i dołącza je do produktu typu downloads, --description-file czyta opis z pliku |
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> [--full] | Jedna oferta z cenami i dołączonymi bumpami; --full dodaje wszystkie edytowalne ustawienia (galerię mediów, theme, deadline, afterPurchase, łańcuch oto, formularz, prawne, fakturowanie, powiadomienia, śledzenie) — te same klucze, które przyjmuje offers update --json, więc możesz odczytać, zmienić i zapisać z powrotem |
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|edit-details] [--amount <minor>] [--label <tekst>] [--description <markdown>] | Zmień cenę. --label / --description edytują etykietę i opis markdown pod ceną (edit-details, domyślne gdy pominiesz --operation; puste --description "" czyści opis); nie łączą się z inną operacją |
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 |
offers media list <cid> | Galeria mediów oferty (obrazy i wideo koszyka) w kolejności wyświetlania — indeks 0 jest wyróżniony |
offers media add <cid> (--media <mediaId> | --url <url> --type image|video [--thumbnail <url>]) | Dopisz element z biblioteki mediów (wideo musi być ready; adres embed Bunny budowany automatycznie) albo zewnętrzny URL do galerii — odczyt-zmiana-zapis przez GET ?include=full + PATCH, walidacja tym samym schematem co offers update --json |
offers media remove <cid> <mediaId|url> | Usuń wpis z galerii po id medium albo URL |
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) |
Integracje (śledzenie konwersji)
Integracje śledzenia konwersji (Ustawienia → Integracje → Analityka): Google Tag Manager, Google Analytics 4, TikTok, X, LinkedIn, Microsoft Clarity, Hotjar. Aliasy platform: gtm, ga4, clarity, twitter. Przypisanie per oferta: offers update --tracking-integration-ids; dla całego konta: integrations set-defaults. Zapis wymaga products:write. Połączenia z danymi dostępowymi poniżej (status, email-clients, meta-capi, manual-payment) wymagają klucza ze scope’ami integrations:read / integrations:write; dostawcy OAuth (Stripe, Meta OAuth, Google, social) i bramki płatnicze z danymi logowania pozostają tylko w panelu.
| Komenda | Zastosowanie |
|---|---|
integrations list [--client <platform>] | Wszystkie integracje z id, id platformy, flagą zdarzeń serwerowych i informacją, czy to domyślna integracja konta, plus lista domyślnych id |
integrations add <platform> --name <n> (--container-id | --measurement-id [--api-secret] | --pixel-id [--access-token] | --partner-id [--access-token] | --project-id | --site-id) [--purchase-tag] [--init-checkout-tag] [--add-to-cart-tag] [--trial-started-tag] [--track-purchase on|off] [--track-init-checkout on|off] [--track-add-to-cart on|off] [--track-trial-started on|off] | Nowa integracja — id są sprawdzane wzorcem, a sekrety GA4 / TikTok / LinkedIn weryfikowane u platformy przed zapisem; pierwsza integracja konta automatycznie staje się domyślną |
integrations update <platform> <integrationId> [flagi jak w add] | Edycja — zmieniają się tylko podane flagi; pominięte sekrety zostają (--api-secret none / --access-token none = tylko po stronie przeglądarki) |
integrations remove <platform> <integrationId> --confirm | Nieodwracalne — oferty i domyślne, które nadal wskazują to id, po prostu przestają śledzić na tej platformie |
integrations set-defaults <ids|none> | Zamień domyślne integracje konta (id po przecinku z integrations list lub stats conversion-health; none czyści) stosowane w każdej ofercie, która dziedziczy domyślne |
integrations status | Co jest podłączone: klienci mailingowi, wpisy Meta pixel / Conversions API, fakturowanie, metody płatności (wymaga integrations:read) |
integrations email-clients connect <ac|kit|mailerlite|mailchimp|getresponse|pipedrive> --url <url> (--api-key <key> | --api-key-stdin | --api-key-env VAR) [--server-prefix <us21>] [--tags-field <f> --lists-field <f>] | Połącz (lub połącz ponownie) konto mailingowe — klucz jest weryfikowany u dostawcy, listy + tagi pobierane, klucz trafia do Secret Managera i nigdy nie jest wypisywany; użyj -stdin / -env, żeby nie trafił do historii powłoki (integrations:write) |
integrations email-clients disconnect <client> --url <url> --confirm | Nieodwracalne — odrzucane, dopóki żywy newsletter / automatyzacja używa konta (błąd wymienia produkty) |
integrations email-clients refresh <client> --url <url> [--server-prefix] | Pobierz ponownie listy + tagi zapisanym kluczem (nie dla Pipedrive) |
integrations meta-capi list | Ręczne wpisy Meta pixel / Conversions API |
integrations meta-capi add --name <n> --pixel-id <id> [--access-token <t> | --access-token-stdin | --access-token-env VAR] [--track-purchase on|off] [--track-init-checkout on|off] [--track-add-to-cart on|off] [--track-trial-started on|off] | Dodaj wpis piksela; z tokenem włącza się Conversions API (zdarzenia serwerowe) — token jest najpierw weryfikowany u Meta. Ścieżka OAuth (połącz z Facebookiem) zostaje w panelu |
integrations meta-capi update <integrationId> [te same flagi] | Edycja — pominięte flagi zachowują wartość, pominięty token zostaje |
integrations meta-capi remove <integrationId> --confirm | Nieodwracalne |
integrations manual-payment set --name <n> (--instructions <text> | --instructions-file <path>) | Skonfiguruj płatność ręczną / przelew (kupujący płaci przelewem, Ty zatwierdzasz zamówienie przez orders approve) |
integrations manual-payment remove --confirm | Usuń płatność ręczną (idempotentne) |
integrations invoices connect <fakturownia|ifirma|infakt|wfirma|ing|stripe> [--id <id>] --name <n> [--url <url>] (--api-key <k> | --api-key-stdin | --api-key-env VAR) [--account-api-key] [--access-key --secret-key --company-id] [--department-id] [--bank-account] | Połącz (lub edytuj przez --id) konto fakturowania — dane weryfikowane u dostawcy, nigdy nie wypisywane |
integrations invoices disconnect <client> <accountId> --confirm | Nieodwracalne |
integrations payments connect <payu|tpay|p24|paynow|paypal|dodo> --name <n> [--pos-id] [--client-id] [--client-secret] [--second-key] [--safety-key] [--api-key] [--signature-key] [--merchant-id] [--crc-key] [--secrets-env] | Połącz bramkę — najpierw weryfikacja u bramki; --secrets-env sprawia, że każda flaga sekretu przyjmuje NAZWĘ zmiennej środowiskowej. Stripe łączysz w panelu |
integrations payments disconnect <gateway> --confirm | Nieodwracalne — ceny tylko z tą bramką przestają być kupowalne |
integrations payments tpay-blik <on|off> | Cykliczny BLIK Tpay (subskrypcje BLIK) |
integrations sms twilio connect --account-sid <sid> (--auth-token <t> | --auth-token-stdin | --auth-token-env VAR) [--auth-kind authToken|apiKey --api-key-sid <sid>] [--region us1|ie1|au1] --sender-kind phoneNumber|messagingService --sender <value> | Połącz (lub zastąp) Twilio — najpierw weryfikacja u Twilio |
integrations sms twilio disconnect --confirm | Sekret usunięty |
integrations sms smsapi connect [--region pl|com] (--api-token <t> | --api-token-stdin | --api-token-env VAR) --sender <name> | Połącz (lub zastąp) SMSAPI — najpierw weryfikacja u SMSAPI |
integrations sms smsapi disconnect --confirm · integrations sms smsapi refresh-senders · integrations sms smsapi default-sender <name> | Token usunięty · pobierz ponownie zatwierdzonych nadawców · wybierz nadawcę do wysyłki |
integrations sms default-provider <twilio|smsapi> | Przez którego podłączonego dostawcę wysyłają kampanie i automatyzacje |
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 |
Biblioteka szablonów e-mail (emails library)
Szablony wielokrotnego użytku (Marketing → Szablony e-mail), do których odwołują się kroki „Wyślij e-mail" w automatyzacjach — to co innego niż e-maile systemowe powyżej. Załączniki wybiera się w panelu; z CLI można je tylko wyczyścić.
| Komenda | Zastosowanie |
|---|---|
emails library list | Szablony z biblioteki: temat, ramka i liczba załączników |
emails library get <id> | Jeden szablon: temat, preheader, nadpisania nadawcy, załączniki, treść w Markdownie |
emails library create --name <n> [--subject] [--preheader] [--content <md> | --content-file <ścieżka>] [--branded | --plain] [--from-name <n>] [--reply-to <e>] | Utwórz szablon — --name to wewnętrzna etykieta, nie temat |
emails library update <id> [te same flagi] [--clear-preheader] [--clear-from-name] [--clear-reply-to] [--clear-attachments] | Częściowa aktualizacja — automatyzacje korzystające z szablonu od teraz wysyłają nową wersję |
emails library duplicate <id> | Zrób niezależną kopię |
emails library delete <id> --confirm | Trwałe — krok automatyzacji, który nadal wskazuje ten szablon, przestaje wysyłać, dopóki go nie przepniesz |
Tożsamość nadawcy (emails sender)
| Komenda | Zastosowanie |
|---|---|
emails sender get | Zweryfikowane domeny wysyłkowe, domyślny adres „Od" i adres pocztowy w stopce |
emails sender set-address (--address <linia> | --clear) | Adres pocztowy w stopce, pokazywany pod linkiem wypisu w każdej kampanii (jedna linia, maks. 300 znaków) — wymagany przed wysyłką kampanii |
Dodawanie, weryfikacja i usuwanie domeny wysyłkowej zostaje w panelu (DNS). Te dwie komendy są objęte tą samą blokadą przedpremierową co kampanie (403 feature_not_available).
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] [--image <urlOrMediaId>] [--json <fileOrJson>] | Nowy bump z istniejącej ceny (cena musi należeć do domyślnej oferty produktu). --image ustawia obrazek bumpa (adres https albo id z biblioteki mediów); --json ustawia głęboki obiekt appearance |
bumps update <bumpId> [--name] [--description] [--cta] [--product <pid> --price <priceId>] [--image <urlOrMediaId|none>] [--json <fileOrJson>] | Edytuj albo przepnij bump na inny produkt/cenę. --image ustawia (a none czyści) obrazek bumpa; --json to głęboka łatka scalana z treścią zapytania — appearance (media, backgroundColor, borderStyle, borderColor, borderWidth, ctaPosition, ctaSize, ctaBackgroundColor, ctaTextColor, ctaArrowPosition, ctaArrowColor, ctaArrowAnimation, imagePosition, imagePositionMobile, imageWidth); jawne flagi wygrywają z kluczami z --json |
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>] [--reissue-revoked|--no-reissue-revoked] --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 / clients tags list | Rejestr tagów konta — id, do których odwołują się clients import --tag, segmenty i akcje linków w kampaniach |
clients tags create --name <n> [--color <c>] | Utwórz tag (nazwy są unikalne w obrębie konta — duplikat zwraca 409) |
clients tags update <tagId> [--name <n>] [--color <c> | --clear-color] | Zmień nazwę / kolor — id zostaje, więc przypisania, segmenty i akcje linków dalej wskazują ten sam tag |
clients tags delete <tagId> --confirm | Trwałe — tag znika u każdego klienta, który go ma |
clients tags assign --id <a,b,…> [--add <tagId,…>] [--remove <tagId,…>] | Dodaj / zdejmij tagi wielu klientom naraz (id tagów; paczki po 200) |
clients email-log <id> [--limit <n>] | E-maile wysłane do klienta przez Zanfię i ich status doręczenia |
clients bundled-access <productId> | Klienci, którzy mają dostęp do produktu przez plan produktu NADRZĘDNEGO (pakiet), a nie przez bezpośredni dostęp — razem z clients list --product daje to pełną listę osób z dostępem |
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 |
clients email-subscription --id <a,b,…> --status subscribed|unsubscribed [--reason imported-from-other-list|existing-customers-consent|asked-directly|other] [--reason-note <t>] --confirm | Zapisz / wypisz wielu klientów z mailingu. Przy zapisie podajesz podstawę zgody, którą Ty poświadczasz (--reason jest wtedy wymagane); paczki po 200 |
clients sms-subscription --id <a,b,…> --status subscribed|unsubscribed [--reason explicit-sms-consent|asked-directly|other] [--reason-note <t>] --confirm | To samo dla marketingu SMS — osobna zgoda: zapis na e-maile nigdy nie obejmuje SMS-ów |
clients emails inbox [--limit <n>] | Pojedyncze e-maile do klientów ze wszystkich kartotek — szkice i wysłane |
clients emails list <clientId> | E-maile jednego klienta, od najnowszych |
clients emails draft <clientId> --subject <s> (--content <md> | --content-file <ścieżka>) [--from-name] [--reply-to] [--from-email] [--branded | --plain] | Utwórz szkic osobistego e-maila do jednego klienta — nic nie jest wysyłane |
clients emails update <clientId> <emailId> [te same flagi] | Edytuj szkic (wysłany e-mail zostaje jako zapis) |
clients emails delete <clientId> <emailId> --confirm | Usuń szkic |
clients emails send <clientId> <emailId> --confirm | ⚠️ Prawdziwa wysyłka — e-mail trafia do klienta i nie da się go cofnąć. Nieudane przekazanie zostawia szkic do ponownej wysyłki |
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 (dostarczenia + zaangażowanie: unikalne otwarcia/kliknięcia z procentami względem bazy śledzonej, przypisane zamówienia), 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] [--link <linkId>] [--limit] [--cursor] | Lista odbiorców z raportu z otwarciami/kliknięciami per osoba (- = nie mierzono); --link pokazuje, kto kliknął dany link (id z campaigns links) |
campaigns links <id> | Tabela linków wysłanej kampanii: unikalne/łączne kliknięcia per link, od najczęściej klikanego |
Kampanie SMS
Jednorazowe wysyłki SMS realizowane przez własne konto Twilio / SMSAPI workspace'u (najpierw połącz je w panelu). Szkice są bezpieczne; sms-campaigns send wysyła SMS-y do prawdziwych ludzi, operator rozlicza je za każdą część wiadomości i nie da się tego cofnąć. Odbiorcy to wszyscy klienci zapisani na SMS (--all-subscribed, domyślnie) albo zapisany segment — segment zawsze jest zawężany do klientów z numerem telefonu i wyraźną zgodą na SMS.
| Komenda | Zastosowanie |
|---|---|
sms-campaigns list | Kampanie ze statusem, odbiorcami, liczbą wysłanych i rozliczonych części |
sms-campaigns get <id> | Jedna kampania: operator, nadawca, odbiorcy, statystyki, linia wypisu, treść |
sms-campaigns create --name <n> [--body <t> | --body-file <ścieżka>] [--opt-out-hint <t>] [--provider twilio|smsapi] [--sender <nazwa>] [--segment <segmentId> | --all-subscribed] | Utwórz szkic — nic nie jest wysyłane. Treść obsługuje {{firstName}} / {{lastName}} |
sms-campaigns update <id> [te same flagi] [--clear-opt-out-hint] [--default-provider] [--default-sender] | Tylko szkice — po wyjściu ze szkicu kampanię można już tylko anulować |
sms-campaigns delete <id> --confirm | Trwałe; tylko szkic / anulowana / nieudana (wysłane kampanie zostają jako zapis) |
sms-campaigns send <id> [--at <iso>] --confirm | ⚠️ Prawdziwa wysyłka. Bez --at wysyła od razu; --at planuje (maks. 30 dni naprzód) |
sms-campaigns cancel <id> | Zatrzymaj zaplanowaną lub trwającą kampanię — tylko pozostałe wysyłki |
sms-campaigns recipients <id> [--status pending|sent|failed|skipped-invalid-number] [--limit] [--cursor] | Podgląd per odbiorca: rozliczone części i szczegóły od operatora |
Odpowiedź 503 z sms-campaigns send oznacza, że scheduler Trigger.dev nie jest skonfigurowany w tym środowisku.
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. --owns / --not-owns liczą dostęp efektywny (bezpośredni lub przez pakiet); --owns-direct <pid> / --not-owns-direct <pid> dopasowują wyłącznie dostęp bezpośredni do tego produktu (zakup albo dostęp przyznany ręcznie) — w JSON-ie "accessScope": "direct" w warunku product.
| 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>] [--opt-in double|single] [--redirect <url>] [--header] [--description] [--button-text] [--success-message] [--phone off|optional|required] [--sms-consent on|off] [--sms-consent-text <t>] [--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 |
forms snippet <id> [--lang pl|en] [--first-name] [--redirect <url>] [--platform-url <origin>] | HTML natywnego formularza na DOWOLNĄ stronę (znaczniki formularza + skrypt platformy) — zobacz Twój formularz na własnej stronie |
--phone dodaje do formularza pole numeru telefonu; --sms-consent on dodaje checkbox zgody na marketing SMS (wymaga pola telefonu — --phone off wyłącza też zgodę). Pełną, własną treść e-maila potwierdzającego zapis (double opt-in) ustawisz przez forms update --json z obiektem confirmationEmailOverride (null przywraca treść z ustawień konta); --confirmation-subject / --confirmation-intro zostają jako krótka, starsza forma.
Pokoje na żywo
Pokoje webinarowe (Marketing → Pokoje na żywo): stream lub nagranie odtwarzane o stałej godzinie, opcjonalnie powtarzane co N minut (autowebinar just-in-time). Tylko odczyt — pokoje tworzysz i edytujesz w panelu. Frekwencja liczy prawdziwych widzów po sygnałach obecności w trakcie sesji; powtórka nie jest frekwencją.
| Polecenie | Do czego |
|---|---|
live-rooms list | Pokoje, od najpóźniejszego startu, ze źródłem, harmonogramem (every 15 min / fixed) i dostępem |
live-rooms attendance <roomId> [--session <iso>] | Frekwencja per sesja (widzowie, podpisani, średni czas, do końca); --session dodaje wiersze widzów tej sesji |
forms submissions na stronie webinaru podpiętej do pokoju zwraca też dla każdego zapisanego session i attendance (null, gdy się nie pojawił).
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 |
Konto (workspace)
Ustawienia na poziomie konta. Strefa czasowa steruje planowaniem w obrębie konta, np. krokami „czekaj do" w automatyzacjach. Profil jakości wideo zależy od planu i zostaje w panelu.
| Komenda | Zastosowanie |
|---|---|
workspace / workspace get | Nazwa, strefa czasowa, automatyczna transkrypcja i domyślny język transkrypcji |
workspace update [--name <n>] [--timezone <iana> | --inherit-timezone] [--auto-transcribe on|off] [--transcription-language pl|en|default] | Zmień ustawienia. --inherit-timezone czyści nadpisanie — konto przejmuje strefę czasową właściciela |
Workflowy
CLI podgląda automatyzacje (workflowy), wstrzymuje je i wznawia, (ponownie) uruchamia przebiegi, a także pozwala je tworzyć: założyć szkic, podmienić graf szkicu tym samym JSON-em, który zapisuje kreator w panelu, opublikować, zduplikować i usunąć. Publikacja sprawia, że workflow działa na żywo — prawdziwe e-maile, SMS-y i webhooki idą przy prawdziwych zdarzeniach klientów — dlatego wymaga --confirm. Wygodnym sposobem projektowania grafu pozostaje kreator w panelu; workflows draft set jest dla skryptów i agentów. 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> [--graph] | Jeden workflow ze szczegółami. --graph wypisuje kroki w kolejności wykonania — trigger → akcje → opóźnienia → gałęzie warunków — z tematem każdego e-maila i krótkim fragmentem treści (e-maile z biblioteki pokazują nazwę i id). Pokazuje opublikowany graf, a gdy szkic się różni, także szkic poniżej; z -o json surowa odpowiedź zawiera draftGraph, publishedGraph i hasUnpublishedChanges |
workflows runs <id> [--limit] | Ostatnie przebiegi, od najnowszych |
workflows pause <id> | Przestań reagować na wyzwalacze i anuluj trwające przebiegi (kontakty czekające w kroku opóźnienia nie dostaną kolejnych kroków) |
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 |
workflows create --name <n> [--description <t>] [--product <id,id>] [--trigger <eventType>] [--kind transactional|marketing] | Utwórz szkic — nic się nie uruchamia. Bez --trigger kanwa jest pusta. --kind marketing = link do wypisania w każdym e-mailu, a kroki e-mail/SMS pomijają wypisane kontakty; pominięte = wyliczane z wyzwalaczy przy publikacji |
workflows draft get <id> [--published] [--out <plik>] | Wypisz graf szkicu jako JSON (albo działającą wersję z --published) — edytuj go i podaj z powrotem do workflows draft set |
workflows draft set <id> --json <plik|json> [--name] [--description] [--product <id,id>] [--kind] | Podmień graf szkicu ({ nodes, edges }); opublikowana wersja działa dalej bez zmian. 422 wypisuje każdy błąd walidacji z id węzła i kodem przyczyny |
workflows publish <id> --confirm | ⚠️ Uruchom szkic na żywo. Graf musi przejść walidację (inaczej 422) |
workflows duplicate <id> [--name <n>] | Skopiuj workflow — kopia jest nieopublikowanym szkicem |
workflows delete <id> --confirm | Trwałe; odwracalną alternatywą jest workflows pause |
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] [--page-template <id>] --confirm | Utwórz lejek z szablonu i zakolejkuj generowanie AI jego stron (202 → tabela runId per krok + pominięte kroki; zużywa kredyty AI); --page-template nadaje wszystkim stronom jeden szablon wyglądu (np. course-fresh, strony podziękowania dostają jego odpowiednik). 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 |
Blog
Blog konta (Twoja strona → Blog): wpisy w Markdown serwowane pod /blog/{slug} w domenie Twojego sklepu, z kanałem RSS pod /blog/feed. Szkice widzi tylko zespół; publish upublicznia wpis. Wymaga wczesnego dostępu do bloga na koncie.
| Komenda | Zastosowanie |
|---|---|
blog list | Lista wpisów na blogu |
blog create --title <value> [--slug <value>] [--content <value>] [--excerpt <value>] [--cover <value>] [--tags <a,b,...>] [--seo <json|file>] [--publish|--no-publish] | Utwórz wpis na blogu |
blog get <id> | Szczegóły wpisu na blogu |
blog update <id> [--title <value>] [--slug <value>] [--content <value>] [--excerpt <value>] [--cover <value>] [--tags <a,b,...>] [--seo <json|file>] | Zmień wpis na blogu |
blog publish <id> [--publish] | Opublikuj lub cofnij publikację wpisu |
blog delete <id> --confirm | Usuń wpis z bloga |
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] [--no-cookie-banner | --cookie-banner] | Edytuj; --no-cookie-banner ukrywa baner cookie konta tylko na tej stronie (piksele nadal czekają na zgodę wyrażoną w innym miejscu) |
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|newsletter|challenge|application|upsell|low-ticket|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 generate-image --prompt <tekst> --confirm | Wygeneruj obraz AI do biblioteki mediów (zużywa kredyty AI) |
media transcribe <mediaId> --confirm | Uruchom transkrypcję wideo (zużywa minuty transkrypcji) |
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?

