> ## Documentation Index
> Fetch the complete documentation index at: https://www.zippendo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API własnego kanału

> Utwórz własny kanał sprzedaży, skopiuj ingest URL i sekret podpisu, ustaw przełączniki w Operacje i wyślij podpisane zamówienie z własnego sklepu internetowego lub ERP.

Własny kanał pozwala Twojemu sklepowi internetowemu, systemowi ERP lub magazynowemu wysyłać zamówienia prosto do Zippendo, gdy nie ma dla niego gotowego połączenia. Ta strona opisuje każdy element okna tworzenia i ustawień kanału oraz to, jak programista wysyła zamówienie. Instrukcja krok po kroku to [Połącz kanały sprzedaży](/docs/pl/tutorials/connect-order-channels). Pełny opis ładunku to [Własne kanały](/docs/pl/order-channels/custom-channels).

Kliknij **Kanały sprzedaży** w panelu bocznym, a potem kartę **Katalog**. Karta **Własny kanał** zawiera napis **Połącz własny sklep internetowy lub system ERP**. Jej przycisk to **Utwórz kanał**.

<Frame caption="Karta Własny kanał w katalogu">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/01-available-integrations-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=ddfbf1687fe3cd696681262b2bdd4f37" alt="Katalog kanałów sprzedaży z kartą Własny kanał i przyciskiem Utwórz kanał" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/01-available-integrations-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/01-available-integrations-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=e9b9eb43b5ee81cb799ec5a00b225874" alt="Katalog kanałów sprzedaży z kartą Własny kanał i przyciskiem Utwórz kanał" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/01-available-integrations-dark.png" />
</Frame>

## Utwórz kanał

Kliknij **Utwórz kanał**. Otworzy się okno **Utwórz własny kanał**: **Kanał sprzedaży dla Twojego własnego sklepu internetowego lub systemu ERP.**

<Frame caption="Utwórz własny kanał: wpisz Nazwa kanału">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/02-create-modal-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=92f1fa81ee9ead95739b7ebc9ef792d5" alt="Okno Utwórz własny kanał z polem Nazwa kanału wypełnionym jako My webshop oraz przyciskami Utwórz kanał i Anuluj" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/02-create-modal-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/02-create-modal-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=834ac5fadbfeab7ca064b954f71fed32" alt="Okno Utwórz własny kanał z polem Nazwa kanału wypełnionym jako My webshop oraz przyciskami Utwórz kanał i Anuluj" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/02-create-modal-dark.png" />
</Frame>

| Pole | Wymagane | Co wpisać |
| - | - | - |
| **Nazwa kanału** | Tak | Nazwa, którą rozpoznasz, na przykład „My webshop”. **Utwórz kanał** pozostaje nieaktywne, dopóki jej nie wpiszesz. |
| **Marka** | Nie | Widoczne tylko wtedy, gdy Twoja organizacja ma marki. **Zamówienia z tego kanału należą do tej marki.** |

Kliknij **Utwórz kanał** (pokazuje **Tworzenie…**). Zobaczysz **Utworzono kanał sprzedaży**, a Zippendo otworzy ustawienia nowego kanału. Jeśli zobaczysz **Nie udało się utworzyć kanału sprzedaży**, spróbuj ponownie. **Anuluj** zamyka okno.

## Przyjmowanie zamówień

Na górze strony ustawień widać nazwę kanału i **Twoja własna integracja: wysyłaj zamówienia na ingest URL albo korzystaj z API i SDK.** **Zobacz dokumentację** otwiera opis [Własne kanały](/docs/pl/order-channels/custom-channels).

<Frame caption="Przyjmowanie zamówień: Ingest URL i Wygeneruj sekret">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/03-order-ingestion-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=ec74983470fa1d76e9bfa7a840f2033b" alt="Karta Przyjmowanie zamówień z Ingest URL, przyciskami Kopiuj i Wygeneruj sekret" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/03-order-ingestion-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/03-order-ingestion-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=3f81eb98a7b5bd77eb0e5319f6bc3d73" alt="Karta Przyjmowanie zamówień z Ingest URL, przyciskami Kopiuj i Wygeneruj sekret" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/03-order-ingestion-dark.png" />
</Frame>

