Send legacy message
POST {{baseUrl}}/messages
Sends a legacy 1:1 message. Source: modules/messages/postMessageController.ts. As a runner, the to field is inferred server-side (your last message thread, falling back to an admin) — you don’t need to pass it.
Response: 200 with { "data": <created MessageSQL row> }.
Request body
Section titled “Request body”{ "message": "On my way!"}Examples
Section titled “Examples”curl --request POST 'https://api.firstdelivery.com/api/messages' \ --header 'Content-Type: application/json' \ --data '{ "message": "On my way!"}'const response = await fetch("https://api.firstdelivery.com/api/messages", { "method": "POST", "headers": { "Content-Type": "application/json" }, "body": "{\n \"message\": \"On my way!\"\n}"})const data = await response.json()import requests
response = requests.request( "POST", "https://api.firstdelivery.com/api/messages", headers={ 'Content-Type': 'application/json'}, data="{\n \"message\": \"On my way!\"\n}",)response.raise_for_status()Saved responses
Section titled “Saved responses”{ "data": { "id": "9a8b7c6d-5555-4a2b-9c3d-4e5f6a7b8c9d", "from": "8e17d5db-da6e-453c-966f-bfc72c125094", "to": "1f2e3d4c-dispatch-uid", "message": "On my way!", "created_at": "2026-06-22T14:05:00.000Z", "seen_at": null, "territory_id": "b2b1c1a0-1111-4a2b-9c3d-4e5f6a7b8c9d" }}
