Your AI Connector Docs

API Penawaran (Deals)

Penawaran adalah satu peluang penjualan di papan Sales Pipeline Anda — terdiri dari judul, nilai, tahap di mana penawaran tersebut berada, serta opsional kontak pemiliknya dan anggota tim yang ditugaskan. Panduan ini mencakup cara membaca dan mengelola penawaran melalui API.

Semua contoh di bawah ini menunjukkan formulir kueri ?apiKey= dalam cURL dan header X-API-Key dalam JavaScript dan Python — keduanya berfungsi di setiap endpoint.


Objek penawaran

{
  "id": "deal_abc123",
  "title": "Annual plan – Jane's Clinic",
  "description": "Asked for pricing on the annual plan.",
  "company": "Jane's Clinic",
  "notes": "Prefers a call after 5pm.",
  "stage": "stage-2",
  "pipeline_id": "default",
  "value": 4800,
  "probability": 60,
  "priority": "high",
  "status": "open",
  "source": "whatsapp",
  "position": 0,
  "contact_id": "ctc_9f8e7d",
  "assigned_to": "usr_4a2b",
  "tags": ["clinic"],
  "close_date": "2026-10-01T00:00:00.000Z",
  "created_at": "2026-09-05T09:12:00.000Z",
  "updated_at": "2026-09-05T09:40:00.000Z",
  "stage_entered_at": "2026-09-05T09:40:00.000Z"
}

stage adalah id dari salah satu tahap pipeline Anda — baca tahap tersebut dengan GET /pipelines (lihat Pipelines di bawah). Id tahap bersifat unik di semua pipeline Anda, jadi pipeline_id diturunkan dari tahap tersebut dan bersifat hanya-baca: default adalah pipeline utama Anda, dan nilainya adalah null ketika tahap tersebut tidak lagi ada. Stempel waktu menggunakan format ISO 8601.

Kesepakatan hanya menyimpan kolom-kolom yang ditampilkan di atas. Saat Anda membuat atau memperbarui kesepakatan, kolom lain apa pun akan ditolak dengan 400 yang menyebutkan nama kolom tersebut, sehingga tidak ada data yang Anda kirim akan hilang tanpa pemberitahuan. Simpan data tambahan pada kolom kustom kontak yang ditautkan.


Mencantumkan penawaran

GET /deals — mengembalikan daftar penawaran di akun Anda, diurutkan dari yang terbaru.

Parameter kueri (semua opsional): stage (id tahap), pipeline_id (hanya kesepakatan pada pipeline tersebut), contact_id, limit (default 50, maks 200), cursor (dari next_cursor halaman sebelumnya).

cURL

curl "https://api.youraiconnector.com/v1/deals?apiKey=YOUR_API_KEY&stage=stage-2&limit=50"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/deals?stage=stage-2&limit=50", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { deals, next_cursor } = await res.json();

Python

res = requests.get(
    "https://api.youraiconnector.com/v1/deals",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"stage": "stage-2", "limit": 50},
)
deals = res.json()["deals"]

Respons (200)

{ "success": true, "deals": [{ "id": "deal_abc123", "title": "Annual plan – Jane's Clinic", "...": "..." }], "next_cursor": null }

Mendapatkan penawaran

GET /deals/{dealId}

curl "https://api.youraiconnector.com/v1/deals/deal_abc123?apiKey=YOUR_API_KEY"

Respons (200)

{ "success": true, "deal": { "id": "deal_abc123", "title": "Annual plan – Jane's Clinic", "...": "..." } }

Penawaran yang tidak ada, atau milik akun lain, akan mengembalikan 404.


Membuat penawaran

POST /deals — title dan stage wajib diisi; stage harus berupa salah satu id tahap pipeline Anda.

curl -X POST "https://api.youraiconnector.com/v1/deals?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Annual plan – Jane'"'"'s Clinic", "stage": "stage-1", "value": 4800, "contact_id": "ctc_9f8e7d" }'

Respons (201)

{ "success": true, "deal_id": "deal_abc123" }

Memperbarui penawaran

PUT /deals/{dealId} — kirim hanya kolom yang ingin Anda ubah (title, description, notes, value, stage, status, priority, contact_id, …). value harus berupa angka.

