Utviklere

Tre kall og en webhook.

Gateway er en hostet checkout, så integrasjonen er med vilje liten: opprett en ordre, send kunden til siden, verifiser det signerte resultatet. Alt under er hele flaten — betalings-UI, metodelogikk, 3-D Secure, lommebøker og kvitteringer bygger og vedlikeholder vi.

Slik er det bygget

Hva du integrerer mot.

  • REST over HTTPS
  • JSON inn, JSON ut
  • Bearer API-nøkler
  • Idempotensnøkler
  • Signerte webhooks
  • Replay-beskyttelse
  • Test- og live-modus
  • iOS- og Android-SDK-er
  • Butikkplugins
  • Innebygde felt

Kom i gang

Fra ingenting til betalt ordre.

Hele happy path. Beløp oppgis i minste enhet, referansene er dine, og checkout-URL-en er der du sender kunden. API-base-URL-en utstedes sammen med sandbox-nøklene dine — eksporter den som PROTOCORE_API_BASE, så kjører kallene under akkurat som skrevet.

01

Opprett ordren

Ett kall med beløp, valuta og din egen referanse. Idempotensnøkkelen genererer du selv — en gjentatt forespørsel returnerer den opprinnelige ordren i stedet for å opprette en ny.

POST /v1/orders
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
  -H "Authorization: Bearer $PROTOCORE_API_KEY" \
  -H "Idempotency-Key: 9F21-0716" \
  -H "Content-Type: application/json" \
  -d '{
        "amount": 4900,
        "currency": "EUR",
        "reference": "9F21-0716",
        "line_items": [
          { "name": "Brand identity sprint", "amount": 3850 },
          { "name": "Typeface licensing",   "amount": 600 },
          { "name": "Rush delivery",        "amount": 400 }
        ],
        "return_url": "https://arcstudio.ro/thanks"
      }'
02

Send kunden til checkout

Svaret inneholder en checkout-URL på din egen checkout-vert — den som utstedes med sandboxen, eller ditt eget domene når du peker det mot oss. Send kunden dit, eller åpne den i SDK-en; den siden rommer metodene, lommebøkene og 3-D Secure, så du har ingenting å bygge selv.

201 Created
{
  "id": "ord_2h4Kq9wRz",
  "reference": "9F21-0716",
  "amount": 4900,
  "currency": "EUR",
  "status": "pending",
  "checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}
03

Verifiser det signerte resultatet

Når betalingen er fullført, sendes en signert hendelse til endepunktet ditt. Verifiser signaturen mot webhook-hemmeligheten din før du stoler på noe, og utfør deretter levering mot referansen du allerede kjenner.

POST /your/webhook — order.paid
{
  "type": "order.paid",
  "id": "evt_7Ka2Lm",
  "created": "2026-07-23T09:41:02Z",
  "data": {
    "id": "ord_2h4Kq9wRz",
    "reference": "9F21-0716",
    "amount": 4900,
    "currency": "EUR",
    "method": "usdc",
    "settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
  }
}

Referanse

Endepunktene du faktisk bruker.

Det finnes mer i dokumentasjonen, men dette er settet de fleste integrasjoner aldri vokser ut over.

POST /v1/orders
Opprett en ordre og få checkout-URL-en. Tar en idempotensnøkkel.
GET /v1/orders/:id
Gjeldende tilstand for en ordre — status, metode, oppgjør og refusjoner.
POST /v1/orders/:id/refunds
Refunder mot ordren, helt eller delvis, med obligatorisk årsak.
POST /v1/orders/:id/void
Frigi autorisasjonen før oppgjør, slik at ingen penger flyttes i det hele tatt.
POST /v1/links
Opprett en betalingslenke — engangs eller innsamlende, med valgfri utløpstid.
GET /v1/payouts/:id
En oppgjørsbatch og ordrene som finansierte den, med spesifiserte gebyrer.
POST /v1/customers/:id/cards
Lagre et kort i hvelvet for ett-klikks og gjentakende belastninger; returnerer en tokenreferanse.
POST /v1/subscriptions
Belast et lagret kort etter en tidsplan; hver syklus gir sin egen ordre.

Webhooks

Det backend-en din får høre.

Hver hendelse har ordrereferansen du opprettet, så handleren din kan være en switch på typen og et oppslag hos deg selv.

order.paid
Autorisasjon og capture lyktes — lever mot referansen.
order.failed
Betalingen ble ikke fullført, med en årsak en operatør kan handle på.
order.refunded
En refusjon ble utstedt, hel eller delvis, med årsak og notat.
order.disputed
En chargeback ble åpnet, med bevisene allerede lagt ved ordren.
payout.settled
En oppgjørsbatch er sendt til kontoen din, med oversikt over ordrene bak.
subscription.charged
En gjentakende syklus ga sin egen ordre og kvittering.
Verifiser

Sjekk signaturen før du stoler på innholdet.

Hver leveranse har et tidsstempel og en HMAC-signatur over rå body. Sammenlign i konstant tid, avvis alt som er eldre enn toleransevinduet ditt, og behandle en duplikat hendelses-ID som allerede håndtert — vi prøver på nytt ved svar som ikke er 2xx, så handleren din bør også være idempotent.

Node — signaturverifisering
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
  const expected = createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(sig, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length || !timingSafeEqual(a, b)) return false;

  // Reject replays outside a five-minute window.
  return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}

Garantier

Egenskapene du kan bygge på.

01

Idempotente opprettelser

Hver ordreopprettelse tar en idempotensnøkkel. En gjentatt forespørsel — etter timeout, deploy eller ny levering fra kø — returnerer den opprinnelige ordren i stedet for å belaste to ganger.

02

Signerte, replay-beskyttede hendelser

Webhooks har en tidsstemplet HMAC-signatur og en stabil hendelses-ID. Leveranser prøves på nytt med backoff til endepunktet ditt svarer 2xx, så et deploy-vindu mister ingen betaling.

03

Én referanse, fra ende til ende

Referansen du oppgir ved opprettelse, vises på checkout, kvitteringen, webhooken, utbetalingen og enhver senere refusjon. Det finnes ingen ekstra identifikator å mappe mellom systemer.

04

Testmodus bruker samme kodevei

Testnøkler kjører identiske flyter mot testsesjoner. Det som består i test, er det som går i produksjon — forskjellen er hvilke nøkler du sender, ikke hvilke endepunkter du kaller.

Testdata

Slik tester du banene som betyr noe.

Bak hver av stiene under ligger et testkort, som du finner sammen med nøklene dine når sandboxen opprettes. Kortnumrene er sandbox-spesifikke og publiseres ikke her, slik at de forblir riktige når schemenes testområder endres. Oppførselen er uansett deterministisk: en test kan like enkelt verifisere en avvisning som en vellykket betaling.

Godkjent direkte
Autoriserer og fanger uten 3-D Secure-utfordring — den ideelle flyten.
3-D Secure-utfordring
Tvinger frem en utfordring du kan gå gjennom, slik at du kan teste returleddet.
Mykt avslag
Avslår på grunn av manglende dekning, og prøver deretter på nytt via en alternativ rute.
Hardt avslag
Avslår permanent som utløpt kort, uten nytt forsøk.
USDC-testnettverk
USDC på testnett for Ethereum, Base og Solana, priset til fast kurs.
Overføringssimulering
Marker en test-vIBAN-overføring som mottatt for å sette ordren til betalt.

Hent nøkler og kom i gang.

En sandbox-merchant med API-nøkler, webhook-hemmeligheter og alle metoder slått på — pluss full referanse, slik at teamet ditt kan integrere før noe er signert.