
| Document | Partner API Integration Guide |
| Product | Octojan Logistics |
| Integration | Piyovi LTL Sandbox |
| Version | 2.0 |
| Status | Released |
| Last Updated | July 2026 |
| Audience | Partner Developers |
| Classification | Partner Confidential |
| Version | Date | Summary of Changes |
|---|---|---|
| 1.0 | March 2026 | Initial release. Documented Rate API, Create Shipment, Tracking, and Bill of Lading (metadata) endpoints. |
| 2.0 | July 2026 | Added GET /piyovi_getBOLDocument (Carrier BOL PDF) and GET /piyovi_getShippingLabel (Carrier Shipping Label PDF). Restructured BOL section into three clearly separated sections. Updated Overview, Endpoint Summary, Integration Workflow, and Testing. All v1.0 endpoints preserved without modification. |
Version 2.0 introduces additive carrier document retrieval. Partners can now programmatically retrieve print-ready PDF documents for each shipment.
| Endpoint | Method | Purpose |
|---|---|---|
| /piyovi_getBOLDocument | GET | Retrieves the Carrier Bill of Lading as a PDF. Returns a persistent URL. |
| /piyovi_getShippingLabel | GET | Retrieves the Carrier Shipping Label as a PDF (one page per piece). Returns a persistent URL. |
The former Bill of Lading section is now three clearly separated sections:
The Octojan Piyovi LTL API enables authorized integration partners to programmatically interact with the Octojan Logistics LTL shipping platform. Through a single authenticated API surface, partners can:
All endpoints are authenticated via a partner-specific API key and operate over HTTPS. All pricing is in Canadian Dollars (CAD).
All API requests (except the public Tracking endpoint) require a partner-specific API key, provided by Octojan during onboarding:
| Property | Description |
|---|---|
| Required | Yes — for all endpoints except Track Shipment (public) |
| Scope | Partner-scoped: restricts access to shipments owned by the partner's linked company or customer |
| Rate Limit | Default 1,000 requests per hour (configurable per partner) |
Endpoint paths are appended to the base URL. The sandbox base URL is provided during partner onboarding; the production base URL is issued upon certification.
Endpoints marked (v2.0) are new. All others are unchanged from Version 1.0.
| # | Endpoint | Method | Auth | Description |
|---|---|---|---|---|
| 1 | /piyovi_getQuote | POST | Yes | Request an LTL rate quote. |
| 2 | /piyovi_createShipment | POST | Yes | Create (book) an LTL shipment. Returns a tracking number. |
| 3 | /getPublicTracking | POST | No | Retrieve public tracking status and event history. |
| 4 | /piyovi_getBOL | GET | Yes | Retrieve BOL metadata in JSON format. |
| 5 | /piyovi_getBOLDocument (v2.0) | GET | Yes | Retrieve Carrier BOL PDF. Returns a persistent PDF URL. |
| 6 | /piyovi_getShippingLabel (v2.0) | GET | Yes | Retrieve Carrier Shipping Label PDF. Returns a persistent PDF URL. |
Request Body:
Response (200 OK):
For out-of-network lanes, the API returns mode: "PARTNER_PRICING" indicating partner carrier pricing is required. Quotes are valid for 5 days.
Accepts the same body as the Rate API, plus the following optional fields:
| Field | Description |
|---|---|
origin.company_name | Origin company name (BOL and label display) |
origin.street, contact_name, phone, email | Origin contact details (BOL display) |
destination.company_name | Destination company name (BOL and label display) |
destination.street, contact_name, phone, email | Destination contact details (BOL display) |
pickup_date | Requested pickup date (YYYY-MM-DD). Defaults to current date. |
special_instructions | Free-text handling instructions (BOL display) |
reference.customer_reference | PO or reference number (BOL display as "PO Number") |
Response (200 OK):
Returns sanitized public tracking information. No authentication required. No sensitive fields (email, phone, full address, pricing) are exposed.
Request Body:
Response (200 OK):
Returns shipment and Bill of Lading metadata in JSON format. This endpoint returns metadata only — it does not return a PDF. For the PDF, use Section 9.
— or —
shipment_id accepts the internal ID or the tracking number. tracking_number may also be used explicitly.Response (200 OK):
bol_format: "json_metadata" confirms this response is structured data, not a PDF. Use GET /piyovi_getBOLDocument for the PDF.Returns the Carrier Bill of Lading as a print-ready PDF. The PDF includes a QR code, shipper/consignee blocks, commodity table, special instructions, hazmat table (if applicable), and signature blocks.
Response (200 OK):
Returns the Carrier Shipping Label as a print-ready PDF. Generates one label page per piece, with QR code, Code128 barcode, FROM/TO address blocks, weight/piece count, and destination city banner.
Response (200 OK):
The sandbox is a full-featured replica of production using test data and sandbox-scoped API keys. Shipments created in sandbox are flagged as test shipments. Generated PDFs are real documents stored in sandbox storage.
| # | Scenario | Expected Result |
|---|---|---|
| 1 | Rate Quote — Standard Urban Lane | Success with mode: "ZONAL_LTL", lane, and full charge breakdown |
| 2 | Rate Quote — Out-of-Network Lane | Success with mode: "PARTNER_PRICING" and reason: "OUT_OF_NETWORK_LANE" |
| 3 | Create Shipment — Full Booking | Success with shipment_id, tracking_number (OJYYMMDD-NNNN), and status: "booked" |
| 4 | Track Shipment | Success with status, origin/destination city, and tracking_updates. No sensitive fields exposed. |
| 5 | Retrieve BOL Metadata | Success with full bol object and metadata.bol_format: "json_metadata" |
| 8 | Authentication Error Handling | Verify MISSING_API_KEY (401), INVALID_API_KEY (401), FORBIDDEN (403), NOT_FOUND (404) |
| # | Scenario | Expected Result |
|---|---|---|
| 6 | Retrieve Carrier BOL PDF | Success with bol_pdf_url. Download PDF and verify: Octojan header, tracking number, shipper/consignee blocks, commodity table, QR code, signature blocks. Call twice — verify same URL returned (cache). |
| 7 | Retrieve Carrier Shipping Label PDF | Success with label_pdf_url. Download PDF and verify: page count = total pieces, "X of Y" counter, QR code, barcode, FROM/TO blocks, weight/pieces, destination banner. Multi-piece test: 2 skids + 3 boxes = 5 pages. Call twice — verify same URL (cache). |
| Error Code | HTTP | Description |
|---|---|---|
MISSING_API_KEY | 401 | x-api-key header not provided. |
INVALID_API_KEY | 401 | API key does not match any registered partner. |
PARTNER_INACTIVE | 403 | Partner integration has been deactivated. |
FORBIDDEN | 403 | Shipment does not belong to partner's scope. |
VALIDATION_ERROR | 400 | Required fields missing or malformed. |
NOT_FOUND | 404 | No shipment found for the given ID or tracking number. |
UPLOAD_FAILED | 500 | Generated PDF could not be stored. Retry. |
INTERNAL_ERROR | 500 | Unexpected internal error. Contact support if persistent. |
| Contact | Details |
|---|---|
| Support Email | orders.octojan@yahoo.com |
| Website | https://octojan.com |
| Phone | (647) 702-9405 |
| Hours | Monday – Friday, 8:00 AM – 6:00 PM Eastern Time |
Octojan is committed to maintaining backward compatibility. Breaking changes will be communicated to partners in advance. Additive changes may be introduced without prior notice and will be documented in the Revision History.