Get a contract's history
curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/contracts/{id}/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/contracts/{id}/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sideshift.app/api/oauth/v1/contracts/{id}/history', 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://app.sideshift.app/api/oauth/v1/contracts/{id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sideshift.app/api/oauth/v1/contracts/{id}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sideshift.app/api/oauth/v1/contracts/{id}/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/contracts/{id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"success": true,
"contracts": [
{
"id": "<string>",
"title": "<string>",
"status": "<string>",
"displayStatus": "<string>",
"isLatestVersion": true,
"changeLog": [
{
"id": "<string>",
"changedAt": "<string>",
"changedBy": "<string>",
"source": "<string>",
"changeSummary": "<string>",
"previousPdfUrl": "<string>",
"previousOtherSignedUrl": "<string>",
"nextPdfUrl": "<string>",
"nextOtherSignedUrl": "<string>"
}
],
"contractName": "<string>",
"programName": "<string>",
"signedPdfUrl": "<string>",
"fileUrl": "<string>",
"otherSignedUrl": "<string>",
"updatedAt": "<string>",
"activatedAt": "<string>",
"acceptedAt": "<string>",
"createdAt": "<string>",
"startDate": "<string>",
"endDate": "<string>",
"programEndDate": "<string>",
"version": 123,
"totalVersions": 123,
"versionLabel": "<string>",
"changeSummary": "<string>"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Get a contract's history
Get a contract’s history. Requires the contracts:read scope.
GET
/
contracts
/
{id}
/
history
Get a contract's history
curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/contracts/{id}/history \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/contracts/{id}/history"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sideshift.app/api/oauth/v1/contracts/{id}/history', 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://app.sideshift.app/api/oauth/v1/contracts/{id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.sideshift.app/api/oauth/v1/contracts/{id}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.sideshift.app/api/oauth/v1/contracts/{id}/history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/contracts/{id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"success": true,
"contracts": [
{
"id": "<string>",
"title": "<string>",
"status": "<string>",
"displayStatus": "<string>",
"isLatestVersion": true,
"changeLog": [
{
"id": "<string>",
"changedAt": "<string>",
"changedBy": "<string>",
"source": "<string>",
"changeSummary": "<string>",
"previousPdfUrl": "<string>",
"previousOtherSignedUrl": "<string>",
"nextPdfUrl": "<string>",
"nextOtherSignedUrl": "<string>"
}
],
"contractName": "<string>",
"programName": "<string>",
"signedPdfUrl": "<string>",
"fileUrl": "<string>",
"otherSignedUrl": "<string>",
"updatedAt": "<string>",
"activatedAt": "<string>",
"acceptedAt": "<string>",
"createdAt": "<string>",
"startDate": "<string>",
"endDate": "<string>",
"programEndDate": "<string>",
"version": 123,
"totalVersions": 123,
"versionLabel": "<string>",
"changeSummary": "<string>"
}
]
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Authorizations
OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.
Path Parameters
The id.
Query Parameters
The creator id whose contract version history to fetch.
Optional program id filter.
Response
The contract's versioned history for the given creator (newest first).
Show child attributes
Show child attributes
⌘I