پرش به محتوا

API برای توسعه‌دهندگان

دسترسی ماشینی برای مشتریان سازمانی. کلید API متعلق به یک workspace است، نه یک شخص — و همان قواعد محرمانگی سایت روی آن اعمال می‌شود.

اصول مهم در پیاده‌سازی و اتصال

داده‌های محرمانه فقط برای آگهی‌هایی بازگردانده می‌شوند که فضای کاری شما مجوز دسترسی به اتاق دادهٔ آن‌ها را دارد. برای سایر آگهی‌ها فیلد confidential مقدار null خواهد داشت. همچنین تنظیمات نمایش فروشنده (اعداد دقیق، بازه‌ای یا پنهان) در خروجی API نیز اعمال می‌شود.

احراز هویت

کلید API را از صفحهٔ فضای کاری خود بسازید. این کلید فقط یک بار نمایش داده می‌شود و به‌صورت امن در سرور نگهداری می‌گردد. در صورت مفقود شدن، باید کلید قبلی را باطل کرده و کلید جدید ایجاد نمایید.

curl https://exithunt.app/api/v1/opportunities?limit=50 \
  -H "Authorization: Bearer eh_live_..."

دامنه‌های دسترسی: opportunities:read, deals:read, webhooks:manage

GET /api/v1/opportunities

فرصت‌های فعال، با صفحه‌بندی مبتنی بر cursor. پارامترها: limit (حداکثر ۲۰۰)، cursor، businessType. پاسخ شامل data و nextCursor است.

Webhooks

رویدادها: LISTING_PUBLISHED، LISTING_UPDATED، OFFER_RECEIVED، DEAL_STAGE_CHANGED. هر تحویل امضا می‌شود؛ امضا را قبل از پردازش بررسی کنید.

import { createHmac, timingSafeEqual } from "node:crypto";

// Headers: x-exithunt-event, x-exithunt-timestamp, x-exithunt-signature
function verify(secret, rawBody, timestamp, signature) {
  const expected = createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && timingSafeEqual(a, b);
}

صف تلاش مجدد وجود ندارد. اگر endpoint شما پاسخ ندهد، تحویل با کد پاسخش FAILED ثبت می‌شود و ما دوباره تلاش نمی‌کنیم — برای جبران، API را poll کنید. این را صریح می‌گوییم چون طراحی کردن روی فرض «حداقل یک بار تحویل» که وجود ندارد، بدتر از نداشتن webhook است.

برای دسترسی سازمانی، صفحهٔ قیمت‌گذاری را ببینید.