curl --request POST \
--url https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lineItems": [
{
"id": "<string>",
"quantity": 500
}
],
"fulfillmentId": "<string>",
"tracking": {
"carrier": "<string>",
"code": "<string>"
},
"useDummyTracking": true
}
'import requests
url = "https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments"
payload = {
"lineItems": [
{
"id": "<string>",
"quantity": 500
}
],
"fulfillmentId": "<string>",
"tracking": {
"carrier": "<string>",
"code": "<string>"
},
"useDummyTracking": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lineItems: [{id: '<string>', quantity: 500}],
fulfillmentId: '<string>',
tracking: {carrier: '<string>', code: '<string>'},
useDummyTracking: true
})
};
fetch('https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments', 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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments",
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([
'lineItems' => [
[
'id' => '<string>',
'quantity' => 500
]
],
'fulfillmentId' => '<string>',
'tracking' => [
'carrier' => '<string>',
'code' => '<string>'
],
'useDummyTracking' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments"
payload := strings.NewReader("{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"fulfillment": {
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"lineItems": [
{
"id": "<string>",
"quantity": 500,
"title": "<string>",
"productId": "<string>",
"variantId": "<string>",
"sku": "<string>"
}
],
"trackingHistory": [
{
"message": "<string>",
"status": "<string>",
"datetime": "2023-11-07T05:31:56Z",
"location": {
"city": "<string>",
"state": "<string>",
"country": "<string>",
"postalCode": "<string>"
}
}
],
"trackingCompany": "<string>",
"trackingNumber": "<string>",
"estimatedDeliveryDate": "<string>",
"deliveredAt": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"detail": "<string>",
"instance": "<string>",
"title": "<string>",
"type": "about:blank"
}Create Fulfillment
Create a fulfillment for specific line items within an order, including tracking information. The orderId parameter can be either the external order ID you provided when creating the order, or the internal Redo order ID returned from the create order response.
curl --request POST \
--url https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"lineItems": [
{
"id": "<string>",
"quantity": 500
}
],
"fulfillmentId": "<string>",
"tracking": {
"carrier": "<string>",
"code": "<string>"
},
"useDummyTracking": true
}
'import requests
url = "https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments"
payload = {
"lineItems": [
{
"id": "<string>",
"quantity": 500
}
],
"fulfillmentId": "<string>",
"tracking": {
"carrier": "<string>",
"code": "<string>"
},
"useDummyTracking": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
lineItems: [{id: '<string>', quantity: 500}],
fulfillmentId: '<string>',
tracking: {carrier: '<string>', code: '<string>'},
useDummyTracking: true
})
};
fetch('https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments', 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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments",
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([
'lineItems' => [
[
'id' => '<string>',
'quantity' => 500
]
],
'fulfillmentId' => '<string>',
'tracking' => [
'carrier' => '<string>',
'code' => '<string>'
],
'useDummyTracking' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments"
payload := strings.NewReader("{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getredo.com/v2.2/stores/{storeId}/orders/{orderId}/fulfillments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"lineItems\": [\n {\n \"id\": \"<string>\",\n \"quantity\": 500\n }\n ],\n \"fulfillmentId\": \"<string>\",\n \"tracking\": {\n \"carrier\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"useDummyTracking\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"fulfillment": {
"id": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"lineItems": [
{
"id": "<string>",
"quantity": 500,
"title": "<string>",
"productId": "<string>",
"variantId": "<string>",
"sku": "<string>"
}
],
"trackingHistory": [
{
"message": "<string>",
"status": "<string>",
"datetime": "2023-11-07T05:31:56Z",
"location": {
"city": "<string>",
"state": "<string>",
"country": "<string>",
"postalCode": "<string>"
}
}
],
"trackingCompany": "<string>",
"trackingNumber": "<string>",
"estimatedDeliveryDate": "<string>",
"deliveredAt": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"detail": "<string>",
"instance": "<string>",
"title": "<string>",
"type": "about:blank"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Store ID
"64e5a8a1af49a89df37e4ee7"
Order ID. Can be either the external order ID provided when creating the order, or the internal Redo order ID.
Body
Request body for creating a fulfillment.
List of line items to fulfill.
1Show child attributes
Show child attributes
Unique identifier for the fulfillment. If not provided, will be auto-generated.
Optional tracking information for the shipment.
Show child attributes
Show child attributes
If true, creates a dummy tracker for testing without calling external tracking APIs. Useful for development and testing the fulfillment status update endpoint.
Initial tracking information for the dummy tracker. Only used when useDummyTracking is true. If not specified, defaults to status "pre_transit".
Show child attributes
Show child attributes
Was this page helpful?