> ## 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 for egendefinerte kanaler

> Opprett en egendefinert ordrekanal, kopier mottaks-URL-en og signeringshemmeligheten, sett bryterne under Drift og send en signert ordre fra din egen nettbutikk eller ERP.

En egendefinert kanal lar din egen nettbutikk, ERP eller ditt eget lagersystem sende ordrer rett inn i Zippendo, når det ikke finnes en ferdig tilkobling for det. Denne siden dekker hver kontroll i opprettingsvinduet og i kanalinnstillingene, og hvordan en utvikler sender en ordre. Veiviseren steg for steg er [Koble til ordrekanaler](/docs/no/tutorials/connect-order-channels). Den fullstendige referansen for innholdet er [Egendefinerte kanaler](/docs/no/order-channels/custom-channels).

Klikk på **Ordrekanaler** i sidefeltet, og deretter på fanen **Katalog**. Kortet **Egendefinert kanal** sier **Koble til din egen nettbutikk eller ditt eget ERP-system**. Knappen er **Opprett kanal**.

<Frame caption="Kortet Egendefinert kanal i katalogen">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/01-available-integrations-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=7fa58e032450ff1550a62a3c8039251a" alt="Katalogen over ordrekanaler med kortet Egendefinert kanal og knappen Opprett kanal" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/01-available-integrations-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/01-available-integrations-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=b41a6fab425486d245e31ee5cded7e08" alt="Katalogen over ordrekanaler med kortet Egendefinert kanal og knappen Opprett kanal" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/01-available-integrations-dark.png" />
</Frame>

## Opprett kanalen

Klikk på **Opprett kanal**. Vinduet **Opprett egendefinert kanal** åpnes: **En ordrekanal for din egen nettbutikk eller ditt eget ERP-system.**

<Frame caption="Opprett egendefinert kanal: skriv inn et Kanalnavn">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/02-create-modal-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=3bc646f73fb37023016276237bf5bb38" alt="Vinduet Opprett egendefinert kanal med Kanalnavn utfylt som My webshop, Opprett kanal og Avbryt" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/02-create-modal-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/02-create-modal-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=bb64f0fc43986cdf4b5955557030f395" alt="Vinduet Opprett egendefinert kanal med Kanalnavn utfylt som My webshop, Opprett kanal og Avbryt" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/02-create-modal-dark.png" />
</Frame>

| Felt | Påkrevd | Hva du skriver inn |
| - | - | - |
| **Kanalnavn** | Ja | Et navn du kjenner igjen, for eksempel «Nettbutikken min». **Opprett kanal** er inaktiv til du har skrevet inn ett. |
| **Merkevare** | Nei | Vises bare når organisasjonen din har merkevarer. **Ordrer fra denne kanalen tilhører denne merkevaren.** |

Klikk på **Opprett kanal** (den viser **Oppretter…**). Du ser **Ordrekanalen er opprettet**, og Zippendo åpner innstillingene til den nye kanalen. Hvis du ser **Kunne ikke opprette ordrekanalen**, prøver du igjen. **Avbryt** lukker vinduet.

## Ordremottak

Innstillingssiden har kanalnavnet som overskrift, og **Din egen integrasjon: send ordrer til mottaks-URL-en, eller bruk API-et og SDK-ene.** **Se dokumentasjonen** åpner referansen [Egendefinerte kanaler](/docs/no/order-channels/custom-channels).

<Frame caption="Ordremottak: Mottaks-URL og Generer hemmelighet">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/03-order-ingestion-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=b68ab523414f32ea1d6ae82ecfd04958" alt="Kortet Ordremottak med Mottaks-URL, Kopier og Generer hemmelighet" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/03-order-ingestion-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/03-order-ingestion-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=6e6e4f39072b78267c342f21ed59183d" alt="Kortet Ordremottak med Mottaks-URL, Kopier og Generer hemmelighet" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/03-order-ingestion-dark.png" />
</Frame>

Kortet **Ordremottak**: **Systemet ditt sender signerte ordrer til mottaks-URL-en nedenfor. Signer råinnholdet i hver forespørsel med HMAC-SHA256, med signeringshemmeligheten.**

| Kontroll | Hva den gjør |
| - | - |
| **Mottaks-URL** | Adressen systemet ditt sender ordrer til, på formen `https://api.zippendo.com/webhooks/order-channels/<channel id>`. Kopier den fra din egen kanal. **Kopier** viser **Kopiert til utklippstavlen.**, eller **Kunne ikke kopiere til utklippstavlen.** |
| **Generer hemmelighet** | Oppretter signeringshemmeligheten. Viser **Genererer…**, deretter **Signeringshemmeligheten er generert.** eller **Kunne ikke generere signeringshemmeligheten.** |
| **Erstatt hemmelighet** | Erstatter en eksisterende hemmelighet. Zippendo ber deg bekrefte: systemet ditt avvises til det signerer med den nye hemmeligheten. |
| **Trekk tilbake** | Slår av hemmeligheten. Alle ordrer systemet ditt sender, avvises til du genererer en ny hemmelighet. Viser **Signeringshemmeligheten er tilbakekalt.** eller **Kunne ikke tilbakekalle signeringshemmeligheten.** |
| **Aktiv signeringshemmelighet opprettet** | Etterfulgt av datoen og klokkeslettet da den gjeldende hemmeligheten ble opprettet. |

