---
title: User Message Creation API
slug: fourkites-api-reference/user-message-creation-api
icon: {"apiMethod":"POST"}
createdAt: 2024-09-05T11:05:30.000Z
---

The User Message Creation API will allow you to add messages/comments to any specific shipment by entering the tracking ID.

:::hint{type="success"}
To add messages/comments for a load using the Load Number in addition to FourKites Tracking ID, [click here](https://docs.fourkites.com/api-reference/user-message-creation-api-using-load-number).&#x20;
:::

:::hint{type="info"}
### Rate Limit

**1 request per second**
:::

:::hint{type="info"}
### Format Supported

**JSON**
:::

:::hint{type="info"}
### Authenticated Resource

**API Key**
:::

For more information on Authentication, [click here](https://docs.fourkites.com/api-reference/authentication).&#x20;

:::hint{type="success"}
The **Tracking ID/FourKites internal loadId** that is returned during load creation should be added to the endpoint to update the load. Click on the load that you would like to add User Message / Comments to get the **Tracking ID** as shown in the image below.&#x20;

![](https://api.archbee.com/api/optimize/2iLZ8zq0u-v-CPzk98WTR/jke23hF7rks2Qo7PfinnW_id.jpg)
:::

:::ApiMethodV2
```json
{
  "name": "Production",
  "method": "POST",
  "url": "https://api.fourkites.com/api/v1/tracking/{trackingId}/messages",
  "description": "",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "fLRLQ6uLWFMejXGag2WHd",
        "language": "curl",
        "code": "curl --location -g --request POST 'https://api.fourkites.com/api/v1/tracking/{trackingId}/messages' \\\n--header 'Content-Type: application/json' \\\n--header 'apikey: <apikey>' \\\n--data-raw '{\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n}'",
        "customLabel": ""
      },
      {
        "id": "QjmoEY9GQ2OvPKOLXE4JF",
        "language": "java",
        "code": "OkHttpClient client = new OkHttpClient().newBuilder()\n  .build();\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\n  \\\"message\\\": \\\"Message\\\",\\n  \\\"sendToDriver\\\": false\\n}\");\nRequest request = new Request.Builder()\n  .url(\"https://api.fourkites.com/api/v1/tracking/{trackingId}/messages\")\n  .method(\"POST\", body)\n  .addHeader(\"Content-Type\", \"application/json\")\n  .addHeader(\"apikey\", \"<apikey>\")\n  .build();\nResponse response = client.newCall(request).execute();",
        "customLabel": ""
      },
      {
        "id": "z6Ws7A4E_JP8sQTz9qhXd",
        "language": "javascript",
        "code": "var settings = {\n  \"url\": \"https://api.fourkites.com/api/v1/tracking/{trackingId}/messages\",\n  \"method\": \"POST\",\n  \"timeout\": 0,\n  \"headers\": {\n    \"Content-Type\": \"application/json\",\n    \"apikey\": \"<apikey>\"\n  },\n  \"data\": JSON.stringify({\n    \"message\": \"Message\",\n    \"sendToDriver\": false\n  }),\n};\n\n$.ajax(settings).done(function (response) {\n  console.log(response);\n});",
        "customLabel": ""
      },
      {
        "id": "-ACugWHhiibb6txFNHCi1",
        "language": "swift",
        "code": "import Foundation\n#if canImport(FoundationNetworking)\nimport FoundationNetworking\n#endif\n\nvar semaphore = DispatchSemaphore (value: 0)\n\nlet parameters = \"{\\n  \\\"message\\\": \\\"Message\\\",\\n  \\\"sendToDriver\\\": false\\n}\"\nlet postData = parameters.data(using: .utf8)\n\nvar request = URLRequest(url: URL(string: \"https://api.fourkites.com/api/v1/tracking/{trackingId}/messages\")!,timeoutInterval: Double.infinity)\nrequest.addValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\nrequest.addValue(\"<apikey>\", forHTTPHeaderField: \"apikey\")\n\nrequest.httpMethod = \"POST\"\nrequest.httpBody = postData\n\nlet task = URLSession.shared.dataTask(with: request) { data, response, error in \n  guard let data = data else {\n    print(String(describing: error))\n    semaphore.signal()\n    return\n  }\n  print(String(data: data, encoding: .utf8)!)\n  semaphore.signal()\n}\n\ntask.resume()\nsemaphore.wait()\n",
        "customLabel": ""
      },
      {
        "id": "Kl1IqEwGlVm6-ssIb-PeB",
        "language": "csharp",
        "code": "var client = new RestClient(\"https://api.fourkites.com/api/v1/tracking/{trackingId}/messages\");\nclient.Timeout = -1;\nvar request = new RestRequest(Method.POST);\nrequest.AddHeader(\"Content-Type\", \"application/json\");\nrequest.AddHeader(\"apikey\", \"<apikey>\");\nvar body = @\"{\" + \"\\n\" +\n@\"  \"\"message\"\": \"\"Message\"\",\" + \"\\n\" +\n@\"  \"\"sendToDriver\"\": false\" + \"\\n\" +\n@\"}\";\nrequest.AddParameter(\"application/json\", body,  ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\nConsole.WriteLine(response.Content);",
        "customLabel": ""
      },
      {
        "id": "w_08ZFTV8ZPPe-PCt4M-Y",
        "language": "go",
        "code": "package main\n\nimport (\n  \"fmt\"\n  \"strings\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n\n  url := \"https://api.fourkites.com/api/v1/tracking/%7BtrackingId%7D/messages\"\n  method := \"POST\"\n\n  payload := strings.NewReader(`{\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n}`)\n\n  client := &http.Client {\n  }\n  req, err := http.NewRequest(method, url, payload)\n\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  req.Header.Add(\"Content-Type\", \"application/json\")\n  req.Header.Add(\"apikey\", \"<apikey>\")\n\n  res, err := client.Do(req)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  defer res.Body.Close()\n\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  fmt.Println(string(body))\n}",
        "customLabel": ""
      },
      {
        "id": "NpNKv5acsHrbmOSyemo8Y",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api.fourkites.com/api/v1/tracking/{trackingId}/messages\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"apikey\"] = \"<apikey>\"\nrequest.body = JSON.dump({\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      },
      {
        "id": "4HZk_WBjP4pH8IcePEqwH",
        "language": "python",
        "code": "import http.client\nimport json\n\nconn = http.client.HTTPSConnection(\"api.fourkites.com\")\npayload = json.dumps({\n  \"message\": \"Message\",\n  \"sendToDriver\": False\n})\nheaders = {\n  'Content-Type': 'application/json',\n  'apikey': '<apikey>'\n}\nconn.request(\"POST\", \"/api/v1/tracking/{trackingId}/messages\", payload, headers)\nres = conn.getresponse()\ndata = res.read()\nprint(data.decode(\"utf-8\"))",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "fLRLQ6uLWFMejXGag2WHd"
  },
  "results": {
    "languages": [
      {
        "id": "EM5ZgFDZxEqXzXsamsUPE",
        "language": "200",
        "customLabel": "",
        "code": "{\n    \"statusCode\": 200,\n    \"message\": \"Message posted successfully\",\n    \"messageUuid\": \"e87c35c6-84af-4615-b107-eb21ab3cd528\"\n}"
      },
      {
        "id": "9OJwmX552qhgAnL_7RHM2",
        "language": "400",
        "customLabel": "",
        "code": "{\n    \"statusCode\": 400,\n    \"errors\": [\"The maximum allowed length is 1000 characters. Please shorten your message and try again\"\n    ]\n}"
      }
    ],
    "selectedLanguageId": "9OJwmX552qhgAnL_7RHM2"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [],
    "bodyDataParameters": [
      {
        "name": "message",
        "kind": "required",
        "type": "string",
        "description": "Enter the message/comment you want to be added to the shipment."
      },
      {
        "name": "sendToDriver",
        "kind": "optional",
        "type": "boolean",
        "description": "Set it as true for the message to be visible to the driver using CarrierLink mobile application.",
        "children": []
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "production",
  "legacyHash": "LSirzLBlRH2GRE7d7-GkM"
}
```
:::

:::ApiMethodV2
```json
{
  "name": "Staging",
  "method": "POST",
  "url": "https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages",
  "description": "",
  "tab": "examples",
  "examples": {
    "languages": [
      {
        "id": "fLRLQ6uLWFMejXGag2WHd",
        "language": "curl",
        "code": "curl --location -g --request POST 'https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages' \\\n--header 'Content-Type: application/json' \\\n--header 'apikey: <apikey>' \\\n--data-raw '{\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n}'",
        "customLabel": ""
      },
      {
        "id": "QjmoEY9GQ2OvPKOLXE4JF",
        "language": "java",
        "code": "OkHttpClient client = new OkHttpClient().newBuilder()\n  .build();\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\n  \\\"message\\\": \\\"Message\\\",\\n  \\\"sendToDriver\\\": false\\n}\");\nRequest request = new Request.Builder()\n  .url(\"https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages\")\n  .method(\"POST\", body)\n  .addHeader(\"Content-Type\", \"application/json\")\n  .addHeader(\"apikey\", \"<apikey>\")\n  .build();\nResponse response = client.newCall(request).execute();",
        "customLabel": ""
      },
      {
        "id": "z6Ws7A4E_JP8sQTz9qhXd",
        "language": "javascript",
        "code": "var settings = {\n  \"url\": \"https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages\",\n  \"method\": \"POST\",\n  \"timeout\": 0,\n  \"headers\": {\n    \"Content-Type\": \"application/json\",\n    \"apikey\": \"<apikey>\"\n  },\n  \"data\": JSON.stringify({\n    \"message\": \"Message\",\n    \"sendToDriver\": false\n  }),\n};\n\n$.ajax(settings).done(function (response) {\n  console.log(response);\n});",
        "customLabel": ""
      },
      {
        "id": "-ACugWHhiibb6txFNHCi1",
        "language": "swift",
        "code": "import Foundation\n#if canImport(FoundationNetworking)\nimport FoundationNetworking\n#endif\n\nvar semaphore = DispatchSemaphore (value: 0)\n\nlet parameters = \"{\\n  \\\"message\\\": \\\"Message\\\",\\n  \\\"sendToDriver\\\": false\\n}\"\nlet postData = parameters.data(using: .utf8)\n\nvar request = URLRequest(url: URL(string: \"https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages\")!,timeoutInterval: Double.infinity)\nrequest.addValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\nrequest.addValue(\"<apikey>\", forHTTPHeaderField: \"apikey\")\n\nrequest.httpMethod = \"POST\"\nrequest.httpBody = postData\n\nlet task = URLSession.shared.dataTask(with: request) { data, response, error in \n  guard let data = data else {\n    print(String(describing: error))\n    semaphore.signal()\n    return\n  }\n  print(String(data: data, encoding: .utf8)!)\n  semaphore.signal()\n}\n\ntask.resume()\nsemaphore.wait()\n",
        "customLabel": ""
      },
      {
        "id": "Kl1IqEwGlVm6-ssIb-PeB",
        "language": "csharp",
        "code": "var client = new RestClient(\"https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages\");\nclient.Timeout = -1;\nvar request = new RestRequest(Method.POST);\nrequest.AddHeader(\"Content-Type\", \"application/json\");\nrequest.AddHeader(\"apikey\", \"<apikey>\");\nvar body = @\"{\" + \"\\n\" +\n@\"  \"\"message\"\": \"\"Message\"\",\" + \"\\n\" +\n@\"  \"\"sendToDriver\"\": false\" + \"\\n\" +\n@\"}\";\nrequest.AddParameter(\"application/json\", body,  ParameterType.RequestBody);\nIRestResponse response = client.Execute(request);\nConsole.WriteLine(response.Content);",
        "customLabel": ""
      },
      {
        "id": "w_08ZFTV8ZPPe-PCt4M-Y",
        "language": "go",
        "code": "package main\n\nimport (\n  \"fmt\"\n  \"strings\"\n  \"net/http\"\n  \"io/ioutil\"\n)\n\nfunc main() {\n\n  url := \"https://api-staging.fourkites.com/api/v1/tracking/%7BtrackingId%7D/messages\"\n  method := \"POST\"\n\n  payload := strings.NewReader(`{\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n}`)\n\n  client := &http.Client {\n  }\n  req, err := http.NewRequest(method, url, payload)\n\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  req.Header.Add(\"Content-Type\", \"application/json\")\n  req.Header.Add(\"apikey\", \"<apikey>\")\n\n  res, err := client.Do(req)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  defer res.Body.Close()\n\n  body, err := ioutil.ReadAll(res.Body)\n  if err != nil {\n    fmt.Println(err)\n    return\n  }\n  fmt.Println(string(body))\n}",
        "customLabel": ""
      },
      {
        "id": "NpNKv5acsHrbmOSyemo8Y",
        "language": "ruby",
        "code": "require \"uri\"\nrequire \"json\"\nrequire \"net/http\"\n\nurl = URI(\"https://api-staging.fourkites.com/api/v1/tracking/{trackingId}/messages\")\n\nhttps = Net::HTTP.new(url.host, url.port)\nhttps.use_ssl = true\n\nrequest = Net::HTTP::Post.new(url)\nrequest[\"Content-Type\"] = \"application/json\"\nrequest[\"apikey\"] = \"<apikey>\"\nrequest.body = JSON.dump({\n  \"message\": \"Message\",\n  \"sendToDriver\": false\n})\n\nresponse = https.request(request)\nputs response.read_body\n",
        "customLabel": ""
      },
      {
        "id": "4HZk_WBjP4pH8IcePEqwH",
        "language": "python",
        "code": "import http.client\nimport json\n\nconn = http.client.HTTPSConnection(\"api-staging.fourkites.com\")\npayload = json.dumps({\n  \"message\": \"Message\",\n  \"sendToDriver\": False\n})\nheaders = {\n  'Content-Type': 'application/json',\n  'apikey': '<apikey>'\n}\nconn.request(\"POST\", \"/api/v1/tracking/{trackingId}/messages\", payload, headers)\nres = conn.getresponse()\ndata = res.read()\nprint(data.decode(\"utf-8\"))",
        "customLabel": ""
      }
    ],
    "selectedLanguageId": "4HZk_WBjP4pH8IcePEqwH"
  },
  "results": {
    "languages": [
      {
        "id": "EM5ZgFDZxEqXzXsamsUPE",
        "language": "200",
        "customLabel": "",
        "code": "{\n    \"statusCode\": 200,\n    \"message\": \"Message posted successfully\",\n    \"messageUuid\": \"e87c35c6-84af-4615-b107-eb21ab3cd528\"\n}"
      },
      {
        "id": "9OJwmX552qhgAnL_7RHM2",
        "language": "400",
        "customLabel": "",
        "code": "{\n    \"statusCode\": 400,\n    \"errors\": [\"The maximum allowed length is 1000 characters. Please shorten your message and try again\"\n    ]\n}"
      }
    ],
    "selectedLanguageId": "9OJwmX552qhgAnL_7RHM2"
  },
  "request": {
    "pathParameters": [],
    "queryParameters": [],
    "headerParameters": [],
    "bodyDataParameters": [
      {
        "name": "message",
        "kind": "required",
        "type": "string",
        "description": "Enter the message/comment you want to be added to the shipment."
      },
      {
        "name": "sendToDriver",
        "kind": "optional",
        "type": "boolean",
        "description": "Set it as true for the message to be visible to the driver using CarrierLink mobile application.",
        "children": []
      }
    ],
    "formDataParameters": []
  },
  "currentNewParameter": {
    "label": "Body Parameter",
    "value": "bodyDataParameters"
  },
  "hasTryItOut": false,
  "autoGeneratedAnchorSlug": "staging",
  "legacyHash": "3YT21C6vgVQA5p3jHhfF-"
}
```
:::

