eContract Developers
API ReferenceContracts

Update contract (draft only)

PUT /api/v1/contracts/{id}: Update contract (draft only). API keys and OAuth tokens need scope contracts:write. Parameters, responses and code samples.

PUT
/api/v1/contracts/{id}
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

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

curl -X PUT "https://api.econtract.online/api/v1/contracts/string" \  -H "Content-Type: application/json" \  -d '{}'
Empty
Empty
Empty

Code Examples

curl -X PUT "https://api.econtract.online/api/v1/contracts/abc123" \
  -H "Authorization: Bearer cl_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Service Agreement",
    "description": "Q2 consulting agreement",
    "fileKey": "files/abc123/agreement.pdf",
    "fileName": "agreement.pdf",
    "fileSize": 1024,
    "fileHash": "string_value",
    "fileType": "pdf",
    "signingOrderType": "sequential",
    "expiresAt": "2026-12-31T00:00:00.000Z",
    "metadata": {}
  }'
const res = await fetch("https://api.econtract.online/api/v1/contracts/abc123", {
  method: "PUT",
  headers: {
    "Authorization": "Bearer cl_live_your_key_here",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
      "title": "Service Agreement",
      "description": "Q2 consulting agreement",
      "fileKey": "files/abc123/agreement.pdf",
      "fileName": "agreement.pdf",
      "fileSize": 1024,
      "fileHash": "string_value",
      "fileType": "pdf",
      "signingOrderType": "sequential",
      "expiresAt": "2026-12-31T00:00:00.000Z",
      "metadata": {}
  }),
}).then(r => r.json());

console.log(res);
import requests

res = requests.put(
    "https://api.econtract.online/api/v1/contracts/abc123",
    headers={"Authorization": "Bearer cl_live_your_key_here"},
    json={
    "title": "Service Agreement",
    "description": "Q2 consulting agreement",
    "fileKey": "files/abc123/agreement.pdf",
    "fileName": "agreement.pdf",
    "fileSize": 1024,
    "fileHash": "string_value",
    "fileType": "pdf",
    "signingOrderType": "sequential",
    "expiresAt": "2026-12-31T00:00:00.000Z",
    "metadata": {},
},
).json()

print(res)
package main

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

func main() {
    payload, _ := json.Marshal(map[string]interface{}{
        "title": "Service Agreement",
        "description": "Q2 consulting agreement",
        "fileKey": "files/abc123/agreement.pdf",
        "fileName": "agreement.pdf",
        "fileSize": 1024,
        "fileHash": "string_value",
        "fileType": "pdf",
        "signingOrderType": "sequential",
        "expiresAt": "2026-12-31T00:00:00.000Z",
        "metadata": {},
    })

    req, _ := http.NewRequest("PUT", "https://api.econtract.online/api/v1/contracts/abc123", 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/abc123");
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, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'title' => 'Service Agreement',
    'description' => 'Q2 consulting agreement',
    'fileKey' => 'files/abc123/agreement.pdf',
    'fileName' => 'agreement.pdf',
    'fileSize' => 1024,
    'fileHash' => 'string_value',
    'fileType' => 'pdf',
    'signingOrderType' => 'sequential',
    'expiresAt' => '2026-12-31T00:00:00.000Z',
    'metadata' => [
,
    ],
]));

$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 = "{\"title\":\"Service Agreement\",\"description\":\"Q2 consulting agreement\",\"fileKey\":\"files/abc123/agreement.pdf\",\"fileName\":\"agreement.pdf\",\"fileSize\":1024,\"fileHash\":\"string_value\",\"fileType\":\"pdf\",\"signingOrderType\":\"sequential\",\"expiresAt\":\"2026-12-31T00:00:00.000Z\",\"metadata\":{}}";

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.econtract.online/api/v1/contracts/abc123"))
    .header("Authorization", "Bearer cl_live_your_key_here")
    .header("Content-Type", "application/json")
    .PUT(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 = @"{
  ""title"": ""Service Agreement"",
  ""description"": ""Q2 consulting agreement"",
  ""fileKey"": ""files/abc123/agreement.pdf"",
  ""fileName"": ""agreement.pdf"",
  ""fileSize"": 1024,
  ""fileHash"": ""string_value"",
  ""fileType"": ""pdf"",
  ""signingOrderType"": ""sequential"",
  ""expiresAt"": ""2026-12-31T00:00:00.000Z"",
  ""metadata"": {}
}";
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");

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

Console.WriteLine(body);