Pinnacle
Test Connection Credentials
Validates a set of Pinnacle (Metropolitan Warehouse & Delivery) credentials without saving a connection. A token is granted with the Order API credentials, then the Tracking API key is probed.
Get Connection Options
Returns the allowed values (with labels) for the connection and settings fields: environments, pickup types, item types, forward delivery types, shipped event codes, declared-value rules, phone fallbacks, order statuses and cancellation refusal codes. Use these values when creating or updating an instance.
Create Integration Instance
Connects a Pinnacle account. The credentials are tested first (same checks as Test Connection Credentials); on success the instance is saved, an inbound webhook key is generated, and an initial order sync is queued in the background (from integration_settings.sync_start_date when set, otherwise since the last sync). Only one Pinnacle connection is allowed per account.
Get Integration Instance
Returns one Pinnacle integration instance: connection details (secrets redacted to presence flags), dispatch settings, the webhook URL + last 4 of the inbound key, connection health (connection_state is connected, token_expired, not_verified or incomplete; mreq_last_24h counts Pinnacle rate-limit rejections in the last 24 hours) and the last order sync time.
Update Integration Instance
Partially updates an instance (PATCH is also accepted). Every key is optional and each group is merged over the current values, so you can send only the fields you want to change. A blank or omitted password / tracking_api_key means 'unchanged'. Changing the environment, customer number, username, password or tracking key re-runs the connection test before saving; a failed test returns 422 and nothing is saved.
Delete Integration Instance
Disconnects Pinnacle. Warehouses that dispatched to this instance are switched back to manual fulfillment, then the instance and all of its stored Pinnacle orders, shipments, tracking events, webhook events and delivery-type mappings are deleted. Orders already registered with Pinnacle are not cancelled at Pinnacle.
Test Instance Connection
Re-tests a saved instance with its stored credentials (token grant + Tracking API key probe). A newly granted token is cached on the instance. No request body.
Get Dashboard
Returns summary metrics for the instance without calling Pinnacle: order counts (awaiting_pickup = registered or pickup scheduled; in_transit = picked up, at hub or delivery scheduled; registration_failed; delivered in the last 30 days; with_exception; total), per-status counts, connection health, webhook health for the last 24 hours, the last orders / tracking / proof-of-delivery sync times, the 10 most recent tracking events and the 5 most recently updated orders.
Get Sync Info
Returns the last successful sync time per entity (orders, tracking, pods), the configured sync start date, and the size of each working set (total orders, open orders still being tracked, delivered orders without a proof of delivery), plus the latest registration and webhook times. Useful before choosing a sync mode.
Sync Orders
Queues a background job that reconciles Pinnacle orders (GetOrders) into SKU.io for a date window, creating or updating local order records. Returns immediately with the background job's id and name.
Sync Tracking
Queues a background job that pulls GetTrackingDetails for the next rotating slice of open (non-terminal) orders, oldest-synced first, and applies new tracking events, status changes and shipments. Pinnacle allows one request per second per account, so each run is bounded. To refresh a single order use Refresh Order Tracking instead.
Sync Proofs of Delivery
Queues a background job that downloads proof-of-delivery files for delivered orders that do not have one yet and attaches them to their shipments. No request body.
List Orders
Paginated, filterable list of the orders registered with (or mirrored from) Pinnacle for this instance, each with its status, latest tracking event, pickup/delivery dates, piece count, shipment summary and links to the fulfillment order, sales order and fulfillment.
Get Order
Returns one Pinnacle order by local id or tracking number. Includes everything in the list row plus the item lines that were sent (each SKU resolved to its product id), every labelled piece (16-digit barcode), the full tracking event timeline (newest first; closure_reason is set for cancellation/closure events), proof-of-delivery files with download URLs, the shipment, and the exact CreateOrder request and response payloads. external_url links to the order in the Pinnacle portal when one is configured for the environment, otherwise null. can_cancel / can_refresh indicate whether Cancel Order / Refresh Order Tracking apply.
Get Order Raw Payloads
Returns the raw Pinnacle data for an order: a live GetTrackingDetails pull (one rate-limited Pinnacle call) together with the stored CreateOrder request and response payloads. If the live pull fails, tracking_details is null, tracking_details_error explains why, and the stored payloads are still returned. Orders never registered with Pinnacle have no tracking number and return only the stored payloads.
List Order Activity
Paginated audit log of changes to a Pinnacle order (status, last event, cancellation, links), newest first. causer_name is the user who made the change, or null for automated syncs and webhooks.
Cancel Order
Recalls an order at Pinnacle (CancelOrder). On success the order is marked cancelled and, if it has not shipped, its fulfillment order is voided. Pinnacle may refuse (for example when delivery is already scheduled); the response is then 422 with code cancel_refused, the refusal code and label, and the current order (the refusal code is also stored on the order). Cancelling an already cancelled or closed order returns it unchanged.
Refresh Order Tracking
Synchronously pulls the latest GetTrackingDetails snapshot for one order (one rate-limited Pinnacle call) and applies it: new tracking events, status, pickup/delivery dates and, when the configured shipped event is reached, the shipment and fulfillment. Returns the refreshed order. No request body.
List Shipments
Paginated, filterable list of Pinnacle shipments. A shipment is created when an order reaches the configured shipped event (pickup completed, received at hub, or delivered) and is linked to the fulfillment recorded in SKU.io. Each row carries the order's status and delivery type, proof-of-delivery files, and links to the Pinnacle order, fulfillment, fulfillment order and sales order.
Get Shipment
Returns one Pinnacle shipment by local id or tracking number, including the order's full tracking event timeline (newest first) and its labelled pieces.
Download Proof of Delivery
Downloads a stored proof-of-delivery file as an attachment with its original filename. {shipment} must be the local shipment id (numeric) and {index} the file's zero-based position in the shipment's pod_files list; each pod_files entry already carries this path as download_url.
List Delivery Type Mappings
Returns every SKU.io shipping method with the Pinnacle delivery type it maps to. Each row's status is mapped (explicit mapping), unmapped (falls back to the instance default delivery type — uses_default=true — or is rejected before dispatch when there is no default), pickup (a pickup method; never sent to Pinnacle) or other_provider (EVERY warehouse that dispatches to this instance sends the method to a different provider or Manual through a routing rule that is currently honoured — active, mapped target; routed_to describes the first such rule and there is no mapping to edit). Routing is evaluated per warehouse: when only some warehouses route the method elsewhere, the row keeps its mapped / unmapped status (Pinnacle still receives it from the others) and routed_elsewhere_at lists each warehouse whose rule sends it elsewhere (warehouse_id, warehouse_name, target name / integration_name / is_manual, routing_rule_id) for display only. Rules whose target cannot be used (inactive, unmapped, no dispatcher) fall through to the warehouse default and are ignored. Archived shipping methods are not listed. will_send is what dispatch puts on the wire for an order with that method, in the same order dispatch decides it: pickup (never sent) → other_provider (sent to the routing-rule target instead) → mapped (the mapped code) → default (the instance default delivery type) → rejected (no mapping and no valid default; the order is rejected before it reaches Pinnacle). will_send.text is the display string. Several shipping methods may map to the same delivery type. Also returns all delivery types (forward and reverse), the default delivery type (default_delivery_type_valid=false when the saved default is not a valid code), counts per status plus rejected (rows dispatch would reject), and the warehouses whose routing rules were considered.
Update Delivery Type Mappings
Creates, changes or removes shipping method → Pinnacle delivery type mappings. Methods not listed are left untouched. Any number of shipping methods can map to the same delivery type. Returns the full mapping list.
Bulk Map Delivery Types
Points many shipping methods at one Pinnacle delivery type in a single call, or clears their mappings when delivery_type is null. Existing mappings of the listed methods are replaced; other methods are untouched. Returns the full mapping list plus result counts.
Auto-Match Delivery Types
Maps every still-unmapped shipping method whose name matches a Pinnacle delivery type — its code, its label, or a common name such as 'Threshold' (TRHD) or 'White Glove' (WG-RESI) — ignoring case, spacing, punctuation and the words delivery / service / shipping. Never changes an existing mapping, and skips pickup methods and methods routed to another provider. Returns the full mapping list plus what was matched. No request body.
Export Delivery Type Mappings (CSV)
Downloads a CSV of every shipping method — unmapped ones included, with a blank delivery_type — so it can be filled in and re-imported with Import Delivery Type Mappings. Columns: shipping_method_id, shipping_method_name, status, delivery_type, delivery_type_label, will_send. Only shipping_method_id (or shipping_method_name) and delivery_type are read back on import.
Import Delivery Type Mappings (CSV)
Uploads a mapping CSV (multipart/form-data, field file; .csv or .txt, max 2 MB) with a header row. The header must contain delivery_type and a shipping-method column (shipping_method_id, or shipping_method_name / shipping_method_full_name); header names are matched case-insensitively. A file missing either is refused with 422 (errors.file) before anything is written — a missing delivery_type column is never read as blank cells. Each row is matched on shipping_method_id, or by name when the id is blank: the full name (carrier + method, e.g. 'UPS Ground') first, then the bare method name only when exactly one active shipping method has it. An ambiguous name is skipped with the error 'Several shipping methods are named '<name>' — use shipping_method_id'. delivery_type takes a forward delivery-type code or its label; an explicitly blank delivery_type cell removes that method's mapping. Rows that cannot be applied are skipped and reported in errors with their line number: an unknown shipping method, an unknown or reverse delivery type, or a shipping method that already appeared on an earlier line (the first occurrence wins). Returns counts of mappings created, updated and deleted.
List Origin Warehouses
Returns the candidate ships-from warehouses with their address, eligibility checks and which one is the Pinnacle origin. Pinnacle picks up in the US only: an eligible origin needs a US street address, a 5-digit ZIP, a 2-letter state and a 10-digit phone (is_eligible / issues). A missing email is reported in warnings because dispatch will be rejected without one. origin_mode is explicit when an origin warehouse is set, or fulfillment_order_warehouse when each order ships from its own fulfillment order's warehouse.
Update Origin Warehouse
Sets the Pinnacle origin (ships-from) warehouse, or clears it so each order uses its fulfillment order's own warehouse. The warehouse must pass the eligibility checks; otherwise 422 lists what is missing. Returns the updated warehouse list.
Get Webhook Endpoint
Returns the inbound webhook URL and the full inbound key to give Metropolitan Warehouse & Delivery (MWD) so it can push hourly tracking snapshots to SKU.io. MWD must send the key in the header named by header_name (authorization). This is the only endpoint that returns the full key. Also returns the last delivery time and the received / failed counts for the last 24 hours.
Rotate Webhook Key
Issues a new inbound webhook key and returns the updated endpoint details. Deliveries carrying the old key are rejected (401) from this moment, so give MWD the new key immediately. The webhook URL does not change. No request body.
List Webhook Events
Paginated audit log of inbound tracking deliveries from MWD. Each delivery is stored exactly as received and processed in the background: status is received (queued), processed, failed (error explains why; failed deliveries are retried automatically for up to 7 days) or duplicate (an identical hourly repeat of an already-processed snapshot).
Get Webhook Event
Returns one inbound delivery with links to the Pinnacle orders it touched. The raw body is not included here — fetch it with Get Webhook Event Raw Body.
Get Webhook Event Raw Body
Returns the delivery exactly as MWD sent it: raw_body is the stored request body (verbatim string) and payload is that body decoded as JSON ({} when it is not JSON). Kept separate from Get Webhook Event so the detail stays small; load it only when you need the body.
Receive Tracking Webhook
The endpoint Metropolitan Warehouse & Delivery (MWD) calls to push tracking updates — you configure it with MWD, you do not call it yourself. Get the full URL and key from Get Webhook Endpoint.