ساخت یا ویرایش مخاطب
حرفهایکلید خواندن و نوشتندر پلن حرفهای و سازمانی در دسترس است (بتا).
POSThttps://app.reshta.ir/api/v1/public…/public/contacts/upsert
اگر مخاطبی با همان کلیدهای شناسایی کسبوکار (بهطور پیشفرض موبایل و بعد ایمیل) باشد، آن را ویرایش میکند؛ وگرنه یکی تازه میسازد. پاسخ ۲۰۰ است: contact همان رکورد است و created میگوید ساخته شد یا ویرایش.
درخواست
curl https://app.reshta.ir/api/v1/public/contacts/upsert \ -X POST \ -H "Authorization: Bearer $RESHTA_API_KEY" \ -H "Idempotency-Key: 7f3c2b1e-4a5d-4c6f-9e1a-2b3c4d5e6f70" \ -H "Content-Type: application/json" \ -d '{"first_name":"سارا","last_name":"رضایی","phones":[{"phone":"09121234567","is_primary":true}]}'سرآیندها
AuthorizationstringالزامیBearer و کلید API کسبوکار (rk_live_…).
Idempotency-Keystringالزامیشناسهٔ یکتای همین عملیات، مثلاً یک UUID تازه؛ تکرار با همان کلید چیزی را دوبار انجام نمیدهد.
Content-Typeapplication/jsonالزامیبدنه JSON با UTF-8 است.
پارامترهای بدنه
first_namestring | nullاختیارینام.
last_namestring | nullاختیارینام خانوادگی.
company_iduuid | nullاختیاریشرکتی که این رکورد به آن وصل است.
job_titlestring | nullاختیاریسمت.
national_idstring | nullاختیاریکد ملی.
owner_iduuidاختیاریهمکار مسئول.
lifecycle_stagestringاختیاریپیشفرض: "lead"مرحلهٔ چرخهٔ عمر مشتری.
birthdaystring | nullاختیاریتاریخ تولد میلادی، YYYY-MM-DD.
unsubscribed_emailbooleanاختیاریپیشفرض: falseلغو اشتراک ایمیلهای تبلیغاتی.
unsubscribed_smsbooleanاختیاریپیشفرض: falseلغو اشتراک پیامکهای تبلیغاتی.
customobjectاختیاریپیشفرض: {}فیلدهای سفارشی، با کلید هر فیلد.
emailsobject[]اختیاریپیشفرض: []ایمیلها؛ حداکثر ۲۰.
emails[].emailemailالزامینشانی ایمیل.
emails[].labelstring | nullاختیاریبرچسب دلخواه، مثلاً «کار».
emails[].is_primarybooleanاختیاریپیشفرض: falseایمیل یا شمارهٔ اصلی.
phonesobject[]اختیاریپیشفرض: []شمارهها؛ حداکثر ۲۰.
phones[].phonestringالزامیشمارهٔ تلفن یا موبایل.
phones[].labelstring | nullاختیاریبرچسب دلخواه، مثلاً «کار».
phones[].is_primarybooleanاختیاریپیشفرض: falseایمیل یا شمارهٔ اصلی.
پاسخها و خطاها
200—انجام شد؛ بدنه همان رکورد است.
400validation_errorبدنه نادرست است یا Idempotency-Key نیامده؛ details میگوید کدام فیلد.
401unauthorizedکلید نیست، نادرست یا باطل است، یا سازندهاش دیگر فعال نیست.
403forbiddenکلید دسترسی نوشتن ندارد.
409conflictهمین Idempotency-Key با بدنهٔ دیگری آمده یا هنوز در جریان است.
429rate_limitedبیش از ۱۲۰ درخواست در دقیقه؛ Retry-After میگوید چند ثانیه صبر کنید.
پاسخ
{ "created": false, "contact": { "id": "0192c4e8-7b1a-7c3e-9f20-5d6a1b2c3d4e", "first_name": "سارا", "last_name": "رضایی", "company_id": null, "company_name": null, "job_title": null, "national_id": null, "owner_id": "0192a7f0-3b4c-7d5e-8f60-718293a4b5c6", "lifecycle_stage": "lead", "birthday": null, "unsubscribed_email": false, "unsubscribed_sms": false, "is_sample": false, "source": null, "marketing_block_reason": null, "address": null, "custom": {}, "emails": [], "phones": [ { "id": "0192c4e8-7b1b-7a10-8c21-3d4e5f607182", "phone": "09121234567", "label": null, "is_primary": true } ], "created_at": "2026-10-26T14:05:12.000Z", "updated_at": "2026-10-26T14:05:12.000Z" }}