Dokumentasi API

REST API Tako untuk mengirim hadiah ke kreator dan top up saldo akunmu. Semua endpoint membutuhkan API Key pribadi yang dapat dibuat di halaman pengaturan.

Lihat OpenAPI spec (JSON)

Autentikasi

Sertakan API Key pada setiap request melalui header Authorization. Key hanya dapat digunakan dari alamat IP yang diizinkan jika kamu mengatur pembatasan IP saat membuat key.

Base URL
https://tako.id
Header (wajib)
Authorization: Bearer <api-key>
Header (wajib)
User-Agent: <nama-aplikasimu>/1.0

Belum punya API Key? Buat di sini

Callback URL & Redirect URL

Diatur sekali di halaman API Key, berlaku otomatis untuk setiap pembayaran (hadiah maupun top up) yang dibuat dengan key tersebut. Tidak dikirim sebagai body request. Atur di sini.

Redirect URL

Kemana pembayar diarahkan di halaman /pay/{id} setelah pembayaran berhasil, menggantikan halaman Tako bawaan. Kosongkan untuk memakai halaman bawaan.

Callback URL

Tako mengirim satu kali HTTP POST ke URL ini (harus https://, tidak boleh alamat internal) setiap ada pembayaran yang sukses lewat key ini. Tidak ada retry apabila gagal.

{
  "event": "payment.success",
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "status": "success",
    "amount": 50000,
    "price": 50000,
    "paymentMethod": "qris",
    "paymentUrl": "https://tako.id/pay/00000000-0000-0000-0000-000000000000",
    "createdAt": "2026-07-02T10:30:00.000Z",
    "relatedGiftId": null
  }
}

relatedGiftId terisi jika pembayaran ini untuk hadiah (lihat detailnya lewat GET /api/v1/gift/{giftId}), atau null untuk top up biasa.

Memvalidasi Callback

Apabila Callback Secret diisi, body callback ditandatangani dengan HMAC SHA-256 pada header X-Tako-Signature. Kosongkan Callback Secret untuk mematikan signature (header tidak akan dikirim). Contoh implementasi di Node.js:

const crypto = require("crypto");

const computedSignature = crypto
    .createHmac("sha256", callbackSecret)
    .update(JSON.stringify(callbackBody))
    .digest("hex");

return crypto.timingSafeEqual(
    Buffer.from(computedSignature),
    Buffer.from(takoSignatureFromHeader)
);
  • callbackSecret: Callback Secret asli dari halaman API Key
  • callbackBody: Isi body dari callback
  • takoSignatureFromHeader: Konten signature yang diterima dari header X-Tako-Signature
POST/api/v1/gift/{username}

Mengirim Hadiah

Membuat hadiah ke akun kreator {username}. Body dapat dikirim sebagai application/json atau multipart/form-data. Callback URL dan Redirect URL untuk pembayaran yang dibuat lewat endpoint ini diatur di dashboard API Key (/me/api-keys), lihat bagian "Callback & Redirect URL" di bawah.

Body

ParameterTipeKeterangan
namestringNama pengirim hadiah
emailstring
amountnumber
paymentMethod"qris" | "gopay" | "dana" | "paypal"Metode pembayaran. Wajib, pembayaran dari saldo tidak tersedia untuk API Key.
message(opsional)string

Contoh Request

curl -X POST https://tako.id/api/v1/gift/<username> \
  -H "Authorization: Bearer <api-key>" \
  -H "User-Agent: <user-agent>" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Budi",
  "email": "budi@email.com",
  "amount": 50000,
  "paymentMethod": "qris",
  "message": "string"
}'

Response

Hadiah dibuat, perlu pembayaran. Arahkan pengirim ke paymentUrl untuk menyelesaikan. Pembayaran via saldo hanya untuk sesi login, bukan API Key.

{
  "statusCode": 206,
  "result": {
    "success": true,
    "giftId": "00000000-0000-0000-0000-000000000000",
    "transactionId": "00000000-0000-0000-0000-000000000000",
    "paymentUrl": "https://tako.id/pay/00000000-0000-0000-0000-000000000000"
  }
}
GET/api/v1/gift/{giftId}

Status Hadiah

Mengambil detail dan status hadiah berdasarkan {giftId}. API Key hanya dapat melihat hadiah yang dibuat dengan key yang sama.

Contoh Request

curl https://tako.id/api/v1/gift/<giftId> \
  -H "Authorization: Bearer <api-key>" \
  -H "User-Agent: <user-agent>"

Response

Detail hadiah.

{
  "statusCode": 200,
  "result": {
    "id": "00000000-0000-0000-0000-000000000000",
    "status": "pending",
    "type": "string",
    "amount": 0,
    "message": "string",
    "currency": "string",
    "gifterName": "string",
    "gifterEmail": "string",
    "createdAt": "2026-07-02T10:30:00.000Z"
  }
}
POST/api/v1/topup/{username}

Mengirim Top Up

Membuat transaksi top up saldo ke akun kreator {username}. Memerlukan akses keuangan (finance) atas akun tersebut. Callback URL dan Redirect URL untuk pembayaran yang dibuat lewat endpoint ini diatur di dashboard API Key (/me/api-keys), lihat bagian "Callback & Redirect URL" di bawah.

Body

ParameterTipeKeterangan
paymentMethod"qris" | "gopay" | "dana" | "paypal"
amount(opsional)numberWajib jika tanpa productId
productId(opsional)stringid paket top up
discountCode(opsional)string

Contoh Request

curl -X POST https://tako.id/api/v1/topup/<username> \
  -H "Authorization: Bearer <api-key>" \
  -H "User-Agent: <user-agent>" \
  -H "Content-Type: application/json" \
  -d '{
  "paymentMethod": "qris",
  "amount": 0,
  "productId": "string",
  "discountCode": "string"
}'

Response

Transaksi dibuat. Arahkan ke paymentUrl untuk membayar.

{
  "statusCode": 201,
  "result": {
    "success": true,
    "transactionId": "00000000-0000-0000-0000-000000000000",
    "paymentUrl": "https://tako.id/pay/00000000-0000-0000-0000-000000000000",
    "transaction": {
      "id": "00000000-0000-0000-0000-000000000000",
      "status": "pending",
      "amount": 0,
      "price": 0,
      "paymentMethod": "string",
      "paymentUrl": "string",
      "createdAt": "2026-07-02T10:30:00.000Z"
    }
  }
}
GET/api/v1/transactions/{transactionId}

Status Transaksi

Mengambil detail dan status transaksi pembayaran berdasarkan {transactionId}. Hanya dapat diakses oleh pembuat transaksi.

Contoh Request

curl https://tako.id/api/v1/transactions/<transactionId> \
  -H "Authorization: Bearer <api-key>" \
  -H "User-Agent: <user-agent>"

Response

Detail transaksi.

{
  "statusCode": 200,
  "result": {
    "id": "00000000-0000-0000-0000-000000000000",
    "status": "pending",
    "amount": 0,
    "price": 0,
    "paymentMethod": "string",
    "paymentUrl": "string",
    "createdAt": "2026-07-02T10:30:00.000Z"
  }
}