Courier Manifest
The Courier Manifest API enables courier partners to submit manifest data for customs processing. Supports single uploads, chunked uploads for large files (25MB+), and complete pipeline monitoring with 4-stage processing.
All endpoints require authentication via Bearer token. For JSON webhook API, always use default as the courier slug.
Base Path: /api/v1/couriers
Courier codes
| Code | Use For | Description |
|---|---|---|
default | JSON API | Standard JSON webhook (recommended) |
golucky | Excel only | GoLucky Excel file conversion |
bfe | Excel only | BFE Excel file conversion |
360lion | Excel only | 360Lion Excel file conversion |
Submit manifest
Submit a courier manifest for customs processing. Supports both single and chunked uploads.
Path parameters
- Name
courier- Type
- string
- Description
Courier code. Use
defaultfor JSON API.
Headers
- Name
Idempotency-Key- Type
- string
- Description
UUID to prevent duplicate processing.
- Name
X-Signature- Type
- string
- Description
HMAC SHA256 signature:
sha256={hex_signature}.
Required attributes
- Name
mawbNumber- Type
- string
- Description
Master Air Waybill number. Max 50 characters.
- Name
items- Type
- array
- Description
Array of manifest items (min 1 item).
Optional attributes
- Name
manifestNumber- Type
- string
- Description
Manifest identifier. Defaults to mawbNumber.
- Name
airline- Type
- string
- Description
Airline code (e.g., "AA", "DHL").
- Name
flightNumber- Type
- string
- Description
Flight number.
- Name
originAirport- Type
- string
- Description
Origin airport IATA code.
Item attributes
- Name
trackingNumber- Type
- string
- Description
Package tracking number.
- Name
originCountry- Type
- string
- Description
2-letter ISO country code.
- Name
consigneeName- Type
- string
- Description
Recipient full name.
- Name
consigneeIdNumber- Type
- string
- Description
Tax ID (CUIT/CUIL/DNI).
- Name
consigneeAddress- Type
- string
- Description
Street address.
- Name
itemName- Type
- string
- Description
Product name/title.
- Name
hsCode- Type
- string
- Description
HS/NCM code.
- Name
fobValueUsd- Type
- number
- Description
FOB value in USD.
- Name
totalWeightKg- Type
- number
- Description
Weight in kilograms.
Request
curl -X POST https://app.price2b.com/api/v1/couriers/default/manifests/webhook \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"mawbNumber": "071-57898304",
"manifestNumber": "071-57898304",
"airline": "AA",
"flightNumber": "AA1234",
"originAirport": "MIA",
"items": [
{
"trackingNumber": "071-57898304-001",
"originCountry": "CN",
"consigneeName": "Juan Pérez",
"consigneeIdNumber": "20-12345678-9",
"consigneeAddress": "Av. Corrientes 1234",
"itemName": "Wireless Headphones",
"hsCode": "8518.30.00",
"fobValueUsd": 49.99,
"totalWeightKg": 0.5
}
]
}'
Response (202 Accepted)
{
"success": true,
"status": "queued",
"message": "Manifest queued for processing",
"idempotency_key": "7b2a58e4-8c1c-46d9-9f28-b5f1b1c4a7aa",
"tracking": {
"mawb_number": "071-57898304",
"items_count": 1,
"timestamp": "2026-01-14T12:00:00Z"
}
}
Get webhook status
Check the processing status of a webhook request using its idempotency key.
Path parameters
- Name
courier- Type
- string
- Description
Courier code.
- Name
idempotencyKey- Type
- string
- Description
The idempotency key from webhook submission.
Request
curl https://app.price2b.com/api/v1/couriers/default/webhook/7b2a58e4-8c1c-46d9-9f28-b5f1b1c4a7aa/status \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"status": "queued",
"idempotency_key": "7b2a58e4-8c1c-46d9-9f28-b5f1b1c4a7aa",
"created_at": "2026-01-24T10:30:00",
"updated_at": "2026-01-24T10:30:05"
}
List manifests
Get a paginated list of all manifests for the authenticated user with processing progress.
Query parameters
- Name
per_page- Type
- integer
- Description
Items per page (default: 15).
- Name
status- Type
- string
- Description
Filter by status:
pending,processing,completed.
- Name
date_from- Type
- date
- Description
Filter by date from (Y-m-d).
- Name
date_to- Type
- date
- Description
Filter by date to (Y-m-d).
Request
curl -G https://app.price2b.com/api/v1/couriers/manifests \
-H "Authorization: Bearer {token}" \
-d per_page=20 \
-d status=completed
Response
{
"success": true,
"data": [
{
"manifest_id": "071-57898304",
"status": "completed",
"progress": 100,
"summary": {
"total_awbs": 10,
"total_articles": 25,
"personal_items": 15,
"commercial_items": 8,
"prohibited_items": 2,
"amount_to_pay": 1250.50,
"currency": "USD"
}
}
],
"meta": {
"current_page": 1,
"total": 95,
"per_page": 20
}
}
Get pipeline status
Get detailed 4-stage pipeline processing status for a manifest.
Pipeline stages
| Stage | Weight | Description |
|---|---|---|
| Classification | 25% | Regime determination (Personal/Commercial/Prohibited) |
| Web Services | 25% | CUIT validation, quota checks |
| OpenAI (NCM) | 25% | AI-powered NCM code classification |
| Calculations | 25% | Customs duties and taxes calculation |
Request
curl https://app.price2b.com/api/v1/couriers/manifests/071-57898304/pipeline-status \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"data": {
"manifest_id": "071-57898304",
"status": "processing",
"overall_progress": 75,
"pipeline_steps": {
"classification": {
"status": "completed",
"progress": 100
},
"webservices": {
"status": "completed",
"progress": 100
},
"openai": {
"status": "completed",
"progress": 100
},
"calculations": {
"status": "processing",
"progress": 50
}
},
"summary": {
"total_products": 25,
"regime_breakdown": {
"personal": 15,
"commercial": 8,
"prohibited": 2
},
"amount_to_pay": 625.25
}
}
}
Download results
Download processed manifest results. Only available when processing is 100% complete.
Query parameters
- Name
format- Type
- string
- Description
Output format:
json(default),csv,excel,xlsx.
Request
curl https://app.price2b.com/api/v1/couriers/manifests/071-57898304/download \
-H "Authorization: Bearer {token}" \
-o results.json
Response (JSON)
{
"success": true,
"data": {
"manifest": "071-57898304",
"total_products": 25,
"products": [
{
"awb_number": "AWB-001",
"tracking_number": "071-57898304-001",
"ncm_code": "8518.30.00",
"regime": "P",
"cif_value": 59.99,
"ddp_value": 79.99,
"customs_duty": 12.00,
"customs_channel": "V"
}
]
}
}
Batch status check
Check the processing status of multiple manifests in a single request (max 50).
Required attributes
- Name
manifests- Type
- array
- Description
Array of manifest IDs to check (1-50 items).
Request
curl -X POST https://app.price2b.com/api/v1/couriers/manifests/batch-status \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"manifests": ["071-57898304", "071-57898305", "071-57898306"]
}'
Response
{
"success": true,
"data": [
{
"manifest_id": "071-57898304",
"status": "completed",
"progress": 100,
"can_download": true
},
{
"manifest_id": "071-57898305",
"status": "processing",
"progress": 75,
"can_download": false
}
]
}
Chunked upload - Submit
Submit a manifest chunk for large files (25MB+). Include _chunk_metadata to enable chunked upload mode.
Chunk metadata
- Name
chunk_number- Type
- integer
- Description
Current chunk number (1-indexed).
- Name
total_chunks- Type
- integer
- Description
Total number of chunks (max: 50).
- Name
base_idempotency_key- Type
- string
- Description
UUID to group chunks from same manifest.
- Name
total_items- Type
- integer
- Description
Total items across all chunks.
Request
curl -X POST https://app.price2b.com/api/v1/couriers/default/manifests/webhook \
-H "Authorization: Bearer {token}" \
-H "Idempotency-Key: 550e8400-chunk-1-of-25" \
-d '{
"mawbNumber": "071-57898304",
"items": [...],
"_chunk_metadata": {
"chunk_number": 1,
"total_chunks": 25,
"total_items": 2500,
"base_idempotency_key": "550e8400-e29b-41d4-a716-446655440000"
}
}'
Response
{
"success": true,
"status": "receiving",
"message": "Chunk received successfully",
"chunk_number": 1,
"total_chunks": 25,
"progress": {
"received_chunks": 1,
"missing_chunks": [2, 3, 4, 5],
"percentage": 4,
"is_complete": false
}
}
Chunked upload - Status
Check the status of a chunked upload, including received and missing chunks.
Request
curl https://app.price2b.com/api/v1/couriers/manifests/chunks/550e8400-e29b-41d4-a716-446655440000/status \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"data": {
"manifest_number": "071-57898304",
"status": "receiving",
"progress": {
"total_chunks": 25,
"received_chunks": 20,
"missing_chunks": [3, 15, 18, 22, 24],
"percentage": 80
}
}
}
Chunked upload - Retry
Get a list of missing chunks to retry.
Request
curl -X POST https://app.price2b.com/api/v1/couriers/manifests/chunks/550e8400-e29b-41d4-a716-446655440000/retry-missing \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"message": "Please resend the following chunks",
"data": {
"manifest_number": "071-57898304",
"missing_chunks": [3, 15, 18, 22, 24],
"missing_count": 5
}
}
Alternative Manifest API
An alternative REST API for manifest management, suitable for simpler integrations.
Base Path: /api/v1/manifests
List manifests (alt)
Get a paginated list of manifests using the alternative API.
Request
curl -G https://app.price2b.com/api/v1/manifests \
-H "Authorization: Bearer {token}" \
-d per_page=20
Response
{
"success": true,
"data": [
{
"manifest_id": "MAN-20260124-001",
"total_products": 25,
"processing_status": "completed"
}
],
"meta": {
"current_page": 1,
"total": 45
}
}
Upload manifest (alt)
Upload a manifest with up to 1000 products.
Product attributes
- Name
awb_number- Type
- string
- Description
Air Waybill number.
- Name
consignee- Type
- string
- Description
Consignee full name.
- Name
tax_id- Type
- string
- Description
Tax ID (CUIT).
- Name
product_description- Type
- string
- Description
Product description.
- Name
quantity- Type
- integer
- Description
Quantity.
- Name
unit_value- Type
- number
- Description
Unit value in currency.
- Name
country_of_manufacture- Type
- string
- Description
2-letter ISO country code.
Request
curl -X POST https://app.price2b.com/api/v1/manifests \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"manifest": "MAN-20260124-001",
"products": [
{
"awb_number": "AWB123456",
"consignee": "Juan Pérez",
"tax_id": "20-12345678-9",
"product_description": "Wireless Headphones",
"quantity": 2,
"unit_value": 49.99,
"country_of_manufacture": "CN"
}
]
}'
Response (201)
{
"success": true,
"message": "Manifest uploaded successfully",
"data": {
"manifest_id": "MAN-20260124-001",
"total_products": 1,
"processing_status": "pending"
}
}
Get manifest details (alt)
Get complete manifest details including all products with NCM codes and customs calculations.
Request
curl https://app.price2b.com/api/v1/manifests/MAN-20260124-001 \
-H "Authorization: Bearer {token}"
Response
{
"success": true,
"data": {
"manifest": "MAN-20260124-001",
"products": [
{
"awb_number": "AWB123456",
"ncm_code": "8518.30.00",
"cif_value": 105.48,
"ddp_value": 186.12,
"customs_duty": 35.50,
"quota": {
"tax_id": "20-12345678-9",
"quota": 3
}
}
]
}
}
Tax ID / CUIT Quota API
Check and manage tax ID (CUIT) quota for customs imports.
Check CUIT quota
Check the current quota status for a tax ID (CUIT). Returns remaining purchases allowed (0-5).
Required attributes
- Name
tax_id- Type
- string
- Description
Tax ID (CUIT). Accepts: 20-12345678-9 or 20123456789.
Optional attributes
- Name
awb_number- Type
- string
- Description
AWB number to check specific record quota.
Request
curl -X POST https://app.price2b.com/api/v1/couriers/quota/check \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"tax_id": "20-12345678-9"}'
Response
{
"success": true,
"data": {
"tax_id": "20123456789",
"tax_id_formatted": "20-12345678-9",
"current_quota": {
"quota": 3,
"status": 200,
"domicilio": "S"
},
"historical_records_count": 2
}
}
Update client info
Update the tax ID (CUIT) for a consignee record.
Required attributes
- Name
awb_number- Type
- string
- Description
AWB number to update.
- Name
tax_id- Type
- string
- Description
New tax ID (CUIT).
Request
curl -X PUT https://app.price2b.com/api/v1/couriers/client-info \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"awb_number": "AWB123456", "tax_id": "20-98765432-1"}'
Response
{
"success": true,
"message": "Client info updated successfully",
"data": {
"awb_number": "AWB123456",
"tax_id_formatted": "20-98765432-1"
}
}
Check editability
Check if a record's tax ID can be modified.
Request
curl -X POST https://app.price2b.com/api/v1/couriers/client-info/can-edit \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"awb_number": "AWB123456"}'
Response
{
"success": true,
"data": {
"awb_number": "AWB123456",
"can_edit": true,
"current_tax_id": "20-12345678-9",
"status": "pending"
}
}
S3 Storage API
Direct file upload to S3 for large manifest files (up to 40MB).
Upload to S3
Upload manifest files (JSON or Excel) directly to S3 storage.
Required attributes
- Name
file- Type
- file
- Description
Manifest file. Max 40MB. Allowed: json, xlsx, xls, xlsm.
- Name
courier_code- Type
- string
- Description
Carrier code: OCA, DHL, FEDEX, UPS, etc.
Optional attributes
- Name
manifest_name- Type
- string
- Description
Custom name for the manifest.
- Name
description- Type
- string
- Description
Description or notes.
Request
curl -X POST https://app.price2b.com/api/v1/manifests/storage/upload \
-H "Authorization: Bearer {token}" \
-F "file=@daily-manifest.xlsx" \
-F "courier_code=DHL" \
-F "manifest_name=Daily-Shipments-2026-01-24"
Response (201)
{
"success": true,
"message": "Manifest uploaded successfully",
"data": {
"file_name": "DHL_daily-shipments_2026-01-24.xlsx",
"file_url": "https://storage.price2b.com/manifests/DHL/...",
"file_size": {
"bytes": 2458624,
"human": "2.34 MB"
},
"courier_code": "DHL"
}
}
List S3 manifests
List all manifest files uploaded to S3 storage.
Query parameters
- Name
courier_code- Type
- string
- Description
Filter by carrier code.
- Name
per_page- Type
- integer
- Description
Items per page (default: 15).
Request
curl -G https://app.price2b.com/api/v1/manifests/storage/list \
-H "Authorization: Bearer {token}" \
-d courier_code=DHL
Response
{
"success": true,
"data": [
{
"file_name": "DHL_daily-shipments_2026-01-24.xlsx",
"file_url": "https://storage.price2b.com/...",
"file_size": {
"bytes": 2458624,
"human": "2.34 MB"
},
"courier_code": "DHL",
"uploaded_at": "2026-01-24T15:45:30+00:00"
}
]
}
Status values
| Status | Progress | Description |
|---|---|---|
pending | 0% | Uploaded, not started |
processing | 1-99% | Pipeline running |
completed | 100% | All processing complete |
Customs channels
| Code | Name | Description |
|---|---|---|
V | Verde | Green - automatic clearance |
A | Azul | Blue - document review |
RO | Rojo | Red - physical inspection |
Rate limits
| Endpoint | Limit |
|---|---|
| Webhook submissions | 60/min |
| Status checks | 120/min |
| Downloads | 30/min |