Karta **Przyjmowanie zamówień**: **Twój system wysyła podpisane zamówienia na poniższy ingest URL. Podpisuj surową treść każdego żądania algorytmem HMAC-SHA256, używając sekretu podpisu.**

| Element | Co robi |
| - | - |
| **Ingest URL** | Adres, na który Twój system wysyła zamówienia, w postaci `https://api.zippendo.com/webhooks/order-channels/<channel id>`. Skopiuj go ze swojego kanału. **Kopiuj** pokazuje **Skopiowano do schowka.** albo **Nie udało się skopiować do schowka.** |
| **Wygeneruj sekret** | Tworzy sekret podpisu. Pokazuje **Generowanie…**, a potem **Wygenerowano sekret podpisu.** albo **Nie udało się wygenerować sekretu podpisu.** |
| **Zastąp sekret** | Zastępuje istniejący sekret. Zippendo prosi o potwierdzenie: Twój system jest odrzucany, dopóki nie zacznie podpisywać nowym sekretem. |
| **Unieważnij** | Wyłącza sekret. Każde zamówienie wysłane przez Twój system jest odrzucane, dopóki nie wygenerujesz nowego sekretu. Pokazuje **Unieważniono sekret podpisu.** albo **Nie udało się unieważnić sekretu podpisu.** |
| **Aktywny sekret podpisu utworzony** | Po tym napisie widać datę i godzinę utworzenia bieżącego sekretu. |

Kanał przyjmuje zamówienia dopiero wtedy, gdy istnieje sekret podpisu. Nie ma osobnego przełącznika włączającego przyjmowanie.

Po **Wygeneruj sekret** lub **Zastąp sekret** sekret jest pokazywany raz:

<Frame caption="Skopiuj sekret podpisu teraz. Jest pokazywany tylko raz">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/04-signing-secret-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=25fb682ad180dd79bb6675c4fac3878f" alt="Przyjmowanie zamówień z jednorazowo pokazanym sekretem podpisu oraz przyciskami Kopiuj, Unieważnij i Zastąp sekret" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/04-signing-secret-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/04-signing-secret-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=0c95e5d5ff5a9644cfde3c8b95231ca3" alt="Przyjmowanie zamówień z jednorazowo pokazanym sekretem podpisu oraz przyciskami Kopiuj, Unieważnij i Zastąp sekret" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/04-signing-secret-dark.png" />
</Frame>

<Warning>
  **Skopiuj sekret teraz. Jest pokazywany tylko raz. Jeśli później go zastąpisz, obecny sekret natychmiast przestanie działać.** Sekret zaczyna się od `zwhs_`. Zapisz go w konfiguracji swojego systemu.
</Warning>

## Wyślij zamówienie

Wyślij `POST` na **Ingest URL** z dwoma nagłówkami:

| Nagłówek | Wartość |
| - | - |
| `X-Zippendo-Topic` | `order.created`, `order.updated`, `order.cancelled` lub `ping` |
| `X-Zippendo-Signature` | HMAC-SHA256 **surowej treści żądania**, zakodowany szesnastkowo, z kluczem w postaci sekretu podpisu |

`order.created` i `order.updated` tworzą lub aktualizują zamówienie według jego `externalId`. Treść `order.cancelled` to `{ "externalId": "…" }`. `ping` zwraca `200 { "received": true }` bez zmieniania czegokolwiek.

```javascript theme={null}
import crypto from "node:crypto"

const body = JSON.stringify(order)
const signature = crypto.createHmac("sha256", process.env.ZIPPENDO_WEBHOOK_SECRET)
  .update(body)
  .digest("hex")

await fetch(webhookUrl, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Zippendo-Topic": "order.created",
    "X-Zippendo-Signature": signature
  },
  body
})
```

