Create Fulfillment Event
curl --request POST \
--url https://production-api.puppetvendors.com/fulfillments/events/{lineItemId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"status": "<string>",
"happenedAt": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>",
"message": "<string>"
}
'import requests
url = "https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}"
payload = {
"status": "<string>",
"happenedAt": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>",
"message": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: '<string>',
happenedAt: '<string>',
city: '<string>',
province: '<string>',
country: '<string>',
zip: '<string>',
message: '<string>'
})
};
fetch('https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}', 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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}",
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([
'status' => '<string>',
'happenedAt' => '<string>',
'city' => '<string>',
'province' => '<string>',
'country' => '<string>',
'zip' => '<string>',
'message' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}"
payload := strings.NewReader("{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyFulfillment Events
Create Fulfillment Event
Create a tracking event for a line item’s fulfillment
POST
/
fulfillments
/
events
/
{lineItemId}
Create Fulfillment Event
curl --request POST \
--url https://production-api.puppetvendors.com/fulfillments/events/{lineItemId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"status": "<string>",
"happenedAt": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>",
"message": "<string>"
}
'import requests
url = "https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}"
payload = {
"status": "<string>",
"happenedAt": "<string>",
"city": "<string>",
"province": "<string>",
"country": "<string>",
"zip": "<string>",
"message": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
status: '<string>',
happenedAt: '<string>',
city: '<string>',
province: '<string>',
country: '<string>',
zip: '<string>',
message: '<string>'
})
};
fetch('https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}', 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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}",
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([
'status' => '<string>',
'happenedAt' => '<string>',
'city' => '<string>',
'province' => '<string>',
'country' => '<string>',
'zip' => '<string>',
'message' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}"
payload := strings.NewReader("{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<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://production-api.puppetvendors.com/fulfillments/events/{lineItemId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/fulfillments/events/{lineItemId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"<string>\",\n \"happenedAt\": \"<string>\",\n \"city\": \"<string>\",\n \"province\": \"<string>\",\n \"country\": \"<string>\",\n \"zip\": \"<string>\",\n \"message\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyV2 Preview — This endpoint is part of the V2 API preview. Breaking changes may occur.
Overview
Create a tracking event for a line item’s fulfillment. Vendor tokens can only add events to their own line items. The line item must already be fulfilled.Path Parameters
string
required
Line item ObjectId.
Request Body
string
required
One of
in_transit, out_for_delivery, delivered, failed_delivery.string
ISO 8601 timestamp; defaults to now.
string
string
string
string
string
Response
201
{
"success": true,
"data": {
"_id": "507f1f77bcf86cd799439020",
"lineItemId": "507f1f77bcf86cd799439015",
"status": "in_transit",
"happenedAt": "2026-04-15T08:30:00Z"
}
}
Example
curl -X POST "https://production-api.puppetvendors.com/fulfillments/events/507f1f77bcf86cd799439015" \
-H "x-access-token: YOUR_VENDOR_JWT" \
-H "Content-Type: application/json" \
-d '{
"status": "in_transit",
"city": "Austin",
"province": "TX",
"country": "US",
"message": "Package scanned at origin facility"
}'
More Examples
Mark as delivered with timestampcurl -X POST "https://production-api.puppetvendors.com/fulfillments/events/507f1f77bcf86cd799439015" \
-H "x-access-token: YOUR_VENDOR_JWT" \
-H "Content-Type: application/json" \
-d '{
"status": "delivered",
"message": "Signed by J. Smith",
"occurredAt": "2026-05-19T10:15:00Z",
"location": "New York, NY"
}'
Was this page helpful?
⌘I