const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thanks.io/api/v2/orders/{orderId}/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://api.thanks.io/api/v2/orders/{orderId}/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.thanks.io/api/v2/orders/{orderId}/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": 2668662,
"status": "In Transit",
"delivery_date": null,
"scans": 0,
"failure": null,
"recipient": {
"name": "Tobias Example",
"company": "thanks.io",
"address": "12345 Main Street",
"address2": "Apartment 1",
"city": "Any Town",
"province": "KS",
"postal_code": "12345",
"country": "US",
"email": "tobias@example.com",
"phone": "5555555555",
"custom1": "Unique Info",
"custom2": "For example a product code or customer ID",
"custom3": "",
"custom4": "",
"custom5": "",
"custom6": "",
"custom7": "",
"custom8": "",
"custom9": "",
"custom10": ""
},
"preview": {
"front": "https://cdn.thanks.io/orders/items/proofs/2668662-front.png",
"back": "https://cdn.thanks.io/orders/items/proofs/2668662-back.png",
"pdf": null
},
"created_at": "2025-09-08T16:05:12.000000Z"
},
{
"id": 2668663,
"status": "Delivered",
"delivery_date": "2025-09-15",
"scans": 2,
"failure": null,
"recipient": {
"name": "Current Resident",
"company": null,
"address": "1 Main Street",
"address2": "",
"city": "Fake City",
"province": "FC",
"postal_code": "12345",
"country": "US",
"email": null,
"phone": null,
"custom1": null,
"custom2": null,
"custom3": null,
"custom4": null,
"custom5": null,
"custom6": null,
"custom7": null,
"custom8": null,
"custom9": null,
"custom10": null
},
"preview": {
"front": "https://cdn.thanks.io/orders/items/proofs/2668663-front.png",
"back": "https://cdn.thanks.io/orders/items/proofs/2668663-back.png",
"pdf": null
},
"created_at": "2025-09-08T16:05:12.000000Z"
}
],
"links": {
"first": "https://api.thanks.io/api/v2/orders/42708/items?page=1",
"last": "https://api.thanks.io/api/v2/orders/42708/items?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.thanks.io/api/v2/orders/42708/items",
"per_page": 50,
"to": 2,
"total": 2
}
}{
"status": "failed",
"errors": [
"Unauthorized"
]
}{
"message": "Not Found"
}{
"errors": {
"per_page": [
"The per page field must be between 1 and 100."
]
}
}List Order Items
Return the individual mail pieces that make up an order, one entry per recipient, with that piece’s delivery status, delivery date, QR scan count, failure reason and recipient address. Use this when you need per-piece detail; Track Order returns the same order as aggregate counts instead.
Results are paginated and ordered by item ID, ascending. The order must belong to the authenticated account.
For gift card orders each item also carries the gift card’s brand and amount, plus redeemed_at and invalidated_at so you can see which cards have been claimed. To stop an unredeemed card from being redeemed, use Invalidate Gift Card.
The recipient’s ten custom fields come back alongside the address, so the data you merged into the piece is available with it. Each item also carries a preview with the rendered front and back of that recipient’s piece (and a PDF proof for letters and notecards), so you can see exactly what was mailed to each person. Previews are null until the piece has been rendered, shortly after the order is placed, and are never returned for gift card orders. Message content and per-item pricing are not part of this response; read those from the order itself.
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.thanks.io/api/v2/orders/{orderId}/items', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request GET \
--url https://api.thanks.io/api/v2/orders/{orderId}/items \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.thanks.io/api/v2/orders/{orderId}/items"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": 2668662,
"status": "In Transit",
"delivery_date": null,
"scans": 0,
"failure": null,
"recipient": {
"name": "Tobias Example",
"company": "thanks.io",
"address": "12345 Main Street",
"address2": "Apartment 1",
"city": "Any Town",
"province": "KS",
"postal_code": "12345",
"country": "US",
"email": "tobias@example.com",
"phone": "5555555555",
"custom1": "Unique Info",
"custom2": "For example a product code or customer ID",
"custom3": "",
"custom4": "",
"custom5": "",
"custom6": "",
"custom7": "",
"custom8": "",
"custom9": "",
"custom10": ""
},
"preview": {
"front": "https://cdn.thanks.io/orders/items/proofs/2668662-front.png",
"back": "https://cdn.thanks.io/orders/items/proofs/2668662-back.png",
"pdf": null
},
"created_at": "2025-09-08T16:05:12.000000Z"
},
{
"id": 2668663,
"status": "Delivered",
"delivery_date": "2025-09-15",
"scans": 2,
"failure": null,
"recipient": {
"name": "Current Resident",
"company": null,
"address": "1 Main Street",
"address2": "",
"city": "Fake City",
"province": "FC",
"postal_code": "12345",
"country": "US",
"email": null,
"phone": null,
"custom1": null,
"custom2": null,
"custom3": null,
"custom4": null,
"custom5": null,
"custom6": null,
"custom7": null,
"custom8": null,
"custom9": null,
"custom10": null
},
"preview": {
"front": "https://cdn.thanks.io/orders/items/proofs/2668663-front.png",
"back": "https://cdn.thanks.io/orders/items/proofs/2668663-back.png",
"pdf": null
},
"created_at": "2025-09-08T16:05:12.000000Z"
}
],
"links": {
"first": "https://api.thanks.io/api/v2/orders/42708/items?page=1",
"last": "https://api.thanks.io/api/v2/orders/42708/items?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://api.thanks.io/api/v2/orders/42708/items",
"per_page": 50,
"to": 2,
"total": 2
}
}{
"status": "failed",
"errors": [
"Unauthorized"
]
}{
"message": "Not Found"
}{
"errors": {
"per_page": [
"The per page field must be between 1 and 100."
]
}
}Authorizations
Bearer token authentication using your thanks.io API key
Path Parameters
ID of the order whose items you want to list.
Query Parameters
Number of items to return per page. Must be between 1 and 100.
1 <= x <= 100Page of results to return.
x >= 1Was this page helpful?