Chuyển đến nội dung chính
Certyneo
API công khai v1

Tích hợp chữ ký điện tử vào stack của bạn

Gửi phong bì, theo dõi chữ ký, nhận webhooks. API REST đơn giản, OpenAPI 3.0, ví dụ curl/Node/Python — mọi thứ để kết nối Certyneo với HRIS, CRM hoặc phần mềm kinh doanh của bạn trong vài giờ.

Bắt đầu nhanh

Ba bước : tạo khóa API từ cài đặt, mã hóa PDF của bạn bằng base64, gửi. Phản hồi chứa `signUrl` mà bạn có thể chia sẻ trực tiếp với người nhận.

cURLbash
# 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"
JavaScript / Nodets
// 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);
Pythonpython
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"])

Phong bì

Tạo, gửi, theo dõi trạng thái, hủy. Một phong bì có thể chứa nhiều tài liệu và nhiều người ký (song song hoặc tuần tự).

Webhooks

Nhận `envelope.created`, `envelope.completed`, `envelope.declined` trên URL của bạn. HMAC SHA-256 trên mỗi payload để xác minh nguồn gốc.

Xác thực đơn giản

Bearer token. Một khóa cho mỗi môi trường (test / prod). Có thể thu hồi tức thì. Giới hạn 100 yêu cầu/phút/khóa, burst 200, 429 sạch sẽ với tiêu đề Retry-After.

Các endpoints có sẵn

12 route bao quát toàn bộ vòng đời: envelopes, documents, webhooks, khóa API. Tất cả các route chấp nhận Bearer token và trả về JSON.

MethodPathDescription
POST/api/v1/documentsUpload a PDF (multipart) — returns document id
GET/api/v1/documentsList documents
GET/api/v1/documents/{id}Fetch document metadata
DELETE/api/v1/documents/{id}Delete document
GET/api/v1/envelopesList envelopes
POST/api/v1/envelopesCreate 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}/sendDispatch DRAFT — sends invitations
GET/api/v1/envelopes/{id}/audit-trailDownload eIDAS audit-trail PDF
GET/api/v1/envelopes/{id}/signed-documentDownload signed PDF (once COMPLETED)
GET/api/v1/webhooksList webhooks
POST/api/v1/webhooksRegister webhook
DELETE/api/v1/webhooks/{id}Unregister
GET/api/v1/keysList API keys
POST/api/v1/keysCreate API key
DELETE/api/v1/keys/{id}Revoke key

Giới hạn tốc độ

Các giới hạn đảm bảo chất lượng dịch vụ ổn định cho tất cả khách hàng. Nếu bạn cần nhiều hơn, vui lòng liên hệ với chúng tôi.

  • 100 yêu cầu mỗi phút trên mỗi khóa API
  • Burst được phép lên tới 200 yêu cầu trong dưới 10 giây
  • Phản hồi 429 với tiêu đề Retry-After chỉ ra độ trễ tính bằng giây