curl -X PUT "https://api.youraiconnector.com/v1/deals/deal_abc123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "value": 5200, "priority": "high" }'

Respons (200): { "success": true, "deal_id": "deal_abc123" }


Memindahkan kesepakatan ke tahap lain

POST /deals/{dealId}/move — isi { "new_stage_id": "stage-3", "new_position": 0 }. Posisi 0 menempatkan kartu di bagian atas kolom.

curl -X POST "https://api.youraiconnector.com/v1/deals/deal_abc123/move?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "new_stage_id": "stage-3", "new_position": 0 }'

Respons (200): { "success": true, "deal_id": "deal_abc123", "stage": "stage-3", "position": 0 }


Menghapus kesepakatan

DELETE /deals/{dealId} — menghapus kesepakatan. Tindakan ini tidak dapat dibatalkan.

curl -X DELETE "https://api.youraiconnector.com/v1/deals/deal_abc123?apiKey=YOUR_API_KEY"

Respons (200): { "success": true }


Pipelines

Setiap akun memiliki pipeline utama (id: "default"); Anda dapat menambahkan hingga sembilan pipeline lagi, masing-masing dengan tahapannya sendiri. Id tahap dan tag pemicu harus unik di semua pipeline pada akun tersebut, dan setiap pipeline dapat menandai satu tahap sebagai won dan satu tahap sebagai hasil lost.

Daftar pipeline

GET /pipelines — setiap pipeline, dimulai dari yang utama, masing-masing dengan tahapan yang diurutkan berdasarkan posisi.

curl "https://api.youraiconnector.com/v1/pipelines?apiKey=YOUR_API_KEY"

Respons (200):

{
  "success": true,
  "data": {
    "pipelines": [
      {
        "id": "default",
        "name": "Sales",
        "position": 0,
        "is_default": true,
        "settings": { "sync_stage_tags": false },
        "stages": [
          { "id": "stage-1", "name": "New lead", "color": "#3B82F6", "position": 0, "trigger_tag": null },
          { "id": "won", "name": "Won", "color": "#10B981", "position": 1, "outcome": "won" }
        ]
      }
    ]
  }
}

Membuat pipeline

POST /pipelines — body { "id"?, "name", "stages"?, "settings"? }. Kosongkan id agar id dibuatkan secara otomatis. Setiap tahap menggunakan bidang yang sama dengan dialog Tahapan: id, name, color, position, opsional trigger_tag (jalur tag, users/{uid}/tags/{tagId}), default_value, auto_move_after_days + auto_move_to_stage (tahap dari pipeline yang sama) dan outcome ("won" atau "lost").

curl -X POST "https://api.youraiconnector.com/v1/pipelines?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "reviews",
    "name": "Review requests",
    "stages": [
      { "id": "rv_asked", "name": "Asked", "color": "#3B82F6", "position": 0 },
      { "id": "rv_done", "name": "Review posted", "color": "#10B981", "position": 1, "outcome": "won" }
    ]
  }'

Respons (201): { "success": true, "data": { "pipeline": { ... } } }. Id tahap atau tag pemicu yang sudah digunakan oleh pipeline lain akan menghasilkan 400 yang menyebutkan pipeline tersebut; id yang sudah ada akan menghasilkan 409.

Memperbarui pipeline

PUT /pipelines/{pipelineId} — body { "name"?, "stages"?, "settings"? }. stages menggantikan seluruh daftar, seperti pada dialog Tahapan. Gunakan default untuk pipeline utama. Id pipeline itu sendiri tidak dapat diubah.

Menghapus pipeline

DELETE /pipelines/{pipelineId} — menghapus pipeline tambahan (pipeline utama tidak dapat dihapus). Jika masih ada kesepakatan di tahapannya, panggilan akan menjawab 409 dengan deal_count; tambahkan ?delete_deals=true untuk menghapus kesepakatan tersebut bersama dengan pipeline-nya. Tindakan ini tidak dapat dibatalkan.

Respons (204).


Langkah berikutnya

  • Sales Pipeline — cara kerja tahapan, tag tahapan, beberapa pipeline, dan papan.
  • Tasks API — tugas dapat ditautkan ke kesepakatan dengan deal_id.
  • Automations — langkah Find deals dan Find deal membaca data yang sama di dalam alur kerja.