curl --request PATCH \
--url https://api.stigg.io/api/v1/contracts/{id}/billing/settings \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"legalEntityId": "<string>",
"paymentAccountId": "<string>",
"note": "<string>"
}
'import requests
url = "https://api.stigg.io/api/v1/contracts/{id}/billing/settings"
payload = {
"legalEntityId": "<string>",
"paymentAccountId": "<string>",
"note": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({legalEntityId: '<string>', paymentAccountId: '<string>', note: '<string>'})
};
fetch('https://api.stigg.io/api/v1/contracts/{id}/billing/settings', 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.stigg.io/api/v1/contracts/{id}/billing/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'legalEntityId' => '<string>',
'paymentAccountId' => '<string>',
'note' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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.stigg.io/api/v1/contracts/{id}/billing/settings"
payload := strings.NewReader("{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<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.patch("https://api.stigg.io/api/v1/contracts/{id}/billing/settings")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stigg.io/api/v1/contracts/{id}/billing/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"contractId": "<string>",
"externalId": "<string>",
"subTotal": 123,
"totalDiscount": 123,
"totalTax": 123,
"total": 123,
"items": [
{
"itemId": "<string>",
"name": "<string>",
"subTotal": 123,
"discount": 123,
"tax": 123,
"total": 123
}
],
"currency": "<string>",
"activationStartDate": "2023-11-07T05:31:56Z",
"activationEndDate": "2023-11-07T05:31:56Z",
"netTerms": 123,
"legalEntityId": "<string>",
"paymentAccountId": "<string>"
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "CustomerNotFound"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Update a contract
Sets the legal entity, payment account and note the contract bills through — the Billing settings step. Both a legal entity and one of its payment accounts are needed before the contract can be published; list them with the legal-entities endpoint. Requires a draft with line items.
curl --request PATCH \
--url https://api.stigg.io/api/v1/contracts/{id}/billing/settings \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"legalEntityId": "<string>",
"paymentAccountId": "<string>",
"note": "<string>"
}
'import requests
url = "https://api.stigg.io/api/v1/contracts/{id}/billing/settings"
payload = {
"legalEntityId": "<string>",
"paymentAccountId": "<string>",
"note": "<string>"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({legalEntityId: '<string>', paymentAccountId: '<string>', note: '<string>'})
};
fetch('https://api.stigg.io/api/v1/contracts/{id}/billing/settings', 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.stigg.io/api/v1/contracts/{id}/billing/settings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'legalEntityId' => '<string>',
'paymentAccountId' => '<string>',
'note' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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.stigg.io/api/v1/contracts/{id}/billing/settings"
payload := strings.NewReader("{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-API-KEY", "<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.patch("https://api.stigg.io/api/v1/contracts/{id}/billing/settings")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.stigg.io/api/v1/contracts/{id}/billing/settings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"legalEntityId\": \"<string>\",\n \"paymentAccountId\": \"<string>\",\n \"note\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"contractId": "<string>",
"externalId": "<string>",
"subTotal": 123,
"totalDiscount": 123,
"totalTax": 123,
"total": 123,
"items": [
{
"itemId": "<string>",
"name": "<string>",
"subTotal": 123,
"discount": 123,
"tax": 123,
"total": 123
}
],
"currency": "<string>",
"activationStartDate": "2023-11-07T05:31:56Z",
"activationEndDate": "2023-11-07T05:31:56Z",
"netTerms": 123,
"legalEntityId": "<string>",
"paymentAccountId": "<string>"
}
}{
"message": "<string>",
"code": "BadUserInput",
"reason": "<string>"
}{
"message": "<string>",
"code": "Unauthenticated"
}{
"message": "<string>",
"code": "IdentityForbidden"
}{
"message": "<string>",
"code": "CustomerNotFound"
}{
"message": "<string>",
"code": "RateLimitExceeded"
}Authorizations
Server API Key
Headers
Account ID — optional when authenticating with a user JWT (Bearer token); falls back to the user's first membership. Ignored for API-key auth.
Environment ID — required when authenticating with a user JWT (Bearer token) on environment-scoped endpoints. Ignored for API-key auth (env is intrinsic to the key).
Path Parameters
The unique identifier of the entity
1 - 255Body
Input for the contract's billing settings. A legal entity and one of its payment accounts are both needed before the contract can be published.
Legal entity to invoice from, from the legal-entities endpoint
255Payment account to bill through, from the legal entity's paymentAccounts. Selecting one also sets the payment method to bank transfer
255Note shown on the document PDFs
2000Response
The contract's recomputed totals.
Response object
A contract's pre-publish totals, with a per line item breakdown — read this before publishing, since after publishing these are the figures the customer is invoiced.
Show child attributes
Show child attributes
Related topics
Update a contractDelete contractScheduled updatesCanceling scheduled updatesGet a list of contracts