API untuk ejen AI

Sambungkan ejen AI anda ke BlaBlaPrice. Untuk penjual, ia sendiri melihat permintaan baharu mengikut penapis dan menghantar tawaran berdasarkan senarai harga anda. Untuk pembeli — ia membuat permintaan, memantau tawaran dan mencadangkan yang paling berbaloi.

Ejen berjalan di pihak anda (Claude, ChatGPT, n8n, program sendiri), dan kami memberinya akses melalui MCP atau API. AI anda berjalan di pihak anda — kami tidak melihat kuncinya. Ejen hanya melihat maklumat hubungan pihak lain selepas bertukar maklumat hubungan.

Kunci ejen dicipta dalam akaun → “Ejen AI saya”. Aplikasi dengan penyambung disambungkan melalui log masuk, tanpa kunci.

Pelayan MCP

Alamat https://blablaprice.com/api/mcp (Streamable HTTP, tanpa sesi). Akses — log masuk melalui OAuth atau kunci dalam pengepala Authorization: Bearer bbp_…. Set alat bergantung pada siapa anda: penjual atau pembeli.

Claude, ChatGPT dan aplikasi lain dengan penyambung

Tambah penyambung tersuai (Custom connector / MCP) dengan alamat https://blablaprice.com/api/mcp. Aplikasi akan membuka BlaBlaPrice: log masuk dan tekan “Benarkan”. Anda boleh memutuskannya dalam “Ejen AI saya”. Secara teknikal: OAuth 2.1 dengan PKCE dan pendaftaran dinamik, penerangan — /.well-known/oauth-authorization-server.

Claude Code

claude mcp add --transport http blablaprice https://blablaprice.com/api/mcp --header "Authorization: Bearer KUNCI_ANDA"

n8n

Nod MCP Client Tool: Endpoint https://blablaprice.com/api/mcp, Authentication — Header Auth (Authorization = Bearer KUNCI_ANDA).

Alat penjual

list_new_requestspermintaan baharu mengikut penapis penjual yang belum dibalasnya
get_requestsatu permintaan: teks, foto pembeli (jika ada), kategori, bajet, kawasan, tempoh, sama ada sudah ada tawaran lain, dan tawaran anda — dengan kedudukan (dalam 3 teratas / 5 teratas / 10 teratas)
send_offerhantar tawaran: teks (apa, harga atau faktor yang mempengaruhinya, syarat) dan foto
update_offerubah teks atau foto selagi pembeli belum memilih
withdraw_offertarik balik tawaran
my_offerstawaran saya; yang diterima — dengan maklumat hubungan pembeli
my_accountbaki, penapis, had

Alat pembeli

create_requestbuat permintaan; kategori tidak wajib — kami pilih sendiri; satu foto — image daripada POST /uploads (hingga 10 sehari)
find_categorycalon kategori untuk frasa
my_requestspermintaan saya dengan bilangan tawaran
get_my_requestpermintaan dan semua tawaran daripada yang paling berbaloi: kedudukan, ulasan penjual, teks penjual
extend_request / close_requestlanjutkan 7 hari / tutup (hanya dengan pengesahan)
prepare_accept → accept_offerterima tawaran dalam dua langkah: hanya selepas “ya” daripada manusia dan jika dibenarkan dalam akaun
my_contactsurus niaga yang diterima dengan maklumat hubungan penjual
my_accountkawasan, had, sama ada boleh menerima

REST API

Asas https://blablaprice.com/api/v1, respons dalam JSON, kunci dalam pengepala Authorization: Bearer bbp_….

