دمج التوقيع الإلكتروني في مجموعتك
أرسل مغلفات، تتبع التوقيعات، استقبل webhooks. API REST بسيطة، OpenAPI 3.0، أمثلة curl/Node/Python — كل ما تحتاجه لربط Certyneo بنظام إدارة الموارد البشرية أو CRM أو برنامج عملك في ساعات قليلة.
البدء السريع
ثلاث خطوات: أنشئ مفتاح API من الإعدادات، قم بترميز ملف PDF الخاص بك بصيغة base64، وأرسله. تحتوي الاستجابة على `signUrl` يمكنك مشاركته مباشرة مع المستقبل.
# 1. Upload the PDF (multipart) and capture the returned document id.
DOC_ID=$(curl -s -X POST https://certyneo.com/api/v1/documents \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-F "file=@contrat.pdf" | jq -r .id)
# 2. Create a DRAFT envelope referencing the uploaded document.
ENV_ID=$(curl -s -X POST https://certyneo.com/api/v1/envelopes \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d "{
\"subject\": \"Contrat de prestation\",
\"documentIds\": [\"$DOC_ID\"],
\"recipients\": [
{ \"email\": \"client@example.com\", \"name\": \"Marie Dubois\", \"role\": \"SIGNER\" }
]
}" | jq -r .id)
# 3. Dispatch the envelope — this sends the invitation email/SMS.
curl -X POST https://certyneo.com/api/v1/envelopes/$ENV_ID/send \
-H "Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxx"// npm install @certyneo/sdk (or call fetch directly)
const auth = { Authorization: `Bearer ${process.env.CERTYNEO_API_KEY}` };
// 1. Upload the PDF (multipart).
const fd = new FormData();
fd.append("file", new Blob([pdfBuffer], { type: "application/pdf" }), "contrat.pdf");
const doc = await fetch("https://certyneo.com/api/v1/documents", {
method: "POST", headers: auth, body: fd,
}).then((r) => r.json());
// 2. Create the DRAFT envelope.
const envelope = await fetch("https://certyneo.com/api/v1/envelopes", {
method: "POST",
headers: { ...auth, "Content-Type": "application/json" },
body: JSON.stringify({
subject: "Contrat de prestation",
documentIds: [doc.id],
recipients: [
{ email: "client@example.com", name: "Marie Dubois", role: "SIGNER" },
],
}),
}).then((r) => r.json());
// 3. Dispatch — this triggers the invitation channel for every recipient.
await fetch(`https://certyneo.com/api/v1/envelopes/${envelope.id}/send`, {
method: "POST", headers: auth,
});
console.log(envelope.id);import os, requests
auth = {"Authorization": f"Bearer {os.environ['CERTYNEO_API_KEY']}"}
# 1. Upload the PDF (multipart).
with open("contrat.pdf", "rb") as f:
doc = requests.post(
"https://certyneo.com/api/v1/documents",
headers=auth,
files={"file": ("contrat.pdf", f, "application/pdf")},
).json()
# 2. Create the DRAFT envelope.
envelope = requests.post(
"https://certyneo.com/api/v1/envelopes",
headers={**auth, "Content-Type": "application/json"},
json={
"subject": "Contrat de prestation",
"documentIds": [doc["id"]],
"recipients": [
{"email": "client@example.com", "name": "Marie Dubois", "role": "SIGNER"},
],
},
).json()
# 3. Dispatch — this triggers the invitation channel for every recipient.
requests.post(
f"https://certyneo.com/api/v1/envelopes/{envelope['id']}/send",
headers=auth,
)
print(envelope["id"])المغلفات
الإنشاء والإرسال وتتبع الحالة والإلغاء. يمكن للمغلف أن يحتوي على عدة مستندات وعدة موقعين (متوازي أو متسلسل).
خطافات الويب
استقبل `envelope.created`، `envelope.completed`، `envelope.declined` على عنوان URL من اختيارك. HMAC SHA-256 على كل حمولة للتحقق من المصدر.
مصادقة بسيطة
Bearer token. مفتاح واحد لكل بيئة (اختبار / إنتاج). قابل للإلغاء فوراً. حد أقصى 100 طلب/دقيقة/مفتاح، burst بحد أقصى 200، استجابة 429 نظيفة مع رأس Retry-After.
نقاط النهاية المتاحة
12 مسار يغطي الدورة الكاملة: المغلفات والمستندات والـ webhooks ومفاتيح API. تقبل جميع المسارات Bearer token وتعيد JSON.
| Method | Path | Description |
|---|---|---|
| POST | /api/v1/documents | Upload a PDF (multipart) — returns document id |
| GET | /api/v1/documents | List documents |
| GET | /api/v1/documents/{id} | Fetch document metadata |
| DELETE | /api/v1/documents/{id} | Delete document |
| GET | /api/v1/envelopes | List envelopes |
| POST | /api/v1/envelopes | Create envelope (status: DRAFT) |
| GET | /api/v1/envelopes/{id} | Fetch envelope state |
| PATCH | /api/v1/envelopes/{id} | Update DRAFT envelope |
| DELETE | /api/v1/envelopes/{id} | Void / delete DRAFT envelope |
| POST | /api/v1/envelopes/{id}/send | Dispatch DRAFT — sends invitations |
| GET | /api/v1/envelopes/{id}/audit-trail | Download eIDAS audit-trail PDF |
| GET | /api/v1/envelopes/{id}/signed-document | Download signed PDF (once COMPLETED) |
| GET | /api/v1/webhooks | List webhooks |
| POST | /api/v1/webhooks | Register webhook |
| DELETE | /api/v1/webhooks/{id} | Unregister |
| GET | /api/v1/keys | List API keys |
| POST | /api/v1/keys | Create API key |
| DELETE | /api/v1/keys/{id} | Revoke key |
حدود معدل الطلب
تضمن الحدود جودة خدمة مستقرة لجميع العملاء. إذا كنت بحاجة إلى المزيد، فتواصل معنا.
- • 100 طلب في الدقيقة لكل مفتاح API
- • Burst مقبول حتى 200 طلب في أقل من 10 ثوان
- • استجابة 429 مع رأس Retry-After يشير إلى التأخير بالثواني