Skip to main content
POST
/
custom_fields
Create a custom field
curl --request POST \
  --url https://api.terminal49.com/v2/custom_fields \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "data": {
    "type": "custom_field",
    "attributes": {
      "api_slug": "customer_reference_number",
      "value": "ABC124"
    },
    "relationships": {
      "entity": {
        "data": {
          "type": "shipment",
          "id": "YOUR_SHIPMENT_ID"
        }
      }
    }
  }
}
'
import requests

url = "https://api.terminal49.com/v2/custom_fields"

payload = { "data": {
"type": "custom_field",
"attributes": {
"api_slug": "customer_reference_number",
"value": "ABC124"
},
"relationships": { "entity": { "data": {
"type": "shipment",
"id": "YOUR_SHIPMENT_ID"
} } }
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
type: 'custom_field',
attributes: {api_slug: 'customer_reference_number', value: 'ABC124'},
relationships: {entity: {data: {type: 'shipment', id: 'YOUR_SHIPMENT_ID'}}}
}
})
};

fetch('https://api.terminal49.com/v2/custom_fields', 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.terminal49.com/v2/custom_fields",
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' => [
'type' => 'custom_field',
'attributes' => [
'api_slug' => 'customer_reference_number',
'value' => 'ABC124'
],
'relationships' => [
'entity' => [
'data' => [
'type' => 'shipment',
'id' => 'YOUR_SHIPMENT_ID'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.terminal49.com/v2/custom_fields"

payload := strings.NewReader("{\n \"data\": {\n \"type\": \"custom_field\",\n \"attributes\": {\n \"api_slug\": \"customer_reference_number\",\n \"value\": \"ABC124\"\n },\n \"relationships\": {\n \"entity\": {\n \"data\": {\n \"type\": \"shipment\",\n \"id\": \"YOUR_SHIPMENT_ID\"\n }\n }\n }\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "<api-key>")
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.terminal49.com/v2/custom_fields")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"type\": \"custom_field\",\n \"attributes\": {\n \"api_slug\": \"customer_reference_number\",\n \"value\": \"ABC124\"\n },\n \"relationships\": {\n \"entity\": {\n \"data\": {\n \"type\": \"shipment\",\n \"id\": \"YOUR_SHIPMENT_ID\"\n }\n }\n }\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.terminal49.com/v2/custom_fields")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"type\": \"custom_field\",\n \"attributes\": {\n \"api_slug\": \"customer_reference_number\",\n \"value\": \"ABC124\"\n },\n \"relationships\": {\n \"entity\": {\n \"data\": {\n \"type\": \"shipment\",\n \"id\": \"YOUR_SHIPMENT_ID\"\n }\n }\n }\n }\n}"

response = http.request(request)
puts response.read_body
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "type": "custom_field",
    "attributes": {
      "api_slug": "<string>",
      "value": "<string>",
      "display_value": "<string>"
    },
    "relationships": {
      "entity": {
        "data": {
          "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
        }
      },
      "definition": {
        "data": {
          "type": "custom_field_definition",
          "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
        }
      }
    }
  },
  "links": {
    "self": "<string>"
  }
}
Use this endpoint to create a custom field value on a shipment or container when you need to send the full JSON:API relationship payload yourself. The field must reference an existing custom field definition.

Request body

ParameterRequiredDescription
data.typeYesMust be custom_field
data.attributes.api_slugYesThe slug of the custom field definition
data.attributes.valueYesThe field value (must match the definition’s data type)
data.relationships.entity.data.typeYesshipment or container
data.relationships.entity.data.idYesThe shipment or container ID

Value formats by data type

Data typeExpected value format
short_textAny string
numberNumeric value
dateDate string (parsed using definition’s default_format or flexible parsing)
datetimeDateTime string
booleantrue or false
enumString matching one of the definition’s option values
enum_multiArray of strings matching the definition’s option values
referenceObject identifying the referenced record, for example { "type": "shipment", "id": "SHIPMENT_ID" }

Validation

  • Values are validated against the definition’s data type
  • Enum values must match one of the definition’s configured options
  • Reference values must match the definition’s configured reference_type
  • The api_slug must reference a definition belonging to your account or a Terminal49 template

Example request

{
  "data": {
    "type": "custom_field",
    "attributes": {
      "api_slug": "customer_reference_number",
      "value": "ABC124"
    },
    "relationships": {
      "entity": {
        "data": {
          "type": "shipment",
          "id": "YOUR_SHIPMENT_ID"
        }
      }
    }
  }
}

Example response

{
  "data": {
    "id": "YOUR_CUSTOM_FIELD_ID",
    "type": "custom_field",
    "attributes": {
      "api_slug": "customer_reference_number",
      "value": "ABC124",
      "display_value": "ABC124"
    },
    "relationships": {
      "entity": {
        "data": {
          "id": "YOUR_SHIPMENT_ID",
          "type": "shipment"
        }
      },
      "definition": {
        "data": {
          "id": "YOUR_DEFINITION_ID",
          "type": "custom_field_definition"
        }
      }
    }
  }
}

Authorizations

Authorization
string
header
required

Use a Terminal49 API key in the Authorization header with the Token prefix.

Authorization: Token YOUR_API_KEY

Body

application/json
data
object

Response

201 - application/json

Created

data
Custom field · object