Welcome to Sekawan! Sekawan is Kitabisa’s third party platform service where you can consume every crowdfunding / donation endpoint.
See How Sekawan Works for a diagram of the use case and the happy-path donation flow end to end.
To see endpoint collection, every request must include X-Client-Secret & X-Client-Key on HTTP Header, if no headers found then the service will return 401 Unauthorized.
Staging environment: https://sekawan.ktbs.xyz
Production environment: https://sekawan.ktbs.io
Below are the list of response status code:
General
| Status Code | description |
|---|---|
| 121000 | Success |
| 121001 | Credentials cannot be empty (empty key / secret) |
| 121002 | Invalid client |
| 121003 | Invalid client from context |
| 121005 | Parameter not set |
| 121006 | Invalid backend response |
| 121007 | Unauthorized token |
| 121008 | Invalid credentials |
| 121999 | Unknown error |
Donation
| Status Code | description |
|---|---|
| 102101 | Campaign ID cannot be empty |
| 102102 | Payment method ID cannot be empty |
| 102104 | Amount cannot be empty |
| 102105 | Donation amount cannot be lower than minimum donation |
| 102106 | Donation amount cannot be higher than maximum donation |
| 102107 | Cannot create donation with same amount within one minute |
| 102108 | Donation amount must be multiples of thousands |
| 102109 | Invalid email or phone number |
| 102110 | Campaign not open for donation |
| 102111 | Redirect callback cannot be empty |
| 102112 | Email or phone number cannot be empty |
| 102113 | Name cannot be empty |
| 102114 | Donation amount cannot be negative |
| 102115 | Redirect callback params cannot be empty |
| 102303 | Payment method not supported |
| 102304 | Duplicate donation found |
| 102305 | Donation not found |
| 102306 | Donation cannot be canceled |
| 102307 | Donation already canceled |
| 102308 | Donation ID cannot be empty |
| 122004 | Payment method not found |
Campaign
| Status Code | description |
|---|---|
| 123001 | Campaign not found |
For partners who process payment on their own side (their own payment method) and only need Sekawan to record an already-verified donation. The donation is created and immediately marked verified using the client's configured auto-verify payment method — no separate payment step happens on Sekawan's side.
102101 : Empty campaign ID102104 : Amount cannot be empty102304 : Duplicate donation found (when partner_trx_id was already used)121005 : Parameter not set (client's auto-verify payment method is not configured)| X-Client-Key required | string |
| X-Client-Secret required | string |
Auto Verify Donation payload
| campaign_id required | string Campaign's unique ID. |
| amount required | number The amount donated. |
| full_name | string Donor's full name. |
string Donor's email. | |
| phone_number | string Donor's phone number. |
| is_anonymous | boolean Whether the donor's name should be displayed or not. |
| partner_trx_id | string Optional partner-supplied transaction ID. If supplied and a donation with the same ID already exists for this client, the request is rejected as a duplicate. |
object |
{- "campaign_id": "171009",
- "amount": 10000,
- "full_name": "John Doe",
- "email": "john@mail.com",
- "phone_number": "628777443213",
- "is_anonymous": false,
- "partner_trx_id": "test_001",
- "utm": {
- "source": "facebook",
- "medium": "ads",
- "campaign": "bisasehat",
- "content": "string"
}
}{- "code": 121000,
- "data": {
- "id": "3576894",
- "amount": 10000,
- "created": 1596522155,
- "verified": 1596522155,
- "is_anonymous": false,
- "send_notification": false,
- "partner_trx_id": "test_001",
- "status": {
- "id": 4,
- "name": "",
- "status": "VERIFIED"
}
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Cancels a previously created auto-verify donation.
102308 : Donation ID cannot be empty102305 : Donation not found102306 : Donation cannot be canceled102307 : Donation already canceled| X-Client-Key required | string |
| X-Client-Secret required | string |
Cancel Auto Verify Donation payload
| donation_id required | integer <uint64> The donation ID to cancel (as returned by Auto Verify Donation). |
{- "donation_id": 17320
}{- "code": 200,
- "data": {
- "id": "17320",
- "partner_trx_id": "test_001",
- "status": {
- "id": 1,
- "name": "Dibatalkan",
- "status": "CANCELLED"
}
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Creates a donation for a campaign on behalf of a donor identified only by name and email/phone — no prior login or registration is required. If no matching user exists yet, one is created automatically.
Some fields are conditionally required based on the resolved payment type: redirect_callback is required when payment type is dana, dana_microsite, gopay, gopayqr, or linkaja; redirect_callback_params is required when payment type is dana, gopay, or gopayqr.
102101 : Empty campaign ID102106 : Donation too large102107 : Cannot create donation with same amount within one minute102108 : Donation amount must be in multiples of thousands102109 : Invalid email or phone number102111 : Empty redirect callback102113 : Name cannot be empty102303 : Payment method not supported| X-Client-Key required | string |
| X-Client-Secret required | string |
Non Login Donation payload
| name required | string [ 1 .. 70 ] characters Donor's name |
| email_or_phone required | string [ 1 .. 255 ] characters Donor's email or phone number |
| campaign_id required | integer <uint64> Campaign's unique ID, please see |
| amount required | integer >= 1000 Donation amount. Must be a positive multiple of 1000. |
| payment_methods_id required | integer Payment method unique ID, please see |
| platform | string Free-form source/platform label. |
| comment | string Donor's comment about donation |
| is_anonymous | boolean Flag to hidden donor's name or replaced by Anonymous |
| send_notification | boolean Flag to send notification (Email / SMS / WA) message to donor when payment is verified |
| campaigner_relation | boolean |
| share_userdata_agreement | boolean |
| cashtag | string Jenius cash tag, only used when payment method using |
| promo_code | string Jenius promo code, only used when payment method using |
| redirect_callback | string Gopay redirect callback URL, only used when payment method using |
| redirect_callback_params | string Redirect callback URL parameters, only used when payment method using
|
| payment_token | string Pre-authorized payment token, when applicable to the payment method. |
object |
{- "name": "John Doe",
- "email_or_phone": "John@mail.com",
- "campaign_id": 123,
- "amount": 10000,
- "payment_methods_id": 123,
- "platform": "string",
- "comment": "Some long comment here",
- "is_anonymous": false,
- "send_notification": false,
- "campaigner_relation": true,
- "share_userdata_agreement": true,
- "cashtag": "$omet4g5",
- "promo_code": "pr0m0cod3",
- "redirect_callback_params": "my_param=true",
- "payment_token": "string",
- "utm": {
- "source": "facebook",
- "medium": "ads",
- "campaign": "bisasehat"
}
}{- "code": 200,
- "data": {
- "id": 17320,
- "user_id": 98993815,
- "snap_token": "string",
- "success_url": "string",
- "payment_token": "string",
- "payment_checkout_url": "string",
- "gopay_generate_qr_code": "https://api.sandbox.veritrans.co.id/v2/gopay/ec6e402c-5a62-487b-abb7-8e10fd6b9e3b/qr-code",
- "gopay_deeplink_redirect": "https://simulator.sandbox.midtrans.com/gopay/ui/checkout?referenceid=ylmCfxar7X",
- "gopay_user_verification": "string",
- "gopay_verification_link_url": "string",
- "gopay_verification_link_app": "string",
- "shopeepay_qr_url": "string",
- "shopeepay_redirect_url_http": "string",
- "shopeepay_redirect_url_app": "string",
- "donations": [
- null
], - "invoice": {
- "base_donation": 10000,
- "unique_code": 975,
- "transaction_fee": 0,
- "total_invoiced": 10975
}, - "payment_method": {
- "type": "BANKTRANSFER",
- "name": "Transfer BRI",
- "bank_name": "Bank Rakyat Indonesia (BRI)",
- "bank_shortname": "BRI",
- "bank_branch": "Plaza Pondok Gede",
- "bank_account_holder": "Yayasan Kita Bisa",
- "bank_account_number": "038501000265303",
}, - "open_code": "string"
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Use this to fetch donation or payment detail by using donation id. The donationID path value may also be a partner transaction ID (partner_trx_id) you previously supplied when creating the donation — it is resolved to the internal donation ID transparently.
CANCELLED Donation is cancelledPENDING Donation is waiting to be paidVERIFIED Donation has been verifiedTO_WALLET Donation is reverse to donor's walletPAID Donation has been paid to campaignerDRAFT Quite same with PENDING| donationID required | string Donation unique ID, or a previously supplied partner transaction ID. |
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location -g --request GET 'https://sekawan.ktbs.xyz/v1/auth/donations/{{donation_id}}' \ --header 'Content-Type: application/json' \ --header 'X-Client-Secret: {{client_secret}}' \ --header 'X-Client-Key: {{client_key}}'
{- "code": 121000,
- "data": [
- {
- "id": 3532756,
- "campaign": {
- "id": 19117,
- "campaigner": "Tri `#3`",
- "campaigner_avatar": "https://img.staging.kitabisa.cc/size/150x150/02f34a48-19d5-4e06-86a1-13c22c8e688d.jpg",
- "campaigner_id": 44648,
- "category_id": 11,
- "category_name": "Cat A",
- "is_zakat": false,
- "short_url": "opengoal",
- "title": "testing dummy",
- "verification_status": true
}, - "comment": "this is comment",
- "confirmation_code": "Akdtd8YsgoiuoCbMnwBz0Mez6Dgi0AHWQv3VkN1x",
- "created": 1570609647,
- "expired": 1570631247,
- "invoice": {
- "base_donation": 78000,
- "total_invoiced": 78000,
- "transaction_fee": 780,
- "unique_code": 0
}, - "is_anonymous": false,
- "payment_method": {
- "bank_acc_holder": "gopay",
- "bank_acc_nbr": "gopay",
- "bank_branch": "gopay",
- "bank_name": "gopay",
- "bank_shortname": "string",
- "name": "GO-PAY",
- "type": "GOPAY"
}, - "shareable_links": {
}, - "source": "kumparan",
- "status": {
- "id": 9,
- "name": "Draft",
- "status": "DRAFT"
}, - "user_id": 1747421,
- "verified": 0,
- "partner_trx_id": ""
}
], - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}This endpoint consisting of Kitabisa’s digital payment such as GoPay, DANA, LinkAja, VA BCA, and VA Mandiri. The transaction will directly go to Kitabisa’s bank account.
Please see Here
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location --request GET 'https://sekawan.ktbs.xyz/v1/auth/payment-method' \ --header 'X-Client-Key: {{client_key}}' \ --header 'X-Client-Secret: {{client_secret}}' \ --header 'Content-Type: application/json'
{- "code": 200,
- "data": [
- {
- "id": 20,
- "name": "GO-PAY",
- "payment_type": "GOPAY",
- "order": 1,
- "is_disabled": false
}, - {
- "id": 22,
- "name": "BCA Virtual Account",
- "payment_type": "VIRTUALACCOUNT",
- "order": 2,
- "is_disabled": false
}
], - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}What is the campaign? contains a page where displaying certain issues that are fundraised by individuals, communities, and NGOs. In Kitabisa, every campaign differentiates by its short URL.
This endpoint uses to fetch the campaign list that you’ve requested from our rep. **Every request will return a maximum of 5 campaigns. If there are more than 5 campaigns, please hit the endpoint with the additional URL query param next and fill it with the next token from the previous response.
| next | string Example: next=Va7AkScYQW9JRkFBQUFBQUFBQUFBbE1qZzNNek09Ag Next token used for fetching next list of campaign |
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location --request GET 'https://sekawan.ktbs.xyz/v1/auth/campaigns' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'X-Client-Key: {{client_key}}' \ --header 'X-Client-Secret: {{client_secret}}' \ --data-raw ''
{- "code": 200,
- "data": {
- "next": "Va7AkScYQW9JRkFBQUFBQUFBQUFBbE1qZzNNek09Ag",
- "data": [
- {
- "id": 19117,
- "parent_project_id": 0,
- "title": "testing dummy",
- "expired": 1490979599,
- "days_remaining": 0,
- "donation_received": 25745003,
- "campaigner": "Tri #3",
- "campaigner_type": "ORGANIZATION",
- "campaigner_is_verified": true,
- "category_name": "Cat A",
- "is_forever_running": false,
- "is_open_goal": false,
- "request_userdata": false,
- "donation_target": 17000000,
- "donation_percentage": 1.51441,
- "short_url": "opengoal"
}
]
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Broader campaign listing than /campaigns: supports free-text search, sorting, and category filtering on top of the campaigns mapped to your client. If partner_id is not passed as a query param, it falls back to the client's configured partner_id parameter.
123001 Campaign not found| partner_id | string Overrides the client's configured partner_id parameter. |
| next | string Example: next=2 Page number token (1-based) used for pagination. |
| keyword | string Free-text search across the client's mapped campaigns. |
| sort | string Sort key forwarded to the campaign search backend, e.g. |
| category_slug | string Restrict results to a single campaign category by slug. |
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location --request GET 'https://sekawan.ktbs.xyz/v1/auth/campaigns-all?keyword=medis&sort=rating' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'X-Client-Key: {{client_key}}' \ --header 'X-Client-Secret: {{client_secret}}' \ --data-raw ''
{- "code": 200,
- "data": {
- "next": "Va7AkScYQW9JRkFBQUFBQUFBQUFBbE1qZzNNek09Ag",
- "data": [
- {
- "id": 19117,
- "parent_project_id": 0,
- "title": "testing dummy",
- "expired": 1490979599,
- "days_remaining": 0,
- "donation_received": 25745003,
- "campaigner": "Tri #3",
- "campaigner_type": "ORGANIZATION",
- "campaigner_is_verified": true,
- "category_name": "Cat A",
- "is_forever_running": false,
- "is_open_goal": false,
- "request_userdata": false,
- "donation_target": 17000000,
- "donation_percentage": 1.51441,
- "short_url": "opengoal"
}
]
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Returns full detail for a single campaign — story, deadline, accumulated donation, progress updates, total donors, and images. The campaign must be mapped to the calling client.
123001 Campaign not found| campaignID required | string Campaign numeric ID (e.g. |
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location --request GET 'https://sekawan.ktbs.xyz/v1/auth/campaign/38661' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'X-Client-Key: {{client_key}}' \ --header 'X-Client-Secret: {{client_secret}}' \ --data-raw ''
{- "code": 200,
- "data": {
- "id": 146839,
- "title": "Bantu berobat anfi",
- "short_url": "babtusantim",
- "short_description": "Bantu ya",
- "description": "<p>Hai perkenalkan nama saya Rizky Azizi...</p>",
- "is_forever_running": false,
- "is_open_goal": false,
- "donation_received": 0,
- "donation_count": 0,
- "donation_target": 1000000,
- "donation_percentage": 0,
- "campaign_start": 1568797026,
- "campaign_last_update": 1570599028,
- "days_running": 20,
- "days_remaining": 9,
- "seconds_running": 1804204,
- "is_zakat": false,
- "is_open_for_donation": true,
- "is_verified": false,
- "campaigner_type": "ORGANIZATION",
- "status": {
- "id": 6,
- "name": "LIVE"
}, - "campaigner": {
- "secondary_id": "02568c62a957d89dc18ed808a40a463e",
- "name": "Rizky Azizi",
- "name_shortened": "Rizky Azizi",
- "is_verified": true,
- "type": "ORGANIZATION"
}, - "category": {
- "id": 9,
- "name": "Bantuan Medis & Kesehatan"
}, - "partner": {
- "id": 0,
- "name": "",
- "permalink": ""
}, - "parent_campaign": {
- "id": 0,
- "title": "",
- "permalink": ""
}
}, - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Use this endpoint to fetch all banner images. **All banner response has beed ordered by weight value descending.
| X-Client-Key required | string |
| X-Client-Secret required | string |
curl --location --request GET 'https://sekawan.ktbs.xyz/v1/auth/banners' \ --header 'X-Client-Secret: {{client_secret}}' \ --header 'X-Client-Key: {{client_key}}'
{- "code": 121000,
- "data": [
], - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}Aside general issues, Kitabisa also provide services for moslem to pay zakat regularly. To pay zakat, the calculation of total wealth shall reach minimum nisab. **Nisab set as the fix tresholds at which a Muslim pay zakat on eligible kinds of wealth.
This endpoint use to fetch amount to 2.5% of monthly income, debt (if any), and other assets. Example: if your total assets (after any debts owed) amounted to £10,000, then you would be required to pay £250 as Zakat.
| X-Client-Key required | string |
| X-Client-Secret required | string |
Zakat profession calculator payload
| monthly_income | number non-empty |
| other_income | number |
| debt | number |
{- "monthly_income": 16500000,
- "other_income": 12000000,
- "debt": 12000000
}{- "code": 121000,
- "data": [
- {
- "zakat_amount": 418000,
- "more_than_nisab": true
}
], - "meta": {
- "version": "v1.3.3-190-gc0bb2ec",
- "build_date": "2020-07-29-05:55:04"
}
}