Kanalen godtar bare ordrer når en signeringshemmelighet finnes. Det finnes ingen egen bryter for å slå på ordremottak.

Etter **Generer hemmelighet** eller **Erstatt hemmelighet** vises hemmeligheten én gang:

<Frame caption="Kopier signeringshemmeligheten nå. Den vises bare én gang">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/04-signing-secret-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=f74792539d937c9e2e7077c53847a723" alt="Ordremottak med engangs-signeringshemmeligheten, Kopier, Tilbakekall og Erstatt hemmelighet" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/04-signing-secret-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/04-signing-secret-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=8980c466d74b52947e9edc3e3d966317" alt="Ordremottak med engangs-signeringshemmeligheten, Kopier, Tilbakekall og Erstatt hemmelighet" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/04-signing-secret-dark.png" />
</Frame>

<Warning>
  **Kopier hemmeligheten nå. Den vises bare én gang. Hvis du erstatter den senere, slutter den gjeldende hemmeligheten å virke med en gang.** Hemmeligheten starter med `zwhs_`. Lagre den i konfigurasjonen til systemet ditt.
</Warning>

## Send en ordre

Send en `POST` til **Mottaks-URL** med to headere:

| Header | Verdi |
| - | - |
| `X-Zippendo-Topic` | `order.created`, `order.updated`, `order.cancelled` eller `ping` |
| `X-Zippendo-Signature` | HMAC-SHA256 av **råinnholdet i forespørselen**, hex-kodet, med signeringshemmeligheten som nøkkel |

`order.created` og `order.updated` oppretter eller oppdaterer begge ordren etter `externalId`. Innholdet i `order.cancelled` er `{ "externalId": "…" }`. `ping` returnerer `200 { "received": true }` uten å endre noe.

```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
})
```

Påkrevde felt i innholdet: `externalId`, `orderNumber` og `orderLines` (minst én linje med `name` og `quantity`). Valgfrie: `customerName`, `customerEmail`, `shippingAddress`, `subtotalAmount`, `totalAmount`, `currency`, `notes`, `shippingMethodTitle` og `serviceCode`. Full felttabell: [Egendefinerte kanaler](/docs/no/order-channels/custom-channels).

| Status | Betydning |
| - | - |
| `200` | Godtatt og behandlet |
| `400` | Manglende eller ukjent topic, innhold som ikke besto valideringen, eller **Kanal aktivert** er av |
| `401` | Signatursjekken mislyktes: feil hemmelighet, manglende header, eller ingen hemmelighet generert ennå |
| `404` | Ukjent kanal |
| `429` | For mange ordrer samtidig. Prøv igjen etter forsinkelsen i `Retry-After` |
| `5xx` | Behandlingen mislyktes. Prøv igjen: det er trygt å sende den samme ordren på nytt |

Foretrekker du forespørsel og svar? Opprett ordrer med `POST /orgs/{orgId}/orders`, med `orderChannelId`, og et [API-token](/docs/no/how-to/create-an-api-token). En ny ordre med samme `externalId` på den samme kanalen returnerer `409 ORDER_EXISTS`.

For å få sporingsnumre og statusendringer tilbake abonnerer du på [webhooks](/docs/no/how-to/webhooks) for organisasjonen din (`shipment.dispatched`, `tracking.updated`). En egendefinert kanal har ingen egen tilbakekalling for sporing, og ingen skjerm for å koble leveringsmåter.

En ordre du sender, vises under **Ordrer**. Statusen kan være **Feil** når Zippendo importerte ordren, men ikke kunne opprette en sending som er klar til å sendes, for eksempel fordi ingen fraktregel samsvarte eller adressen er ufullstendig. Ordren tilhører fortsatt kanalen.

<Frame caption="En ordre sendt av systemet ditt på siden Ordrer">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/08-ingested-order-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=09d4ec44147a9f6733aa2b8d8a190fd5" alt="Ordrelisten med en ordre som kom inn gjennom en egendefinert kanal" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/08-ingested-order-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/08-ingested-order-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=827c3ae5ccc3d9862c3bd98372876e96" alt="Ordrelisten med en ordre som kom inn gjennom en egendefinert kanal" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/08-ingested-order-dark.png" />
</Frame>

## Drift

