curl --request PUT \
--url https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"values": [
{
"value": "Acme (old name)",
"active_from": "2020-01-01T00:00:00Z",
"active_until": "2021-06-15T09:30:00Z"
},
{
"value": "Acme Corporation",
"active_from": "2021-06-15T09:30:00Z",
"active_until": null
}
],
"replace_history": true
}
}
'import requests
url = "https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values"
payload = { "data": {
"values": [
{
"value": "Acme (old name)",
"active_from": "2020-01-01T00:00:00Z",
"active_until": "2021-06-15T09:30:00Z"
},
{
"value": "Acme Corporation",
"active_from": "2021-06-15T09:30:00Z",
"active_until": None
}
],
"replace_history": True
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
values: [
{
value: 'Acme (old name)',
active_from: '2020-01-01T00:00:00Z',
active_until: '2021-06-15T09:30:00Z'
},
{
value: 'Acme Corporation',
active_from: '2021-06-15T09:30:00Z',
active_until: null
}
],
replace_history: true
}
})
};
fetch('https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values', 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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values",
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([
'data' => [
'values' => [
[
'value' => 'Acme (old name)',
'active_from' => '2020-01-01T00:00:00Z',
'active_until' => '2021-06-15T09:30:00Z'
],
[
'value' => 'Acme Corporation',
'active_from' => '2021-06-15T09:30:00Z',
'active_until' => null
]
],
'replace_history' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values"
payload := strings.NewReader("{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"active_from": "2023-01-01T15:00:00.000000000Z",
"active_until": "2023-01-01T15:00:00.000000000Z",
"created_by_actor": {
"type": "workspace-member",
"id": "50cf242c-7fa3-4cad-87d0-75b1af71c57b"
},
"referenced_actor_type": "workspace-member",
"referenced_actor_id": "50cf242c-7fa3-4cad-87d0-75b1af71c57b",
"attribute_type": "actor-reference"
}
]
}{
"status_code": 400,
"type": "invalid_request_error",
"message": "This attribute accepts a single value, so its values may not be active at the same time. Please ensure the supplied intervals do not overlap."
}{
"status_code": 403,
"type": "auth_error",
"code": "unauthorized",
"message": "You do not have the necessary permissions to write the value history of this attribute."
}{
"status_code": 404,
"type": "invalid_request_error",
"message": "List with slug/ID \"enterprise_sales\" not found."
}Write list entry attribute values
Replaces the entire value history of a single attribute on a list entry, primarily to migrate historic data from an external source. Every value the attribute currently has is destroyed, including values not present in the request, and the supplied values are written with the active_from and active_until timestamps given.
Values may be supplied in any order and gaps between intervals are allowed. For attributes that accept a single value, at most one value may be active at a time, so intervals may not overlap and at most one may have a null active_until. At least one value is required.
Webhooks and workflow triggers do not fire for these writes, so migrating history does not replay automations. Search indexes and caches are still updated, and formula attributes that depend on this attribute are still recalculated.
Value history cannot be written for relationship attributes, formula attributes, enriched attributes, or immutable system attributes such as the entry’s parent record.
This endpoint is in beta. We will aim to avoid breaking changes, but small updates may be made as we roll out to more users.
Required scopes: list_entry:read-write, list_configuration:read.
curl --request PUT \
--url https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"values": [
{
"value": "Acme (old name)",
"active_from": "2020-01-01T00:00:00Z",
"active_until": "2021-06-15T09:30:00Z"
},
{
"value": "Acme Corporation",
"active_from": "2021-06-15T09:30:00Z",
"active_until": null
}
],
"replace_history": true
}
}
'import requests
url = "https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values"
payload = { "data": {
"values": [
{
"value": "Acme (old name)",
"active_from": "2020-01-01T00:00:00Z",
"active_until": "2021-06-15T09:30:00Z"
},
{
"value": "Acme Corporation",
"active_from": "2021-06-15T09:30:00Z",
"active_until": None
}
],
"replace_history": True
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
values: [
{
value: 'Acme (old name)',
active_from: '2020-01-01T00:00:00Z',
active_until: '2021-06-15T09:30:00Z'
},
{
value: 'Acme Corporation',
active_from: '2021-06-15T09:30:00Z',
active_until: null
}
],
replace_history: true
}
})
};
fetch('https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values', 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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values",
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([
'data' => [
'values' => [
[
'value' => 'Acme (old name)',
'active_from' => '2020-01-01T00:00:00Z',
'active_until' => '2021-06-15T09:30:00Z'
],
[
'value' => 'Acme Corporation',
'active_from' => '2021-06-15T09:30:00Z',
'active_until' => null
]
],
'replace_history' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values"
payload := strings.NewReader("{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/lists/{list}/entries/{entry_id}/attributes/{attribute}/values")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"values\": [\n {\n \"value\": \"Acme (old name)\",\n \"active_from\": \"2020-01-01T00:00:00Z\",\n \"active_until\": \"2021-06-15T09:30:00Z\"\n },\n {\n \"value\": \"Acme Corporation\",\n \"active_from\": \"2021-06-15T09:30:00Z\",\n \"active_until\": null\n }\n ],\n \"replace_history\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"active_from": "2023-01-01T15:00:00.000000000Z",
"active_until": "2023-01-01T15:00:00.000000000Z",
"created_by_actor": {
"type": "workspace-member",
"id": "50cf242c-7fa3-4cad-87d0-75b1af71c57b"
},
"referenced_actor_type": "workspace-member",
"referenced_actor_id": "50cf242c-7fa3-4cad-87d0-75b1af71c57b",
"attribute_type": "actor-reference"
}
]
}{
"status_code": 400,
"type": "invalid_request_error",
"message": "This attribute accepts a single value, so its values may not be active at the same time. Please ensure the supplied intervals do not overlap."
}{
"status_code": 403,
"type": "auth_error",
"code": "unauthorized",
"message": "You do not have the necessary permissions to write the value history of this attribute."
}{
"status_code": 404,
"type": "invalid_request_error",
"message": "List with slug/ID \"enterprise_sales\" not found."
}Authorizations
This API uses OAuth 2.0 with the authorization code grant flow.
Path Parameters
A UUID or slug identifying the list the entry is in.
"enterprise_sales"
A UUID identifying the entry.
"2e6e29ea-c4e0-4f44-842d-78a891f8c156"
A UUID or slug to identify the attribute you want to query values on.
"41252299-f8c7-4b5e-99c9-4ff8321d2f96"
Body
Show child attributes
Show child attributes
Response
Success
Success
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
- Option 8
- Option 9
- Option 10
- Option 11
- Option 12
- Option 13
- Option 14
- Option 15
- Option 16
- Option 17
Show child attributes
Show child attributes
Was this page helpful?