תיעוד API
ה-API מאפשר לשלוח מסמכים לחתימה ממערכות אחרות (CRM, אתר, אוטומציות) ולקבל עדכונים כשהם נחתמים. בסיס הכתובות: /api/v1. כל התשובות ב-JSON.
אימות
יוצרים מפתח בהגדרות ← מפתחות API ושולחים אותו בכל בקשה. שמרו את המפתח בכספת סודות או במשתני סביבה, לא בקוד. מגבלה: 120 בקשות לדקה למפתח.
Authorization: Bearer xlx_...שליחת PDF לחתימה
הקובץ יכול להיות PDF או מסמך Word/RTF/ODT (יומר ל-PDF; מסמך עם שינויים במעקב, מאקרו או סיסמה יידחה). שדות ממוקמים לפי שברים של העמוד (0–1, מהפינה השמאלית העליונה). recipient הוא האינדקס ברשימת הנמענים.
curl -X POST https://xlex.co.il/api/v1/envelopes \
-H "Authorization: Bearer $XLEX_API_KEY" \
-F file=@contract.pdf \
-F 'data={
"title": "הסכם שירות",
"external_id": "crm-1234",
"send": true,
"recipients": [
{"name": "דנה לוי", "email": "dana@example.com", "auth": "email_otp"},
{"name": "יוסי כהן", "email": "yossi@example.com", "phone": "+972501234567", "auth": "sms_otp", "order": 2}
],
"fields": [
{"recipient": 0, "type": "signature", "page": 1, "x": 0.55, "y": 0.80, "w": 0.25, "h": 0.06},
{"recipient": 1, "type": "signature", "page": 1, "x": 0.15, "y": 0.80, "w": 0.25, "h": 0.06},
{"recipient": 1, "type": "id_number", "page": 1, "x": 0.15, "y": 0.88, "w": 0.2, "h": 0.035}
]
}'סוגי שדות: signature, initials, name, date, text, id_number, checkbox. תפקידים: signer, approver, viewer, cc. אימות: link, email_otp, sms_otp.
שליחה מתבנית
curl -X POST https://xlex.co.il/api/v1/envelopes \
-H "Authorization: Bearer $XLEX_API_KEY" -H "Content-Type: application/json" \
-d '{"template_id": "tpl_...", "send": true,
"recipients": [{"name": "דנה לוי", "email": "dana@example.com"}]}'רשימת התבניות ותפקידיהן: GET /api/v1/templates. הנמען ה-n ממלא את התפקיד ה-n.
פעולות נוספות
GET /api/v1/envelopes?status=completed&external_id=crm-1234
GET /api/v1/envelopes/{id}
GET /api/v1/envelopes/{id}/document # PDF (החתום, כשהושלם)
POST /api/v1/envelopes/{id}/send # שליחת טיוטה
POST /api/v1/envelopes/{id}/remind # תזכורת לנמענים שתורם
POST /api/v1/envelopes/{id}/cancelWebhooks
מגדירים בהגדרות ← Webhooks. כל אירוע נשלח כ-POST עם הכותרות x-xlex-event, x-xlex-delivery ו-x-xlex-signature בפורמט t=TIMESTAMP,v1=HMAC. ה-HMAC מחושב ב-SHA-256 על `${t}.${body}` עם הסוד שקיבלתם. תשובה שאינה 2xx נשלחת שוב (עד 7 ניסיונות, במרווחים הולכים וגדלים).
import crypto from "node:crypto";
function verify(secret, header, rawBody) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false; // 5 min replay window
const mac = crypto.createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}אירועים: envelope.sent, envelope.opened, recipient.signed, envelope.completed, envelope.rejected, envelope.cancelled, envelope.expired.
שגיאות
{ "error": { "code": "validation_error", "message": "recipients.0.email: Invalid email" } }