Wymagane pola ładunku: `externalId`, `orderNumber` i `orderLines` (co najmniej jedna pozycja z `name` i `quantity`). Opcjonalne: `customerName`, `customerEmail`, `shippingAddress`, `subtotalAmount`, `totalAmount`, `currency`, `notes`, `shippingMethodTitle` i `serviceCode`. Pełna tabela pól: [Własne kanały](/docs/pl/order-channels/custom-channels).

| Status | Znaczenie |
| - | - |
| `200` | Przyjęto i przetworzono |
| `400` | Brakujący lub nieznany temat, ładunek, który nie przeszedł walidacji, albo **Kanał włączony** jest wyłączone |
| `401` | Weryfikacja podpisu nie powiodła się: zły sekret, brakujący nagłówek albo nie wygenerowano jeszcze sekretu |
| `404` | Nieznany kanał |
| `429` | Zbyt wiele zamówień naraz. Ponów po opóźnieniu `Retry-After` |
| `5xx` | Przetwarzanie się nie powiodło. Ponów: ponowne wysłanie tego samego zamówienia jest bezpieczne |

Wolisz żądanie i odpowiedź? Twórz zamówienia przez `POST /orgs/{orgId}/orders`, przekazując `orderChannelId`, oraz [token API](/docs/pl/how-to/create-an-api-token). Drugie zamówienie z tym samym `externalId` w tym samym kanale zwraca `409 ORDER_EXISTS`.

Aby odbierać numery przesyłek i zmiany statusu z powrotem, zasubskrybuj [webhooki](/docs/pl/how-to/webhooks) swojej organizacji (`shipment.dispatched`, `tracking.updated`). Własny kanał nie ma własnego wywołania zwrotnego śledzenia ani ekranu mapowania metod dostawy.

Wysłane zamówienie pojawia się w **Zamówienia**. Jego status może mieć wartość **Błąd**, gdy Zippendo zaimportowało zamówienie, ale nie mogło utworzyć przesyłki gotowej do wysłania, na przykład dlatego, że nie pasowała żadna reguła wysyłki lub adres jest niekompletny. Zamówienie nadal należy do kanału.

<Frame caption="Zamówienie wysłane przez Twój system na stronie Zamówienia">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/08-ingested-order-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=77da9e8128ec7af25eccb94be043613c" alt="Lista zamówień z zamówieniem, które dotarło przez własny kanał" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/08-ingested-order-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/08-ingested-order-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=813f80f9ffdde3359fa17eb1ac0cd28c" alt="Lista zamówień z zamówieniem, które dotarło przez własny kanał" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/08-ingested-order-dark.png" />
</Frame>

## Operacje

<Frame caption="Operacje: Kanał włączony, Wysyłaj przesyłki automatycznie i Domyślny adres nadawcy">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/05-operations-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=1fe6cc62130217849afa519e5742f0f3" alt="Karta Operacje z włączonym przełącznikiem Kanał włączony, Wysyłaj przesyłki automatycznie, Domyślny adres nadawcy, Ostatnie otrzymane zamówienie i Zapisz zmiany" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/05-operations-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/05-operations-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=d981fda2e789d898f30f5e61f36c6bc4" alt="Karta Operacje z włączonym przełącznikiem Kanał włączony, Wysyłaj przesyłki automatycznie, Domyślny adres nadawcy, Ostatnie otrzymane zamówienie i Zapisz zmiany" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/05-operations-dark.png" />
</Frame>

| Ustawienie | Zapis | Co robi |
| - | - | - |
| **Kanał włączony** | Od razu | Włącza lub wyłącza kanał. **Gdy kanał jest wyłączony, Zippendo odrzuca każde wysłane do niego zamówienie.** |
| **Wysyłaj przesyłki automatycznie** | Przez **Zapisz zmiany** | Automatycznie wysyła przesyłkę do przewoźnika, gdy przychodzące zamówienie pasuje do reguły wysyłki. Domyślnie wyłączone. |
| **Marka** | Od razu | **Zamówienia z tego kanału należą do tej marki.** Lista pojawia się tylko wtedy, gdy Twoja organizacja ma marki. |
| **Domyślny adres nadawcy** | Przez **Zapisz zmiany** | Nadawca przesyłek, gdy do zamówienia nie pasuje żadna reguła wysyłki. Jeśli nic jeszcze nie zapisano, lista pokazuje **Brak adresów**. |
| **Ostatnie otrzymane zamówienie** | Tylko do odczytu | Kiedy kanał ostatnio otrzymał zamówienie, albo **Nigdy**. |

