Get record field history
Returns the field-change history for a record, newest first. Each entry includes the field (property_name plus a display property_label), the previous and new values (with old_value_label/new_value_label resolved for reference values such as deal stages and accounts), the author (user is the person when one was involved; it is null when no person wrote the row; a write made through this API is authored by the member who created the API key), the source naming which surface made the change (user_web, public_api, mcp, chat, workflow, enrichment, integration_sync, csv_import, system, or null for entries predating the field) plus source_api_key_id identifying which API key wrote when source is public_api, change_kind (created for a value the record was created with, updated, or linked/unlinked for a single deal stakeholder; null for entries predating the field), metadata (tool and mcp_key_id naming the agent tool and connection for mcp writes, defaulted when the system filled a creation value in), and the change timestamp. Account, contact, stakeholder and owner values on deals are labelled too. Filter to a single field with property_name.
curl --request GET \
--url https://api.octolane.com/v1/{object_type}/{object_id}/history \
--header 'x-api-key: <api-key>'import requests
url = "https://api.octolane.com/v1/{object_type}/{object_id}/history"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.octolane.com/v1/{object_type}/{object_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://api.octolane.com/v1/{object_type}/{object_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 => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.octolane.com/v1/{object_type}/{object_id}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.octolane.com/v1/{object_type}/{object_id}/history")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.octolane.com/v1/{object_type}/{object_id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}Authorizations
Personal API key. Requests act as the workspace member who created the key, with that member's current access, and stop working when the key is disabled or its creator leaves the workspace.
Path Parameters
Record type.
accounts, contacts, opportunities Record ID.
Query Parameters
Restrict history to a single field (the field's stable property name).
Page number, newest changes first.
x >= 1Entries per page.
1 <= x <= 100Was this page helpful?
curl --request GET \
--url https://api.octolane.com/v1/{object_type}/{object_id}/history \
--header 'x-api-key: <api-key>'import requests
url = "https://api.octolane.com/v1/{object_type}/{object_id}/history"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.octolane.com/v1/{object_type}/{object_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://api.octolane.com/v1/{object_type}/{object_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 => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.octolane.com/v1/{object_type}/{object_id}/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.octolane.com/v1/{object_type}/{object_id}/history")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.octolane.com/v1/{object_type}/{object_id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"data": "<unknown>"
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}{
"success": false,
"message": "Validation failed",
"statusCode": 400
}