Developers
Reach vybeflow from your own code, or from an AI assistant over MCP. Every endpoint needs a tenant API key and runs only within that key's permissions.
Get a key
In the vybeflow console: Pengaturan → API Key. Choose what the key may do and when it expires. The key is shown once.
Connect an AI assistant
Each domain is its own MCP server with two tools. Install only the domains you need.
The packages are not on npm yet. Run them from source: clone the repo, npm install, then point your client at packages/<domain>/bin/cli.js.
{
"mcpServers": {
"vybeflow-inbox": {
"command": "node",
"args": ["/path/to/vybeflow-mcp/packages/inbox/bin/cli.js"],
"env": { "VYBEFLOW_API_KEY": "vf_live_..." }
}
}
}
Try asking it
Once a server is connected, these are things you can just type. Each needs the permission shown — tick it when you mint the key, or the assistant will be refused mid-answer.
- How many tickets are still open, and which has waited longest for a reply?
- Reply to ticket T-1042: tell them the parcel ships tomorrow morning.
- Find the contact on 6281234567890 and show me their ticket history.
- Which campaign had the lowest open rate this month?
- Draft a campaign called "End of Month Promo" for WhatsApp. Do not send it.
- Send the "End of Month Promo" campaign now.
- Which products have fewer than 10 in stock?
- How much AI quota do I have left, and when does my plan renew?
- What are our customer service hours?
Call it directly
curl -H "x-api-key: vf_live_..." \
https://vybeflow.vyber.id/api/campaign/campaigns
Machine-readable
- /openapi.json
- /openapi/contact.json
- /openapi/campaign.json
- /openapi/inbox.json
- /openapi/channel.json
- /openapi/product.json
- /openapi/billing.json
- /openapi/tenant.json
- /llms.txt · /llms-full.txt
- /.well-known/mcp.json
Endpoints
contact 6
| Endpoint | permission | risk |
|---|---|---|
GET /api/user/usersDaftar kontak pelanggan milik tenant. |
contact.read |
safe |
POST /api/user/usersTambah satu kontak baru. |
contact.manage |
confirm |
PUT /api/user/users/:idUbah satu kontak. |
contact.manage |
confirm |
DELETE /api/user/users/:idHapus satu kontak. Tidak bisa dibatalkan. |
contact.delete |
destructive |
POST /api/user/users/importImpor banyak kontak sekaligus. |
contact.manage |
confirm |
GET /api/user/users/campaign/:campaignIDKontak yang termasuk dalam satu kampanye. |
contact.read |
safe |
campaign 7
| Endpoint | permission | risk |
|---|---|---|
GET /api/campaign/campaignsDaftar kampanye beserta status dan jumlah penerima. |
campaign.read |
safe |
GET /api/campaign/campaigns/analyticsRingkasan performa kampanye: terkirim, dibuka, gagal. |
campaign.read |
safe |
POST /api/campaign/campaignsBuat kampanye baru. Membuat TIDAK mengirim — pakai campaign.send. |
campaign.manage |
confirm |
POST /api/campaign/campaigns/:id/sendMULAI mengirim kampanye ke seluruh penerimanya. |
campaign.send |
destructive |
POST /api/campaign/campaigns/:id/cancelHentikan kampanye yang sedang berjalan. Pesan yang sudah terkirim tetap terkirim. |
campaign.control |
confirm |
GET /api/campaign/campaigns/:id/progressKemajuan pengiriman satu kampanye. |
campaign.read |
safe |
DELETE /api/campaign/campaigns/:idHapus kampanye beserta statistiknya. |
campaign.manage |
destructive |
inbox 7
| Endpoint | permission | risk |
|---|---|---|
GET /api/ai/v1/ticketsDaftar tiket percakapan. |
inbox.read |
safe |
GET /api/ai/v1/tickets/statsJumlah tiket per channel dan per status. |
inbox.read |
safe |
GET /api/ai/v1/tickets/:ticketIDSatu tiket beserta riwayat pesannya. |
inbox.read |
safe |
GET /api/ai/v1/tickets/status/:statusTiket dengan satu status tertentu. |
inbox.read |
safe |
POST /api/ai/v1/ticketsBuat tiket baru. |
inbox.manage |
confirm |
POST /api/ai/v1/tickets/:ticketID/replyKirim balasan ke pelanggan pada satu tiket. |
inbox.reply |
destructive |
POST /api/ai/v1/tickets/:ticketID/closeTutup tiket. |
inbox.manage |
confirm |
channel 5
| Endpoint | permission | risk |
|---|---|---|
GET /api/channel/v1/channelsDaftar channel yang terhubung beserta statusnya. |
channel.read |
safe |
GET /api/channel/v1/channels/:channelIdDetail satu channel. |
channel.read |
safe |
GET /api/channel/v1/whatsapp/statusStatus sambungan WhatsApp tenant. |
channel.read |
safe |
GET /api/channel/v1/whatsapp/cloud/templatesTemplate WhatsApp Cloud yang sudah disetujui Meta. |
channel.read |
safe |
POST /api/channel/v1/notification/send/whatsappKirim satu pesan WhatsApp ke satu nomor. |
inbox.reply |
destructive |
product 5
| Endpoint | permission | risk |
|---|---|---|
GET /api/product/v1/productsDaftar produk milik tenant. |
product.read |
safe |
GET /api/product/v1/products/:productIDDetail satu produk. |
product.read |
safe |
POST /api/product/v1/productsTambah produk baru. |
product.manage |
confirm |
PUT /api/product/v1/products/:productIDUbah satu produk. |
product.manage |
confirm |
DELETE /api/product/v1/products/:productIDHapus satu produk beserta gambarnya. |
product.manage |
destructive |
billing 5
| Endpoint | permission | risk |
|---|---|---|
GET /api/payment/v1/payment/historyRiwayat transaksi pembayaran tenant. |
billing.read |
safe |
GET /api/payment/v1/payment/history/:orderIDSatu transaksi berdasarkan orderID. |
billing.read |
safe |
GET /api/user/v1/dashboard/subscriptionPaket langganan yang sedang aktif. |
billing.read |
safe |
GET /api/ai/v1/quotaSisa kuota AI dan pesan untuk tenant ini. |
quota.read |
safe |
GET /api/ai/v1/usageRiwayat pemakaian kuota. |
quota.read |
safe |
tenant 2
| Endpoint | permission | risk |
|---|---|---|
GET /api/user/v1/dashboard/settingProfil perusahaan: nama, alamat, kontak, jam kerja. |
tenant.setting.read |
safe |
GET /api/user/v1/dashboard/tenant/listTenant yang dapat diakses pemegang kredensial ini. |
tenant.read |
safe |