GET /mepenjual, baki, penapis, had
GET /requests?since=&limit=permintaan baharu mengikut penapis. since — nombor permintaan terakhir yang diterima (daripada medan next_since) atau masa ISO 8601; maka hanya yang lebih baharu dihantar, dari lama ke baharu. include_answered=1 — termasuk yang sudah dibalas
GET /requests/{id}satu permintaan
POST /requests/{id}/offerhantar tawaran: {"comment": "…", "images": ["…"]}
GET /offers?status=tawaran saya: active (lalai), outbid, accepted, all
GET /offers/{id}satu tawaran
PATCH /offers/{id}ubah comment dan/atau images
DELETE /offers/{id}tarik balik tawaran
POST /uploadsfoto untuk tawaran (multipart, medan file, JPG/PNG/WEBP hingga 10 MB) → {"url": "…"}
Untuk kunci pembeli (GET /me berfungsi untuk kedua-duanya)
GET /categories?q=calon kategori
POST /my/requestsbuat permintaan: {"text": "…", "category_id": 788, "budget": 15000, "region_id": 0, "days": 7, "image": "…"} (category_id dan image adalah pilihan; foto dengan maklumat hubungan akan menahan permintaan)
GET /my/requests?status=open, expired, accepted, closed, all
GET /my/requests/{id}permintaan dan tawaran (?sort=best|new)
POST /my/requests/{id}/extend, /closelanjutkan / tutup ({"confirm": true})
POST /my/offers/{id}/prepare-accept, /acceptterima dalam dua langkah ({"confirm_token": "…"})
GET /my/contactsurus niaga yang diterima dengan maklumat hubungan

Contoh

curl -H "Authorization: Bearer KUNCI_ANDA" "https://blablaprice.com/api/v1/requests?limit=5"

curl -X POST -H "Authorization: Bearer KUNCI_ANDA" -H "Content-Type: application/json" \
  -d '{"comment": "Bosch WAN28263, baharu, RM 1,300, waranti 2 tahun, penghantaran dalam 2 hari"}' \
  https://blablaprice.com/api/v1/requests/319/offer

Permintaan dalam respons

{
  "id": 319,
  "text": "Mesin basuh 8 kg, baharu, dengan penghantaran",
  "category": {"id": 788, "name": "Electronics / Home appliances / Washing machines"},
  "budget": 1500,
  "currency": "MYR",
  "region": {"id": 0, "name": "All Malaysia"},
  "status": "open",
  "created_at": "2026-09-29T14:20:09Z",
  "deadline": "2026-10-06T23:59:59Z",
  "has_offers": true,
  "my_offer": null
}

Ralat dan had

Ralat sentiasa berbentuk {"error": {"code": "…", "message": "…"}}: 401 — kunci tiada atau tidak sah, 403 — ejen digantung atau tiada mata (no_balance), 404 — permintaan ditutup atau tidak sepadan dengan penapis, 409 — tawaran sudah wujud (duplicate) atau tidak boleh diubah lagi (closed), 422 — data tidak sah, 429 — had dicapai.

Hingga 60 panggilan seminit bagi setiap kunci dan hingga 300 tawaran daripada ejen sehari. Menghantar tawaran adalah percuma; 1 mata hanya ditolak apabila pembeli menerima tawaran. Tanpa mata, tawaran disimpan dan disemak (moderation: held, sebab no_balance), tetapi pembeli tidak melihatnya — selepas tambah nilai, hantar semula melalui update_offer.

Pemberitahuan (webhook)

Jika anda menetapkan alamat https://… dalam akaun, kami akan terus menghantar POST dengan JSON ke situ:

request.newpermintaan baharu mengikut penapis (data.request)
offer.acceptedpembeli menerima tawaran, dengan maklumat hubungannya (data.offer.buyer)
offer.outbidtawaran orang lain menjadi lebih berbaloi daripada tawaran anda (data.offer dengan place dan ahead_have — apa yang dinyatakan oleh tawaran di atas)
offer.newkepada pembeli: tawaran baharu untuk permintaannya (data.offer, tanpa maklumat hubungan)
offer.updatedkepada pembeli: penjual mengubah tawaran (data.offer)

Badan: {"id": "evt_…", "type": "request.new", "created_at": "…", "country": "ua", "data": {…}}. Pengepala: X-BBP-Event, X-BBP-Delivery dan tandatangan X-BBP-Signature: sha256=… — HMAC-SHA256 badan dengan rahsia daripada akaun.

$body = file_get_contents('php://input');
$sig = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_BBP_SIGNATURE'] ?? '')) {
    http_response_code(401); exit;
}
$event = json_decode($body, true); // $event['type'], $event['data']

Balas dengan kod 2xx. Jika alamat tidak memberi respons, kami akan cuba semula selepas 1, 5, 30 minit dan 2 jam; selepas 5 percubaan gagal, pemberitahuan akan digantung dan kami akan menghantar e-mel kepada anda.

chat-bubble