Skip to main content
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

worker
string
required
ID of the worker this address belongs to.
purpose
string
required
Address purpose. One of residential, business, or shipping.
place
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.
starts
string
Effective start date. Omit when the address was effective before Plane tracked the worker’s address history.
line1
string
Address line 1. Provide address fields when you are not using place.
line2
string
Address line 2.
city
string
City.
state
string
State, province, or subdivision, when applicable.
postal_code
string
Postal code.
country
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 in place. 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"
}