Γρήγορο Εγχειρίδιο Εκκίνησης
Χρησιμοποιείτε Cursor, Claude ή κάποιο άλλο εργαλείο AI για κωδικοποίηση; Συνδέστε το με τα docs του Legalesign για βοήθεια με συναίσθηση πλαισίου καθώς ακολουθείτε αυτό το εγχειρίδιο.
Σε αυτό το εγχειρίδιο θα ολοκληρώσετε τις βασικές κλήσεις API που χρειάζονται οι περισσότεροι προγραμματιστές από μία ενσωμάτωση eSignature - ανέβασμα εγγράφου και αποστολή του για υπογραφή.
Το Legalesign API είναι επεκτάσιμο, ευέλικτο και έχει δοκιμαστεί σε παραγωγικά συστήματα πελατών μας για πολλά χρόνια. Μπορείτε να το χρησιμοποιήσετε για ένα απλό έγγραφο με έναν υπογράφοντα, ή να στείλετε έγγραφα για μαρτυρία ή εγκρίσεις, βελτιστοποιημένο για παρτίδες, με φόρμες και άλλα. Μπορείτε να το ενσωματώσετε για έναν σκοπό ή να το ενσωματώσετε μέσα στο δικό σας λογισμικό για τους πελάτες σας - δείτε τις ενσωματώσεις.
Το REST API εκτελεί τις περισσότερες λειτουργίες και είναι ο ευκολότερος τρόπος να ξεκινήσετε. Αν χρειάζεστε περισσότερα δείτε την GraphQL διεπαφή. Το Legalesign είναι API-first με GraphQL. Μπορείτε να χρησιμοποιήσετε όποιο προτιμάτε.
Θα ακολουθήσουμε τα παρακάτω βήματα:
- Δημιουργήστε λογαριασμό + API Key (δείτε Επαλήθευση για πρόσβαση API).
- Επιβεβαιώστε ότι τα διαπιστευτήρια λειτουργούν και λάβετε το team ID σας.
- Φορτώστε ένα έγγραφο μέσω της web εφαρμογής.
- Στείλτε το για υπογραφή μέσω του API.
- Κατεβάστε το μετά την υπογραφή.
- Φορτώστε ένα έγγραφο μέσω του API.
Το Legalesign REST API είναι εύκολο στη χρήση. Η τεχνική αναφορά περιλαμβάνει έναν επεξεργαστή κώδικα. Μπορείτε να κάνετε αιτήματα απευθείας από την τεχνική αναφορά με το API key σας, αλλιώς απλά αντιγράψτε και επικολλήστε κατευθείαν στον κώδικά σας.
Σχήμα 1: Ο Επεξεργαστής Κώδικα του REST API.
Βιβλιοθήκες πελατών
Ή για τη διεπαφή GraphQL Node.js
Συστήνουμε οι προγραμματιστές να δουλεύουν απευθείας με το API παρά με τα SDK. Για βοήθεια, υπάρχει γεννήτρια κώδικα cut-and-paste στην τεχνική προδιαγραφή, και η AI σας μπορεί γρήγορα να παράγει παραδείγματα χρησιμοποιώντας το OpenAPI spec. Γιατί; Το πρωτότυπο API έχει περισσότερη λειτουργικότητα από τα SDK, τελικά θα θέλετε να γνωρίζετε τα endpoints που χρησιμοποιείτε ούτως ή άλλως, θα αποφύγετε την πολυπλοκότητα και τις εξαρτήσεις, και—βάσει της εμπειρίας μας—θα το πετύχετε πιο γρήγορα.
1. Δημιουργία λογαριασμού
Πηγαίνετε στο legalesign sign up και ακολουθήστε τη διαδικασία για να δημιουργήσετε λογαριασμό.
Θα σας ζητηθεί να δημιουργήσετε μια ομάδα. Οι ομάδες είναι τα θεμέλια του Legalesign. Όλη η επεξεργασία εγγράφων γίνεται μέσα σε μια ομάδα. Πρέπει να αναφέρεστε στην ομάδα σας στις περισσότερες κλήσεις API.
Μια 'ομάδα' ή μια 'ομάδα χρηστών' είναι το ίδιο πράγμα. Στην web εφαρμογή μιλάμε για 'ομάδες', αλλά στο σχήμα του API είναι group.
Ρυθμίσεις API
Πηγαίνετε στο API Dashboard. Δημιουργήστε τα API credentials σας στην ενότητα API Key.
Πάρτε ένα λεπτό να εξερευνήσετε το Developer Portal.
Sandbox
Στην ενότητα Environment, μια ειδοποίηση δείχνει αν βρίσκεστε σε sandbox ή σε παραγωγική λειτουργία.
Η sandbox λειτουργία επιβάλλει ένα όριο 100 κλήσεων ανά ώρα. Δεν υπάρχουν περιορισμοί στα email των παραληπτών.
Όταν η ενσωμάτωσή σας είναι έτοιμη: μεταβείτε σε λειτουργία παραγωγής.
Δημιουργήστε μια δεύτερη ομάδα. Χρησιμοποιήστε την πρώτη ομάδα για ανάπτυξη και τις άλλες ομάδες για παραγωγή. Ενημερώστε το support το όνομα της dev ομάδας για να την εξαιρέσουν από χρέωση.
API key
Στην ενότητα API Key θα δείτε τα στοιχεία των κλειδιών σας. Το κλειδί θα εμφανιστεί μόνο όταν το δημιουργήσετε.
Η ενότητα Quickstart περιέχει παραδείγματα cut and paste για να δοκιμάσετε το κλειδί σας.

