Skip to main content
PUT
/
workspace
/
{workspace_id}
/
signer-terms
/
{language}
Create or update workspace signer terms
curl --request PUT \
  --url https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language} \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "statement_text": "<string>",
  "terms_url": "<string>"
}
'
import requests

url = "https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}"

payload = {
    "statement_text": "<string>",
    "terms_url": "<string>"
}
headers = {
    "Authorization": "<api-key>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.text)
const options = {
  method: 'PUT',
  headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
  body: JSON.stringify({statement_text: '<string>', terms_url: '<string>'})
};

fetch('https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => json_encode([
    'statement_text' => '<string>',
    'terms_url' => '<string>'
  ]),
  CURLOPT_HTTPHEADER => [
    "Authorization: <api-key>",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}"

	payload := strings.NewReader("{\n  \"statement_text\": \"<string>\",\n  \"terms_url\": \"<string>\"\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Authorization", "<api-key>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.put("https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}")
  .header("Authorization", "<api-key>")
  .header("Content-Type", "application/json")
  .body("{\n  \"statement_text\": \"<string>\",\n  \"terms_url\": \"<string>\"\n}")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.firma.dev/functions/v1/signing-request-api/workspace/{workspace_id}/signer-terms/{language}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"statement_text\": \"<string>\",\n  \"terms_url\": \"<string>\"\n}"

response = http.request(request)
puts response.read_body
{
  "ok": true,
  "storedHtml": "<string>",
  "changed": true
}
{
  "error": "Validation Error",
  "message": "Invalid input data",
  "details": {
    "name": "Name is required",
    "email": "Invalid email format"
  }
}
{
  "error": "Unauthorized",
  "message": "Invalid API key"
}
{
  "error": "Forbidden",
  "message": "You do not have permission to access this resource"
}
{
  "error": "Not Found",
  "message": "The requested resource was not found"
}
{
  "error": "Rate Limit Exceeded",
  "message": "Too many requests. Please wait before retrying.",
  "details": {
    "retry_after": 45
  }
}

Authorizations

Authorization
string
header
required

API key for authentication. Use your API key directly without any prefix (e.g., 'your-api-key'). Bearer prefix is optional but not required.

Path Parameters

workspace_id
string<uuid>
required

Workspace ID

language
enum<string>
required

Language code

Available options:
en,
es,
it,
pt,
fr,
de,
el,
ru,
pl

Body

application/json
statement_text
string
required

Signer consent statement as HTML. Sanitized before storage.

terms_url
string<uri> | null

Optional external terms link

Response

Workspace signer terms updated successfully

Signer terms update result

ok
boolean
required
storedHtml
string

The sanitized HTML actually stored

changed
boolean

Whether sanitization altered the submitted statement