How Sekawan Works

Sekawan is Kitabisa's Third Party Platform (3PP) service. Partners integrate with it to let their own users browse Kitabisa campaigns and donate, without those users needing a Kitabisa account. These diagrams show who's involved and the happy-path donation flow end to end.

Use case

A Partner Backend is the client of Sekawan's API, authenticating with an X-Client-Key / X-Client-Secret pair. Sekawan sits between the partner and Kitabisa's core donation platform (campaign data, payment processing, donation ledger).

flowchart LR
  donor(["Donor"])

  subgraph partner["Partner Backend"]
    uc1(["List campaigns"])
    uc2(["List payment methods"])
    uc3(["Create donation"])
    uc4(["Check donation status"])
    uc5(["Cancel auto-verify donation"])
  end

  sekawan[["Sekawan (3PP API)"]]
  core[("Kitabisa Core")]

  donor --> partner
  uc1 --> sekawan
  uc2 --> sekawan
  uc3 --> sekawan
  uc4 --> sekawan
  uc5 --> sekawan
  sekawan --> core
        

Happy path: donation flow

The typical sequence a partner integration follows to let a donor complete a donation, from browsing campaigns through to a verified payment.

sequenceDiagram
  autonumber
  actor Donor
  participant Partner as Partner Backend
  participant Sekawan
  participant Core as Kitabisa Core / Payment Gateway

  Donor->>Partner: Open donation page
  Partner->>Sekawan: GET /campaigns (or /campaigns-all)
  Sekawan->>Core: fetch mapped campaigns
  Core-->>Sekawan: campaign list
  Sekawan-->>Partner: 200 campaign list
  Partner-->>Donor: show campaigns

  Donor->>Partner: Select a campaign
  Partner->>Sekawan: GET /campaign/{campaignID}
  Sekawan-->>Partner: 200 campaign detail

  Partner->>Sekawan: GET /payment-method
  Sekawan-->>Partner: 200 payment methods
  Partner-->>Donor: show payment method options

  Donor->>Partner: Enter amount, pick payment method, confirm
  Partner->>Sekawan: POST /non-login-donation
  Sekawan->>Core: create donation + payment instructions
  Core-->>Sekawan: donation created (payment token / VA / QR / redirect URL)
  Sekawan-->>Partner: 200 donation + payment details
  Partner-->>Donor: show payment instructions / redirect to pay

  Donor->>Core: complete payment (bank transfer, GoPay, etc.)
  Core-->>Core: payment verified

  loop poll until verified
    Partner->>Sekawan: GET /donations/{donationID}
    Sekawan-->>Partner: donation status
  end
  Partner-->>Donor: show donation confirmed
        
  1. Partner lists campaigns via GET /campaigns or /campaigns-all and shows them to the donor.
  2. Donor picks a campaign; partner fetches full detail via GET /campaign/{campaignID}.
  3. Partner lists enabled payment methods via GET /payment-method and shows them to the donor.
  4. Donor enters an amount, picks a payment method, and confirms — partner calls POST /non-login-donation. No prior login/registration is required; a user record is created automatically if one doesn't exist yet.
  5. Sekawan returns payment instructions (bank/VA details, a QR code, or a redirect URL) depending on the chosen payment method.
  6. Donor completes payment outside Sekawan (bank app, GoPay, etc.).
  7. Partner polls GET /donations/{donationID} until the status turns VERIFIED (or receives a webhook/redirect callback, depending on the payment method), then shows the donor a confirmation.