{"__v":0,"_id":"579c78e0cbe2390e00c25e59","api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"body":"The Doorman API allows developers to integrate one hour returns pickup and package delivery services to offer their customers in their online store, application, or e-commerce platform.\n\nHere you'll find everything you need to know to integrate e-commerce returns and delivery into your online store, mobile app, or e-commerce platform using the Doorman API. Faqs, reference docs, and guides are all located here to help you get started with your integration.","category":"56df9b28b6b89d290048f4fc","createdAt":"2016-07-30T09:52:32.121Z","excerpt":"Welcome to Doorman! Check out the tutorials and references below to get familiar with the Doorman API.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":0,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"api-overview","sync_unique":"","title":"Overview","type":"basic","updates":[],"user":"571802a73a17770e009a7300","version":"56df980eb99554320038a0c6","childrenPages":[]}

Overview

Welcome to Doorman! Check out the tutorials and references below to get familiar with the Doorman API.

The Doorman API allows developers to integrate one hour returns pickup and package delivery services to offer their customers in their online store, application, or e-commerce platform. Here you'll find everything you need to know to integrate e-commerce returns and delivery into your online store, mobile app, or e-commerce platform using the Doorman API. Faqs, reference docs, and guides are all located here to help you get started with your integration.
The Doorman API allows developers to integrate one hour returns pickup and package delivery services to offer their customers in their online store, application, or e-commerce platform. Here you'll find everything you need to know to integrate e-commerce returns and delivery into your online store, mobile app, or e-commerce platform using the Doorman API. Faqs, reference docs, and guides are all located here to help you get started with your integration.
{"__v":28,"_id":"5723237fb1f99d0e000869a7","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"## Package Delivery Scheduling at checkout\nDoorman enables retailers to offer their customers the convenience of scheduling the delivery of their online purchases at checkout.\n\nHere's how it works: \n\n  * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers\n  * Submit a customer's info & delivery address by creating a `Customer` object\n  * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be  LTL-ed for *Doorman Direct* packages)\n  * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object\n  * Get package information and delivery status\n  * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed*\n\n## Return Pickup Scheduling\nDoorman enables retailers to offer their customers the convenience of scheduling a return pickup.\n\nHere's how it works: \n\n- Customer uses the *Web Scheduler App* to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label.\n\n- At the time of scheduling the pickup, the customer is also prompted to enter an optional order number.\n\n- A friendly *Doorman Agent* arrives at the customer's home to pick up the return package.\n\nThese return packages, once logged at Doorman depot, provide complete visibility into the status of the return through integrated tracking tools and notifications. These real-time tracking tools are available both to the Retailer (via the *Doorman Dashboard*) and the Customer (via the Web Scheduler App).\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"What is the Doorman Dashboard?\",\n  \"body\": \"An intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"What is the Scheduler App?\",\n  \"body\": \"A co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label.\"\n}\n[/block]","category":"56df9b28b6b89d290048f4fc","createdAt":"2016-04-29T09:03:59.758Z","excerpt":"How online retailers use the Doorman API.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"use-cases","sync_unique":"","title":"Use Cases","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Use Cases

How online retailers use the Doorman API.

## Package Delivery Scheduling at checkout Doorman enables retailers to offer their customers the convenience of scheduling the delivery of their online purchases at checkout. Here's how it works: * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers * Submit a customer's info & delivery address by creating a `Customer` object * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be LTL-ed for *Doorman Direct* packages) * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object * Get package information and delivery status * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed* ## Return Pickup Scheduling Doorman enables retailers to offer their customers the convenience of scheduling a return pickup. Here's how it works: - Customer uses the *Web Scheduler App* to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label. - At the time of scheduling the pickup, the customer is also prompted to enter an optional order number. - A friendly *Doorman Agent* arrives at the customer's home to pick up the return package. These return packages, once logged at Doorman depot, provide complete visibility into the status of the return through integrated tracking tools and notifications. These real-time tracking tools are available both to the Retailer (via the *Doorman Dashboard*) and the Customer (via the Web Scheduler App). [block:callout] { "type": "info", "title": "What is the Doorman Dashboard?", "body": "An intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down." } [/block] [block:callout] { "type": "info", "title": "What is the Scheduler App?", "body": "A co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label." } [/block]
## Package Delivery Scheduling at checkout Doorman enables retailers to offer their customers the convenience of scheduling the delivery of their online purchases at checkout. Here's how it works: * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers * Submit a customer's info & delivery address by creating a `Customer` object * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be LTL-ed for *Doorman Direct* packages) * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object * Get package information and delivery status * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed* ## Return Pickup Scheduling Doorman enables retailers to offer their customers the convenience of scheduling a return pickup. Here's how it works: - Customer uses the *Web Scheduler App* to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label. - At the time of scheduling the pickup, the customer is also prompted to enter an optional order number. - A friendly *Doorman Agent* arrives at the customer's home to pick up the return package. These return packages, once logged at Doorman depot, provide complete visibility into the status of the return through integrated tracking tools and notifications. These real-time tracking tools are available both to the Retailer (via the *Doorman Dashboard*) and the Customer (via the Web Scheduler App). [block:callout] { "type": "info", "title": "What is the Doorman Dashboard?", "body": "An intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down." } [/block] [block:callout] { "type": "info", "title": "What is the Scheduler App?", "body": "A co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label." } [/block]
{"__v":58,"_id":"56df9bba8e12870e0021b178","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"## Who is this API for\n\nThis API is mainly for online retailers who would like to offer Doorman's scheduled package delivery service to their customers. Use our powerful and easy to use RESTful APIs to integrate your e-commerce store's checkout process with Doorman and offer the convenience of scheduled package delivery & returns to your customers.\n\nThe API is designed to allow developers to\n\n  * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers\n  * Submit a customer's info & delivery address by creating a `Customer` object\n  * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be  LTL-ed for *Doorman Direct* packages)\n  * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object\n  * Get package information and delivery status\n  * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed*\n\n## REST based\n\n  * Makes use of standard HTTP verbs like GET, POST, DELETE\n  * Uses standard HTTP error responses to describe errors\n  * Authentication provided using *Bearer* token set in the HTTP Authorization header\n  * All requests and responses are in JSON format\n\n## Test & Live Mode\n\nOnce you are signed up, you'll immediately have access to make API requests in *test* mode. To submit requests in test mode, please use the test API key.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"Test API keys start with **test_** whereas live API keys start with **live_**\",\n  \"title\": \"API Keys\"\n}\n[/block]\nWhen you are ready for production, contact us and we will enable live API requests. Please use the live API key for production mode. \n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"API clients are required to send the following header in the requests - \\n\\n`Content-Type: application/json`\",\n  \"title\": \"JSON Content Type\"\n}\n[/block]\n## Base URL\n\nAPI calls require a URL to identify the location from which the data will be accessed. You must replace the placeholders <endpoint> and <version> with the appropriate values which will change depending on the type of data being requested and the current release of the Doorman API. \n\nThe URL follows this template:       https://api.doorman.co/<version> /<endpoint> /:id\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Be mindful of the explicit versioning in the Base URL\",\n  \"title\": \"Note\"\n}\n[/block]\n## Authentication \n\nAll API requests require authentication using a bearer token. If the API key is missing or invalid a 401 unauthorized response code will be returned.\n\nBearer tokens allow your application to access the Doorman API on behalf of a user.  \n\n## Versioning\n\nAPI version is specified in the URL. The current version is: v1.\n\nThe Doorman API is constantly being worked on to make improvements, add functionality, and squash bugs. Expect changes to be introduced and documented when anything is modified.\n\nWhen we make backwards-incompatible changes to the API, we release new, dated versions. The current version of our API is v1. You’ll also notice that the API version is also specified in the URL.\n\nRead our API upgrades guide to see our API changelog and to learn more about backwards compatibility.\n\n## HTTPS\n\nHTTP over TLS 1.2 is enforced for all calls, any non-secure calls will result in a 301 Moved Permanently pointing to the https URI.\n\n## API Endpoints\n\nAll API calls should be made to `https://api.doorman.co/v1` (note the explicit versioning)\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Method\",\n    \"h-1\": \"Endpoint\",\n    \"h-2\": \"Description\",\n    \"0-2\": \"[Create a delivery package](doc:create-package-delivery)\",\n    \"1-2\": \"[Get package delivery details](doc:get-package-delivery-details)\",\n    \"2-2\": \"[Delete a package delivery](doc:delete-package-delivery)\",\n    \"3-2\": \"[Get return pickup package details](doc:return-pickup-details)\",\n    \"4-2\": \"[Delete a return pickup package](doc:delete-return-package)\",\n    \"5-2\": \"[Create a return pickup package](doc:create-return-pickup)\",\n    \"6-2\": \"[Create a customer](doc:create-customer)\",\n    \"7-2\": \"[Delete a package delivery](doc:delete-package-delivery)\",\n    \"8-2\": \"[Get delivery time and date](doc:delivery-time-date)\",\n    \"9-2\": \"[Get delivery rate](doc:get-delivery-rates)\",\n    \"10-2\": \"[Get customer details](doc:get-customer-details)\",\n    \"11-2\": \"[Create customer address](doc:create-customer-address)\",\n    \"12-2\": \"[Get postal code](doc:postal-code)\",\n    \"9-1\": \"/v1/rates\",\n    \"11-1\": \"/v1/customers/:id/addresses\",\n    \"12-1\": \"/v1/postal_codes\",\n    \"10-1\": \"v1/customers/:id\",\n    \"0-0\": \"POST\",\n    \"1-0\": \"GET\",\n    \"2-0\": \"DELETE\",\n    \"3-0\": \"GET\",\n    \"4-0\": \"DELETE\",\n    \"5-0\": \"POST\",\n    \"6-1\": \"/v1/customers\",\n    \"6-0\": \"POST\",\n    \"8-0\": \"GET\",\n    \"7-0\": \"DELETE\",\n    \"10-0\": \"GET\",\n    \"9-0\": \"GET\",\n    \"11-0\": \"POST\",\n    \"12-0\": \"GET\",\n    \"5-1\": \"v1/customers/:id/return_packages\",\n    \"0-1\": \"v1/customers/:id/packages\",\n    \"1-1\": \"v1/customers/:id/packages\",\n    \"2-1\": \"v1/customers/:id/packages/\",\n    \"8-1\": \"v1/delivery_windows\",\n    \"3-1\": \"v1/customers/:id/return_packages\",\n    \"4-1\": \"/v1/return_packages/:id'\",\n    \"7-1\": \"/v1/customers/:id/packages/\",\n    \"13-0\": \"GET\",\n    \"13-1\": \"/v1/slots\",\n    \"13-2\": \"[Get delivery slots](doc:get-delivery-time-date)\"\n  },\n  \"cols\": 3,\n  \"rows\": 14\n}\n[/block]","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T03:42:50.752Z","excerpt":"This page will help you get started with the Doorman API.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":0,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"delivery-api","sync_unique":"","title":"API Overview","type":"basic","updates":["57183a15459f6f0e007504af","5791353e2a66760e00c7657a","579137e5e347c0220043d284"],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

API Overview

This page will help you get started with the Doorman API.

## Who is this API for This API is mainly for online retailers who would like to offer Doorman's scheduled package delivery service to their customers. Use our powerful and easy to use RESTful APIs to integrate your e-commerce store's checkout process with Doorman and offer the convenience of scheduled package delivery & returns to your customers. The API is designed to allow developers to * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers * Submit a customer's info & delivery address by creating a `Customer` object * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be LTL-ed for *Doorman Direct* packages) * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object * Get package information and delivery status * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed* ## REST based * Makes use of standard HTTP verbs like GET, POST, DELETE * Uses standard HTTP error responses to describe errors * Authentication provided using *Bearer* token set in the HTTP Authorization header * All requests and responses are in JSON format ## Test & Live Mode Once you are signed up, you'll immediately have access to make API requests in *test* mode. To submit requests in test mode, please use the test API key. [block:callout] { "type": "info", "body": "Test API keys start with **test_** whereas live API keys start with **live_**", "title": "API Keys" } [/block] When you are ready for production, contact us and we will enable live API requests. Please use the live API key for production mode. [block:callout] { "type": "info", "body": "API clients are required to send the following header in the requests - \n\n`Content-Type: application/json`", "title": "JSON Content Type" } [/block] ## Base URL API calls require a URL to identify the location from which the data will be accessed. You must replace the placeholders <endpoint> and <version> with the appropriate values which will change depending on the type of data being requested and the current release of the Doorman API. The URL follows this template: https://api.doorman.co/<version> /<endpoint> /:id [block:callout] { "type": "warning", "body": "Be mindful of the explicit versioning in the Base URL", "title": "Note" } [/block] ## Authentication All API requests require authentication using a bearer token. If the API key is missing or invalid a 401 unauthorized response code will be returned. Bearer tokens allow your application to access the Doorman API on behalf of a user. ## Versioning API version is specified in the URL. The current version is: v1. The Doorman API is constantly being worked on to make improvements, add functionality, and squash bugs. Expect changes to be introduced and documented when anything is modified. When we make backwards-incompatible changes to the API, we release new, dated versions. The current version of our API is v1. You’ll also notice that the API version is also specified in the URL. Read our API upgrades guide to see our API changelog and to learn more about backwards compatibility. ## HTTPS HTTP over TLS 1.2 is enforced for all calls, any non-secure calls will result in a 301 Moved Permanently pointing to the https URI. ## API Endpoints All API calls should be made to `https://api.doorman.co/v1` (note the explicit versioning) [block:parameters] { "data": { "h-0": "Method", "h-1": "Endpoint", "h-2": "Description", "0-2": "[Create a delivery package](doc:create-package-delivery)", "1-2": "[Get package delivery details](doc:get-package-delivery-details)", "2-2": "[Delete a package delivery](doc:delete-package-delivery)", "3-2": "[Get return pickup package details](doc:return-pickup-details)", "4-2": "[Delete a return pickup package](doc:delete-return-package)", "5-2": "[Create a return pickup package](doc:create-return-pickup)", "6-2": "[Create a customer](doc:create-customer)", "7-2": "[Delete a package delivery](doc:delete-package-delivery)", "8-2": "[Get delivery time and date](doc:delivery-time-date)", "9-2": "[Get delivery rate](doc:get-delivery-rates)", "10-2": "[Get customer details](doc:get-customer-details)", "11-2": "[Create customer address](doc:create-customer-address)", "12-2": "[Get postal code](doc:postal-code)", "9-1": "/v1/rates", "11-1": "/v1/customers/:id/addresses", "12-1": "/v1/postal_codes", "10-1": "v1/customers/:id", "0-0": "POST", "1-0": "GET", "2-0": "DELETE", "3-0": "GET", "4-0": "DELETE", "5-0": "POST", "6-1": "/v1/customers", "6-0": "POST", "8-0": "GET", "7-0": "DELETE", "10-0": "GET", "9-0": "GET", "11-0": "POST", "12-0": "GET", "5-1": "v1/customers/:id/return_packages", "0-1": "v1/customers/:id/packages", "1-1": "v1/customers/:id/packages", "2-1": "v1/customers/:id/packages/", "8-1": "v1/delivery_windows", "3-1": "v1/customers/:id/return_packages", "4-1": "/v1/return_packages/:id'", "7-1": "/v1/customers/:id/packages/", "13-0": "GET", "13-1": "/v1/slots", "13-2": "[Get delivery slots](doc:get-delivery-time-date)" }, "cols": 3, "rows": 14 } [/block]
## Who is this API for This API is mainly for online retailers who would like to offer Doorman's scheduled package delivery service to their customers. Use our powerful and easy to use RESTful APIs to integrate your e-commerce store's checkout process with Doorman and offer the convenience of scheduled package delivery & returns to your customers. The API is designed to allow developers to * Fetch what postal codes Doorman delivers to before showing Doorman delivery option to your online shoppers * Submit a customer's info & delivery address by creating a `Customer` object * Retrieve a customer's unique *Doorman Shipping Address* (packages are shipped via DHL, FedEx, UPS, USPS etc. to this address or they can be LTL-ed for *Doorman Direct* packages) * Submit package info & delivery schedule (that are being delivered via Doorman) by creating a `Package` object * Get package information and delivery status * Receive delivery events (via webhooks) that are happening in the Doorman world, e.g. *package.delivery.completed* ## REST based * Makes use of standard HTTP verbs like GET, POST, DELETE * Uses standard HTTP error responses to describe errors * Authentication provided using *Bearer* token set in the HTTP Authorization header * All requests and responses are in JSON format ## Test & Live Mode Once you are signed up, you'll immediately have access to make API requests in *test* mode. To submit requests in test mode, please use the test API key. [block:callout] { "type": "info", "body": "Test API keys start with **test_** whereas live API keys start with **live_**", "title": "API Keys" } [/block] When you are ready for production, contact us and we will enable live API requests. Please use the live API key for production mode. [block:callout] { "type": "info", "body": "API clients are required to send the following header in the requests - \n\n`Content-Type: application/json`", "title": "JSON Content Type" } [/block] ## Base URL API calls require a URL to identify the location from which the data will be accessed. You must replace the placeholders <endpoint> and <version> with the appropriate values which will change depending on the type of data being requested and the current release of the Doorman API. The URL follows this template: https://api.doorman.co/<version> /<endpoint> /:id [block:callout] { "type": "warning", "body": "Be mindful of the explicit versioning in the Base URL", "title": "Note" } [/block] ## Authentication All API requests require authentication using a bearer token. If the API key is missing or invalid a 401 unauthorized response code will be returned. Bearer tokens allow your application to access the Doorman API on behalf of a user. ## Versioning API version is specified in the URL. The current version is: v1. The Doorman API is constantly being worked on to make improvements, add functionality, and squash bugs. Expect changes to be introduced and documented when anything is modified. When we make backwards-incompatible changes to the API, we release new, dated versions. The current version of our API is v1. You’ll also notice that the API version is also specified in the URL. Read our API upgrades guide to see our API changelog and to learn more about backwards compatibility. ## HTTPS HTTP over TLS 1.2 is enforced for all calls, any non-secure calls will result in a 301 Moved Permanently pointing to the https URI. ## API Endpoints All API calls should be made to `https://api.doorman.co/v1` (note the explicit versioning) [block:parameters] { "data": { "h-0": "Method", "h-1": "Endpoint", "h-2": "Description", "0-2": "[Create a delivery package](doc:create-package-delivery)", "1-2": "[Get package delivery details](doc:get-package-delivery-details)", "2-2": "[Delete a package delivery](doc:delete-package-delivery)", "3-2": "[Get return pickup package details](doc:return-pickup-details)", "4-2": "[Delete a return pickup package](doc:delete-return-package)", "5-2": "[Create a return pickup package](doc:create-return-pickup)", "6-2": "[Create a customer](doc:create-customer)", "7-2": "[Delete a package delivery](doc:delete-package-delivery)", "8-2": "[Get delivery time and date](doc:delivery-time-date)", "9-2": "[Get delivery rate](doc:get-delivery-rates)", "10-2": "[Get customer details](doc:get-customer-details)", "11-2": "[Create customer address](doc:create-customer-address)", "12-2": "[Get postal code](doc:postal-code)", "9-1": "/v1/rates", "11-1": "/v1/customers/:id/addresses", "12-1": "/v1/postal_codes", "10-1": "v1/customers/:id", "0-0": "POST", "1-0": "GET", "2-0": "DELETE", "3-0": "GET", "4-0": "DELETE", "5-0": "POST", "6-1": "/v1/customers", "6-0": "POST", "8-0": "GET", "7-0": "DELETE", "10-0": "GET", "9-0": "GET", "11-0": "POST", "12-0": "GET", "5-1": "v1/customers/:id/return_packages", "0-1": "v1/customers/:id/packages", "1-1": "v1/customers/:id/packages", "2-1": "v1/customers/:id/packages/", "8-1": "v1/delivery_windows", "3-1": "v1/customers/:id/return_packages", "4-1": "/v1/return_packages/:id'", "7-1": "/v1/customers/:id/packages/", "13-0": "GET", "13-1": "/v1/slots", "13-2": "[Get delivery slots](doc:get-delivery-time-date)" }, "cols": 3, "rows": 14 } [/block]
{"__v":17,"_id":"56dfa1e09cd22c0e00cab0f8","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"All API requests require authentication.\n\nAuthentication is provided using *Bearer* token set in the HTTP `Authorization` header of every HTTP Request.\n\nYou can find your API key in the Account Settings section of the *Doorman Dashboard* [here](https://dashboard.doorman.co/).\n\nTo use the Bearer API token, construct a normal HTTPS request and include an `Authorization` header with the value of Bearer.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"curl -H \\\"Authorization: Bearer YOUR-API-KEY-HERE\\\" https://api.doorman.co/v1/postal_codes\",\n      \"language\": \"shell\"\n    }\n  ]\n}\n[/block]\n`401 unauthorized` response code will be returned if the API key is missing or is invalid.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// 401 - Unauthorized\\n{\\n  \\\"object\\\": \\\"error\\\",\\n  \\\"type\\\": \\\"auth_error\\\",\\n  \\\"message\\\": \\\"API key is required\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T04:09:04.242Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"authentication","sync_unique":"","title":"Authentication","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Authentication


All API requests require authentication. Authentication is provided using *Bearer* token set in the HTTP `Authorization` header of every HTTP Request. You can find your API key in the Account Settings section of the *Doorman Dashboard* [here](https://dashboard.doorman.co/). To use the Bearer API token, construct a normal HTTPS request and include an `Authorization` header with the value of Bearer. [block:code] { "codes": [ { "code": "curl -H \"Authorization: Bearer YOUR-API-KEY-HERE\" https://api.doorman.co/v1/postal_codes", "language": "shell" } ] } [/block] `401 unauthorized` response code will be returned if the API key is missing or is invalid. [block:code] { "codes": [ { "code": "// 401 - Unauthorized\n{\n \"object\": \"error\",\n \"type\": \"auth_error\",\n \"message\": \"API key is required\"\n}", "language": "json" } ] } [/block]
All API requests require authentication. Authentication is provided using *Bearer* token set in the HTTP `Authorization` header of every HTTP Request. You can find your API key in the Account Settings section of the *Doorman Dashboard* [here](https://dashboard.doorman.co/). To use the Bearer API token, construct a normal HTTPS request and include an `Authorization` header with the value of Bearer. [block:code] { "codes": [ { "code": "curl -H \"Authorization: Bearer YOUR-API-KEY-HERE\" https://api.doorman.co/v1/postal_codes", "language": "shell" } ] } [/block] `401 unauthorized` response code will be returned if the API key is missing or is invalid. [block:code] { "codes": [ { "code": "// 401 - Unauthorized\n{\n \"object\": \"error\",\n \"type\": \"auth_error\",\n \"message\": \"API key is required\"\n}", "language": "json" } ] } [/block]
{"__v":4,"_id":"56e53abfcc9b140e003e86d3","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"* Requests & Response are in JSON format. \n* Timestamps are returned in UTC ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ`\n* Both request & response date only fields use the following format: `YYYY-MM-DD`\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"JSON Content Type\",\n  \"body\": \"API clients are required to send the following header \\n\\n`Content-Type: application/json`\"\n}\n[/block]","category":"56df980eb99554320038a0c7","createdAt":"2016-03-13T10:02:39.941Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":2,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"types-schema","sync_unique":"","title":"Types & Schema","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Types & Schema


* Requests & Response are in JSON format. * Timestamps are returned in UTC ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ` * Both request & response date only fields use the following format: `YYYY-MM-DD` [block:callout] { "type": "info", "title": "JSON Content Type", "body": "API clients are required to send the following header \n\n`Content-Type: application/json`" } [/block]
* Requests & Response are in JSON format. * Timestamps are returned in UTC ISO 8601 format: `YYYY-MM-DDTHH:MM:SSZ` * Both request & response date only fields use the following format: `YYYY-MM-DD` [block:callout] { "type": "info", "title": "JSON Content Type", "body": "API clients are required to send the following header \n\n`Content-Type: application/json`" } [/block]
{"__v":4,"_id":"56dfac1080023c2000634966","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"In general, API response codes follow common HTTP conventions as much as possible. We use HTTP response codes to indicate API errors.\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"400\",\n    \"h-0\": \"Code\",\n    \"h-1\": \"Description\",\n    \"0-1\": \"Malformed or Bad JSON Request\",\n    \"1-0\": \"401\",\n    \"1-1\": \"Accessing the API without authenticating or with an invalid API key\",\n    \"2-0\": \"402\",\n    \"2-1\": \"Request Failed. Parameters were valid but request failed\",\n    \"3-0\": \"404\",\n    \"3-1\": \"Resource Not found\",\n    \"4-0\": \"422\",\n    \"5-0\": \"200\",\n    \"5-1\": \"Success\",\n    \"4-1\": \"Invalid request. The request body is parse-able however with invalid content\",\n    \"6-0\": \"201\",\n    \"6-1\": \"Created. We will return a 201 after a successful POST when a resource is created\",\n    \"7-0\": \"500\",\n    \"7-1\": \"Internal Server Error\",\n    \"8-1\": \"Service currently unavailable\",\n    \"8-0\": \"503\"\n  },\n  \"cols\": 2,\n  \"rows\": 9\n}\n[/block]","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T04:52:32.696Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"response-codes","sync_unique":"","title":"Response Codes","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Response Codes


In general, API response codes follow common HTTP conventions as much as possible. We use HTTP response codes to indicate API errors. [block:parameters] { "data": { "0-0": "400", "h-0": "Code", "h-1": "Description", "0-1": "Malformed or Bad JSON Request", "1-0": "401", "1-1": "Accessing the API without authenticating or with an invalid API key", "2-0": "402", "2-1": "Request Failed. Parameters were valid but request failed", "3-0": "404", "3-1": "Resource Not found", "4-0": "422", "5-0": "200", "5-1": "Success", "4-1": "Invalid request. The request body is parse-able however with invalid content", "6-0": "201", "6-1": "Created. We will return a 201 after a successful POST when a resource is created", "7-0": "500", "7-1": "Internal Server Error", "8-1": "Service currently unavailable", "8-0": "503" }, "cols": 2, "rows": 9 } [/block]
In general, API response codes follow common HTTP conventions as much as possible. We use HTTP response codes to indicate API errors. [block:parameters] { "data": { "0-0": "400", "h-0": "Code", "h-1": "Description", "0-1": "Malformed or Bad JSON Request", "1-0": "401", "1-1": "Accessing the API without authenticating or with an invalid API key", "2-0": "402", "2-1": "Request Failed. Parameters were valid but request failed", "3-0": "404", "3-1": "Resource Not found", "4-0": "422", "5-0": "200", "5-1": "Success", "4-1": "Invalid request. The request body is parse-able however with invalid content", "6-0": "201", "6-1": "Created. We will return a 201 after a successful POST when a resource is created", "7-0": "500", "7-1": "Internal Server Error", "8-1": "Service currently unavailable", "8-0": "503" }, "cols": 2, "rows": 9 } [/block]
{"__v":9,"_id":"56dfe62a4685db1700d94648","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"When an error occurs (for e.g. validation error), the API will return an `error` object in the following format. Below are some examples of error object.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// 422 - Invalid request\\n{\\n  \\\"object\\\": \\\"error\\\",\\n  \\\"type\\\": \\\"invalid_params\\\",\\n  \\\"message\\\": \\\"Request parameters are not invalid\\\",\\n  \\\"params\\\": {\\n    \\\"first_name\\\": \\\"First Name is required\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": null\n    }\n  ]\n}\n[/block]\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// 404 - Resource Not found\\n{\\n  \\\"object\\\": \\\"error\\\",\\n  \\\"type\\\": \\\"not_found\\\",\\n  \\\"message\\\": \\\"Customer not found\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n## Error Types\nOther error types returned by the API\n\n  * **invalid_params** - Request has invalid parameters\n  * **not_found** - Request resource could not be found\n  * **auth_error** - Authorization error\n  * **api_error** - API server error","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T09:00:26.255Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":4,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"errors","sync_unique":"","title":"Errors","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Errors


When an error occurs (for e.g. validation error), the API will return an `error` object in the following format. Below are some examples of error object. [block:code] { "codes": [ { "code": "// 422 - Invalid request\n{\n \"object\": \"error\",\n \"type\": \"invalid_params\",\n \"message\": \"Request parameters are not invalid\",\n \"params\": {\n \"first_name\": \"First Name is required\"\n }\n}", "language": "json", "name": null } ] } [/block] [block:code] { "codes": [ { "code": "// 404 - Resource Not found\n{\n \"object\": \"error\",\n \"type\": \"not_found\",\n \"message\": \"Customer not found\"\n}", "language": "json" } ] } [/block] ## Error Types Other error types returned by the API * **invalid_params** - Request has invalid parameters * **not_found** - Request resource could not be found * **auth_error** - Authorization error * **api_error** - API server error
When an error occurs (for e.g. validation error), the API will return an `error` object in the following format. Below are some examples of error object. [block:code] { "codes": [ { "code": "// 422 - Invalid request\n{\n \"object\": \"error\",\n \"type\": \"invalid_params\",\n \"message\": \"Request parameters are not invalid\",\n \"params\": {\n \"first_name\": \"First Name is required\"\n }\n}", "language": "json", "name": null } ] } [/block] [block:code] { "codes": [ { "code": "// 404 - Resource Not found\n{\n \"object\": \"error\",\n \"type\": \"not_found\",\n \"message\": \"Customer not found\"\n}", "language": "json" } ] } [/block] ## Error Types Other error types returned by the API * **invalid_params** - Request has invalid parameters * **not_found** - Request resource could not be found * **auth_error** - Authorization error * **api_error** - API server error
{"__v":6,"_id":"56dfa6679032720e00032afe","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Doorman objects - `Customer` and `Package` support `metadata` parameter. You can use the metadata parameter to attach arbitrary *key-value* data to these objects.\n\nThis is useful for storing additional information about an object. For example in case of `Customer` object this could be your internal/system's user id. In case of `Package` object this could be a product SKU or your internal product ID.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.\",\n  \"title\": \"Metadata Format\"\n}\n[/block]\nPlease let us know if you have any specific use case which does not fit in our current metadata specs.","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T04:28:23.376Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":5,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"metadata","sync_unique":"","title":"Metadata","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Metadata


Doorman objects - `Customer` and `Package` support `metadata` parameter. You can use the metadata parameter to attach arbitrary *key-value* data to these objects. This is useful for storing additional information about an object. For example in case of `Customer` object this could be your internal/system's user id. In case of `Package` object this could be a product SKU or your internal product ID. [block:callout] { "type": "info", "body": "You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.", "title": "Metadata Format" } [/block] Please let us know if you have any specific use case which does not fit in our current metadata specs.
Doorman objects - `Customer` and `Package` support `metadata` parameter. You can use the metadata parameter to attach arbitrary *key-value* data to these objects. This is useful for storing additional information about an object. For example in case of `Customer` object this could be your internal/system's user id. In case of `Package` object this could be a product SKU or your internal product ID. [block:callout] { "type": "info", "body": "You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.", "title": "Metadata Format" } [/block] Please let us know if you have any specific use case which does not fit in our current metadata specs.
{"__v":29,"_id":"56dfdc70f97d422900d637e0","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"[Webhooks](https://en.wikipedia.org/wiki/Webhook) make it possible for your servers to be notified of actions in the Doorman world as soon as they happen. So for example, when we deliver a package to a customer, we can send a **package.delivery.completed** event in real-time to your servers.\n\nThe following events are currently reported via webhooks:\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Event\",\n    \"0-0\": \"**package.at_depot**\",\n    \"1-0\": \"**package.visit.scheduled**\",\n    \"2-0\": \"**package.visit.rescheduled**\",\n    \"6-0\": \"**package.visit.not_completed**\",\n    \"7-0\": \"**package.visit.completed**\",\n    \"0-1\": \"Package arrived & logged at Doorman depot.\",\n    \"1-1\": \"Package scheduled for future delivery by the customer.\",\n    \"2-1\": \"Package rescheduled for future delivery by the customer.\",\n    \"7-1\": \"The package was successfully delivered to the customer.\",\n    \"6-1\": \"The package could not be delivered to the customer. This is usually the case when we attempted delivery but the customer was not home. A reason for not completion is included with the payload.\",\n    \"8-0\": \"**visit.scheduled**\",\n    \"9-0\": \"**visit.rescheduled**\",\n    \"10-0\": \"**visit.canceled**\",\n    \"11-0\": \"**visit.en_route**\",\n    \"13-0\": \"**visit.not_completed**\",\n    \"14-0\": \"**visit.completed**\",\n    \"15-0\": \"**visit.driver.location**\",\n    \"8-1\": \"Visit scheduled for delivery or pickup.\",\n    \"9-1\": \"Visit rescheduled for delivery or pickup.\",\n    \"10-1\": \"Visit (for either a delivery or pickup) canceled by the customer.\",\n    \"11-1\": \"Visit (for either a delivery or pickup) en route to a customer address.\",\n    \"13-1\": \"Visit for delivery or pickup could not be completed by the driver. The reason for not completion is also sent part of the payload.\",\n    \"14-1\": \"Visit completed for a delivery or pickup.\",\n    \"15-1\": \"Occurs when a driver is driving for a visit (delivery or pickup) to a costumer's address. The payload will include geo-coordinates. Please note this webhook will be invoked multiple times in real-time.\",\n    \"12-0\": \"**visit.arrived**\",\n    \"12-1\": \"The driver has arrived outside the customer address for a visit which is either a delivery or a pickup.\",\n    \"3-0\": \"**package.visit.canceled**\",\n    \"4-0\": \"**package.visit.en_route**\",\n    \"5-0\": \"**package.visit.arrived**\",\n    \"3-1\": \"Package delivery canceled by customer.\",\n    \"4-1\": \"Package en route to a customer address.\",\n    \"5-1\": \"Package has arrived outside the customer address for delivery.\"\n  },\n  \"cols\": 2,\n  \"rows\": 16\n}\n[/block]\nWhen the above events happen, we will do an HTTP POST request with the event *object* as JSON body to any URLs configured in your account's webhook settings. In case of *package.** events, the HTTP payload will contain a *package* object. In case if *visit.** events, the payload will contain a *delivery* object.\n\nAny failed requests will be retried in 10-minute cycles, up to a maximum of 20 retries. A failed request is any non-200 response that a webhook gets from your server. \n\nPlease return `HTTP 200` response when a webhook request is received & processed successfully.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"You may use [ngrok](https://ngrok.com/) to test your Webhook integrations locally.\",\n  \"title\": \"Testing Webhooks\"\n}\n[/block]\nThe webhook body also contains `signature` parameter. This contains SHA1 encrypted version of your API key. You can use this to validate that webhook post was generated from our servers - you do this by generating the same SHA1 of your key and comparing it to the signature sent with the payload. \n\nFollowing is a sample webhook post for `package.delivery.completed` -\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"live_mode\\\": true,\\n  \\\"signature\\\": \\\"a0f1490a20d0211c997b44bc357e1972deab8ae3\\\",\\n  \\\"object\\\": \\\"event\\\",\\n  \\\"id\\\": \\\"evt_8Y7OZB6dkZlD3Vr\\\",\\n  \\\"type\\\": \\\"package.delivery.completed\\\",\\n  \\\"created_at\\\": \\\"2014-03-02T16:00:00-08:00\\\",\\n  \\\"event_at\\\": \\\"2014-03-02T16:00:00-08:00\\\",\\n  \\\"data\\\": {\\n    \\\"object\\\": {\\n      // Package Detail Object\\n      \\\"id\\\": \\\"pkg_krA8LywCEjyOg41\\\",\\n      \\\"description\\\": \\\"Red Pants\\\",\\n      ...\\n    }\\n  }\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]","category":"56df980eb99554320038a0c7","createdAt":"2016-03-09T08:18:56.696Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":6,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"webhooks","sync_unique":"","title":"Webhooks","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Webhooks


[Webhooks](https://en.wikipedia.org/wiki/Webhook) make it possible for your servers to be notified of actions in the Doorman world as soon as they happen. So for example, when we deliver a package to a customer, we can send a **package.delivery.completed** event in real-time to your servers. The following events are currently reported via webhooks: [block:parameters] { "data": { "h-0": "Event", "0-0": "**package.at_depot**", "1-0": "**package.visit.scheduled**", "2-0": "**package.visit.rescheduled**", "6-0": "**package.visit.not_completed**", "7-0": "**package.visit.completed**", "0-1": "Package arrived & logged at Doorman depot.", "1-1": "Package scheduled for future delivery by the customer.", "2-1": "Package rescheduled for future delivery by the customer.", "7-1": "The package was successfully delivered to the customer.", "6-1": "The package could not be delivered to the customer. This is usually the case when we attempted delivery but the customer was not home. A reason for not completion is included with the payload.", "8-0": "**visit.scheduled**", "9-0": "**visit.rescheduled**", "10-0": "**visit.canceled**", "11-0": "**visit.en_route**", "13-0": "**visit.not_completed**", "14-0": "**visit.completed**", "15-0": "**visit.driver.location**", "8-1": "Visit scheduled for delivery or pickup.", "9-1": "Visit rescheduled for delivery or pickup.", "10-1": "Visit (for either a delivery or pickup) canceled by the customer.", "11-1": "Visit (for either a delivery or pickup) en route to a customer address.", "13-1": "Visit for delivery or pickup could not be completed by the driver. The reason for not completion is also sent part of the payload.", "14-1": "Visit completed for a delivery or pickup.", "15-1": "Occurs when a driver is driving for a visit (delivery or pickup) to a costumer's address. The payload will include geo-coordinates. Please note this webhook will be invoked multiple times in real-time.", "12-0": "**visit.arrived**", "12-1": "The driver has arrived outside the customer address for a visit which is either a delivery or a pickup.", "3-0": "**package.visit.canceled**", "4-0": "**package.visit.en_route**", "5-0": "**package.visit.arrived**", "3-1": "Package delivery canceled by customer.", "4-1": "Package en route to a customer address.", "5-1": "Package has arrived outside the customer address for delivery." }, "cols": 2, "rows": 16 } [/block] When the above events happen, we will do an HTTP POST request with the event *object* as JSON body to any URLs configured in your account's webhook settings. In case of *package.** events, the HTTP payload will contain a *package* object. In case if *visit.** events, the payload will contain a *delivery* object. Any failed requests will be retried in 10-minute cycles, up to a maximum of 20 retries. A failed request is any non-200 response that a webhook gets from your server. Please return `HTTP 200` response when a webhook request is received & processed successfully. [block:callout] { "type": "info", "body": "You may use [ngrok](https://ngrok.com/) to test your Webhook integrations locally.", "title": "Testing Webhooks" } [/block] The webhook body also contains `signature` parameter. This contains SHA1 encrypted version of your API key. You can use this to validate that webhook post was generated from our servers - you do this by generating the same SHA1 of your key and comparing it to the signature sent with the payload. Following is a sample webhook post for `package.delivery.completed` - [block:code] { "codes": [ { "code": "{\n \"live_mode\": true,\n \"signature\": \"a0f1490a20d0211c997b44bc357e1972deab8ae3\",\n \"object\": \"event\",\n \"id\": \"evt_8Y7OZB6dkZlD3Vr\",\n \"type\": \"package.delivery.completed\",\n \"created_at\": \"2014-03-02T16:00:00-08:00\",\n \"event_at\": \"2014-03-02T16:00:00-08:00\",\n \"data\": {\n \"object\": {\n // Package Detail Object\n \"id\": \"pkg_krA8LywCEjyOg41\",\n \"description\": \"Red Pants\",\n ...\n }\n }\n}", "language": "json" } ] } [/block]
[Webhooks](https://en.wikipedia.org/wiki/Webhook) make it possible for your servers to be notified of actions in the Doorman world as soon as they happen. So for example, when we deliver a package to a customer, we can send a **package.delivery.completed** event in real-time to your servers. The following events are currently reported via webhooks: [block:parameters] { "data": { "h-0": "Event", "0-0": "**package.at_depot**", "1-0": "**package.visit.scheduled**", "2-0": "**package.visit.rescheduled**", "6-0": "**package.visit.not_completed**", "7-0": "**package.visit.completed**", "0-1": "Package arrived & logged at Doorman depot.", "1-1": "Package scheduled for future delivery by the customer.", "2-1": "Package rescheduled for future delivery by the customer.", "7-1": "The package was successfully delivered to the customer.", "6-1": "The package could not be delivered to the customer. This is usually the case when we attempted delivery but the customer was not home. A reason for not completion is included with the payload.", "8-0": "**visit.scheduled**", "9-0": "**visit.rescheduled**", "10-0": "**visit.canceled**", "11-0": "**visit.en_route**", "13-0": "**visit.not_completed**", "14-0": "**visit.completed**", "15-0": "**visit.driver.location**", "8-1": "Visit scheduled for delivery or pickup.", "9-1": "Visit rescheduled for delivery or pickup.", "10-1": "Visit (for either a delivery or pickup) canceled by the customer.", "11-1": "Visit (for either a delivery or pickup) en route to a customer address.", "13-1": "Visit for delivery or pickup could not be completed by the driver. The reason for not completion is also sent part of the payload.", "14-1": "Visit completed for a delivery or pickup.", "15-1": "Occurs when a driver is driving for a visit (delivery or pickup) to a costumer's address. The payload will include geo-coordinates. Please note this webhook will be invoked multiple times in real-time.", "12-0": "**visit.arrived**", "12-1": "The driver has arrived outside the customer address for a visit which is either a delivery or a pickup.", "3-0": "**package.visit.canceled**", "4-0": "**package.visit.en_route**", "5-0": "**package.visit.arrived**", "3-1": "Package delivery canceled by customer.", "4-1": "Package en route to a customer address.", "5-1": "Package has arrived outside the customer address for delivery." }, "cols": 2, "rows": 16 } [/block] When the above events happen, we will do an HTTP POST request with the event *object* as JSON body to any URLs configured in your account's webhook settings. In case of *package.** events, the HTTP payload will contain a *package* object. In case if *visit.** events, the payload will contain a *delivery* object. Any failed requests will be retried in 10-minute cycles, up to a maximum of 20 retries. A failed request is any non-200 response that a webhook gets from your server. Please return `HTTP 200` response when a webhook request is received & processed successfully. [block:callout] { "type": "info", "body": "You may use [ngrok](https://ngrok.com/) to test your Webhook integrations locally.", "title": "Testing Webhooks" } [/block] The webhook body also contains `signature` parameter. This contains SHA1 encrypted version of your API key. You can use this to validate that webhook post was generated from our servers - you do this by generating the same SHA1 of your key and comparing it to the signature sent with the payload. Following is a sample webhook post for `package.delivery.completed` - [block:code] { "codes": [ { "code": "{\n \"live_mode\": true,\n \"signature\": \"a0f1490a20d0211c997b44bc357e1972deab8ae3\",\n \"object\": \"event\",\n \"id\": \"evt_8Y7OZB6dkZlD3Vr\",\n \"type\": \"package.delivery.completed\",\n \"created_at\": \"2014-03-02T16:00:00-08:00\",\n \"event_at\": \"2014-03-02T16:00:00-08:00\",\n \"data\": {\n \"object\": {\n // Package Detail Object\n \"id\": \"pkg_krA8LywCEjyOg41\",\n \"description\": \"Red Pants\",\n ...\n }\n }\n}", "language": "json" } ] } [/block]
{"__v":14,"_id":"56dfa9304685db1700d945b5","api":{"auth":"required","examples":{"codes":[]},"params":[],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"object\": \"list\",\n  \"postal_codes\": [\n    {\n      \"object\": \"postal_code\",\n      \"code\": \"94116\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"state_name\": \"California\"\n    },\n    {\n      \"object\": \"postal_code\",\n      \"code\": \"94117\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"state_name\": \"California\"\n    }\n  ]\n}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"/postal_codes"},"body":"Returns a list of all currently Doorman supported postal codes. This should be called before showing Doorman delivery option at checkout to your online shoppers.\n\nRetailers will show Doorman delivery option at checkout to customers whose shipping postal code matches with the Doorman supported postal codes.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Cache Response\",\n  \"body\": \"Clients can cache the response of this request for a certain duration.\"\n}\n[/block]","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T04:40:16.968Z","excerpt":"Retrieves postal codes that Doorman is available in.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":0,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"get-postal-code","sync_unique":"","title":"Get postal code","type":"get","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

getGet postal code

Retrieves postal codes that Doorman is available in.

Returns a list of all currently Doorman supported postal codes. This should be called before showing Doorman delivery option at checkout to your online shoppers. Retailers will show Doorman delivery option at checkout to customers whose shipping postal code matches with the Doorman supported postal codes. [block:callout] { "type": "info", "title": "Cache Response", "body": "Clients can cache the response of this request for a certain duration." } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Result Format



Returns a list of all currently Doorman supported postal codes. This should be called before showing Doorman delivery option at checkout to your online shoppers. Retailers will show Doorman delivery option at checkout to customers whose shipping postal code matches with the Doorman supported postal codes. [block:callout] { "type": "info", "title": "Cache Response", "body": "Clients can cache the response of this request for a certain duration." } [/block]
{"__v":11,"_id":"56dfb20eb6b89d290048f562","api":{"auth":"required","examples":{"codes":[{"language":"http","code":"POST /v1/customers HTTP/1.1\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n  \"first_name\": \"Kapil\",\n  \"last_name\": \"Israni\",\n  \"email\": \"kapil@doorman.co\",\n  \"address\": {\n    \"street\": \"1222 Hide St\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"postal_code\": \"94117\"\n  },\n  \"metadata\": {\n  \t\"user_id\": \"2823823\"\n  }\n}"}]},"params":[{"_id":"56e39d13f0bf831700177521","ref":"","required":true,"desc":"Customer first name.","default":"","type":"string","name":"first_name","in":"body"},{"_id":"56e39d13f0bf831700177520","ref":"","required":true,"desc":"Customer last name.","default":"","type":"string","name":"last_name","in":"body"},{"_id":"56e39d771349961700b1051e","ref":"","required":true,"desc":"Customer email.","default":"","type":"string","name":"email","in":"body"},{"_id":"56e3e5b069140119000e9483","default":"","desc":"Customer mobile phone, ***required*** if text notifications are selected.","name":"contact_phone","ref":"","required":false,"type":"string","in":"body"},{"_id":"56e39d771349961700b1051d","default":"","desc":"Customer delivery or shipping address street details.","name":"address.street","ref":"","required":true,"type":"string","in":"body"},{"_id":"56e39e4c0b74030e003ac3e1","default":"","desc":"Customer delivery or shipping address apartment #.","name":"address.street2","ref":"","required":false,"type":"string","in":"body"},{"_id":"56e39e4c0b74030e003ac3e0","default":"","desc":"Customer delivery or shipping city.","name":"address.city","ref":"","required":true,"type":"string","in":"body"},{"_id":"56e39f100b74030e003ac3e4","default":"","desc":"Customer delivery or shipping state.","name":"address.state","ref":"","required":true,"type":"string","in":"body"},{"_id":"56e39f100b74030e003ac3e3","default":"","desc":"Customer delivery or shipping postal code.","name":"address.postal_code","ref":"","required":true,"type":"string","in":"body"},{"_id":"56e527b7cc9b140e003e86cf","default":"","desc":"*Key-Value* metadata. You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.","name":"metadata","ref":"","required":false,"type":"object","in":"body"}],"results":{"codes":[{"status":201,"language":"json","code":"{\n  \"live_mode\": true,\n  \"object\": \"customer\",\n  \"id\": \"cus_FPHN9b7buBW5Bzh\",\n  \"first_name\": \"Kapil\",\n  \"last_name\": \"Israni\",\n  \"customer_number\": \"75TYGH\",\n  \"description\": \"Some description for customer\",\n  \"scheduler_app_url\": \"https://s.doorman.co/67w29\",\n  \"metadata\": {\n    \"user_id\": \"2823823\"\n  },\n  \"address\": {\n    \"id\": \"adr_krA87jCEjyOg41\",\n    \"street\": \"1222 Hide St\",\n    \"street2\": \"A12\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"postal_code\": \"94117\",\n    \"depot\": {\n      \"street\": \"2261 Market Street\",\n      \"street2\": \"Doorman 75TYGH\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94114\"\n    }\n  }\n}","name":""},{"status":422,"language":"json","code":"{\n  \"object\": \"error\",\n  \"type\": \"invalid_params\",\n  \"message\": \"Request parameters are not invalid\",\n  \"params\": {\n    \"first_name\": \"First Name is required\"\n  }\n}","name":""},{"code":"{\n  \"object\": \"error\",\n  \"type\": \"invalid_params\",\n  \"message\": \"Request parameters are not invalid\",\n  \"params\": {\n    \"email\": \"Customer already created with this email\"\n  }\n}","language":"json","status":422}]},"settings":"","url":"/customers"},"body":"The first step in using the API is to create a Customer object and generate a customer's *Doorman Shipping Address*.\n\nThe Doorman Shipping Address is retrieved by looking at the `depot` object in the address response.  This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"What is Doorman Shipping Address?\",\n  \"body\": \"This is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot.\\n\\n**Please Note:** this address or the Customer Number should never be stored locally in the database by Retailers, as this is subject to change without notice.\"\n}\n[/block]\nA **Customer Number** is included in the *Doorman Shipping Address* that is included in the response. The Customer Number is unique for every customer, which we use to identify the customer when the package arrives at our depot. At package arrival, a package is identified using the Customer Number and the customer is notified via email or text.\n\nThe response of the API returns a unique customer `id`. This ID can be used later to retrieve customer information, retailers are advised to store the ID in their database. \n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Customer ID\",\n  \"body\": \"Retailers are advised to store the customer ID returned in the response in their database. They can use this customer ID to submit any future package delivery requests for the same customer.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"title\": \"Existing Email\",\n  \"body\": \"If a customer with the provided email was already create via a previous API call, this request will return an error message - *Customer already created with this email*\\n\\n**Please Note:** for returning customers, please use previously saved Customer `id` to submit any new package delivery requests.\"\n}\n[/block]\nThis also returns `scheduler_app_url` which is a web app URL that the customer can use to schedule/reschedule package delivery. Retailers are advised store & share this URL with their customers. Doorman will also share this URL with the customer via email or text notification once the package arrives and is logged at our depot.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"What is Scheduler App?\",\n  \"body\": \"A co-branded web app that allows Customers to schedule or reschedule their Doorman delivery. It's a responsive web app and does not require any app installation on a user's mobile device. When a customer's package arrives at our depot, we will notify the customer and include the Scheduler App link in the notification.\"\n}\n[/block]","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T05:18:06.818Z","editedParams":true,"editedParams2":true,"excerpt":"Creates a new customer object.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"create-customer","sync_unique":"","title":"Create customer","type":"post","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

postCreate customer

Creates a new customer object.

Body Params

first_name:
required
string
Customer first name.
last_name:
required
string
Customer last name.
email:
required
string
Customer email.
contact_phone:
string
Customer mobile phone, ***required*** if text notifications are selected.
address.street:
required
string
Customer delivery or shipping address street details.
address.street2:
string
Customer delivery or shipping address apartment #.
address.city:
required
string
Customer delivery or shipping city.
address.state:
required
string
Customer delivery or shipping state.
address.postal_code:
required
string
Customer delivery or shipping postal code.
metadata:
object
*Key-Value* metadata. You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.
The first step in using the API is to create a Customer object and generate a customer's *Doorman Shipping Address*. The Doorman Shipping Address is retrieved by looking at the `depot` object in the address response. This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label. [block:callout] { "type": "info", "title": "What is Doorman Shipping Address?", "body": "This is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot.\n\n**Please Note:** this address or the Customer Number should never be stored locally in the database by Retailers, as this is subject to change without notice." } [/block] A **Customer Number** is included in the *Doorman Shipping Address* that is included in the response. The Customer Number is unique for every customer, which we use to identify the customer when the package arrives at our depot. At package arrival, a package is identified using the Customer Number and the customer is notified via email or text. The response of the API returns a unique customer `id`. This ID can be used later to retrieve customer information, retailers are advised to store the ID in their database. [block:callout] { "type": "info", "title": "Customer ID", "body": "Retailers are advised to store the customer ID returned in the response in their database. They can use this customer ID to submit any future package delivery requests for the same customer." } [/block] [block:callout] { "type": "danger", "title": "Existing Email", "body": "If a customer with the provided email was already create via a previous API call, this request will return an error message - *Customer already created with this email*\n\n**Please Note:** for returning customers, please use previously saved Customer `id` to submit any new package delivery requests." } [/block] This also returns `scheduler_app_url` which is a web app URL that the customer can use to schedule/reschedule package delivery. Retailers are advised store & share this URL with their customers. Doorman will also share this URL with the customer via email or text notification once the package arrives and is logged at our depot. [block:callout] { "type": "info", "title": "What is Scheduler App?", "body": "A co-branded web app that allows Customers to schedule or reschedule their Doorman delivery. It's a responsive web app and does not require any app installation on a user's mobile device. When a customer's package arrives at our depot, we will notify the customer and include the Scheduler App link in the notification." } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



The first step in using the API is to create a Customer object and generate a customer's *Doorman Shipping Address*. The Doorman Shipping Address is retrieved by looking at the `depot` object in the address response. This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label. [block:callout] { "type": "info", "title": "What is Doorman Shipping Address?", "body": "This is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot.\n\n**Please Note:** this address or the Customer Number should never be stored locally in the database by Retailers, as this is subject to change without notice." } [/block] A **Customer Number** is included in the *Doorman Shipping Address* that is included in the response. The Customer Number is unique for every customer, which we use to identify the customer when the package arrives at our depot. At package arrival, a package is identified using the Customer Number and the customer is notified via email or text. The response of the API returns a unique customer `id`. This ID can be used later to retrieve customer information, retailers are advised to store the ID in their database. [block:callout] { "type": "info", "title": "Customer ID", "body": "Retailers are advised to store the customer ID returned in the response in their database. They can use this customer ID to submit any future package delivery requests for the same customer." } [/block] [block:callout] { "type": "danger", "title": "Existing Email", "body": "If a customer with the provided email was already create via a previous API call, this request will return an error message - *Customer already created with this email*\n\n**Please Note:** for returning customers, please use previously saved Customer `id` to submit any new package delivery requests." } [/block] This also returns `scheduler_app_url` which is a web app URL that the customer can use to schedule/reschedule package delivery. Retailers are advised store & share this URL with their customers. Doorman will also share this URL with the customer via email or text notification once the package arrives and is logged at our depot. [block:callout] { "type": "info", "title": "What is Scheduler App?", "body": "A co-branded web app that allows Customers to schedule or reschedule their Doorman delivery. It's a responsive web app and does not require any app installation on a user's mobile device. When a customer's package arrives at our depot, we will notify the customer and include the Scheduler App link in the notification." } [/block]
{"__v":9,"_id":"56fb9889587e43170081ea24","api":{"auth":"required","examples":{"codes":[{"code":"POST /v1/customers HTTP/1.1\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n\t\"street\": \"1222 Hide St\",\n  \"street2\": \"#456\",\n  \"city\": \"San Francisco\",\n  \"state\": \"CA\",\n  \"postal_code\": \"94117\"\n}","language":"http"}]},"params":[{"_id":"56fb9a880023171700b96029","ref":"","in":"path","required":true,"desc":"The identifier of the customer for which address needs to be created.","default":"","type":"string","name":"id"},{"_id":"56fb9ac10023171700b9602e","ref":"","in":"body","required":true,"desc":"Customer delivery or shipping address street details.","default":"","type":"string","name":"street"},{"_id":"57bf4adb86b5a50e00b2f2ce","ref":"","in":"body","required":false,"desc":"Customer delivery or shipping address apartment #.","default":"","type":"string","name":"street2"},{"_id":"56fb9ac10023171700b9602d","ref":"","in":"body","required":true,"desc":"Customer delivery or shipping city.","default":"","type":"string","name":"city"},{"_id":"56fb9ac10023171700b9602c","ref":"","in":"body","required":true,"desc":"Customer delivery or shipping state.","default":"","type":"string","name":"state"},{"_id":"56fb9ac10023171700b9602b","ref":"","in":"body","required":true,"desc":"Customer delivery or shipping postal code.","default":"","type":"string","name":"postal_code"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"object\": \"address\",\n  \"id\": \"adr_nAzJGgjUyBi255L\"\n}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"/customers/:id/addresses"},"body":"Submit an address data for a customer that is already created via the Doorman API. This is primarily used to add another address to an existing Doorman customer.","category":"56dfa96480023c2000634951","createdAt":"2016-03-30T09:12:41.436Z","editedParams":true,"editedParams2":true,"excerpt":"Create a Address","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":2,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"create-customer-address","sync_unique":"","title":"Create customer address","type":"post","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

postCreate customer address

Create a Address

Path Params

id:
required
string
The identifier of the customer for which address needs to be created.

Body Params

street:
required
string
Customer delivery or shipping address street details.
street2:
string
Customer delivery or shipping address apartment #.
city:
required
string
Customer delivery or shipping city.
state:
required
string
Customer delivery or shipping state.
postal_code:
required
string
Customer delivery or shipping postal code.
Submit an address data for a customer that is already created via the Doorman API. This is primarily used to add another address to an existing Doorman customer.

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



Submit an address data for a customer that is already created via the Doorman API. This is primarily used to add another address to an existing Doorman customer.
{"__v":1,"_id":"56dfb44a5151a11700a1bf78","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"56dfb44a5151a11700a1bf79","ref":"","required":true,"desc":"The identifier of the customer to be retrieved.","default":"","type":"string","name":"id","in":"path"},{"_id":"56e3a669b86ac00e00d25efa","ref":"","required":false,"desc":"If postal_code query parameter is passed, then only customer address in that postal code will be returned.","default":"","type":"string","name":"postal_code","in":"query"}],"results":{"codes":[{"name":"","code":"{\n  \"object\": \"customer\",\n  \"id\": \"cus_FPHN9b7buBW5Bzh\",\n  \"first_name\": \"Kapil\",\n  \"last_name\": \"Israni\",\n  \"customer_number\": \"75TYGH\",\n  \"description\": \"Annotated some description for customer\",\n  \"scheduler_app_url\": \"https://s.doorman.co/67w29\",\n  \"metadata\": {\n    \"user_id\": \"9282\"\n  },\n  \"addresses\": [\n    {\n      \"id\": \"adr_krA87jCEjyOg41\",\n      \"street\": \"1222 Hide St\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94117\",\n      \"depot\": {\n        \"street\": \"2261 Market Street\",\n        \"street2\": \"Doorman 75TYGH\",\n        \"city\": \"San Francisco\",\n        \"state\": \"CA\",\n        \"postal_code\": \"94114\"\n      }\n    }\n  ]\n}","language":"json","status":200},{"name":"","code":"{\n  \"object\": \"error\",\n  \"type\": \"not_found\",\n  \"message\": \"Customer not found\"\n}","language":"json","status":404}]},"settings":"","url":"/customers/:id"},"body":"This is used to retrieve *Doorman Shipping Address* of a returning customer, someone who has already shopped at a retailer website and used Doorman delivery service.\n\nThe shipping address is retrieved by looking at the `depot` object in the address response. This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label.\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"This address should not be stored locally in retailer database.\",\n  \"title\": \"Doorman Shipping Address\"\n}\n[/block]","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T05:27:38.089Z","editedParams":true,"editedParams2":true,"excerpt":"Retrieves the details of an existing customer. You need to supply the unique customer identifier that was returned upon customer creation.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"get-customer-details","sync_unique":"","title":"Get customer details","type":"get","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

getGet customer details

Retrieves the details of an existing customer. You need to supply the unique customer identifier that was returned upon customer creation.

Path Params

id:
required
string
The identifier of the customer to be retrieved.

Query Params

postal_code:
string
If postal_code query parameter is passed, then only customer address in that postal code will be returned.
This is used to retrieve *Doorman Shipping Address* of a returning customer, someone who has already shopped at a retailer website and used Doorman delivery service. The shipping address is retrieved by looking at the `depot` object in the address response. This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label. [block:callout] { "type": "danger", "body": "This address should not be stored locally in retailer database.", "title": "Doorman Shipping Address" } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Result Format



This is used to retrieve *Doorman Shipping Address* of a returning customer, someone who has already shopped at a retailer website and used Doorman delivery service. The shipping address is retrieved by looking at the `depot` object in the address response. This address should be used to print the UPS, FedEx, USPS (or any other courier) shipping label. [block:callout] { "type": "danger", "body": "This address should not be stored locally in retailer database.", "title": "Doorman Shipping Address" } [/block]
{"__v":5,"_id":"56f8d1ec826ae81700f4da0d","api":{"auth":"required","examples":{"codes":[{"code":"POST /v1/rates HTTP/1.1\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n  \"address\": {\n    \"street\": \"1222 Hide St\",\n    \"street2\": \"A12\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"postal_code\": \"94117\",\n  },\n  \"items\": [\n    {\n      \"weight\": 60.89,\n      \"length\": 34,\n      \"width\": 23,\n      \"height\": 26\n    }\n  ]\n}","language":"http"}]},"params":[{"_id":"56f8d21b6135d41700d8d59f","ref":"","required":true,"desc":"Query String. Postal code for which rates need to be retrieved.","default":"","type":"string","name":"postal_code","in":"body"},{"_id":"56f8ef33826ae81700f4da31","ref":"","required":false,"desc":"Weight of the package in lbs. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"packages.weight","in":"body"},{"_id":"56f8ef33826ae81700f4da30","ref":"","required":false,"desc":"Length of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"packages.length","in":"body"},{"_id":"56f8ef33826ae81700f4da2f","ref":"","required":false,"desc":"Width of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"packages.width","in":"body"},{"_id":"56f8ef33826ae81700f4da2e","ref":"","required":false,"desc":"Height of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"packages.height","in":"body"},{"_id":"56fb554f8f21c817002af7a4","ref":"","required":false,"desc":"Customer delivery or shipping address street details.","default":"","type":"string","name":"address.street","in":"body"},{"_id":"56fb554f8f21c817002af7a3","default":"","desc":"Customer delivery or shipping address apartment #.","name":"address.street2","ref":"","required":false,"type":"string","in":"body"},{"_id":"56fb559a587e43170081e99e","default":"","desc":"Customer delivery or shipping city.","name":"address.city","ref":"","required":false,"type":"string","in":"body"},{"_id":"56fb559a587e43170081e99d","ref":"","required":false,"desc":"Customer delivery or shipping State.","default":"","type":"string","name":"address.state","in":"body"},{"_id":"56fb559a587e43170081e99c","ref":"","required":false,"desc":"Customer delivery or shipping postal code.","default":"","type":"string","name":"address.postal_code","in":"body"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"object\": \"rate\",\n  \"amount\": \"$20\",\n  \"amount_cents\": 2000,\n  \"currency\": \"usd\"\n}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"/rates"},"body":"","category":"56dfa96480023c2000634951","createdAt":"2016-03-28T06:40:44.325Z","editedParams":true,"editedParams2":true,"excerpt":"Retrieves package delivery rates.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":4,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"get-delivery-rate","sync_unique":"","title":"Get delivery rate","type":"post","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

postGet delivery rate

Retrieves package delivery rates.

Body Params

postal_code:
required
string
Query String. Postal code for which rates need to be retrieved.
packages.weight:
double
Weight of the package in lbs. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
packages.length:
double
Length of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
packages.width:
double
Width of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
packages.height:
double
Height of the package in inches. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
address.street:
string
Customer delivery or shipping address street details.
address.street2:
string
Customer delivery or shipping address apartment #.
address.city:
string
Customer delivery or shipping city.
address.state:
string
Customer delivery or shipping State.
address.postal_code:
string
Customer delivery or shipping postal code.

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



{"__v":16,"_id":"56dfb576b6b89d290048f569","api":{"auth":"required","examples":{"codes":[{"name":null,"language":"http","code":"POST /v1/customers/cus_k23TOf6Q6tyauMx/packages HTTP/1.1\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n\t\"description\": \"Red Pants\",\n  \"courier_tracking_number\": \"478934522833\",\n  // Deliver between 6pm-7pm on March 23, 2016\n  \"delivery_schedule\": {\n    \"slot_id\": \"slt_73h23fj37223\",\n  \t\"deliver_time_begin\": 18,\n    \"deliver_time_end\": 19,\n    \"deliver_on\": \"2016-03-23\"\n  }\n}"}]},"params":[{"_id":"56dff3274685db1700d94685","ref":"","in":"path","required":true,"desc":"The identifier of the customer for which package needs to be created.","default":"","type":"string","name":"id"},{"_id":"56dff38df97d422900d63814","ref":"","in":"body","required":true,"desc":"Description of this package, this is shown to the customer in the Scheduler App.","default":"","type":"string","name":"description"},{"_id":"56dff38df97d422900d63813","ref":"","in":"body","required":false,"desc":"Courier Tracking Number (e.g. UPS / FedEx). ***Required*** if `doorman_direct` is not set or is set to *false*.","default":"","type":"string","name":"courier_tracking_number"},{"_id":"56dff4255fc52e320024d775","ref":"","in":"body","required":false,"desc":"Sender description.","default":"","type":"string","name":"sender_description"},{"_id":"56dff4255fc52e320024d774","ref":"","in":"body","required":false,"desc":"Package notes (e.g. Handle with care).","default":"","type":"string","name":"notes"},{"_id":"56dff4255fc52e320024d773","ref":"","in":"body","required":false,"desc":"Should be set to *true* if this is a *Doorman Direct* package.","default":"false","type":"boolean","name":"doorman_direct"},{"_id":"56dff4255fc52e320024d772","ref":"","in":"body","required":false,"desc":"Adult signature required for delivery of this package.","default":"false","type":"boolean","name":"adult_signature"},{"_id":"56dff4255fc52e320024d771","ref":"","in":"body","required":false,"desc":"Whether this package content contains alcohol.","default":"false","type":"boolean","name":"alcohol"},{"_id":"58995871d207df0f0002190e","ref":"","in":"body","required":false,"desc":"Slot id returned with the slots endpoint. If slot_id is provided than other *delivery_schedule* parameters are not required.","default":"","type":"string","name":"delivery_schedule.slot_id"},{"_id":"56e538fa7990160e002e3fbf","ref":"","in":"body","required":false,"desc":"Date on which this package should be delivered. Date format should be in format YYYY-MM-DD.","default":"","type":"yyyy-mm-dd","name":"delivery_schedule.deliver_on"},{"_id":"56e538fa7990160e002e3fbe","ref":"","in":"body","required":false,"desc":"Military time/hour. For e.g. 18 for 6pm, 24 for 12am.","default":"","type":"int","name":"delivery_schedule.deliver_time_begin"},{"_id":"56e538fa7990160e002e3fbd","ref":"","in":"body","required":false,"desc":"Military time/hour. For e.g. 18 for 6pm, 24 for 12am.","default":"","type":"int","name":"delivery_schedule.deliver_time_end"},{"_id":"56e5d04ce2abc52900eaff9d","ref":"","in":"body","required":false,"desc":"Weight of the package in *lbs*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"weight"},{"_id":"56e5d0f2d6d551320076115e","ref":"","in":"body","required":false,"desc":"Length of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"length"},{"_id":"56e5d0f2d6d551320076115d","ref":"","in":"body","required":false,"desc":"Width of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"width"},{"_id":"56e5d0f2d6d551320076115c","ref":"","in":"body","required":false,"desc":"Height of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.","default":"","type":"double","name":"height"},{"_id":"56e527997990160e002e3fb4","ref":"","in":"body","required":false,"desc":"*Key-Value* metadata. You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.","default":"","type":"object","name":"metadata"},{"_id":"56f3a88f31db1e0e002cac85","ref":"","in":"body","required":false,"desc":"Query String parameter. Specifies the format of Doorman Direct shipping label.","default":"pdf","type":"string","name":"doorman_direct_label_type"},{"_id":"570f422cd6c6f00e00b9872d","ref":"","in":"body","required":false,"desc":"Used to identify your order.","default":"","type":"string","name":"order_id"},{"_id":"570f443c620fdd190017f773","ref":"","in":"body","required":false,"desc":"Product SKU","default":"","type":"string","name":"product_sku"}],"results":{"codes":[{"status":201,"language":"json","code":"{\n  \"object\": \"package\",\n  \"id\": \"pkg_krA8LywCEjyOg41\",\n  \"description\": \"Red Pants\",\n  \"sender_description\": \"Pants Inc.\",\n  \"courier_tracking_number\": \"2482349329424\",\n  \"notes\": \"Special Instructions go here\",\n  \"shipping_label_url\": \"https://label.doorman.co/packages/pkg_rZbc3kjTRiEKhX1\",\n  \"metadata\": {\n    \"order_id\": \"382882\"\n  }\n}","name":""},{"status":422,"language":"json","code":"{}","name":""}]},"settings":"","url":"/customers/:id/packages"},"body":"Submit a package data for a customer and its delivery schedule that is being delivered via Doorman.\n\nPackages that are being shipped to a Doorman depot via a courier service (e.g. FedEx, UPS, etc.) should provide the `courier_tracking_number`.\n\nPackages that are not being shipped to a Doorman depot via (FedEx, UPS, etc.) also called **Doorman Direct** are not required to send the `courier_tracking_number`, they should however set `doorman_direct` to *true*. This will also return `shipping_label_url` that points to a URL -- which should be used to print the shipping label for *Doorman Direct* packages.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"What is Doorman Direct?\",\n  \"body\": \"Doorman Direct are packages are LTL-ed directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package.\"\n}\n[/block]\nIf a package requires an ID check, `adult_signature` should be set to true. By default the value is false. If the package contains alcohol, setting the value of `alcohol` parameter to *true* will also set the `adult_signature` to true.\n\nYou can also provide `sender_description` with package info, this is useful information to provide to your customers when scheduling or receiving their packages. You can also set a default value for this field in the Doorman account settings.\n\nPlease note, that delivery schedule data is optional -- that's because when we receive the packages at the Doorman depot, we will notify the customer via email and prompt the customer for a delivery time & date.\n\nThe response of the API returns a unique package `id`. This ID can be used later to retrieve package information and delivery status, so retailers are advised to store the ID in their database.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Package Arrival Notification\",\n  \"body\": \"When a customer's package arrives at our depot, we will notify the customer and include *Scheduler App* link in the notification. This notification is in the form of either an email or an SMS text.\"\n}\n[/block]","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T05:32:38.661Z","editedParams":true,"editedParams2":true,"excerpt":"Creates a Package for delivery","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":5,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"create-delivery-package","sync_unique":"","title":"Create delivery package","type":"post","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

postCreate delivery package

Creates a Package for delivery

Path Params

id:
required
string
The identifier of the customer for which package needs to be created.

Body Params

description:
required
string
Description of this package, this is shown to the customer in the Scheduler App.
courier_tracking_number:
string
Courier Tracking Number (e.g. UPS / FedEx). ***Required*** if `doorman_direct` is not set or is set to *false*.
sender_description:
string
Sender description.
notes:
string
Package notes (e.g. Handle with care).
doorman_direct:
booleanfalse
Should be set to *true* if this is a *Doorman Direct* package.
adult_signature:
booleanfalse
Adult signature required for delivery of this package.
alcohol:
booleanfalse
Whether this package content contains alcohol.
delivery_schedule.slot_id:
string
Slot id returned with the slots endpoint. If slot_id is provided than other *delivery_schedule* parameters are not required.
delivery_schedule.deliver_on:
yyyy-mm-dd
Date on which this package should be delivered. Date format should be in format YYYY-MM-DD.
delivery_schedule.deliver_time_begin:
integer
Military time/hour. For e.g. 18 for 6pm, 24 for 12am.
delivery_schedule.deliver_time_end:
integer
Military time/hour. For e.g. 18 for 6pm, 24 for 12am.
weight:
double
Weight of the package in *lbs*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
length:
double
Length of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
width:
double
Width of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
height:
double
Height of the package in *inches*. Up to 6 digits in front and 2 digits after the decimal separator are accepted.
metadata:
object
*Key-Value* metadata. You can have up to 10 keys, with key names up to 40 characters long and values up to 500 characters long.
doorman_direct_label_type:
stringpdf
Query String parameter. Specifies the format of Doorman Direct shipping label.
order_id:
string
Used to identify your order.
product_sku:
string
Product SKU
Submit a package data for a customer and its delivery schedule that is being delivered via Doorman. Packages that are being shipped to a Doorman depot via a courier service (e.g. FedEx, UPS, etc.) should provide the `courier_tracking_number`. Packages that are not being shipped to a Doorman depot via (FedEx, UPS, etc.) also called **Doorman Direct** are not required to send the `courier_tracking_number`, they should however set `doorman_direct` to *true*. This will also return `shipping_label_url` that points to a URL -- which should be used to print the shipping label for *Doorman Direct* packages. [block:callout] { "type": "info", "title": "What is Doorman Direct?", "body": "Doorman Direct are packages are LTL-ed directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package." } [/block] If a package requires an ID check, `adult_signature` should be set to true. By default the value is false. If the package contains alcohol, setting the value of `alcohol` parameter to *true* will also set the `adult_signature` to true. You can also provide `sender_description` with package info, this is useful information to provide to your customers when scheduling or receiving their packages. You can also set a default value for this field in the Doorman account settings. Please note, that delivery schedule data is optional -- that's because when we receive the packages at the Doorman depot, we will notify the customer via email and prompt the customer for a delivery time & date. The response of the API returns a unique package `id`. This ID can be used later to retrieve package information and delivery status, so retailers are advised to store the ID in their database. [block:callout] { "type": "info", "title": "Package Arrival Notification", "body": "When a customer's package arrives at our depot, we will notify the customer and include *Scheduler App* link in the notification. This notification is in the form of either an email or an SMS text." } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



Submit a package data for a customer and its delivery schedule that is being delivered via Doorman. Packages that are being shipped to a Doorman depot via a courier service (e.g. FedEx, UPS, etc.) should provide the `courier_tracking_number`. Packages that are not being shipped to a Doorman depot via (FedEx, UPS, etc.) also called **Doorman Direct** are not required to send the `courier_tracking_number`, they should however set `doorman_direct` to *true*. This will also return `shipping_label_url` that points to a URL -- which should be used to print the shipping label for *Doorman Direct* packages. [block:callout] { "type": "info", "title": "What is Doorman Direct?", "body": "Doorman Direct are packages are LTL-ed directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package." } [/block] If a package requires an ID check, `adult_signature` should be set to true. By default the value is false. If the package contains alcohol, setting the value of `alcohol` parameter to *true* will also set the `adult_signature` to true. You can also provide `sender_description` with package info, this is useful information to provide to your customers when scheduling or receiving their packages. You can also set a default value for this field in the Doorman account settings. Please note, that delivery schedule data is optional -- that's because when we receive the packages at the Doorman depot, we will notify the customer via email and prompt the customer for a delivery time & date. The response of the API returns a unique package `id`. This ID can be used later to retrieve package information and delivery status, so retailers are advised to store the ID in their database. [block:callout] { "type": "info", "title": "Package Arrival Notification", "body": "When a customer's package arrives at our depot, we will notify the customer and include *Scheduler App* link in the notification. This notification is in the form of either an email or an SMS text." } [/block]
{"__v":1,"_id":"56dfdb27f97d422900d637dc","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"56dfdb27f97d422900d637dd","default":"","desc":"The identifier of the package to be retrieved.","name":"id","ref":"","required":true,"type":"string","in":"path"}],"results":{"codes":[{"name":"","code":"{\n  \"object\": \"package\",\n  \"id\": \"pkg_krA8LywCEjyOg41\",\n  \"description\": \"Red Pants\",\n  \"sender_description\": \"Pants Inc.\",\n  \"courier_tracking_number\": \"2482349329424\",\n  \"courier_name\": \"USPS\",\n  \"notes\": \"Special Instructions go here\",\n  \"adult_signature\": true,\n  \"state\": \"in_transit|at_depot_confirmed|scheduled|delivered\",\n  \"shipping_label_url\": \"https://label.doorman.co/packages/pkg_krA8LywCEjyOg41.zpl\",\n  \"metadata\": {\n    \"order_id\": \"382882\"\n  },\n  \"delivery_address\": {\n    \"street\": \"425 1st Street\",\n    \"street2\": \"\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"postal_code\": \"94114\"\n  },\n  \"delivery_schedules\": [\n    {\n      \"deliver_time_begin\": 20,\n      \"deliver_time_end\": 22,\n      \"deliver_on\": \"2014-12-31\",\n      \"created_by\": \"customer\"\n    }\n  ],\n  \"delivery\": {\n    \"signature_url\": \"http://signature/url\",\n    \"delivered_at\": \"2014-03-03T13:20:27-08:00\"\n  },\n  \"delivery_attempts\": [\n    {\n      \"success\": false,\n      \"failure_reason\": \"Customer not home\",\n      \"attempted_at\": \"2014-03-03T13:20:27-08:00\"\n    }\n  ],\n  \"tracking_details\": [\n    {\n      \"message\": \"Arrived\",\n      \"tag\": \"Delivered\",\n      \"courier_slug\": \"fedex\",\n      \"courier_name\": \"FedEx\",\n      \"city\": \"LEWISBERRY\",\n      \"state\": \"IL\",\n      \"postal_code\": \"94114\",\n      \"country\": \"US\",\n      \"time\": \"2014-03-03T13:20:27-08:00\"\n    },\n    {\n      \"message\": \"Departed Courier Facility\",\n      \"courier_slug\": \"fedex\",\n      \"courier_name\": \"FedEx\",\n      \"city\": \"FREDERICKSBURG\",\n      \"state\": \"IL\",\n      \"postal_code\": \"94114\",\n      \"country\": \"US\",\n      \"time\": \"2014-03-02T16:00:00-08:00\"\n    }\n  ]\n}","language":"json","status":200},{"name":"","code":"{\n  \"object\": \"error\",\n  \"type\": \"not_found\",\n  \"message\": \"Package not found\"\n}","language":"json","status":404}]},"settings":"","url":"/packages/:id"},"body":"Retrieves the package with a given ID. You need to supply the unique package ID that was returned upon package creation.\n\nThis will return `404` if the package id cannot be found.","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T08:13:27.253Z","editedParams":true,"editedParams2":true,"excerpt":"Get Package info and delivery status of packages created by the retailer.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":6,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"get-package-delivery-details","sync_unique":"","title":"Get package delivery details","type":"get","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

getGet package delivery details

Get Package info and delivery status of packages created by the retailer.

Path Params

id:
required
string
The identifier of the package to be retrieved.
Retrieves the package with a given ID. You need to supply the unique package ID that was returned upon package creation. This will return `404` if the package id cannot be found.

Definition

{{ api_url }}{{ page_api_url }}

Result Format



Retrieves the package with a given ID. You need to supply the unique package ID that was returned upon package creation. This will return `404` if the package id cannot be found.
{"__v":0,"_id":"56dfdb7ee59c6d170004d267","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"56dfdb7ee59c6d170004d268","default":"","desc":"The identifier of the package to be deleted.","name":"id","ref":"","required":true,"type":"string","in":"path"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"deleted\": true,\n  \"id\": \"pkg_krA8LywCEjyOg41\"\n}","name":""},{"status":404,"language":"json","code":"{\n  \"object\": \"error\",\n  \"type\": \"not_found\",\n  \"message\": \"Package not found\"\n}","name":""},{"code":"{\n  \"object\": \"error\",\n  \"message\": \"Package already deleted\"\n}","language":"json","status":422},{"code":"{\n  \"object\": \"error\",\n  \"message\": \"Package out for delivery, cannot be deleted\"\n}","language":"json","status":423}]},"settings":"","url":"/packages/:id"},"body":"If package deletion is successful, the request will return a object with the deleted package ID and a deleted flag upon success. If the package has already been deleted, this call will return an error.\n\nThis will return `404` if the package ID cannot be found.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Deleted package at depot\",\n  \"body\": \"If a deleted package arrives at our depot, the package will be returned to the sender.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"If an attempt is made to delete a package that is out for delivery, this request will return `423` error response\",\n  \"title\": \"\"\n}\n[/block]","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T08:14:54.209Z","editedParams":true,"editedParams2":true,"excerpt":"Delete an existing package. You need to supply the unique package ID that was returned upon package creation.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":7,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"delete-delivery-package","sync_unique":"","title":"Delete delivery package","type":"delete","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

deleteDelete delivery package

Delete an existing package. You need to supply the unique package ID that was returned upon package creation.

Path Params

id:
required
string
The identifier of the package to be deleted.
If package deletion is successful, the request will return a object with the deleted package ID and a deleted flag upon success. If the package has already been deleted, this call will return an error. This will return `404` if the package ID cannot be found. [block:callout] { "type": "info", "title": "Deleted package at depot", "body": "If a deleted package arrives at our depot, the package will be returned to the sender." } [/block] [block:callout] { "type": "warning", "body": "If an attempt is made to delete a package that is out for delivery, this request will return `423` error response", "title": "" } [/block]

Definition

{{ api_url }}{{ page_api_url }}

Result Format



If package deletion is successful, the request will return a object with the deleted package ID and a deleted flag upon success. If the package has already been deleted, this call will return an error. This will return `404` if the package ID cannot be found. [block:callout] { "type": "info", "title": "Deleted package at depot", "body": "If a deleted package arrives at our depot, the package will be returned to the sender." } [/block] [block:callout] { "type": "warning", "body": "If an attempt is made to delete a package that is out for delivery, this request will return `423` error response", "title": "" } [/block]
{"__v":0,"_id":"577178e82f164429007710fd","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"577178e82f164429007710fe","default":"","desc":"Identifier of the return package to be returned.","name":"id","ref":"","required":true,"type":"string","in":"path"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"live_mode\": true,\n  \"object\": \"return_package\",\n  \"api_id\": \"rkg_UH0KjZPFv3wRkjB\",\n  \"description\": \"Red Shirt\",\n  \"courier_tracking_number\": \"1Z1234567ABC\",\n  \"notes\": \"Test notes\",\n  \"order_id\": \"Order 45\",\n  \"product_sku\": \"K34333\"\n}","name":""},{"status":404,"language":"json","code":"{\n  \"live_mode\": true,\n  \"object\": \"error\",\n  \"type\": \"not_found\",\n  \"message\": \"Return package not found\"\n}","name":""}]},"settings":"","url":"/return_packages/:id"},"body":"Will return `404` if the return package is not found.","category":"56dfa96480023c2000634951","createdAt":"2016-06-27T19:05:12.464Z","editedParams":true,"editedParams2":true,"excerpt":"Retrieves the return package with a given ID. You need to supply the unique return package ID that was returned upon return package creation.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":8,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"return-pickup-details","sync_unique":"","title":"Get return pickup package details","type":"get","updates":[],"user":"56e217e930de321700b7e8cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

getGet return pickup package details

Retrieves the return package with a given ID. You need to supply the unique return package ID that was returned upon return package creation.

Path Params

id:
required
string
Identifier of the return package to be returned.
Will return `404` if the return package is not found.

Definition

{{ api_url }}{{ page_api_url }}

Result Format



Will return `404` if the return package is not found.
{"__v":5,"_id":"57717c7f2d37b20e00c84597","api":{"auth":"required","examples":{"codes":[{"language":"http","code":"POST /v1/customers/cus_k23TOf6Q6tyauMx/return_packages HTTP/1.1\nContent-Type: application/json\nAuthorization: Bearer YOUR_API_KEY\n\n{\n\t\"description\": \"Red Pants\",\n  \"courier_tracking_number\": \"1Z1234ABCD\",\n  \"delivery_schedule\": {\n    \"slot_id\": \"slt_73h23fj37223\",\n  \t\"deliver_time_begin\": 18,\n    \"deliver_time_end\": 19,\n    \"deliver_on\": \"2016-03-23\"\n  }\n}"}]},"params":[{"_id":"57717cd82d37b20e00c8459a","ref":"","in":"path","required":true,"desc":"The ID of the customer for which you are creating a return package.","default":"","type":"string","name":"id"},{"_id":"57717eab5fc6cc190052513f","ref":"","in":"body","required":true,"desc":"Description of this package, this is shown to the customer in the Scheduler App.","default":"","type":"string","name":"description"},{"_id":"57717eab5fc6cc190052513e","ref":"","in":"body","required":false,"desc":"Courier tracking number (e.g. UPS/FedEx).","default":"","type":"string","name":"courier_tracking_number"},{"_id":"57717eab5fc6cc190052513d","ref":"","in":"body","required":false,"desc":"Package notes (e.g. Handle with care).","default":"","type":"string","name":"notes"},{"_id":"58995bf083f743190077bbdb","ref":"","in":"body","required":false,"desc":"Slot id returned with the slots endpoint. If slot_id is provided than other *delivery_schedule* parameters are not required.","default":"","type":"string","name":"delivery_schedule.slot_id"},{"_id":"57717eab5fc6cc190052513c","ref":"","in":"body","required":true,"desc":"Date on which this return package should be picked up. Date format should be in format YYYY-MM-DD.","default":"","type":"yyyy-mm-dd","name":"delivery_schedule.deliver_on"},{"_id":"577182fc3dd24019004c9138","ref":"","in":"body","required":true,"desc":"Hour to begin pickup of return package (e.g. 18 for 6:00 pm).","default":"","type":"int","name":"delivery_schedule.deliver_time_begin"},{"_id":"577182fb3dd24019004c9137","ref":"","in":"body","required":true,"desc":"Hour to end pickup of return package (e.g. 20 for 8:00 pm).","default":"","type":"int","name":"delivery_schedule.deliver_time_end"},{"_id":"5771832b2f1644290077111d","ref":"","in":"body","required":false,"desc":"Used to identify your order.","default":"","type":"string","name":"order_id"},{"_id":"5771832b2f1644290077111c","ref":"","in":"body","required":false,"desc":"Product SKU.","default":"","type":"string","name":"product_sku"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"live_mode\": true,\n  \"object\": \"return_package\",\n  \"api_id\": \"rkg_HkCY7dp5RHhly6d\",\n  \"description\": \"Test return package 1\",\n  \"courier_tracking_number\": \"1Z1234567\",\n  \"notes\": \"Test notes\",\n  \"order_id\": \"Order 45\",\n  \"product_sku\": \"K34333\"\n}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"/customers/:id/return_packages"},"body":"","category":"56dfa96480023c2000634951","createdAt":"2016-06-27T19:20:31.345Z","editedParams":true,"editedParams2":true,"excerpt":"Creates a return package.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":9,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"create-return-pickup","sync_unique":"","title":"Create return pickup package","type":"post","updates":[],"user":"56e217e930de321700b7e8cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

postCreate return pickup package

Creates a return package.

Path Params

id:
required
string
The ID of the customer for which you are creating a return package.

Body Params

description:
required
string
Description of this package, this is shown to the customer in the Scheduler App.
courier_tracking_number:
string
Courier tracking number (e.g. UPS/FedEx).
notes:
string
Package notes (e.g. Handle with care).
delivery_schedule.slot_id:
string
Slot id returned with the slots endpoint. If slot_id is provided than other *delivery_schedule* parameters are not required.
delivery_schedule.deliver_on:
required
yyyy-mm-dd
Date on which this return package should be picked up. Date format should be in format YYYY-MM-DD.
delivery_schedule.deliver_time_begin:
required
integer
Hour to begin pickup of return package (e.g. 18 for 6:00 pm).
delivery_schedule.deliver_time_end:
required
integer
Hour to end pickup of return package (e.g. 20 for 8:00 pm).
order_id:
string
Used to identify your order.
product_sku:
string
Product SKU.

Definition

{{ api_url }}{{ page_api_url }}

Examples


Result Format



{"__v":0,"_id":"577183d72d37b20e00c845b5","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"577183d72d37b20e00c845b6","ref":"","required":true,"desc":"The identifier of the return package to be deleted.","default":"","type":"string","name":"id","in":"path"}],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"/return_packages/:id"},"body":"Coming soon!","category":"56dfa96480023c2000634951","createdAt":"2016-06-27T19:51:51.068Z","editedParams":true,"editedParams2":true,"excerpt":"Delete an existing return package. You need to supply the unique return package ID that was returned upon package creation.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":10,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"delete-return-pickup-package","sync_unique":"","title":"Delete return pickup package","type":"delete","updates":[],"user":"56e217e930de321700b7e8cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

deleteDelete return pickup package

Delete an existing return package. You need to supply the unique return package ID that was returned upon package creation.

Path Params

id:
required
string
The identifier of the return package to be deleted.
Coming soon!

Definition

{{ api_url }}{{ page_api_url }}

Result Format



Coming soon!
{"__v":10,"_id":"56dfdea79032720e00032b8f","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"56e5426869d7890e000ec260","default":"","desc":"Postal code of shipping address where package needs to be delivered or picked.","in":"query","name":"postal_code","ref":"","required":true,"type":"string"},{"_id":"56ea5a8eed3ad20e004e59bb","ref":"","in":"query","required":false,"desc":"Number of days for which delivery window schedule should be returned, default value is 30. Max is 90.","default":"30","type":"int","name":"days"},{"_id":"57509d481999fb1900f295d8","default":"%-l:%M %P","desc":"Format to use for displayed times. See: http://ruby-doc.org/core-2.3.0/Time.html#method-i-strftime for a complete list of possible values.","in":"query","name":"format","ref":"","required":false,"type":"string"},{"_id":"57b244ea8a92cc1700e1539f","ref":"","in":"query","required":false,"desc":"A custom filter parameter used to select a subset of available delivery windows (must be configured by Doorman).","default":"","type":"string","name":"filter"}],"results":{"codes":[{"language":"json","code":"{\n  \"postal_code\": \"94103\",\n  \"time_zone\": \"Pacific Time (US & Canada)\",\n  \"iana_time_zone\": \"America/Los_Angeles\",\n  \"days\": {\n    \"2016-09-23\": {\n      \"date\": \"2016-09-23\",\n      \"day_of_week\": 5,\n      \"day_name\": \"Friday\",\n      \"slot_count\": 8,\n      \"slots\": [\n        {\n          \"id\": \"slt_ZXVL2SBr8CnKz8J\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T06:00:00Z\",\n          \"begin_timestamp\": 1474696800,\n          \"display_begin_time\": \"11:00 pm\",\n          \"end_at\": \"2016-09-24T07:00:00Z\",\n          \"end_timestamp\": 1474700400,\n          \"display_end_time\": \"12:00 am\",\n          \"display_time_range\": \"11:00 pm - 12:00 am\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_Y2x9KU7rt1REodz\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T05:00:00Z\",\n          \"begin_timestamp\": 1474693200,\n          \"display_begin_time\": \"10:00 pm\",\n          \"end_at\": \"2016-09-24T06:00:00Z\",\n          \"end_timestamp\": 1474696800,\n          \"display_end_time\": \"11:00 pm\",\n          \"display_time_range\": \"10:00 pm - 11:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_5Npgj6gAve1jgOo\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T04:00:00Z\",\n          \"begin_timestamp\": 1474689600,\n          \"display_begin_time\": \"9:00 pm\",\n          \"end_at\": \"2016-09-24T05:00:00Z\",\n          \"end_timestamp\": 1474693200,\n          \"display_end_time\": \"10:00 pm\",\n          \"display_time_range\": \"9:00 pm - 10:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_oPCDlwqCMrqHHwz\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T03:00:00Z\",\n          \"begin_timestamp\": 1474686000,\n          \"display_begin_time\": \"8:00 pm\",\n          \"end_at\": \"2016-09-24T04:00:00Z\",\n          \"end_timestamp\": 1474689600,\n          \"display_end_time\": \"9:00 pm\",\n          \"display_time_range\": \"8:00 pm - 9:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_ckxawn06V9iEBR1\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T02:00:00Z\",\n          \"begin_timestamp\": 1474682400,\n          \"display_begin_time\": \"7:00 pm\",\n          \"end_at\": \"2016-09-24T03:00:00Z\",\n          \"end_timestamp\": 1474686000,\n          \"display_end_time\": \"8:00 pm\",\n          \"display_time_range\": \"7:00 pm - 8:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_cVz3eRFDebiePCm\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T01:00:00Z\",\n          \"begin_timestamp\": 1474678800,\n          \"display_begin_time\": \"6:00 pm\",\n          \"end_at\": \"2016-09-24T02:00:00Z\",\n          \"end_timestamp\": 1474682400,\n          \"display_end_time\": \"7:00 pm\",\n          \"display_time_range\": \"6:00 pm - 7:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_tpvqCM8Lwk76J0L\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-24T00:00:00Z\",\n          \"begin_timestamp\": 1474675200,\n          \"display_begin_time\": \"5:00 pm\",\n          \"end_at\": \"2016-09-24T01:00:00Z\",\n          \"end_timestamp\": 1474678800,\n          \"display_end_time\": \"6:00 pm\",\n          \"display_time_range\": \"5:00 pm - 6:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        },\n        {\n          \"id\": \"slt_a1AqK4iSfbXJ7VW\",\n          \"deliver_on\": \"2016-09-23\",\n          \"max_capacity\": 100,\n          \"used_capacity\": 0,\n          \"available_capacity\": 100,\n          \"begin_at\": \"2016-09-23T23:00:00Z\",\n          \"begin_timestamp\": 1474671600,\n          \"display_begin_time\": \"4:00 pm\",\n          \"end_at\": \"2016-09-24T00:00:00Z\",\n          \"end_timestamp\": 1474675200,\n          \"display_end_time\": \"5:00 pm\",\n          \"display_time_range\": \"4:00 pm - 5:00 pm\",\n          \"cut_off_at\": \"2016-09-23T21:00:00Z\",\n          \"cut_off_timestamp\": 1474664400,\n          \"display_cut_off_time\": \"2:00 pm\",\n          \"slot_sec\": 3600,\n          \"full\": false\n        }\n      ]\n    }\n  }\n}","status":200}]},"settings":"","url":"/slots"},"body":"Doorman currently is a scheduled evening delivery service.","category":"56dfa96480023c2000634951","createdAt":"2016-03-09T08:28:23.291Z","editedParams":true,"editedParams2":true,"excerpt":"Retrieves delivery times and days.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":11,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"get-delivery-time-date","sync_unique":"","title":"Get delivery slots","type":"get","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

getGet delivery slots

Retrieves delivery times and days.

Query Params

postal_code:
required
string
Postal code of shipping address where package needs to be delivered or picked.
days:
integer30
Number of days for which delivery window schedule should be returned, default value is 30. Max is 90.
format:
string%-l:%M %P
Format to use for displayed times. See: http://ruby-doc.org/core-2.3.0/Time.html#method-i-strftime for a complete list of possible values.
filter:
string
A custom filter parameter used to select a subset of available delivery windows (must be configured by Doorman).
Doorman currently is a scheduled evening delivery service.

Definition

{{ api_url }}{{ page_api_url }}

Result Format



Doorman currently is a scheduled evening delivery service.
{"__v":46,"_id":"56e686d200ea361700d4fa2e","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"## Getting Started\n\n### What is Doorman?\nDoorman is a last mile scheduled package delivery and returns pickup service. Using Doorman, retailers can offer Doorman's scheduled package delivery and returns service to their online customers.\n\n### What is Doorman Direct?\nDoorman Direct are packages are [LTL-ed](https://en.wikipedia.org/wiki/Less_than_truckload_shipping) directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package.\n\n### What is a Doorman Shipping Address?\nThis is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot.\n\n### How can I offer scheduled delivery to my customers?\nOnline retailers can offer scheduled delivery to their customers at checkout by integrating the Doorman API. See the [API Overview](doc:api) reference for more details. \n\n### Why do I still need to use shipping carriers like UPS, FedEx, USPS etc. for delivery?\nDoorman is a last mile delivery service, so traditional carriers are still required to ship your package from your fulfillment center to the local Doorman depot. Once the package arrives at one of our depots, Doorman will complete the last mile of the local delivery.\n\n### Can I skip UPS, FedEx, USPS, etc. completely?\nYes, you can. We offer **Doorman Direct** and retailers can LTL packages directly from their warehouse to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. Please contact **partnerships@doorman.co** for more information.\n\n### Can you notify the Retailer when packages are delivered to the customer?\nYes. Once you integrate with the Doorman API, you can receive events that are pushed from our systems to your servers. Please see the [Webhooks](Webhooks) guide for more details.\n\n### Can the customer reschedule delivery?\nAbsolutely. When the package arrives at the Doorman depot, we will notify the customer and send them a link to a Web App, also called *Web Scheduler App*. Using this link/app, the customer can choose to reschedule delivery and receive their package at a different time/date. Please Note: this is a Web App and does not require any app install on customer's mobile device.\n\n## Platform\n\n### What does a Doorman enabled checkout flow look like? \nThe checkout flow UX is controlled by the retailer, that is you, since e-commerce stores & retailers have unique workflow requirements. We will be happy to share with you suggested wireframes & UX guidelines for the Doorman Delivery option\n\n### What is the Doorman Dashboard?\nAn intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down.\n\n### What is the Doorman Scheduler?\nA co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label.\n\n### Do you integrate with any e-commerce or shipping platforms?\nWe currently integrate with Magento and ShipCompliant. Please contact us for more information about these integrations.","category":"579bb8e88627551900433cd9","createdAt":"2016-03-14T09:39:30.729Z","excerpt":"Doorman API Frequently Asked Questions","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","next":{"description":"","pages":[]},"order":0,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"faq","sync_unique":"","title":"FAQ","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

FAQ

Doorman API Frequently Asked Questions

## Getting Started ### What is Doorman? Doorman is a last mile scheduled package delivery and returns pickup service. Using Doorman, retailers can offer Doorman's scheduled package delivery and returns service to their online customers. ### What is Doorman Direct? Doorman Direct are packages are [LTL-ed](https://en.wikipedia.org/wiki/Less_than_truckload_shipping) directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package. ### What is a Doorman Shipping Address? This is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot. ### How can I offer scheduled delivery to my customers? Online retailers can offer scheduled delivery to their customers at checkout by integrating the Doorman API. See the [API Overview](doc:api) reference for more details. ### Why do I still need to use shipping carriers like UPS, FedEx, USPS etc. for delivery? Doorman is a last mile delivery service, so traditional carriers are still required to ship your package from your fulfillment center to the local Doorman depot. Once the package arrives at one of our depots, Doorman will complete the last mile of the local delivery. ### Can I skip UPS, FedEx, USPS, etc. completely? Yes, you can. We offer **Doorman Direct** and retailers can LTL packages directly from their warehouse to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. Please contact **partnerships@doorman.co** for more information. ### Can you notify the Retailer when packages are delivered to the customer? Yes. Once you integrate with the Doorman API, you can receive events that are pushed from our systems to your servers. Please see the [Webhooks](Webhooks) guide for more details. ### Can the customer reschedule delivery? Absolutely. When the package arrives at the Doorman depot, we will notify the customer and send them a link to a Web App, also called *Web Scheduler App*. Using this link/app, the customer can choose to reschedule delivery and receive their package at a different time/date. Please Note: this is a Web App and does not require any app install on customer's mobile device. ## Platform ### What does a Doorman enabled checkout flow look like? The checkout flow UX is controlled by the retailer, that is you, since e-commerce stores & retailers have unique workflow requirements. We will be happy to share with you suggested wireframes & UX guidelines for the Doorman Delivery option ### What is the Doorman Dashboard? An intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down. ### What is the Doorman Scheduler? A co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label. ### Do you integrate with any e-commerce or shipping platforms? We currently integrate with Magento and ShipCompliant. Please contact us for more information about these integrations.
## Getting Started ### What is Doorman? Doorman is a last mile scheduled package delivery and returns pickup service. Using Doorman, retailers can offer Doorman's scheduled package delivery and returns service to their online customers. ### What is Doorman Direct? Doorman Direct are packages are [LTL-ed](https://en.wikipedia.org/wiki/Less_than_truckload_shipping) directly from a retailer or warehouse location to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. These packages can be created by setting `doorman_direct` to *true*. The response in this case will return `shipping_label_url` that should be used to print a shipping label for Doorman Direct package. ### What is a Doorman Shipping Address? This is the address of our Doorman depot that also has an embedded *Customer Number* built in (in address line # 2) that is unique for every customer. This Customer Number helps us identify packages and notify the customer when the packages arrive at our depot. ### How can I offer scheduled delivery to my customers? Online retailers can offer scheduled delivery to their customers at checkout by integrating the Doorman API. See the [API Overview](doc:api) reference for more details. ### Why do I still need to use shipping carriers like UPS, FedEx, USPS etc. for delivery? Doorman is a last mile delivery service, so traditional carriers are still required to ship your package from your fulfillment center to the local Doorman depot. Once the package arrives at one of our depots, Doorman will complete the last mile of the local delivery. ### Can I skip UPS, FedEx, USPS, etc. completely? Yes, you can. We offer **Doorman Direct** and retailers can LTL packages directly from their warehouse to a Doorman depot. This allows a retailer to completely skip a traditional courier like UPS or USPS. Please contact **partnerships@doorman.co** for more information. ### Can you notify the Retailer when packages are delivered to the customer? Yes. Once you integrate with the Doorman API, you can receive events that are pushed from our systems to your servers. Please see the [Webhooks](Webhooks) guide for more details. ### Can the customer reschedule delivery? Absolutely. When the package arrives at the Doorman depot, we will notify the customer and send them a link to a Web App, also called *Web Scheduler App*. Using this link/app, the customer can choose to reschedule delivery and receive their package at a different time/date. Please Note: this is a Web App and does not require any app install on customer's mobile device. ## Platform ### What does a Doorman enabled checkout flow look like? The checkout flow UX is controlled by the retailer, that is you, since e-commerce stores & retailers have unique workflow requirements. We will be happy to share with you suggested wireframes & UX guidelines for the Doorman Delivery option ### What is the Doorman Dashboard? An intuitive and fully featured dashboard that provides real-time visibility into shipping tracking and every moment of the delivery and return process. It's the fastest way for retailers to access and answer customer questions around both package delivery and returns. Leverage insights & detailed delivery reports and solve issues to keep your customers delighted and your costs down. ### What is the Doorman Scheduler? A co-branded web app that allows customers to schedule or reschedule their Doorman delivery or Doorman return. It's a responsive web app and does not require any app installation on a user's mobile device. Customers can use the web app to schedule a pickup time & date for items that are packed, taped and affixed with a prepaid shipping label. ### Do you integrate with any e-commerce or shipping platforms? We currently integrate with Magento and ShipCompliant. Please contact us for more information about these integrations.
{"__v":4,"_id":"56dfa496b6b89d290048f515","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Please contact us for API access at **partnerships@doorman.co**","category":"579bb8e88627551900433cd9","createdAt":"2016-03-09T04:20:38.031Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"parentDoc":null,"project":"56df980db99554320038a0c3","slug":"feedback-issues","sync_unique":"","title":"Contact","type":"basic","updates":[],"user":"56df976ffc6f8d32003262cf","version":"56df980eb99554320038a0c6","childrenPages":[]}

Contact


Please contact us for API access at **partnerships@doorman.co**
Please contact us for API access at **partnerships@doorman.co**