Webhooks & Logs
Προσθέστε webhooks (τους ακροατές σας για γεγονότα Legalesign), και ελέγξτε τα αρχεία καταγραφής σας.

2. Επιτυχής αίτημα GET
Η βασική διεύθυνση URL είναι πάντα: https://eu-api.legalesign.com/
Ξεκινήστε με ένα αίτημα GET για να επιβεβαιώσετε ότι τα διαπιστευτήριά σας λειτουργούν. Αντικαταστήστε το your_api_key με το κλειδί σας από το Developer Portal.
Στα παραδείγματα χρησιμοποιείται Curl, και μπορείτε να αλλάξετε μεταξύ cURL, Node.js, Python, C#, και Go χρησιμοποιώντας τις καρτέλες παρακάτω.
- cURL
- Node.js
- Python
- C#
- Go
curl -H "Authorization: Bearer your_api_key" -H "Content-Type: application/json" -X GET https://eu-api.legalesign.com/api/v1/group/
import fetch from 'node-fetch';
async function getGroups() {
const response = await fetch('https://eu-api.legalesign.com/api/v1/group/', {
method: 'GET',
headers: {
'Authorization': 'Bearer your_api_key',
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
const data = await response.json();
console.log(data);
}
getGroups().catch((error) => {
console.error(error);
process.exit(1);
});
import requests
headers = {
"Authorization": "Bearer your_api_key",
"Content-Type": "application/json",
}
response = requests.get(
"https://eu-api.legalesign.com/api/v1/group/",
headers=headers,
timeout=30,
)
response.raise_for_status()
print(response.json())
using System;
using System.Net.Http;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
using var client = new HttpClient();
using var request = new HttpRequestMessage(
HttpMethod.Get,
"https://eu-api.legalesign.com/api/v1/group/"
);
request.Headers.TryAddWithoutValidation("Authorization", "Bearer your_api_key");
request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
req, err := http.NewRequest(http.MethodGet, "https://eu-api.legalesign.com/api/v1/group/", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer your_api_key")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode >= 400 {
log.Fatalf("request failed: %s", resp.Status)
}
body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
- cURL
- Node.js
- Python
- C#
- Go
curl -H "Authorization: Bearer your_api_key" -H "Content-Type: application/json" -X POST --data '{ "group": "/api/v1/group/[:groupId]/", "name": "Name of doc", "templatepdf": "/api/v1/templatepdf/UUID/", "signers": [{"firstname": "Joe", "lastname": "Bloggs", "email": "[your@email.com]", "order": 0 }], "do_email": true }' https://eu-api.legalesign.com/api/v1/document/
import fetch from 'node-fetch';
const payload = {
group: '/api/v1/group/[:groupId]/',
name: 'Name of doc',
templatepdf: '/api/v1/templatepdf/UUID/',
signers: [
{
firstname: 'Joe',
lastname: 'Bloggs',
email: '[your@email.com]',
order: 0,
},
],
do_email: true,
};
async function sendDocument() {
const response = await fetch('https://eu-api.legalesign.com/api/v1/document/', {
method: 'POST',
headers: {
'Authorization': 'Bearer your_api_key',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (response.status !== 201) {
const errorBody = await response.text();
throw new Error(`Request failed with status ${response.status}: ${errorBody}`);
}
console.log('Document sent successfully');
const location = response.headers.get('location');
if (location) {
console.log(`Location: ${location}`);
}
}
sendDocument().catch((error) => {
console.error(error);
process.exit(1);
});
import requests
payload = {
"group": "/api/v1/group/[:groupId]/",
"name": "Name of doc",
"templatepdf": "/api/v1/templatepdf/UUID/",
"signers": [
{
"firstname": "Joe",
"lastname": "Bloggs",
"email": "[your@email.com]",
"order": 0,
}
],
"do_email": true,
}
headers = {
"Authorization": "Bearer your_api_key",
"Content-Type": "application/json",
}
response = requests.post(
"https://eu-api.legalesign.com/api/v1/document/",
json=payload,
headers=headers,
timeout=30,
)
response.raise_for_status()
print("Document sent successfully")
print("Location:", response.headers.get("Location"))
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
var payload = new
{
group = "/api/v1/group/[:groupId]/",
name = "Name of doc",
templatepdf = "/api/v1/templatepdf/UUID/",
signers = new[]
{
new
{
firstname = "Joe",
lastname = "Bloggs",
email = "[your@email.com]",
order = 0,
},
},
do_email = true,
};
using var client = new HttpClient();
using var request = new HttpRequestMessage(
HttpMethod.Post,
"https://eu-api.legalesign.com/api/v1/document/"
);
request.Headers.TryAddWithoutValidation("Authorization", "Bearer your_api_key");
var json = JsonSerializer.Serialize(payload);
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine("Document sent successfully");
if (response.Headers.Location is not null)
{
Console.WriteLine($"Location: {response.Headers.Location}");
}
}
}
package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
)
func main() {
payload := map[string]any{
"group": "/api/v1/group/[:groupId]/",
"name": "Name of doc",
"templatepdf": "/api/v1/templatepdf/UUID/",
"signers": []map[string]any{
{
"firstname": "Joe",
"lastname": "Bloggs",
"email": "[your@email.com]",
"order": 0,
},
},
"do_email": true,
}
body, err := json.Marshal(payload)
if err != nil {
log.Fatal(err)
}
req, err := http.NewRequest(
http.MethodPost,
"https://eu-api.legalesign.com/api/v1/document/",
bytes.NewReader(body),
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer your_api_key")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusCreated {
log.Fatalf("unexpected status: %s", resp.Status)
}
fmt.Println("Document sent successfully")
fmt.Println("Location:", resp.Header.Get("Location"))
}
- cURL
- Node.js
- Python
- C#
- Go
curl -H "Authorization: Bearer your_api_key" -o download.pdf -X GET https://eu-api.legalesign.com/api/v1/pdf/:documentId/
import { writeFile } from 'node:fs/promises';
import fetch from 'node-fetch';
async function downloadPdf() {
const response = await fetch('https://eu-api.legalesign.com/api/v1/pdf/:documentId/', {
method: 'GET',
headers: {
'Authorization': 'Bearer your_api_key',
},
});
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
const buffer = await response.arrayBuffer();
await writeFile('download.pdf', Buffer.from(buffer));
console.log('Saved download.pdf');
}
downloadPdf().catch((error) => {
console.error(error);
process.exit(1);
});
import requests
headers = {"Authorization": "Bearer your_api_key"}
response = requests.get(
"https://eu-api.legalesign.com/api/v1/pdf/:documentId/",
headers=headers,
stream=True,
timeout=30,
)
response.raise_for_status()
with open("download.pdf", "wb") as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
using var client = new HttpClient();
using var request = new HttpRequestMessage(
HttpMethod.Get,
"https://eu-api.legalesign.com/api/v1/pdf/:documentId/"
);
request.Headers.TryAddWithoutValidation("Authorization", "Bearer your_api_key");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var bytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("download.pdf", bytes);
Console.WriteLine("Saved download.pdf");
}
}
package main
import (
"io"
"log"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest(
http.MethodGet,
"https://eu-api.legalesign.com/api/v1/pdf/:documentId/",
nil,
)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer your_api_key")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode >= 400 {
log.Fatalf("request failed: %s", resp.Status)
}
file, err := os.Create("download.pdf")
if err != nil {
log.Fatal(err)
}
defer file.Close()
if _, err := io.Copy(file, resp.Body); err != nil {
log.Fatal(err)
}
log.Println("Saved download.pdf")
}
$data = (
'group': '/api/v1/group/:groupId/',
'title': 'title of pdf',
'pdf_file': base64encode(open('/path/to/file','rb')),
'process_tags': true
)
$headers = (
'Authorization': 'Bearer your_api_key',
'Content-Type': 'application/json'
)
response = httplibrary.post('https://eu-api.legalesign.com/api/v1/templatepdf/', jsonEncode($data), $headers)
assert response.status == 201
pdfId = response.headers['location']
assert response.status == 201
pdfId = response.headers['location']