Update Fulfillment
curl --request PUT \
--url https://production-api.puppetvendors.com/fulfillments/{fulfillmentId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"trackingNumber": "<string>",
"shippingCarrier": "<string>",
"trackingUrl": "<string>",
"notifyCustomer": true
}
'import requests
url = "https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}"
payload = {
"trackingNumber": "<string>",
"shippingCarrier": "<string>",
"trackingUrl": "<string>",
"notifyCustomer": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
trackingNumber: '<string>',
shippingCarrier: '<string>',
trackingUrl: '<string>',
notifyCustomer: true
})
};
fetch('https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}', 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/{fulfillmentId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'trackingNumber' => '<string>',
'shippingCarrier' => '<string>',
'trackingUrl' => '<string>',
'notifyCustomer' => true
]),
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/{fulfillmentId}"
payload := strings.NewReader("{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}"
response = http.request(request)
puts response.read_bodyFulfillments
Update Fulfillment
Update fulfillment tracking information as a vendor
PUT
/
fulfillments
/
{fulfillmentId}
Update Fulfillment
curl --request PUT \
--url https://production-api.puppetvendors.com/fulfillments/{fulfillmentId} \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"trackingNumber": "<string>",
"shippingCarrier": "<string>",
"trackingUrl": "<string>",
"notifyCustomer": true
}
'import requests
url = "https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}"
payload = {
"trackingNumber": "<string>",
"shippingCarrier": "<string>",
"trackingUrl": "<string>",
"notifyCustomer": True
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
trackingNumber: '<string>',
shippingCarrier: '<string>',
trackingUrl: '<string>',
notifyCustomer: true
})
};
fetch('https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}', 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/{fulfillmentId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'trackingNumber' => '<string>',
'shippingCarrier' => '<string>',
'trackingUrl' => '<string>',
'notifyCustomer' => true
]),
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/{fulfillmentId}"
payload := strings.NewReader("{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.puppetvendors.com/fulfillments/{fulfillmentId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trackingNumber\": \"<string>\",\n \"shippingCarrier\": \"<string>\",\n \"trackingUrl\": \"<string>\",\n \"notifyCustomer\": true\n}"
response = http.request(request)
puts response.read_bodyV2 Alpha — This endpoint is part of the V2 API preview. Breaking changes may occur.
Overview
Update tracking information on an existing fulfillment belonging to the authenticated vendor. This syncs the updated tracking to Shopify and optionally re-notifies the customer. Only fulfillments for the vendor’s own line items can be updated.Vendor Token Required — This endpoint requires a vendor-scoped JWT token. Merchant tokens will receive a 403 error.
Use Cases
- Correct tracking numbers — Fix a mistyped tracking number after fulfillment
- Update carrier — Change the shipping carrier if initially set incorrectly
- Re-notify customers — Resend shipping notifications with corrected info
Path Parameters
string
required
The line item ID (fulfillment is stored on the line item record).
Request Body
All fields are optional. Only provided fields will be updated.string
Updated tracking number.
string
Updated shipping carrier name.
string
Updated tracking URL. Must be a valid URL.
boolean
Whether to send a notification email to the customer with the updated tracking.
Response
200
{
"success": true,
"data": {
"message": "Fulfillment updated successfully"
}
}
Error Response
404
{
"success": false,
"error": {
"message": "Fulfillment not found",
"code": "NOT_FOUND"
}
}
Example
curl -X PUT "https://production-api.puppetvendors.com/fulfillments/507f1f77bcf86cd799439015" \
-H "Content-Type: application/json" \
-H "x-access-token: YOUR_VENDOR_JWT_TOKEN" \
-d '{
"trackingNumber": "1Z999AA10123456784",
"shippingCarrier": "UPS",
"trackingUrl": "https://www.ups.com/track?tracknum=1Z999AA10123456784",
"notifyCustomer": true
}'
More Examples
Update tracking info after shippingcurl -X PUT "https://production-api.puppetvendors.com/fulfillments/507f1f77bcf86cd799439015" \
-H "Content-Type: application/json" \
-H "x-access-token: YOUR_VENDOR_JWT_TOKEN" \
-d '{
"trackingNumber": "1Z999AA10123456784",
"shippingCarrier": "UPS",
"trackingUrl": "https://www.ups.com/track?tracknum=1Z999AA10123456784",
"notifyCustomer": true
}'
Was this page helpful?
⌘I