REST · WebSocket · gRPC

API
referensi.

312 endpoint, spesifikasi OpenAPI lengkap, idempotensi pada setiap mutasi, dan kontrak uptime publik. Tidak ada kotak hitam.

URL dasar
api.rozper.com
Versi
v2026.05
Batas tarif
1000 rp
POS/v2/panggilan
"color:#22D3EE">curl "color:#22D3EE">-X "warna:#34D399;berat font:600">POSTING https://api.rozper.com/v2/calls \
  "warna:#22D3EE">-H "Otorisasi: Pembawa $ROZPER_API_KEY" \
  "warna:#22D3EE">-H "Jenis Konten: aplikasi/json" \
  "warna:#22D3EE">-d '{
    "ke":   "+14155551234",
    "dari": "+12025550100",
    "url":  "https://your.app/voice/answer"
  }'
201Respon · 84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "status": "queued",
  "to":     "+14155551234",
  "from":   "+12025550100",
  "created_at": "2026-05-12T14:23:01Z"
}
§01 · Otentikasi

Token pembawa.
Cakupan. Dapat diputar.

Setiap permintaan membawa kunci proyek sebagai token Pembawa. Kunci memiliki cakupan (baca, tulis, penagihan), dapat diputar tanpa waktu henti, dan dapat diberi pin IP dari dasbor.

  • Kunci per lingkungan (uji/langsung)
  • Kredensial klien OAuth 2.0 didukung
  • Saling TLS tersedia di Perusahaan
Tajuk otorisasi
keritingsimpulular pitonPergi
# .env  →  never commit me
ROZPER_API_KEY=sk_live_8FzqQ...XW7p

# request
curl https://api.rozper.com/v2/account \
  -H "Authorization: Bearer $ROZPER_API_KEY"

# 200 OK
{
  "id": "acct_01HXY7ZQ9V3J3X8K5N",
  "scopes": ["calls.write", "messages.write", "numbers.read"],
  "rate_limit": { "limit": 1000, "remaining": 998, "reset": 1715520000 }
}
§02 · Referensi

Jelajahi setiap titik akhir.

panggilanBuat panggilan

Buat panggilan

Memulai panggilan PSTN keluar. Segera kembali dengan objek panggilan yang antri — dengarkan di webhook untuk mengetahui perubahan status.

POS/v2/panggilan
Parameter
torangkaiandiperlukan

E.164 nomor tujuan.

fromrangkaiandiperlukan

Nomor Rozper yang terverifikasi atau disewa.

urlrangkaian

Titik akhir HTTPS yang mengembalikan instruksi suara saat panggilan tersambung.

recordboolean

Rekam kedua kaki ke penyimpanan Anda. Bawaan salah.

timeoutbilangan bulat

Batas waktu dering habis dalam hitungan detik. Bawaan 60.

Meminta · simpul● hidup
const call = await rozper.calls.create({
  to:   "+14155551234",
  from: "+12025550100",
  url:  "https://your.app/voice/answer",
})
Tanggapan · 201 dibuat84 ms
{
  "id": "call_01HXY7ZQ9V3J3X8K5N",
  "object": "call",
  "created_at": "2026-05-12T14:23:01Z"
}
§03 · Kesalahan

Kesalahan yang dapat diprediksi dan dapat dibaca mesin.

Setiap 4xx dan 5xx mengembalikan bentuk yang sama: stabil code, pesan yang dapat dibaca manusia, dan id permintaan yang dapat Anda tempelkan ke dukungan.

Amplop kesalahan
{
  "error": {
    "code": "invalid_param",
    "message": "to: must be E.164",
    "request_id": "req_01HXY7…",
    "param_errors": [
      { "param": "to", "reason": "format" }
    ]
  }
}
400
bad_request

Bentuk isi permintaan salah atau kolom wajib diisi tidak ada.

401
unauthorized

Kunci API tidak ada, kedaluwarsa, atau dicabut.

403
forbidden

Key tidak memiliki cakupan yang diperlukan untuk sumber daya ini.

404
not_found

Id sumber daya tidak ada untuk akun ini.

409
conflict

Kunci idempotensi bertabrakan dengan payload yang berbeda.

422
invalid_param

Validasi parameter gagal. Periksa param_errors[].

429
rate_limited

Mundur menggunakan header Retry-After.

500
server_error

Kami diberitahu. Coba lagi panggilan idempoten.

§04 · Webhook

Ditandatangani, dicoba ulang, dilindungi pemutaran ulang.

Setiap acara dikirimkan dengan tanda tangan HMAC, id acara unik, dan stempel waktu UTC. Kami mencoba lagi dengan backoff eksponensial hingga 24 jam.

Tanda tangan HMAC-SHA256 di Rozper-Signature
Hingga 8 percobaan ulang · jendela 24 jam
Kirim ke beberapa titik akhir secara bersamaan
Verifikasi webhook · Node.js✓ perbandingan waktu konstan
import { verify } from "@rozper/sdk/webhooks"

app.post("/webhooks/rozper", (req, res) => {
  const ok = verify({
    payload:   req.rawBody,
    signature: req.header("Rozper-Signature"),
    secret:    process.env.ROZPER_WEBHOOK_SECRET,
  })
  if (!ok) return res.status(401).end()

  const event = JSON.parse(req.rawBody)
  switch (event.type) {
    case "call.completed": /* … */
    case "recording.ready": /* … */
  }
  res.json({ received: true })
})
Katalog acara · Total 32
call.initiated

Panggilan keluar diterima oleh operator.

call.ringing

Ujung jauh berdering.

call.answered

Terjawab jauh (atau AMD mendeteksi manusia).

call.completed

Panggilan berakhir. Termasuk durasi, penagihan, metadata bagian.

recording.ready

Rekaman aset yang diunggah dan URL yang ditandatangani tersedia.

message.delivered

Tanda terima pengiriman operator (jika didukung).

agent.handoff

Agen AI meningkat menjadi antrian manusia.

number.purchased

Akuisisi nomor selesai.

§05 · Catatan Perubahan

Setiap perubahan, dalam bahasa Inggris yang sederhana.

  1. 2026-05-10
    v2026.05
    • prestasiAgen suara kini mendukung panggilan alat dengan respons streaming.
    • prestasiTitik akhir /v2/numbers/port baru untuk pengiriman LNP terprogram.
  2. 2026-04-22
    v2026.04
    • memperbaikiCache idempotensi sekarang dengan benar menghormati TTL 24 jam pada POST/panggilan.
    • pekerjaan rumahEndpoint v1 yang tidak digunakan lagi dihapus (diumumkan pada 2025-11).
  3. 2026-03-31
    v2026.03
    • prestasiAliran media WebSocket beta kini tersedia secara umum.
    • prestasiPesan templat WhatsApp ditambahkan di bawah /v2/messages.
Referensi API · Rozper REST & Dokumen WebSocket | Rozper Hari Ini