Create a worker address
curl --request POST \
--url https://api.plane.com/v1/worker-addresses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"worker": "<string>",
"purpose": "<string>",
"place": "<string>",
"starts": "<string>",
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
'import requests
url = "https://api.plane.com/v1/worker-addresses"
payload = {
"worker": "<string>",
"purpose": "<string>",
"place": "<string>",
"starts": "<string>",
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
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({
worker: '<string>',
purpose: '<string>',
place: '<string>',
starts: '<string>',
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postal_code: '<string>',
country: '<string>'
})
};
fetch('https://api.plane.com/v1/worker-addresses', 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.plane.com/v1/worker-addresses",
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([
'worker' => '<string>',
'purpose' => '<string>',
'place' => '<string>',
'starts' => '<string>',
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postal_code' => '<string>',
'country' => '<string>'
]),
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.plane.com/v1/worker-addresses"
payload := strings.NewReader("{\n \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\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.plane.com/v1/worker-addresses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.plane.com/v1/worker-addresses")
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 \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"line1": "100 Congress Ave",
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US"
}
{
"id": "wra_8oWZpQ2rL4sk",
"object": "worker_address",
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"ends": null,
"current": true,
"place": "plc_8oWZpQ2rL4sk",
"line1": "100 Congress Ave",
"line2": null,
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US",
"created": "2026-07-04T12:00:00Z",
"updated": "2026-07-04T12:00:00Z"
}
Addresses
Create a worker address
Add an address use to a worker.
POST
/
v1
/
worker-addresses
Create a worker address
curl --request POST \
--url https://api.plane.com/v1/worker-addresses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"worker": "<string>",
"purpose": "<string>",
"place": "<string>",
"starts": "<string>",
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
'import requests
url = "https://api.plane.com/v1/worker-addresses"
payload = {
"worker": "<string>",
"purpose": "<string>",
"place": "<string>",
"starts": "<string>",
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>",
"country": "<string>"
}
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({
worker: '<string>',
purpose: '<string>',
place: '<string>',
starts: '<string>',
line1: '<string>',
line2: '<string>',
city: '<string>',
state: '<string>',
postal_code: '<string>',
country: '<string>'
})
};
fetch('https://api.plane.com/v1/worker-addresses', 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.plane.com/v1/worker-addresses",
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([
'worker' => '<string>',
'purpose' => '<string>',
'place' => '<string>',
'starts' => '<string>',
'line1' => '<string>',
'line2' => '<string>',
'city' => '<string>',
'state' => '<string>',
'postal_code' => '<string>',
'country' => '<string>'
]),
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.plane.com/v1/worker-addresses"
payload := strings.NewReader("{\n \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\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.plane.com/v1/worker-addresses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.plane.com/v1/worker-addresses")
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 \"worker\": \"<string>\",\n \"purpose\": \"<string>\",\n \"place\": \"<string>\",\n \"starts\": \"<string>\",\n \"line1\": \"<string>\",\n \"line2\": \"<string>\",\n \"city\": \"<string>\",\n \"state\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"country\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"line1": "100 Congress Ave",
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US"
}
{
"id": "wra_8oWZpQ2rL4sk",
"object": "worker_address",
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"ends": null,
"current": true,
"place": "plc_8oWZpQ2rL4sk",
"line1": "100 Congress Ave",
"line2": null,
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US",
"created": "2026-07-04T12:00:00Z",
"updated": "2026-07-04T12:00:00Z"
}
Parameters
string
required
ID of the worker this address belongs to.
string
required
Address purpose. One of
residential, business, or shipping.string
Existing place ID from one of this worker’s addresses. Use this to make two
purposes point at the same place, such as shipping to the residential address.
string
Effective start date. Omit when the address was effective before Plane
tracked the worker’s address history.
string
Address line 1. Provide address fields when you are not using
place.string
Address line 2.
string
City.
string
State, province, or subdivision, when applicable.
string
Postal code.
string
Two-letter country code.
Returns
Returns the created Worker address object. When a value-based request exactly matches a place already referenced by this worker’s addresses, Plane reuses that place and returns its ID inplace.
When an address records a successor row for the same purpose, Plane immediately
writes the previous row’s ends as the day before the new row’s starts, even
if the successor starts in the future.
{
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"line1": "100 Congress Ave",
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US"
}
{
"id": "wra_8oWZpQ2rL4sk",
"object": "worker_address",
"worker": "wr_8oWZpQ2rL4sk",
"purpose": "residential",
"starts": "2026-07-04",
"ends": null,
"current": true,
"place": "plc_8oWZpQ2rL4sk",
"line1": "100 Congress Ave",
"line2": null,
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US",
"created": "2026-07-04T12:00:00Z",
"updated": "2026-07-04T12:00:00Z"
}
Was this page helpful?
⌘I