Create a record
curl --request POST \
--url https://api.attio.com/v2/objects/{object}/records \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"values": {
"41252299-f8c7-4b5e-99c9-4ff8321d2f96": "Text value",
"multiselect_attribute": [
"Select option 1",
"Select option 2"
]
}
}
}
'import requests
url = "https://api.attio.com/v2/objects/{object}/records"
payload = { "data": { "values": {
"41252299-f8c7-4b5e-99c9-4ff8321d2f96": "Text value",
"multiselect_attribute": ["Select option 1", "Select option 2"]
} } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
values: {
'41252299-f8c7-4b5e-99c9-4ff8321d2f96': 'Text value',
multiselect_attribute: ['Select option 1', 'Select option 2']
}
}
})
};
fetch('https://api.attio.com/v2/objects/{object}/records', 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/objects/{object}/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'values' => [
'41252299-f8c7-4b5e-99c9-4ff8321d2f96' => 'Text value',
'multiselect_attribute' => [
'Select option 1',
'Select option 2'
]
]
]
]),
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/objects/{object}/records"
payload := strings.NewReader("{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.attio.com/v2/objects/{object}/records")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/objects/{object}/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": {
"workspace_id": "14beef7a-99f7-4534-a87e-70b564330a4c",
"object_id": "97052eb9-e65e-443f-a297-f2d9a4a7f795",
"record_id": "bf071e1f-6035-429d-b874-d83ea64ea13b"
},
"created_at": "2022-11-21T13:22:49.061281000Z",
"web_url": "https://app.attio.com/salarya/person/bf071e1f-6035-429d-b874-d83ea64ea13b",
"values": {}
}
}{
"status_code": 400,
"type": "invalid_request_error",
"code": "value_not_found",
"message": "Cannot find select attribute with select option title \"In Progress\"."
}{
"status_code": 403,
"type": "auth_error",
"code": "unauthorized",
"message": "You do not have the necessary permissions to create this record."
}{
"status_code": 404,
"type": "invalid_request_error",
"code": "not_found",
"message": "Object with slug/ID \"people\" not found."
}{
"status_code": 409,
"type": "invalid_request_error",
"code": "concurrent_write_conflict",
"message": "The record was modified by another request while this write was being validated. Please try again."
}Records
Create a record
Creates a new person, company or other record. This endpoint will throw on conflicts of unique attributes. If you would prefer to update records on conflicts, please use the Upsert record endpoint instead.
Required scopes: record_permission:read-write, object_configuration:read.
Supported token levels: workspace, user.
POST
/
v2
/
objects
/
{object}
/
records
Create a record
curl --request POST \
--url https://api.attio.com/v2/objects/{object}/records \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"values": {
"41252299-f8c7-4b5e-99c9-4ff8321d2f96": "Text value",
"multiselect_attribute": [
"Select option 1",
"Select option 2"
]
}
}
}
'import requests
url = "https://api.attio.com/v2/objects/{object}/records"
payload = { "data": { "values": {
"41252299-f8c7-4b5e-99c9-4ff8321d2f96": "Text value",
"multiselect_attribute": ["Select option 1", "Select option 2"]
} } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
values: {
'41252299-f8c7-4b5e-99c9-4ff8321d2f96': 'Text value',
multiselect_attribute: ['Select option 1', 'Select option 2']
}
}
})
};
fetch('https://api.attio.com/v2/objects/{object}/records', 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/objects/{object}/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'values' => [
'41252299-f8c7-4b5e-99c9-4ff8321d2f96' => 'Text value',
'multiselect_attribute' => [
'Select option 1',
'Select option 2'
]
]
]
]),
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/objects/{object}/records"
payload := strings.NewReader("{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.attio.com/v2/objects/{object}/records")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.attio.com/v2/objects/{object}/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"values\": {\n \"41252299-f8c7-4b5e-99c9-4ff8321d2f96\": \"Text value\",\n \"multiselect_attribute\": [\n \"Select option 1\",\n \"Select option 2\"\n ]\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": {
"workspace_id": "14beef7a-99f7-4534-a87e-70b564330a4c",
"object_id": "97052eb9-e65e-443f-a297-f2d9a4a7f795",
"record_id": "bf071e1f-6035-429d-b874-d83ea64ea13b"
},
"created_at": "2022-11-21T13:22:49.061281000Z",
"web_url": "https://app.attio.com/salarya/person/bf071e1f-6035-429d-b874-d83ea64ea13b",
"values": {}
}
}{
"status_code": 400,
"type": "invalid_request_error",
"code": "value_not_found",
"message": "Cannot find select attribute with select option title \"In Progress\"."
}{
"status_code": 403,
"type": "auth_error",
"code": "unauthorized",
"message": "You do not have the necessary permissions to create this record."
}{
"status_code": 404,
"type": "invalid_request_error",
"code": "not_found",
"message": "Object with slug/ID \"people\" not found."
}{
"status_code": 409,
"type": "invalid_request_error",
"code": "concurrent_write_conflict",
"message": "The record was modified by another request while this write was being validated. Please try again."
}Authorizations
This API uses OAuth 2.0 with the authorization code grant flow.
FlowAuthorization Code
- Authorization URL
- https://app.attio.com/authorize
- Token URL
- https://app.attio.com/oauth/token
Scopes2
record_permission:read-write
View, and optionally write, records.
object_configuration:read
View, and optionally write, the configuration and attributes of objects.
Path Parameters
The UUID or slug identifying the object the created record should belong to.
Example:
"people"
Body
application/json
Show child attributes
Show child attributes
Response
Success
Success
Show child attributes
Show child attributes
Was this page helpful?