**Zapisz zmiany** (**Zapisywanie…**) zapisuje **Wysyłaj przesyłki automatycznie** i **Domyślny adres nadawcy**. Zobaczysz **Zaktualizowano kanał sprzedaży** albo **Nie udało się zaktualizować kanału sprzedaży**.

## Wyłącz kanał

Wyłącz **Kanał włączony**. Na karcie **Połączony** wiersz kanału w karcie **Własny kanał** pokazuje wtedy **Wyłączona**. Własne kanały zawsze pozostają na karcie **Połączony** i nigdy nie stają się pozostałymi kanałami.

<Frame caption="Własny kanał, który jest wyłączony">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/06-disabled-card-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=e0aaa45ea2d6fccd68a7256e19ac77a3" alt="Strona Kanały sprzedaży z własnym kanałem oznaczonym Wyłączona" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/06-disabled-card-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/06-disabled-card-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=a4b8da3ecb99246d23f7ecc5cf5d3bae" alt="Strona Kanały sprzedaży z własnym kanałem oznaczonym Wyłączona" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/06-disabled-card-dark.png" />
</Frame>

Pozostałe kanały Shopify lub WooCommerce, oznaczone **Brak aktywnego połączenia** i **Odłączony**, to coś innego. Zobacz [Ustawienia kanału sprzedaży](/docs/pl/how-to/order-channel-settings).

## Usuń

W sekcji **Strefa zagrożenia** znajdź **Usuń kanał**: **Usuń ten własny kanał. Twoja integracja nie będzie już mogła wysyłać do niego zamówień.**

<Frame caption="Usuń kanał w sekcji Strefa zagrożenia">
  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/07-danger-zone-light.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=1a670d1da9c5236c3f1eaf9e68bbd070" alt="Strefa zagrożenia z opcją Usuń kanał i przyciskiem Usuń" className="block dark:hidden" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/07-danger-zone-light.png" />

  <img src="https://mintcdn.com/zippendo/5dxPBCmSwM7RFSTw/images/pl/how-to/custom-channel-api/07-danger-zone-dark.png?fit=max&auto=format&n=5dxPBCmSwM7RFSTw&q=85&s=bc8901eb2edbbf403976db736e4a87a7" alt="Strefa zagrożenia z opcją Usuń kanał i przyciskiem Usuń" className="hidden dark:block" width="2880" height="1800" data-path="images/pl/how-to/custom-channel-api/07-danger-zone-dark.png" />
</Frame>

Kliknij **Usuń** i potwierdź: **Usunąć ten własny kanał? Jego ingest URL natychmiast przestanie przyjmować zamówienia.** Zobaczysz **Usunięto kanał sprzedaży** albo **Nie udało się usunąć kanału sprzedaży**.

## Powiązane

<CardGroup cols={2}>
  <Card title="Połącz kanały sprzedaży" icon="store" href="/docs/pl/tutorials/connect-order-channels">
    Utwórz kanał z katalogu, a potem otwórz Zamówienia.
  </Card>

  <Card title="Opis własnych kanałów" icon="webhook" href="/docs/pl/order-channels/custom-channels">
    Pełny ładunek, anulowanie, ping i przykłady REST.
  </Card>

  <Card title="Ustawienia kanału sprzedaży" icon="settings-2" href="/docs/pl/how-to/order-channel-settings">
    Strona Kanały sprzedaży, marki i pozostałe kanały.
  </Card>

  <Card title="Utwórz token API" icon="key" href="/docs/pl/how-to/create-an-api-token">
    Token do POST /orgs/\{orgId}/orders zamiast podpisanych wywołań.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.