Utvecklare

Tre anrop och en webhook.

Gateway är en hostad checkout, så integrationen är medvetet liten: skapa en order, skicka kunden till sidan, verifiera det signerade resultatet. Allt nedan är hela ytan — betalningsgränssnitt, metodlogik, 3-D Secure, plånböcker och kvitton bygger och underhåller vi.

Upplägget

Vad du integrerar mot.

  • REST över HTTPS
  • JSON in, JSON ut
  • Bearer API-nycklar
  • Idempotensnycklar
  • Signerade webhooks
  • Replay-skydd
  • Test- och live-läge
  • SDK:er för iOS & Android
  • Plugins för webbshoppar
  • Inbäddade fält

Snabbstart

Från noll till betald order.

Hela den lyckade vägen. Belopp anges i minsta valutaenhet, referenserna är dina och checkout-URL:en är dit du skickar kunden. API:ets bas-URL utfärdas tillsammans med dina sandbox-nycklar — exportera den som PROTOCORE_API_BASE så fungerar anropen nedan precis som de står.

01

Skapa ordern

Ett anrop med belopp, valuta och din egen referens. Idempotensnyckeln genererar du själv — en omsänd begäran returnerar den ursprungliga ordern i stället för att skapa en till.

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

Skicka kunden till checkout

Svaret innehåller en checkout-URL på din egen checkout-värd — den som utfärdades med din sandbox, eller din egen domän när du har pekat den mot oss. Omdirigera dit, eller öppna den i SDK:n. På den sidan finns betalmetoderna, plånböckerna och 3-D Secure, så du behöver inte bygga något själv.

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

Verifiera det signerade resultatet

När betalningen är slutförd når en signerad händelse din endpoint. Verifiera signaturen mot din webhook-hemlighet innan du litar på något, och leverera sedan mot den referens du redan känner till.

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" }
  }
}

Referens

Endpoints du faktiskt kommer att använda.

Det finns mer i dokumentationen, men det här är de anrop som de flesta integrationer aldrig växer ifrån.

POST /v1/orders
Skapa en order och få dess checkout-URL. Kräver en idempotensnyckel.
GET /v1/orders/:id
Aktuellt tillstånd för en order — status, metod, avräkning och återbetalningar.
POST /v1/orders/:id/refunds
Återbetala mot ordern, helt eller delvis, med obligatorisk orsak.
POST /v1/orders/:id/void
Frigör auktoriseringen före avräkning, så att inga pengar flyttas alls.
POST /v1/links
Skapa en betallänk — för engångsbruk eller flera betalningar, med valfritt utgångsdatum.
GET /v1/payouts/:id
En avräkningsbatch och de ordrar som finansierade den, med specificerade avgifter.
POST /v1/customers/:id/cards
Spara ett kort i valvet för ett-klicksbetalningar och återkommande debiteringar; returnerar en tokenreferens.
POST /v1/subscriptions
Debitera ett sparat kort enligt schema; varje cykel skapar en egen order.

Webhooks

Vad din backend får veta.

Varje händelse bär den orderreferens du skapade, så din hanterare kan vara en switch på typen och ett uppslag på din egen sida.

order.paid
Auktorisering och capture lyckades — leverera mot referensen.
order.failed
Betalningen slutfördes inte, med en orsak som en operatör kan agera på.
order.refunded
En återbetalning gjordes, hel eller delvis, med orsak och notering.
order.disputed
En chargeback öppnades, med underlaget redan bifogat ordern.
payout.settled
En avräkningsbatch skickades till ditt konto, med de ordrar som ligger bakom.
subscription.charged
En återkommande cykel skapade en egen order och ett eget kvitto.
Verifiera

Kontrollera signaturen innan du litar på innehållet.

Varje leverans har en tidsstämpel och en HMAC-signatur över den råa bodyn. Jämför i konstant tid, avvisa allt som är äldre än ditt toleransfönster och behandla ett dubblerat event-id som redan hanterat — vi försöker igen vid svar som inte är 2xx, så din hanterare bör också vara idempotent.

Node — signaturverifiering
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

Egenskaper du kan bygga på.

01

Idempotent skapande

Varje orderskapande tar en idempotensnyckel. En omsänd begäran — efter en timeout, en deploy eller en omleverans från kön — returnerar den ursprungliga ordern i stället för att debitera två gånger.

02

Signerade, replay-skyddade händelser

Webhooks har en tidsstämplad HMAC-signatur och ett stabilt event-id. Leveranser försöks igen med backoff tills din endpoint svarar 2xx, så ett deploy-fönster kostar ingen betalning.

03

En referens, hela vägen

Referensen du anger vid skapandet syns på checkout, kvittot, webhooken, utbetalningen och varje senare återbetalning. Det finns ingen andra identifierare att mappa mellan systemen.

04

Testläget går samma kodväg

Testnycklar kör identiska flöden mot testsessioner. Det som går igenom i test är det som går i produktion — skillnaden är vilka nycklar du skickar, inte vilka endpoints du anropar.

Testdata

Så testar du de flöden som räknas.

Bakom varje väg nedan finns ett testkort. Kortnumren följer med nycklarna när sandlådan skapas. De publiceras inte här, så att de förblir korrekta när schemats testintervall ändras. Beteendet är deterministiskt i båda fallen: ett test kan lika enkelt verifiera ett avslag som ett godkännande.

Godkänd direkt
Auktoriserar och capturar utan 3-D Secure-utmaning — det lyckade flödet.
3-D Secure-utmaning
Tvingar fram en utmaning som du kan gå igenom, så att du kan testa återvändningen.
Mjukt avslag
Avslås på grund av otillräckliga medel och görs sedan om via en alternativ route.
Hårt avslag
Avslås permanent som utgånget kort, utan nytt försök.
USDC-testnätverk
Testnet-USDC på Ethereum, Base och Solana, med fast kurs.
Överföringssimulering
Markera en vIBAN-testöverföring som mottagen för att flytta ordern till betald.

Hämta nycklar och kom igång.

En sandlådehandlare med API-nycklar, webhook-hemligheter och alla metoder aktiverade — plus hela referensen, så att ert team kan integrera innan något är påskrivet.