<Frame caption="Drift: Kanal aktivert, Send sendinger automatisk og Standard avsenderadresse">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/05-operations-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=01682872e0543430d34ccfda4026cbe5" alt="Kortet Drift med Kanal aktivert slått på, Send sendinger automatisk, Standard avsenderadresse, Siste ordre mottatt og Lagre endringer" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/05-operations-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/05-operations-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=2e3a0b12361f4083a3e8c645c85efdb8" alt="Kortet Drift med Kanal aktivert slått på, Send sendinger automatisk, Standard avsenderadresse, Siste ordre mottatt og Lagre endringer" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/05-operations-dark.png" />
</Frame>

| Innstilling | Lagres | Hva den gjør |
| - | - | - |
| **Kanal aktivert** | Med en gang | Slår kanalen på eller av. **Når den er av, avviser Zippendo alle ordrer som sendes til denne kanalen.** |
| **Send sendinger automatisk** | Med **Lagre endringer** | Sender sendingen til transportøren automatisk når en innkommende ordre samsvarer med en fraktregel. Av som standard. |
| **Merkevare** | Med en gang | **Ordrer fra denne kanalen tilhører denne merkevaren.** Listen vises bare når organisasjonen din har merkevarer. |
| **Standard avsenderadresse** | Med **Lagre endringer** | Avsenderen for sendinger når ingen fraktregel samsvarer med ordren. Hvis ingen er lagret ennå, står det **Ingen adresser ennå** i listen. |
| **Siste ordre mottatt** | Skrivebeskyttet | Når kanalen sist mottok en ordre, eller **Aldri**. |

**Lagre endringer** (**Lagrer…**) lagrer **Send sendinger automatisk** og **Standard avsenderadresse**. Du ser **Ordrekanalen er oppdatert**, eller **Kunne ikke oppdatere ordrekanalen**.

## Slå av en kanal

Slå av **Kanal aktivert**. På fanen **Tilkoblet** står det da **Deaktivert** på raden til kanalen i kortet **Egendefinert kanal**. Egendefinerte kanaler blir alltid værende på fanen **Tilkoblet**, og blir aldri kanaler som er blitt liggende igjen.

<Frame caption="En egendefinert kanal som er slått av">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/06-disabled-card-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=3bd57ec16b8788e12913aa32cf15f947" alt="Siden Ordrekanaler med en egendefinert kanal merket Deaktivert" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/06-disabled-card-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/06-disabled-card-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=a72800f9e2235dba425e87b3cb2178c2" alt="Siden Ordrekanaler med en egendefinert kanal merket Deaktivert" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/06-disabled-card-dark.png" />
</Frame>

Shopify- eller WooCommerce-kanaler som er blitt liggende igjen, merket **Ingen aktiv tilkobling** og **Frakoblet**, er noe annet. Se [Innstillinger for ordrekanaler](/docs/no/how-to/order-channel-settings).

## Slett

Under **Faresone** finner du **Slett kanal**: **Slett denne egendefinerte kanalen. Integrasjonen din kan ikke lenger sende ordrer til den.**

<Frame caption="Slett kanal under Faresone">
  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/07-danger-zone-light.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=635843b3100bf1748428f9ac73312b16" alt="Faresone med Slett kanal og knappen Slett" className="block dark:hidden" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/07-danger-zone-light.png" />

  <img src="https://mintcdn.com/zippendo/zTPkZAbx-XsZ_sU0/images/no/how-to/custom-channel-api/07-danger-zone-dark.png?fit=max&auto=format&n=zTPkZAbx-XsZ_sU0&q=85&s=7426ff19731102dc48ce0c417b2c829f" alt="Faresone med Slett kanal og knappen Slett" className="hidden dark:block" width="2880" height="1800" data-path="images/no/how-to/custom-channel-api/07-danger-zone-dark.png" />
</Frame>

Klikk på **Slett** og bekreft: **Slette denne egendefinerte kanalen? Mottaks-URL-en slutter umiddelbart å godta ordrer.** Du ser **Ordrekanalen er slettet**, eller **Kunne ikke slette ordrekanalen**.

## Relatert

<CardGroup cols={2}>
  <Card title="Koble til ordrekanaler" icon="store" href="/docs/no/tutorials/connect-order-channels">
    Opprett kanalen fra katalogen, og åpne deretter Ordrer.
  </Card>

  <Card title="Referanse for egendefinerte kanaler" icon="webhook" href="/docs/no/order-channels/custom-channels">
    Fullt innhold, avbestilling, ping og REST-eksempler.
  </Card>

  <Card title="Innstillinger for ordrekanaler" icon="settings-2" href="/docs/no/how-to/order-channel-settings">
    Siden Ordrekanaler, merkevarer og kanaler som er blitt liggende igjen.
  </Card>

  <Card title="Opprett et API-token" icon="key" href="/docs/no/how-to/create-an-api-token">
    Et token for POST /orgs/\{orgId}/orders i stedet for signerte push-forespørsler.
  </Card>
</CardGroup>


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