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

url = "https://api.terminal49.com/v2/tracking_requests/{tracking_request_id}/custom_fields"

payload = { "data": {
"type": "custom_field",
"attributes": {
"api_slug": "customer_reference_number",
"value": "ABC124"
}
} }
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'}
}
})
};

fetch('https://api.terminal49.com/v2/tracking_requests/{tracking_request_id}/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/tracking_requests/{tracking_request_id}/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'
]
]
]),
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/tracking_requests/{tracking_request_id}/custom_fields"

payload := strings.NewReader("{\n \"data\": {\n \"type\": \"custom_field\",\n \"attributes\": {\n \"api_slug\": \"customer_reference_number\",\n \"value\": \"ABC124\"\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/tracking_requests/{tracking_request_id}/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 }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.terminal49.com/v2/tracking_requests/{tracking_request_id}/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 }\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>"
  }
}
Creates or updates a custom field on a tracking request. If a custom field with the specified api_slug already exists, it will be updated.

Path parameters

ParameterRequiredDescription
tracking_request_idYesThe ID of the tracking request

Request body

ParameterRequiredDescription
data.typeYesMust be custom_field
data.attributes.api_slugYesThe slug of the custom field definition
data.attributes.valueYesThe value to set (type depends on the definition’s data type)
The tracking request is implied by the path, so do not send data.relationships.entity on this endpoint.

Authorization

Requires update permission on the tracking request.

Response

Returns 201 Created with the custom field resource on success.

Behavior

  • Uses find_or_initialize_by internally, so it creates if missing or updates if it exists
  • Values are validated against the definition’s data type
  • For enum fields, values are validated against the definition’s options

Example request

{
  "data": {
    "type": "custom_field",
    "attributes": {
      "api_slug": "customer_reference_number",
      "value": "ABC124"
    }
  }
}

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_TRACKING_REQUEST_ID",
          "type": "tracking_request"
        }
      },
      "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

Path Parameters

tracking_request_id
string
required

Tracking request ID

Body

application/json
data
object

Response

201 - application/json

Created

data
Custom field · object