eContract Developers
API ReferenceContracts

Create and send contract in one call (JSON with base64/URL files, or multipart upload)

POST /api/v1/contracts/send: Create and send contract in one call (JSON with base64/URL files, or multipart upload).

POST
/api/v1/contracts/send
AuthorizationBearer <token>

API key cl_live_… or OAuth access token eco_at_… in Authorization: Bearer. Public operations (x-econtract-auth: public) need no credential.

In: header

Header Parameters

Idempotency-Key?string

Up to 255 characters. Retries with the same key and body replay the first result (header Idempotent-Replayed: true) for 24 h.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X POST "https://api.econtract.online/api/v1/contracts/send" \  -H "Content-Type: application/json" \  -d '{    "title": "Service Agreement - Q2 2026",    "signers": [      {}    ]  }'
Empty
Empty

Code Examples

curl -X POST "https://api.econtract.online/api/v1/contracts/send" \
  -H "Authorization: Bearer cl_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '"value"'
const res = await fetch("https://api.econtract.online/api/v1/contracts/send", {
  method: "POST",
  headers: {
    "Authorization": "Bearer cl_live_your_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify("value"),
}).then(r => r.json());

console.log(res);
import requests

res = requests.post(
    "https://api.econtract.online/api/v1/contracts/send",
    headers={"Authorization": "Bearer cl_live_your_key_here"},
    json="value",
).json()

print(res)
package main

import (
    "fmt"
    "io"
    "net/http"
    "bytes"
    "encoding/json"
)

func main() {
    payload, _ := json.Marshal(map[string]interface{}{
        "0": "v",
        "1": "a",
        "2": "l",
        "3": "u",
        "4": "e",
    })

    req, _ := http.NewRequest("POST", "https://api.econtract.online/api/v1/contracts/send", bytes.NewBuffer(payload))
    req.Header.Set("Authorization", "Bearer cl_live_your_key_here")
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.econtract.online/api/v1/contracts/send");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer cl_live_your_key_here",
    "Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode('value'));

$response = curl_exec($ch);
curl_close($ch);

echo $response;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

String jsonBody = "\"value\"";

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.econtract.online/api/v1/contracts/send"))
    .header("Authorization", "Bearer cl_live_your_key_here")
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
    .build();

HttpResponse<String> response = HttpClient.newHttpClient()
    .send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer cl_live_your_key_here");

var json = @"""value""";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");

var response = await client.PostAsync("https://api.econtract.online/api/v1/contracts/send", content);
var body = await response.Content.ReadAsStringAsync();

Console.WriteLine(body);