{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"d11afc62-6b28-4fd4-a5cd-00c23d5f2ade","name":"HUBBED API","description":"# HUBBED APIs\n\nIntegrate HUBBED location discovery, parcel tracking, out-of-home consignment services, and LogisticsHub workflows. This reference covers authentication, locations, tracking, domestic and international consignment services, event notifications, and previous API versions.\n\n## API groups\n\n| Folder | Requests | Scope |\n| --- | --- | --- |\n| General | 3 | Authentication, location discovery, and tracking. |\n| Drop-off | 1 | Drop-off consignment creation. |\n| OOH | 13 | Inbound/outbound consignments, international consignments, receiver/status updates, labels, PIN resend, external events, and webhooks. |\n| LogisticsHub | 6 | Microhub creation, lookup, status, cancellation, updates, and webhooks. |\n| OOH - Previous Versions | 2 | Inbound v2 and previous shipping operations. |\n\nOperations are grouped by product and workflow. Webhook sections describe event notifications sent by HUBBED to your application.\n\n## Getting started\n\n### 1\\. Obtain your API credentials\n\nYou need a HUBBED account, an API key, and the API base URL for your environment. Contact HUBBED to obtain these details. The examples use {{baseUrl}} to represent your assigned base URL.\n\n### 2\\. Generate an access token\n\nSend your API key to the authentication endpoint:\n\n``` http\nPOST {{baseUrl}}/v1/token\nContent-Type: application/json\n\n ```\n\n``` json\n{\n  \"apikey\": \"{{API_KEY}}\"\n}\n\n ```\n\nA successful response contains your access token:\n\n``` json\n{\n  \"token\": \"<ACCESS_TOKEN>\"\n}\n\n ```\n\n### 3\\. Authenticate subsequent requests\n\nSend the returned token directly in the Authorization header, without a Bearer prefix:\n\n``` http\nAuthorization: <ACCESS_TOKEN>\nContent-Type: application/json\n\n ```\n\nTokens are valid for one hour. Generate a new token using your API key when needed.\n\n### 4\\. Make your first API request\n\nFor example, retrieve the locations available to your account for Australia:\n\n``` http\nGET {{baseUrl}}/v1/locations?countryCode=AU\nAuthorization: <ACCESS_TOKEN>\nContent-Type: application/json\n\n ```\n\nReplace AU with the country code required for your integration. See **General → Get Locations** for available filters and response fields, or **General → Tracking** to retrieve history for an existing consignment or item.\n\n### 5\\. Integrate your workflow\n\nChoose the relevant API group and follow the operation's required fields, batch limits, and state-transition rules. Substitute your own identifiers and contact details for the illustrative values in the examples. Omit optional query parameters when they are not needed.\n\nKeep your API key and access tokens confidential. Use HTTPS for API requests and webhook receivers.\n\n## Values used in request examples\n\n| Variable | Purpose |\n| --- | --- |\n| baseUrl | HUBBED API host/base URL for your environment. |\n| API_KEY | HUBBED API key used by Authentication. |\n| token | Access token returned by Authentication, sent directly in the Authorization header. |\n| countryCode | Country filter for location discovery. |\n| trackingId | Consignment or item identifier for Tracking. |\n| consignmentId | Consignment identifier for status/lookup queries and label paths. |\n| itemId | Item identifier for status/lookup queries, labels, or PIN resend. |\n| referenceNumber | Reference returned by inbound pre-advice, used for an inbound label. |\n| webhookUrl | Full customer-hosted callback URL, including its path. |\n| webhookAuthorization | Optional, initially disabled receiver-test header; configure only after agreeing the authentication method. |\n\nDouble-braced values in examples are placeholders. Replace them with the corresponding values for your environment and request. Request-body identifiers and contact details are illustrative and must be supplied by your application.\n\n## Authentication\n\nHUBBED issues API keys to registered accounts. POST /v1/token accepts an apikey in the JSON body and returns a token. Tokens are valid for **one hour** and expire automatically. Obtain a new token through the same operation when needed; the source does not define a separate refresh-token endpoint.\n\nAuthenticated HUBBED API requests use these headers:\n\n``` http\nAuthorization: {{token}}\nContent-Type: application/json\n\n ```\n\nSend the access token directly, without a Bearer prefix. Your API key is used to obtain a token; it is not the value of the Authorization header on subsequent requests. Webhook receiver authentication is configured separately.\n\n## Request conventions\n\n- Preserve endpoint-specific names and casing. For example, outbound domestic creation uses item\\[\\], international creation uses an item object, and inbound creation uses items\\[\\].\n    \n- Consignment and event batches use JSON arrays, including a batch containing one record.\n    \n- GET requests have no body. Query arrays such as postcodes or products use comma-separated values, not JSON-array syntax.\n    \n- Supply every required query parameter. Omit unused filters rather than sending the literal string null.\n    \n- Field tables retain the source's required flags, conditional rules, length/range constraints, units, enum values, and package-code definitions.\n    \n- The path placeholder {consignment-id} is mapped to the local Postman variable consignmentId. Route prefixes and versions are otherwise preserved, including paths without /hm and the documented double slash in Tracking.\n    \n\n## Response conventions\n\nAuthentication returns a token object. Most API operations use an envelope containing timestamp, statusCode, requestId, message, and endpoint-specific data. Webhook payloads instead use event_type and data.CSVBase64.\n\n| Field | Meaning |\n| --- | --- |\n| timestamp | Response-generation time. Formats differ between source tables and samples. |\n| statusCode | Application status. Source examples use both string and numeric values. |\n| requestId | Request identifier for tracing and support. |\n| message | Human-readable outcome. |\n| data | Operation-specific object or array; consult that request's field table and examples. |\n\nBatch responses may include per-record responseCode and responseMessage. Inspect those results, particularly for HTTP 207 or mixed outcomes; an HTTP label alone does not establish that every record succeeded. The source also labels some Invalid API Key examples as HTTP 200. Those examples are retained and called out on the relevant requests rather than silently changing server behaviour.\n\n## HTTP status reference\n\n| Status Code | Description |\n| --- | --- |\n| 200 | OK - The request was successful. |\n| 201 | Created - The request was successful and a resource was created. |\n| 202 | Accepted - The request has been accepted for processing. |\n| 204 | No Content - The request was successful but there is no representation to return (that is, the response is empty). |\n| 207 | Partially Successful - The request was partially succsessful. |\n| 208 | Already Reported - The request was successful but there is a record already available. |\n| 400 | Bad Request - The request could not be understood or was missing required parameters. |\n| 401 | Unauthorized - Authentication failed or user does not have permissions for the requested operation. |\n| 403 | Forbidden - Access denied. |\n| 404 | Not Found - Resource was not found. |\n| 405 | Method Not Allowed - Requested method is not supported for the specified resource. |\n| 413 | Request Entity Too Large - Request is larger than expected. |\n| 429 | Too Many Requests - Exceeded LogisticsHub API limits. When the limit is reached, your application should stop making requests. |\n| 500 | Internal Server Error - LogisticsHub has encountered an error. |\n\nThe table reproduces the source's general status meanings. It does not assert that every operation returns every listed status. Saved examples use the HTTP status attached to each example in the source.\n\n## Batch limits and rate limits\n\n| Operation | Maximum consignments per request | Additional rule |\n| --- | --- | --- |\n| Drop-off Consignments | 10 | One item per consignment. |\n| OOH / Inbound Consignments (v3) | 50 | Follow the serviceType and receiver requirements. |\n| OOH / Click & Collect Freight | 50 | Follow the required sender and item measurements. |\n| OOH / Outbound Consignments | 10 | One item per consignment. |\n| OOH / Outbound International Consignments | 10 | One item per consignment; customs fields and conditional pickup details apply. |\n| LogisticsHub / Create Consignments | 100 | Microhub records. |\n| Previous Versions / Inbound Consignments (v2) | 50 | Previous-version contract. |\n| Previous Versions / Shipping - Create Consignments | 50 | Previous-version contract. |\n\nThe source specifies **5 requests per second** for Create Inbound Consignments and Create Outbound Consignments. It does not define separate quotas for General, international creation, Click & Collect Freight, update APIs, LogisticsHub, or webhook delivery, nor does it fully specify the scope of those limits across versions. Do not extrapolate an undocumented quota.\n\nWhen a rate limit is exceeded, the source describes HTTP 429 and advises retrying after a few minutes. It does not specify a precise backoff algorithm, Retry-After contract, or idempotency behaviour. As integration guidance, investigate per-record outcomes before retrying a modifying batch to avoid assuming that no records were processed.\n\n## Typical integration flows\n\n| Goal | Suggested sequence |\n| --- | --- |\n| Discover a location | Authentication → General / Get Locations. |\n| Create and monitor inbound parcels | Authentication → Get Locations → OOH / Inbound Consignments → Inbound Label when needed → General / Tracking. |\n| Create an outbound or international parcel | Authentication → appropriate OOH creation operation → Outbound label generation with its required item query → Tracking. |\n| Manage LogisticsHub parcels | Authentication → LogisticsHub / Create Consignments → Get Status or Get Consignment → update/cancel when required. |\n| Receive HUBBED notifications | Configure your customer receiver and agreed authentication; implement the relevant OOH or LogisticsHub event and CSV definitions. |\n\nThese sequences are onboarding guidance, not additional ordering guarantees. Each operation's requirements and state-transition restrictions remain authoritative.\n\n## Webhook integration\n\nHUBBED publishes events to a secure customer notification URL. The source requires username/password protection but does not specify the credential transport. Set webhookUrl to your complete receiver URL and configure the authentication agreed with HUBBED. The optional webhookAuthorization header is disabled by default; the API token is never inherited by these examples.\n\nDecode data.CSVBase64 to obtain the CSV columns defined for that event. The source describes webhook times as UTC in MM/DD/YYYY HH:mm:ss format. Event names and their casing are retained exactly, including apparent spelling discrepancies.\n\nThe LogisticsHub HTML labels five callback payloads as Response 200. They are preserved as saved source examples and as the corresponding original request bodies; they are not treated as a confirmed acknowledgement-body contract. The OOH HTML supplies a callback request without a receiver response. Retry delivery, signing, duplicate-event handling, ordering, and acknowledgement requirements need agreement with HUBBED because the source does not define them.\n\n## Compatibility guidance\n\nRequest descriptions identify differences between documented field tables and examples, including field casing, numeric representations, route spelling, and error-status labels. Review the relevant compatibility notes before enforcing a strict response schema or normalizing a route.\n\nPrevious-version operations are documented separately. Confirm version support and migration requirements with HUBBED before choosing a previous-version endpoint for a new integration.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"9596423","team":593649,"collectionId":"d11afc62-6b28-4fd4-a5cd-00c23d5f2ade","publishedId":"2sBYB2qSr6","public":true,"publicUrl":"https://docs.hubbedglobal.com","privateUrl":"https://go.postman.co/documentation/9596423-d11afc62-6b28-4fd4-a5cd-00c23d5f2ade","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.12.6","publishDate":"2026-09-24T04:38:14.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":""},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/1084b52800775ab9ad1aaa8735202a04e2e6b4cf2b5659e5886bf8f82ec53032","favicon":"https://hubbedglobal.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://docs.hubbedglobal.com/view/metadata/2sBYB2qSr6"}