Introduction
This API is a REST service that allows our partners to book a Project with GoShare programmatically. It offers an object-oriented interface that communicates through HTTP responses in JSON format.
URLs
Use the appropriate base URL from the table below, according to the environment you wish to request.
Environment | URL |
---|---|
Sandbox | https://api.staging.goshare.co |
Production | https://api.goshare.co |
Authentication
The GoShare engineering team will provide you with a set of two API keys: one for use in the sandbox environment and another for production.
Your application must authenticate every request with the appropriate key in an api-key
header.
Getting Started
How GoShare Works
GoShare handles delivery requests creating a Project. A Project will be carried out by one or two individuals. These individuals are referred to as Delivery Pros. A SubProject holds information regarding the Delivery Pro, the vehicle type, and the equipment that Delivery Pro should bring.
If a Project booked through this API requires more workforce than one Delivery Pro can offer, it may be necessary to request another Delivery Pro. Add another SubProject to the booking payload to order a second Delivery Pro.
The term Driver will always refer to the Delivery Pro of the first SubProject. However, if a second SubProject is requested, its Delivery Pro will be referred to as the Helper.
The API accepts requests for auxiliary equipment. You can find the list of available equipment here. Only the first SubProject should contain a list of equipment.
All Delivery Pros will work on all locations. Each location is referred to as a Stop. There must be at least two stops, and the first is always pick-up only, while the last one is always drop-off only. GoShare supports multiple pick-ups and drop-offs, as long as the total distance among them does not exceed 2500 miles.
The API also expects a description of the items being moved. That way, we can price the Project more accurately. You can use the search items endpoint to make sure you send the correct info related to the items in the Project.
Every item must be attached to precisely two stops: the pick-up and the drop-off.
Minimal working example
Sample payload for
POST /v1/projects
andPOST /v1/projects/estimate
{
"startDateTime": "2026-06-17 14:00:00",
"subProjects": [
{
"vehicle": "pickup_truck"
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "400 West Broadway",
"city": "San Diego",
"state": "CA",
"country": "US",
"county": "San Diego County",
"placeName": "Carlsbad Premium Outlets",
"postalCode": "92008"
},
"contact": {
"name": "Carol",
"phone": "333455521"
},
"hasElevator": false,
"flightOfStairs": 3
},
"pickupItems": [
{
"id": 575,
"quantity": 2
},
{
"name": "Custom Item",
"weight": 350,
"quantity": 1
}
]
},
{
"sequence": 2,
"place": {
"coordinates": {
"latitude": 32.7715545,
"longitude": -117.0768553
},
"contact": {
"name": "Carl",
"phone": "333455243"
},
"hasElevator": true,
"flightOfStairs": 0
},
"dropOffItems": [
{
"id": 575,
"quantity": 2
},
{
"name": "Custom Item",
"weight": 350,
"quantity": 1
}
]
}
]
}
The GoShare API provides an endpoint to estimate the cost of a Project. Both that endpoint and the actual Project booking endpoint accept the same payload.
Aside there is an example of the minimal data these endpoints expect.
The Project object requires at least three keys: startDateTime
, a subProjects
array, and a stops
array.
startDateTime
startDateTime
must use the format YYYY-MM-DD HH:mm:ss
. This DateTime object represents time local to the address.
GoShare will figure out the time zone.
subProjects
The subProjects
array will tell GoShare how many Delivery Pros and what vehicles we should allocate to the Project.
The complete set of properties for the SubProject object can be found here, but at least the
vehicle type must be provided.
This endpoint exposes the list of vehicle types, and from its response, only the alias
value of the desired vehicle should be used on the SubProject object.
GoShare currently supports only Projects with one or two SubProjects.
stops
The stops
array contains information regarding where the Delivery Pros will execute the Project. At least two are
required, but GoShare supports up to 27 stops in a single Project.
The Stop object has a higher degree of complexity because of its nested properties. It is further documented here.
This object comprises three properties: sequence
, place
and either pickupItems
or dropOffItems
, or both.
- The request must contain the order in which the Delivery Pros will execute the Project. Use the
sequence
property to determine the order of the stops. Furthermore, sequence number 1 will always be considered pick-up. When doing a multi-stop Project, remember that GoShare does not optimize routes. That means the system will calculate the pricing considering the sequence provided. - The
place
object describes the location itself. It can become an overwhelming object, but either anaddress
or a set ofcoordinates
will suffice. If theaddress
object is used, it must have at least thestreet
, thecity
and thecountry
properties. Other details can be provided in this object, such as acontact
, Delivery Pros should carry cargo up, but are optional. - The last required Stop property depends on what should be done at that location. It is the list of items, and it is
described in either
pickupItems
ordropOffItems
. GoShare supports multiple pick-ups, the only restriction is that the stop withaddressOrder: 1
cannot have adropOffItems
property, and the last stop cannot have apickupItems
property. When booking various pickups and drop-offs, the sum of the quantities of each item at the drop-offs must equal the sum of the pick-ups. - There are two ways to declare the
items
inside thepickupItems
anddropOffItems
arrays: by their id, which is provided by our API at this endpoint; and by their specification if the item is not present on our catalogue. To define a custom item, provide itsname
,weight
(unit LB as default), andquantity
. More details here.
Authorization API
API key verification
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/api-key/verify
-H 'Accept: application/json'
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/api-key/verify HTTP/1.1
Host: api.staging.goshare.co
Accept: application/json
const headers = {
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/api-key/verify',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/api-key/verify',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/api-key/verify', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/api-key/verify', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/api-key/verify");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/api-key/verify", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/api-key/verify
Verify your api-key
credential.
Example responses
200 Response
{
"status": true,
"data": {
"apiKey": "YOUR_API_KEY",
"testMode": true
}
}
401 Response
{
"message": "Invalid authentication credentials"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | Inline |
401 | Unauthorized | Unauthorized | Inline |
500 | Internal Server Error | Internal Server Error | Inline |
1. Booking API
Book Project
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects
This is the booking endpoint. It creates a GoShare Project.
Body parameter
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | BookingRequest | true | All the data necessary to book the Project. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
2. Projects API
Get Project
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/projects/{id} \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/projects/{id} HTTP/1.1
Host: api.staging.goshare.co
Accept: application/json
const headers = {
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/projects/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/projects/{id}', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/projects/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/projects/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/projects/{id}
Return Project information for a given Project UUID.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Update Project
Code samples
# You can also use wget
curl -X PUT https://api.staging.goshare.co/v1/projects/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
PUT https://api.staging.goshare.co/v1/projects/{id} HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}',
{
method: 'PUT',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.put 'https://api.staging.goshare.co/v1/projects/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.put('https://api.staging.goshare.co/v1/projects/{id}', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PUT','https://api.staging.goshare.co/v1/projects/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PUT");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PUT", "https://api.staging.goshare.co/v1/projects/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PUT /v1/projects/{id}
Perform an update on all data sent on payload for a given Project UUID.
Body parameter
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
body | body | BookingRequest | true | All the data necessary to book the Project. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Patch Project field
Code samples
# You can also use wget
curl -X PATCH https://api.staging.goshare.co/v1/projects/{id} \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
PATCH https://api.staging.goshare.co/v1/projects/{id} HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0,
"review": {
"rate": 1,
"review": "string"
}
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"metadata": {}
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"metadata": {}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}',
{
method: 'PATCH',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.patch 'https://api.staging.goshare.co/v1/projects/{id}',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.patch('https://api.staging.goshare.co/v1/projects/{id}', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('PATCH','https://api.staging.goshare.co/v1/projects/{id}', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("PATCH", "https://api.staging.goshare.co/v1/projects/{id}", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
PATCH /v1/projects/{id}
Through this PATCH endpoint the following operations can be done: Update Project metadata, startDateTime, additionalInfo and/or the list of Stops. It's also possible to Review and/or Tip SubProjects. Fields are optional as you may choose what change to patch.
Body parameter
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0,
"review": {
"rate": 1,
"review": "string"
}
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"metadata": {}
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"metadata": {}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
body | body | BookingPatchRequest | true | Through this PATCH endpoint, fields are optional as you may choose what change to patch. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Cancel Project
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/{id}/cancel \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/{id}/cancel HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"reason": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}/cancel',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/{id}/cancel',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/{id}/cancel', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/{id}/cancel', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}/cancel");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/{id}/cancel", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/{id}/cancel
It cancels a Project that is in either pending or accepted status.
Body parameter
{
"reason": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
body | body | ProjectCancellationRequest | true | Project cancellation data. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
3. Vehicles API
List available vehicles
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/vehicles \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/vehicles HTTP/1.1
Host: api.staging.goshare.co
Accept: application/json
const headers = {
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/vehicles',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/vehicles',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/vehicles', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/vehicles', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/vehicles");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/vehicles", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/vehicles
Get a list of all the vehicles that can be requested. Use the alias
property. It is possible to use as the primary driver one of the following values: courier
, suv
, pickup_truck
, cargo_van
, box_truck
, or auto
. It's also possible to use the alias helper
assigned as a secondary SubProject to aid the main driver.
P.S: The utilization of the auto
alias delegates to our system the capability to automatically select the main vehicle based on item details like quantity, size, weight, and dimensions. Therefore, it's crucial that when users choose to employ the auto
alias, ALL Items in the request must include weight and dimensions properties for the system to successfully execute its automatic selection process.
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
List available equipment
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/vehicles/equipment \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/vehicles/equipment HTTP/1.1
Host: api.staging.goshare.co
Accept: application/json
const headers = {
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/vehicles/equipment',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/vehicles/equipment',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/vehicles/equipment', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/vehicles/equipment', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/vehicles/equipment");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/vehicles/equipment", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/vehicles/equipment
Get a list of all equipment that can be requested. Use the alias
property. List of examples: dolly
, hitch
, trailer
, pallet_jack
, piano_board
, and etc.
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
4. Items API
Search items
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/items?searchName=string \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/items?searchName=string HTTP/1.1
Host: api.staging.goshare.co
Accept: application/json
const headers = {
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/items?searchName=string',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/items',
params: {
'searchName' => 'string'
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/items', params={
'searchName': 'string'
}, headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/items', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/items?searchName=string");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/items", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/items
This endpoint provides a list of items currently supported by GoShare. The booking request expects a list of these items, and they are necessary to calculate pricing accurately.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
searchName | query | string | true | none |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
5. Estimate API
Estimate Project cost
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/estimate \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/estimate HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/estimate',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/estimate',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/estimate', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/estimate', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/estimate");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/estimate", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/estimate
Before committing to ordering a Project, sometimes it is desirable to estimate the cost of the Project. This endpoint expects the same payload as the booking but responds with only an estimate for a Project with those parameters.
Body parameter
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | BookingRequest | true | Prior to making a booking, it is advisable to use the data solely for the purpose of verifying the price. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Estimate multiple Projects cost
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/estimate/multiple \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/estimate/multiple HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '[
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
]';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/estimate/multiple',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/estimate/multiple',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/estimate/multiple', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/estimate/multiple', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/estimate/multiple");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/estimate/multiple", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/estimate/multiple
Before committing to ordering a Project, sometimes it is desirable to estimate the cost of the Project. This endpoint expects a list of the same payloads as used in the booking and estimate endpoint.
Minimum of 1 Project and maximum of 12 Projects for a single request.
Body parameter
[
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
]
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | BookingRequest | true | Prior to making a booking, it is advisable to use the data solely for the purpose of verifying the price. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
6. Review and Tip APIs
Tip Project
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/{id}/tip \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/{id}/tip HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"amount": 0
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}/tip',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/{id}/tip',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/{id}/tip', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/{id}/tip', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}/tip");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/{id}/tip", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/{id}/tip
Tip the whole Project of a given Project UUID.
Body parameter
{
"amount": 0
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
body | body | TipRequest | true | All the data necessary to tip. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Tip Delivery Pro
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"amount": 0
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/tip
Tip a Delivery Pro of a given Project UUID and vehicleAlias.
Body parameter
{
"amount": 0
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
vehicleAlias | path | string | true | The alias property of the vehicle. See Vehicles API. |
body | body | TipRequest | true | All the data necessary to tip. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Review Delivery Pro
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"rate": 1,
"review": "string"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/{id}/sub-projects/vehicle/{vehicleAlias}/review
Review a Delivery Pro of a given Project UUID and vehicleAlias.
Body parameter
{
"rate": 1,
"review": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
vehicleAlias | path | string | true | The alias property of the vehicle. See Vehicles API. |
body | body | ReviewRequest | true | All the data necessary to review. |
Example responses
200 Response
{
"status": true,
"message": "string",
"reason": "string",
"data": {},
"error": null
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ApiResponse |
Simulate webhook call API
Simulate webhook call
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"event": "PROJECT_CREATED"
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/{id}/webhooks/simulate", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/{id}/webhooks/simulate
Calls the webhook URL to simulate a Project status transition.This endpoint is not meant to be used in production since it does not actually change a Project status.
Body parameter
{
"event": "PROJECT_CREATED"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
id | path | string | true | The UUID of the Project or the Reference id if you have provided it. |
body | body | SimulateWebhookRequest | true | All the data necessary to simulate a webhook call. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Calls the webhook URL with a custom request body
Code samples
# You can also use wget
curl -X POST https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: YOUR_API_KEY'
POST https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom HTTP/1.1
Host: api.staging.goshare.co
Content-Type: application/json
Accept: application/json
const inputBody = '{
"requestBody": {
"empty": true
},
"variables": {
"empty": true
}
}';
const headers = {
'Content-Type':'application/json',
'Accept':'application/json',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom',
{
method: 'POST',
body: inputBody,
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.post 'https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json',
'api-key': 'YOUR_API_KEY'
}
r = requests.post('https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('POST','https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Content-Type": []string{"application/json"},
"Accept": []string{"application/json"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("POST", "https://api.staging.goshare.co/v1/projects/webhooks/simulate/custom", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
POST /v1/projects/webhooks/simulate/custom
This endpoint is useful to test integration between our server and client webhook endpoint.
Body parameter
{
"requestBody": {
"empty": true
},
"variables": {
"empty": true
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | SimulateCustomWebhookRequest | true | A custom request body. |
Example responses
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | None |
Response Schema
Health-check API
API health-check verification
Code samples
# You can also use wget
curl -X GET https://api.staging.goshare.co/v1/health \
-H 'Accept: */*' \
-H 'api-key: YOUR_API_KEY'
GET https://api.staging.goshare.co/v1/health HTTP/1.1
Host: api.staging.goshare.co
Accept: */*
const headers = {
'Accept':'*/*',
'api-key':'YOUR_API_KEY'
};
fetch('https://api.staging.goshare.co/v1/health',
{
method: 'GET',
headers: headers
})
.then(function(res) {
return res.json();
}).then(function(body) {
console.log(body);
});
require 'rest-client'
require 'json'
headers = {
'Accept' => '*/*',
'api-key' => 'YOUR_API_KEY'
}
result = RestClient.get 'https://api.staging.goshare.co/v1/health',
params: {
}, headers: headers
p JSON.parse(result)
import requests
headers = {
'Accept': '*/*',
'api-key': 'YOUR_API_KEY'
}
r = requests.get('https://api.staging.goshare.co/v1/health', headers = headers)
print(r.json())
<?php
require 'vendor/autoload.php';
$headers = array(
'Accept' => '*/*',
'api-key' => 'YOUR_API_KEY',
);
$client = new \GuzzleHttp\Client();
// Define array of request body.
$request_body = array();
try {
$response = $client->request('GET','https://api.staging.goshare.co/v1/health', array(
'headers' => $headers,
'json' => $request_body,
)
);
print_r($response->getBody()->getContents());
}
catch (\GuzzleHttp\Exception\BadResponseException $e) {
// handle exception or api errors.
print_r($e->getMessage());
}
// ...
URL obj = new URL("https://api.staging.goshare.co/v1/health");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println(response.toString());
package main
import (
"bytes"
"net/http"
)
func main() {
headers := map[string][]string{
"Accept": []string{"*/*"},
"api-key": []string{"YOUR_API_KEY"},
}
data := bytes.NewBuffer([]byte{jsonReq})
req, err := http.NewRequest("GET", "https://api.staging.goshare.co/v1/health", data)
req.Header = headers
client := &http.Client{}
resp, err := client.Do(req)
// ...
}
GET /v1/health
The health-check API endpoint designed to evaluate the operational status and overall well-being of the system.
Example responses
200 Response
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | OK | ApiResponse |
Schemas
Address
{
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {},
"object": "string"
}
The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
street | string | true | none | It refers to an exact street location on a publicly accessible roadway in a constructed area. |
country | string | false | none | The location can be matched with either a country name or a two-letter ISO 3166-1 country code. |
state | string | false | none | State code consisting of both numbers and two-letter alphabetic characters that were established as a standard. |
city | string | false | none | The city associated with the address where is the stop. |
county | string | false | none | It refers to an administrative or political division of a state that encompasses a specific geographic area. |
placeName | string | false | none | This field provides a human-readable name and typically corresponds to the official business name. |
postalCode | string | false | none | The zip code or postal code provided for the address is used for sending postal mail within the country. |
postalCodeSuffix | string | false | none | The 4-digit code that is optionally appended to postal codes. |
premise | string | false | none | This pertains to a named place, typically a single building or a group of buildings that share a common name. |
subPremise | string | false | none | This refers to a first-level entity that is located beneath a named place, which is often a singular building situated among a group of buildings that share a common name. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
AddressPatchRequest
{
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
}
The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
street | string | false | none | It refers to an exact street location on a publicly accessible roadway in a constructed area. |
country | string | false | none | The location can be matched with either a country name or a two-letter ISO 3166-1 country code. |
state | string | false | none | State code consisting of both numbers and two-letter alphabetic characters that were established as a standard. |
city | string | false | none | The city associated with the address where is the stop. |
county | string | false | none | It refers to an administrative or political division of a state that encompasses a specific geographic area. |
placeId | string | false | none | Place ID is a textual identifier that uniquely identifies a place in the Google Places database and on Google Maps. |
placeName | string | false | none | This field provides a human-readable name and typically corresponds to the official business name. |
postalCode | string | false | none | The zip code or postal code provided for the address is used for sending postal mail within the country. |
postalCodeSuffix | string | false | none | The 4-digit code that is optionally appended to postal codes. |
premise | string | false | none | This pertains to a named place, typically a single building or a group of buildings that share a common name. |
subPremise | string | false | none | This refers to a first-level entity that is located beneath a named place, which is often a singular building situated among a group of buildings that share a common name. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
AddressRequest
{
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
}
The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
street | string | true | none | It refers to an exact street location on a publicly accessible roadway in a constructed area. |
country | string | true | none | The location can be matched with either a country name or a two-letter ISO 3166-1 country code. |
state | string | false | none | State code consisting of both numbers and two-letter alphabetic characters that were established as a standard. |
city | string | true | none | The city associated with the address where is the stop. |
county | string | false | none | It refers to an administrative or political division of a state that encompasses a specific geographic area. |
placeId | string | false | none | Place ID is a textual identifier that uniquely identifies a place in the Google Places database and on Google Maps. |
placeName | string | false | none | This field provides a human-readable name and typically corresponds to the official business name. |
postalCode | string | false | none | The zip code or postal code provided for the address is used for sending postal mail within the country. |
postalCodeSuffix | string | false | none | The 4-digit code that is optionally appended to postal codes. |
premise | string | false | none | This pertains to a named place, typically a single building or a group of buildings that share a common name. |
subPremise | string | false | none | This refers to a first-level entity that is located beneath a named place, which is often a singular building situated among a group of buildings that share a common name. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
ApiResponse
{
"status": true,
"message": "string",
"reason": "string",
"data": {},
"error": null
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
status | boolean | true | none | The status of a request can be either true or false , and it's important to note that a false status doesn't necessarily indicate an error, but could also signify a failure in the business logic. |
message | string | false | none | A message in a format that is easily understandable by a human. |
reason | string | false | none | Reason codes commonly used for our encountered errors, such as zones_not_available . |
data | object | false | none | The data included in the response is referred to as the payload. |
error | ApiError | false | none | none |
BookingPatchRequest
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0,
"review": {
"rate": 1,
"review": "string"
}
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"metadata": {}
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"metadata": {}
}
Through this PATCH
endpoint as of now a Project metadata can be changed, plus its SubProjects can be reviewed and/or tipped. Fields are optional as you may choose what change to patch.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
startDateTime | string | false |
|
The local date time at which the Delivery Pro should start picking up the items. Format: yyyy-MM-dd HH:mm:ss . |
zonedStartDateTime | string | false |
|
The date time with time zone offset at which the Delivery Pro should start picking up the items. This takes precedence over startDateTime , so if this is present we will ignore startDateTime .Format: yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX . |
subProjects | [SubProjectPatchRequest] | true |
|
A list of SubProjects. It can be omitted if you do not want to update any SubProjects. |
stops | [StopPatchRequest] | true |
|
A list of stops. |
additionalInfo | string | false | none | Any additional info you want to provide Delivery Pro(s) with. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
BookingPatchSubProjectReviewRequest
{
"rate": 1,
"review": "string"
}
A review for a given SubProject through the PATCH
Project endpoint. Both rate
and comment
are required if you want to review.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
rate | integer(int32) | true |
|
Rate must be an integer between the range [1, 5] . |
review | string | true | none | A comment providing feedback. |
BookingRequest
{
"startDateTime": "2022-06-20 15:45:00",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"localTimeWindows": {
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
},
"timeWindows": {
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
},
"subProjects": [
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
],
"stops": [
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
},
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
],
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string"
},
"shipperName": "string",
"metadata": {}
}
GoShare understands how many vehicles are being requested using SubProjects. Each SubProject corresponds to a Delivery Pro that GoShare will provide to perform the Project. The booking endpoint expects at least one SubProject.
The endpoint also expects at least 2 stops. GoShare can perform multi-stop Projects.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
startDateTime | string | true |
|
The local date time at which the Delivery Pro should start picking up the items. Format: yyyy-MM-dd HH:mm:ss . |
zonedStartDateTime | string | false |
|
The date time with time zone offset at which the Delivery Pro should start picking up the items. This takes precedence over startDateTime , so if this is present we will ignore startDateTime .Format: yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX . |
localTimeWindows | LocalDateTimeWindowsRequestBody | false | none | The time windows at which the Delivery Pro should pick up and drop off the items. It receive date time without any time zone specification and is parsed as the local time at the stop 1 location. It's possible to define different set of time windows like |
timeWindows | DateTimeWindowsRequestBody | false | none | The time windows with time zone offset at which the Delivery Pro should pick up and drop off the items. A project can have up to two time windows. It's possible to define different set of time windows like This takes precedence over localTimeWindows , so if this is present we will ignore localTimeWindows . |
subProjects | [SubProjectRequest] | true |
|
A list of SubProjects. |
stops | [StopRequest] | true |
|
A list of stops. |
additionalInfo | string | false | none | Any additional info you want to provide Delivery Pro(s) with. |
reference | ReferenceRequest | false | none | Any custom human friendly ID/number and label created by your own system to reference the object(s) to be delivered. It can be a product ID, order number etc. Both ID and label should be easy to read since our Delivery Pro(s) will see them in our apps to identify the cargo at the first stop. No unique constraint is enforced. Your system has to make sure you do not book multiple Projects with the same Reference id . In case multiple id s are booked, GET and cancel endpoints will refer to the latest Project out of the multiple Reference id . |
shipperName | string | false | none | The business, company, or entity name utilizing GoShare for delivery if you are placing the order on behalf of another client. This should be the specific name of the company holding the goods, which could be the Parent Company, a Subsidiary, or a Brand. This name will be used for billing and reporting purposes. This field is not required if the order is not being placed on behalf of another client. For instance, if you are UPS and are placing the order on behalf of Microsoft, the shipperName is Microsoft. This name will be visible to drivers . |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
Cancellation
{
"reasons": [
"string"
],
"fee": 0,
"object": "string"
}
Cancellation data such as list of reasons
and fee charged.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
reasons | [string] | true | none | List of reasons why your Project may have been cancelled. |
fee | integer(int32) | true | none | In cents. For example, $5.00 should be consider as 500 . |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
CancellationPolicy
{
"toleranceDurationInMinutes": 0,
"underToleranceDurationFee": 0,
"overToleranceDurationFee": 0,
"disclaimer": "string",
"object": "string"
}
See Cancellation Policy for current policy values.
- If you cancel a Project with more than
toleranceDurationInMinutes
minutes toproject.startDateTime
, that is, more than 24 hours to the scheduled start time, thenunderToleranceDurationFee
is applied. - If you cancel a Project with less than
toleranceDurationInMinutes
minutes toproject.startDateTime
, that is, less than 24 hours to the scheduled start time, thenoverToleranceDurationFee
is applied.
This object is present in Project and its SubProject(s). project.cancellationPolicy
fee values are sum of all subProject[].cancellationPolicy
respective fees.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
toleranceDurationInMinutes | integer(int32) | true | none | Time tolerance in minutes provided for cancellation of your Project without incurring any fees. |
underToleranceDurationFee | integer(int32) | true | none | In cents. For example, $5.00 should be consider as 500 . |
overToleranceDurationFee | integer(int32) | true | none | In cents. For example, $5.00 should be consider as 500 . |
disclaimer | string | false | none | Present in project.cancellationPolicy and omitted in subProject[].cancellationPolicy . Readable disclaimer text that relates vehicle types and its fees. It can be included in your clients so you do not need to build yourself a disclaimer on your end. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
CancellationResponse
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"reason": "string",
"cancellationFee": 0,
"cancellation": {
"reasons": [
"string"
],
"fee": 0,
"object": "string"
}
}
The data included in the response is referred to as the payload.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string(uuid) | false | none | The UUID of the Project. |
reason | string | true | none | A reason why your Project may have been cancelled. |
cancellationFee | integer(int32) | true | none | Fee charged for cancellation after the time tolerance in minutes has been exceeded. |
cancellation | Cancellation | true | none | Cancellation data such as list of reasons and fee charged. |
Contact
{
"name": "string",
"phone": "string",
"metadata": {},
"object": "string"
}
Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name
and phone
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The name of the person associated with the contact at the respective location. |
phone | string | true | none | Phone number (only numbers). Example: 3333343356 . |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
ContactPatchRequest
{
"name": "string",
"phone": "string",
"metadata": {}
}
Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name
and phone
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The name of the person associated with the contact at the respective location. |
phone | string | true | none | Phone number (only numbers). Example: 3333343356 . |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
ContactRequest
{
"name": "string",
"phone": "string",
"metadata": {}
}
Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name
and phone
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The name of the person associated with the contact at the respective location. |
phone | string | true | none | Phone number (only numbers). Example: 3333343356 . |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
Coordinates
{
"latitude": 0,
"longitude": 0,
"object": "string"
}
The geographic coordinates that determine this address.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
latitude | number(double) | true | none | none |
longitude | number(double) | true | none | none |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
CoordinatesRequest
{
"latitude": 0,
"longitude": 0
}
The geographic coordinates that determine this address.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
latitude | number(double) | true | none | The latitude, expressed in degrees, must fall within the range of [-90.0, +90.0] . |
longitude | number(double) | true | none | The longitude, expressed in degrees, must fall within the range of [-180.0, +180.0] . |
DateTimeWindowRequestBody
{
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
min | string | false | none | The minimum value of a date time with time zone offset window. Format: yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX . |
max | string | false | none | The maximum value of a date time with time zone offset window. Format: yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX . |
DateTimeWindowsRequestBody
{
"start": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
},
"finish": {
"min": "2022-06-20T15:45:00-04:00",
"max": "2022-06-20T18:45:00-04:00"
}
}
The time windows with time zone offset at which the Delivery Pro should pick up and drop off the items. A project can have up to two time windows. It's possible to define different set of time windows like
This takes precedence over
localTimeWindows
, so if this is present we will ignore localTimeWindows
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
start | DateTimeWindowRequestBody | false | none | none |
finish | DateTimeWindowRequestBody | false | none | none |
DeliveryPro
{
"object": "string",
"name": "string",
"phone": "string"
}
Driver or Helper information such as name and phone.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
name | string | true | none | The first name and the last name abbreviation, for example, John D. |
phone | string | true | none | Phone number (only numbers). Example: 3333343356 . |
Dimensions
{
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
}
The Dimensions object contains information that refers to length, width and height of an item
according to a dimension unit. By default the dimensions of an item can be in feet (ft), but you can use inches (in), centimeters (cm) or meters (mt) through dimensionUnit
property. GoShare estimates a Project duration based on item's dimensions.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
length | number | true | none | This is the length of a given item entry. It uses the dimensionUnit field as unit of measure. |
width | number | true | none | This is the width of a given item entry. It uses the dimensionUnit field as unit of measure. |
height | number | true | none | This is the height of a given item entry. It uses the dimensionUnit field as unit of measure. |
dimensionUnit | string | false | none | Can be feet (ft), inches (in), centimeters (cm) or meters (m). Default is ft. |
Enumerated Values
Property | Value |
---|---|
dimensionUnit | ft |
dimensionUnit | in |
dimensionUnit | cm |
dimensionUnit | m |
DimensionsRequest
{
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
}
The Dimensions object contains information that refers to length, width and height of an item
according to a dimension unit. By default the dimensions of an item can be in feet (ft), but you can use inches (in), centimeters (cm) or meters (mt) through dimensionUnit
property. GoShare estimates a Project duration based on item's dimensions.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
length | number | false | none | This is the length of a given item entry. It uses the dimensionUnit field as unit of measure. |
width | number | false | none | This is the width of a given item entry. It uses the dimensionUnit field as unit of measure. |
height | number | false | none | This is the height of a given item entry. It uses the dimensionUnit field as unit of measure. |
dimensionUnit | string | false | none | Can be feet (ft), inches (in), centimeters (cm) or meters (m). Default is ft. |
Enumerated Values
Property | Value |
---|---|
dimensionUnit | ft |
dimensionUnit | in |
dimensionUnit | cm |
dimensionUnit | m |
DurationEstimate
{
"min": 0,
"max": 0,
"object": "string"
}
A duration estimate range of the min and max time a SubProject is expected to take.
These min and max estimates include both the route duration (how long it takes to move between all stops) and the actual working time.
Duration estimates may be affected due to weather, traffic etc.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
min | integer(int32) | true | none | Minimum duration in minutes. |
max | integer(int32) | true | none | Maximum duration in minutes. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
Equipment
{
"alias": "string",
"price": 0,
"object": "string"
}
Equipment that Delivery Pro should bring.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
alias | string | true | none | The alias property of the equipment. See equipments list. |
price | integer(int32) | true | none | In cents. For example, $5.00 should be consider as 500 . |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
File
{
"md5sum": "string",
"fileType": "string",
"url": "string",
"object": "string"
}
File data, along with its type and URL
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
md5sum | string | true | none | md5sum , also known as the checksum, is a unique digital fingerprint of the data. |
fileType | string | true | none | Example: image/png, image/jpeg. |
url | string | true | none | The URL to access the file. |
object | string | true | none | Uncapitalized name of this schema that can used for introspection. |
Item
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
Item is required to have either a listed ID (see Items API), a weight or a weight range.
By default item has its weight in pounds (lb), but you can use kilogram (kg) through weightUnit
property.weight
or weightRange
is the total weight, that is, it must be the sum of the weight of all quantities of this given item
entry.
GoShare estimates a Project duration based on item's weight range. So if you pass a specific weight that will be converted to weight range i.e 120 kg (264.55 lb) will be within "251 - 500 lbs", 143 lb will be within "101 - 250 lbs".
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | This field provides a human-readable name for the item. |
quantity | integer(int32) | true | none | Amount of items. |
id | integer(int32) | false | none | Individual identifier of the item. |
weightRange | string | false | none | It represents the total weight of all quantities of this given item entry.Only in pounds (lb). One of: 50 lbs or less 51 - 100 lbs 101 - 250 lbs 251 - 500 lbs 501 - 1000 lbs 1001 - 5000 lbs 5001 - 7000 lbs 7001 - 10000 lbs More than 10000 lbs |
weight | number | false | none | This is the total weight of all quantities of this given item entry, that is, the sum of the weight of all quantities.Example: if a single quantity of this item weighs 25 lbs, and you have provided a quantity of 4, this weight value must be 100. |
weightUnit | string | false | none | Either pound (lb) or kilogram (kg). Default is lb. |
dimensions | Dimensions | false | none | The Dimensions object contains information that refers to length, width and height of an item according to a dimension unit. By default the dimensions of an item can be in feet (ft), but you can use inches (in), centimeters (cm) or meters (mt) through dimensionUnit property. GoShare estimates a Project duration based on item's dimensions. |
notice | string | false | none | A concise advice for handling the item, for example Please box or protect item prior to moving. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
ItemRequest
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
Item is required to have either a listed ID (see Items API), a weight or a weight range.
By default item has its weight in pounds (lb), but you can use kilogram (kg) through weightUnit
property.weight
or weightRange
is the total weight, that is, it must be the sum of the weight of all quantities of this given item
entry.
GoShare estimates a Project duration based on item's weight range. So if you pass a specific weight that will be converted to weight range i.e 120 kg (264.55 lb) will be within "251 - 500 lbs", 143 lb will be within "101 - 250 lbs".
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | false | none | This field provides a human-readable name for the item. |
quantity | integer(int32) | true |
|
Amount of items. |
id | integer(int32) | false | none | Individual identifier of the item. |
weightRange | string | false | none | It represents the total weight of all quantities of this given item entry.Only in pounds (lb). One of: 50 lbs or less 51 - 100 lbs 101 - 250 lbs 251 - 500 lbs 501 - 1000 lbs 1001 - 5000 lbs 5001 - 7000 lbs 7001 - 10000 lbs More than 10000 lbs |
weight | number | false | none | This is the total weight of all quantities of this given item entry, that is, the sum of the weight of all quantities.Example: if a single quantity of this item weighs 25 lbs, and you have provided a quantity of 4, this weight value must be 100. |
weightUnit | string | false | none | Either pound (lb) or kilogram (kg). Default is lb. |
dimensions | DimensionsRequest | false | none | The Dimensions object contains information that refers to length, width and height of an item according to a dimension unit. By default the dimensions of an item can be in feet (ft), but you can use inches (in), centimeters (cm) or meters (mt) through dimensionUnit property. GoShare estimates a Project duration based on item's dimensions. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
Enumerated Values
Property | Value |
---|---|
weightUnit | lb |
weightUnit | kg |
JSONObject
{
"empty": true
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
empty | boolean | false | none | none |
JsonNode
{}
Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object.
Properties
None
LocalDateTimeWindowRequestBody
{
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
min | string | false | none | The minimum value of a local date time window. Format: yyyy-MM-dd HH:mm:ss . |
max | string | false | none | The maximum value of a local date time window. Format: yyyy-MM-dd HH:mm:ss . |
LocalDateTimeWindowsRequestBody
{
"start": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
},
"finish": {
"min": "2022-06-20 15:45:00",
"max": "2022-06-20 18:45:00"
}
}
The time windows at which the Delivery Pro should pick up and drop off the items. It receive date time without any time zone specification and is parsed as the local time at the stop 1 location. It's possible to define different set of time windows like
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
start | LocalDateTimeWindowRequestBody | false | none | none |
finish | LocalDateTimeWindowRequestBody | false | none | none |
Place
{
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {},
"object": "string"
},
"coordinates": {
"latitude": 0,
"longitude": 0,
"object": "string"
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {},
"object": "string"
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"additionalInformation": "string",
"object": "string"
}
The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address
or coordinates
. Its location is mainly determined by its geographic coordinates, but you can also supply an address.
In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | Address | false | none | The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned. |
coordinates | Coordinates | true | none | The geographic coordinates that determine this address. |
contact | Contact | false | none | Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name and phone . |
hasElevator | boolean | true | none | Is there an elevator available? Default is false . |
flightOfStairs | integer(int32) | true | none | How many flights of stairs should the Delivery Pros expect to climb. Default is 0 . |
additionalInfo | string | true | none | Generic orientation to the Delivery Pros. "Don't ring the doorbell". |
parkingSpot | string | false | none | A parking spot can be identified by either a numerical or textual marker and it refers to a specific area within a parking lot or on a street that is designated for vehicles to park. |
isParkingSpotRequired | boolean | true | none | A flag that indicates the presence of a parking spot. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
additionalInformation | string | true | none | Deprecated in favor of additionalInfo. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
PlacePatchRequest
{
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"metadata": {}
}
The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address
or coordinates
. Its location is mainly determined by its geographic coordinates, but you can also supply an address.
In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | AddressPatchRequest | false | none | The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned. |
coordinates | CoordinatesRequest | false | none | The geographic coordinates that determine this address. |
contact | ContactPatchRequest | false | none | Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name and phone . |
hasElevator | boolean | true | none | Is there an elevator available? Default is false . |
flightOfStairs | integer(int32) | true | none | How many flights of stairs should the Delivery Pros expect to climb. Default is 0 . |
additionalInfo | string | false | none | Generic orientation to the Delivery Pros. "Don't ring the doorbell". |
additionalInformation | string | false | none | Deprecated in favor of additionalInfo. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
PlaceRequest
{
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
}
The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address
or coordinates
. Its location is mainly determined by its geographic coordinates, but you can also supply an address.
In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
address | AddressRequest | false | none | The address is broken down into pieces that conform to the Google Places API, specify addresses in accordance with the format used by the national postal service of the country concerned. |
coordinates | CoordinatesRequest | false | none | The geographic coordinates that determine this address. |
contact | ContactRequest | false | none | Contact information of the person that will receive the Delivery Pros at an address. This person should be able to sign the proof of delivery document as requested by our Delivery Pros. If present must include name and phone . |
hasElevator | boolean | true | none | Is there an elevator available? Default is false . |
flightOfStairs | integer(int32) | true | none | How many flights of stairs should the Delivery Pros expect to climb. Default is 0 . |
additionalInfo | string | false | none | Generic orientation to the Delivery Pros. "Don't ring the doorbell". |
additionalInformation | string | false | none | Deprecated in favor of additionalInfo. |
parkingSpot | string | false | none | A parking spot can be identified by either a numerical or textual marker and it refers to a specific area within a parking lot or on a street that is designated for vehicles to park. |
isParkingSpotRequired | boolean | true | none | A flag that indicates the presence of a parking spot. Default is false . |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
parkingSpotRequired | boolean | false |
|
none |
Project
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"subProjects": [
{
"vehicle": {
"equipment": [
{
"alias": "string",
"price": 0,
"object": "string"
}
],
"object": "string"
},
"status": "string",
"deliveryPro": {
"object": "string",
"name": "string",
"phone": "string"
},
"durationEstimate": {
"min": 0,
"max": 0,
"object": "string"
},
"cancellation": {
"reasons": [
"string"
],
"fee": 0,
"object": "string"
},
"cancellationPolicy": {
"toleranceDurationInMinutes": 0,
"underToleranceDurationFee": 0,
"overToleranceDurationFee": 0,
"disclaimer": "string",
"object": "string"
},
"metadata": {},
"object": "string"
}
],
"stops": [
{
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {},
"object": "string"
},
"coordinates": {
"latitude": 0,
"longitude": 0,
"object": "string"
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {},
"object": "string"
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"additionalInformation": "string",
"object": "string"
},
"sequence": 0,
"pickupItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"proofOfDeliveryFiles": [
{
"proofOfDeliveryFileType": {
"type": "string",
"description": "string",
"object": "string"
},
"file": {
"md5sum": "string",
"fileType": "string",
"url": "string",
"object": "string"
},
"receiverName": "string",
"object": "string"
}
],
"status": "string",
"metadata": {},
"object": "string"
}
],
"currentStop": {
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {},
"object": "string"
},
"coordinates": {
"latitude": 0,
"longitude": 0,
"object": "string"
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {},
"object": "string"
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"additionalInformation": "string",
"object": "string"
},
"sequence": 0,
"pickupItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"proofOfDeliveryFiles": [
{
"proofOfDeliveryFileType": {
"type": "string",
"description": "string",
"object": "string"
},
"file": {
"md5sum": "string",
"fileType": "string",
"url": "string",
"object": "string"
},
"receiverName": "string",
"object": "string"
}
],
"status": "string",
"metadata": {},
"object": "string"
},
"startDateTime": "2022-06-20 15:45:00",
"status": "string",
"pricingModel": "string",
"additionalInfo": "string",
"reference": {
"id": "string",
"label": "string",
"object": "string"
},
"shipperName": "string",
"timeWindows": {
"start": {
"min": "2019-08-24T14:15:22Z",
"max": "2019-08-24T14:15:22Z",
"requireTimeZoneCorrection": true
},
"finish": {
"min": "2019-08-24T14:15:22Z",
"max": "2019-08-24T14:15:22Z",
"requireTimeZoneCorrection": true
}
},
"metadata": {},
"object": "string",
"cancellation": {
"reasons": [
"string"
],
"fee": 0,
"object": "string"
},
"totalPrice": 0,
"subProjectsCount": 0,
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"cancellationPolicy": {
"toleranceDurationInMinutes": 0,
"underToleranceDurationFee": 0,
"overToleranceDurationFee": 0,
"disclaimer": "string",
"object": "string"
}
}
The data included in the response is referred to as the payload.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string(uuid) | false | none | The UUID of the Project. |
subProjects | [SubProject] | true | none | The subProjects array will tell GoShare how many Delivery Pros and what vehicles we should allocate to the Project. |
stops | [Stop] | true | none | The stops array contains information regarding where the Delivery Pros will execute the Project. |
currentStop | Stop | false | none | The currentStop property references what stop is being worked at or driven to by the main Delivery Pro. This property will be:
When a stop is done worked at, the current stop will be the next stop if available. |
startDateTime | string | true |
|
The local date time at which the Delivery Pro should start picking up the items. Format: yyyy-MM-dd HH:mm:ss . |
status | string | true | none | Represents the Project current status. One of:
|
pricingModel | string | true | none | none |
additionalInfo | string | true | none | Info about items such as any reference number provided by the retail store and/or contact info for any other parties involved. |
reference | Reference | false | none | Any custom human friendly ID/number and label created by your own system to reference the object(s) to be delivered. It can be a product ID, order number etc. Both ID and label should be easy to read since our Delivery Pro(s) will see them in our apps to identify the cargo at the first stop. No unique constraint is enforced. Your system has to make sure you do not book multiple Projects with the same Reference id . In case multiple id s are booked, GET and cancel endpoints will refer to the latest Project out of the multiple Reference id . |
shipperName | string | false | none | The business, company, or entity name utilizing GoShare for delivery if you are placing the order on behalf of another client. This should be the specific name of the company holding the goods, which could be the Parent Company, a Subsidiary, or a Brand. This name will be used for billing and reporting purposes. This field is not required if the order is not being placed on behalf of another client. For instance, if you are UPS and are placing the order on behalf of Microsoft, the shipperName is Microsoft. This name will be visible to drivers . |
timeWindows | TimeWindows | false | none | none |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
cancellation | Cancellation | false | none | Cancellation data such as list of reasons and fee charged. |
totalPrice | integer(int32) | true | none | In cents. For example, $5.00 should be consider as 500 . |
subProjectsCount | integer(int32) | true | none | Amount of SubProjects in Project. |
zonedStartDateTime | string | true |
|
The date time with time zone offset at which the Delivery Pro should start picking up the items. This takes precedence over startDateTime , so if this is present we will ignore startDateTime .Format: yyyy-MM-dd'T'HH:mm:ss[.SSS]XXX . |
cancellationPolicy | CancellationPolicy | true | none | See Cancellation Policy for current policy values.
This object is present in Project and its SubProject(s). |
ProjectCancellationRequest
{
"reason": "string"
}
Project cancellation data.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
reason | string | true | none | A reason why your Project may have been cancelled. |
ProofOfDeliveryFile
{
"proofOfDeliveryFileType": {
"type": "string",
"description": "string",
"object": "string"
},
"file": {
"md5sum": "string",
"fileType": "string",
"url": "string",
"object": "string"
},
"receiverName": "string",
"object": "string"
}
A Proof of Delivery is an acknowledgment that the cargo was successfully delivered at its intended stop.
It is specialized in 3 different types and has a file object containing an image that can be downloaded at your end.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
proofOfDeliveryFileType | ProofOfDeliveryFileType | true | none | The type property can be either:
|
file | File | true | none | File data, along with its type and URL . |
receiverName | string | false | none | The name of the person who received the package. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
ProofOfDeliveryFileType
{
"type": "string",
"description": "string",
"object": "string"
}
The type
property can be either:
delivery_photo
: A photo of the cargo delivered at drop-off location.signature
: The e-signature image signed by the customer.bill_of_lading
: A photo of a signed document that contains a detailed list of a shipment of goods given by the carrier.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
type | string | true | none | Define the type of content present in a Proof of Delivery. It can be either delivery_photo , bill_of_lading or signature . |
description | string | true | none | A human readable explanation of what a type represents. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
Reference
{
"id": "string",
"label": "string",
"object": "string"
}
Any custom human friendly ID/number and label created by your own system to reference the object(s) to be delivered. It can be a product ID, order number etc.
Both ID and label should be easy to read since our Delivery Pro(s) will see them in our apps to identify the cargo at the first stop.
No unique constraint is enforced. Your system has to make sure you do not book multiple Projects with the same Reference id
. In case multiple id
s are booked, GET and cancel endpoints will refer to the latest Project out of the multiple Reference id
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | Any easy-to-read identifier that can contain number and string to help Delivery Pros identify the cargo at the first stop. This will be displayed in our apps along with the Label you choose. |
label | string | true | none | This depends on your business nomenclature. It can be Order number , Product ID , Order ID etc. The idea is that both ID and Label can be read as Order ID ABCD or Product ID 12367 or something that makes sense to your business. If your business have a Product ID whose value is 126712 , you should provide a reference of {"label": "Product ID", "id": "126712"} so our Delivery Pros will be able to identify it correctly at the first stop as Project ID 12367 . |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
ReferenceRequest
{
"id": "string",
"label": "string"
}
Any custom human friendly ID/number and label created by your own system to reference the object(s) to be delivered. It can be a product ID, order number etc.
Both ID and label should be easy to read since our Delivery Pro(s) will see them in our apps to identify the cargo at the first stop.
No unique constraint is enforced. Your system has to make sure you do not book multiple Projects with the same Reference id
. In case multiple id
s are booked, GET and cancel endpoints will refer to the latest Project out of the multiple Reference id
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | Any easy-to-read identifier that can contain number and string to help Delivery Pros identify the cargo at the first stop. This will be displayed in our apps along with the Label you choose. |
label | string | true | none | This depends on your business nomenclature. It can be Order number , Product ID , Order ID etc. The idea is that both ID and Label can be read as Order ID ABCD or Product ID 12367 or something that makes sense to your business. If your business have a Product ID whose value is 126712 , you should provide a reference of {"label": "Product ID", "id": "126712"} so our Delivery Pros will be able to identify it correctly at the first stop as Project ID 12367 . |
ReviewRequest
{
"rate": 1,
"review": "string"
}
Review data.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
rate | integer(int32) | true |
|
Rate must be an integer between the range [1, 5] . |
review | string | true | none | A comment providing feedback. |
SimulateCustomWebhookRequest
{
"requestBody": {
"empty": true
},
"variables": {
"empty": true
}
}
Simulate custom webhook event data.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
requestBody | JSONObject | true | none | none |
variables | JSONObject | false | none | none |
SimulateWebhookRequest
{
"event": "PROJECT_CREATED"
}
Simulate webhook event data.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
event | string | true | none | none |
Enumerated Values
Property | Value |
---|---|
event | PROJECT_CREATED |
event | PROJECT_ACCEPTED |
event | PROJECT_COMPLETED |
event | PROJECT_CANCELED |
event | PROJECT_UPDATED_START_DATE_TIME |
event | PROJECT_STOP_ARRIVED |
event | PROJECT_STOP_LOADED |
event | PROJECT_STOP_UNLOADED |
event | PROJECT_STOP_DEPARTED |
event | PROJECT_STOP_EN_ROUTE |
Stop
{
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {},
"object": "string"
},
"coordinates": {
"latitude": 0,
"longitude": 0,
"object": "string"
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {},
"object": "string"
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"additionalInformation": "string",
"object": "string"
},
"sequence": 0,
"pickupItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 0,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "string",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"notice": "string",
"metadata": {},
"object": "string"
}
],
"proofOfDeliveryFiles": [
{
"proofOfDeliveryFileType": {
"type": "string",
"description": "string",
"object": "string"
},
"file": {
"md5sum": "string",
"fileType": "string",
"url": "string",
"object": "string"
},
"receiverName": "string",
"object": "string"
}
],
"status": "string",
"metadata": {},
"object": "string"
}
The currentStop
property references what stop is being worked at or driven to by the main Delivery Pro. This property will be:
- omitted on
project_created
event - omitted on
project_accepted
event - stop with sequence 1 on
project_stop_arrived
event - stop with sequence 2 (stop was done and ready to go to the next stop) on
project_stop_loaded
event - stop with sequence 2 on
project_stop_arrived
event - stop with sequence 3 (if next stop is available) or omitted (if last stop) on
project_stop_unloaded
event - omitted on
project_completed
event
When a stop is done worked at, the current stop will be the next stop if available.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
place | Place | true | none | The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address or coordinates . Its location is mainly determined by its geographic coordinates, but you can also supply an address.In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items. |
sequence | integer(int32) | true | none | The order in which the Delivery Pro should visit this place. Pickup is always 1. |
pickupItems | [Item] | true | none | [Item is required to have either a listed ID (see Items API), a weight or a weight range. By default item has its weight in pounds (lb), but you can use kilogram (kg) through weightUnit property.weight or weightRange is the total weight, that is, it must be the sum of the weight of all quantities of this given item entry.GoShare estimates a Project duration based on item's weight range. So if you pass a specific weight that will be converted to weight range i.e 120 kg (264.55 lb) will be within "251 - 500 lbs", 143 lb will be within "101 - 250 lbs".] |
dropOffItems | [Item] | true | none | [Item is required to have either a listed ID (see Items API), a weight or a weight range. By default item has its weight in pounds (lb), but you can use kilogram (kg) through weightUnit property.weight or weightRange is the total weight, that is, it must be the sum of the weight of all quantities of this given item entry.GoShare estimates a Project duration based on item's weight range. So if you pass a specific weight that will be converted to weight range i.e 120 kg (264.55 lb) will be within "251 - 500 lbs", 143 lb will be within "101 - 250 lbs".] |
proofOfDeliveryFiles | [ProofOfDeliveryFile] | true | none | [A Proof of Delivery is an acknowledgment that the cargo was successfully delivered at its intended stop. It is specialized in 3 different types and has a file object containing an image that can be downloaded at your end.] |
status | string | true | none | Represents the stop current status. One of:
|
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
StopPatchRequest
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"metadata": {}
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
A stop is an address in which the Delivery Pros will either load or unload cargo from the vehicles. The stops are sequenced starting from 1. The first stop should have only pickup items, while the others should not have any.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
sequence | integer(int32) | false |
|
The order in which the Delivery Pro should visit this place. Pickup is always 1. |
place | PlacePatchRequest | false | none | The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address or coordinates . Its location is mainly determined by its geographic coordinates, but you can also supply an address.In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items. |
pickupItems | [ItemRequest] | true | none | List of items that should be picked up at this place. |
dropOffItems | [ItemRequest] | true | none | List of items that should be dropped off at this place. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
StopRequest
{
"sequence": 1,
"place": {
"address": {
"street": "string",
"country": "string",
"state": "string",
"city": "string",
"county": "string",
"placeId": "string",
"placeName": "string",
"postalCode": "string",
"postalCodeSuffix": "string",
"premise": "string",
"subPremise": "string",
"metadata": {}
},
"coordinates": {
"latitude": 0,
"longitude": 0
},
"contact": {
"name": "string",
"phone": "string",
"metadata": {}
},
"hasElevator": true,
"flightOfStairs": 0,
"additionalInfo": "string",
"additionalInformation": "string",
"parkingSpot": "string",
"isParkingSpotRequired": true,
"metadata": {},
"parkingSpotRequired": true
},
"pickupItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"dropOffItems": [
{
"name": "string",
"quantity": 1,
"id": 0,
"weightRange": "string",
"weight": 0,
"weightUnit": "lb",
"dimensions": {
"length": 0,
"width": 0,
"height": 0,
"dimensionUnit": "ft"
},
"metadata": {}
}
],
"metadata": {}
}
A stop is an address in which the Delivery Pros will either load or unload cargo from the vehicles. The stops are sequenced starting from 1. The first stop should have only pickup items, while the last should only have drop-offs. If you're booking a multi-stop Project with a large quantity of the same cargo that must be dropped off at the many locations, you can do so as long as the total sum of the items in drop-offs equals the pick-up.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
sequence | integer(int32) | true |
|
The order in which the Delivery Pro should visit this place. Pickup is always 1. |
place | PlaceRequest | true | none | The Place object describes information regarding the location in which the Delivery Pros will load or unload their vehicles. You must provide at least one of address or coordinates . Its location is mainly determined by its geographic coordinates, but you can also supply an address.In addition, it should inform whether there is an elevator available. If no elevator is available, then how many flights of stairs the Delivery Pros will be required to carry the items. |
pickupItems | [ItemRequest] | true | none | List of items that should be picked up at this place. |
dropOffItems | [ItemRequest] | true | none | List of items that should be dropped off at this place. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
SubProject
{
"vehicle": {
"equipment": [
{
"alias": "string",
"price": 0,
"object": "string"
}
],
"object": "string"
},
"status": "string",
"deliveryPro": {
"object": "string",
"name": "string",
"phone": "string"
},
"durationEstimate": {
"min": 0,
"max": 0,
"object": "string"
},
"cancellation": {
"reasons": [
"string"
],
"fee": 0,
"object": "string"
},
"cancellationPolicy": {
"toleranceDurationInMinutes": 0,
"underToleranceDurationFee": 0,
"overToleranceDurationFee": 0,
"disclaimer": "string",
"object": "string"
},
"metadata": {},
"object": "string"
}
The subProjects
array will tell GoShare how many Delivery Pros and what vehicles we should allocate to the Project.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
vehicle | Vehicle | true | none | Details of the vehicle, including its name and alias . |
status | string | true | none | Represents the Project current status. One of:
|
deliveryPro | DeliveryPro | false | none | Driver or Helper information such as name and phone. |
durationEstimate | DurationEstimate | false | none | A duration estimate range of the min and max time a SubProject is expected to take. These min and max estimates include both the route duration (how long it takes to move between all stops) and the actual working time. Duration estimates may be affected due to weather, traffic etc. |
cancellation | Cancellation | false | none | Cancellation data such as list of reasons and fee charged. |
cancellationPolicy | CancellationPolicy | true | none | See Cancellation Policy for current policy values.
This object is present in Project and its SubProject(s). |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
SubProjectPatchRequest
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0,
"review": {
"rate": 1,
"review": "string"
}
}
A SubProject from BookingPatchRequest
tells that you want to update a given SubProject with the provided fields. Fields are optional as you may choose what change to patch.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
vehicle | string | false | none | The vehicle identifier. If omitted, the SubProject is identified based on the order of SubProjects you booked. This endpoint cannot change a vehicle type, which can only be done through our Customer Service. |
equipment | [string] | true | none | A list of the alias of the equipment this Delivery Pro should bring. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
tip | integer(int32) | false | none | Tip you want to submit for this given SubProject. It can be omitted if you do not want to tip this SubProject. To tip the Project must in completed status. It must be In cents. For example, $5.00 should be consider as 500 . |
review | BookingPatchSubProjectReviewRequest | false | none | A review for a given SubProject through the PATCH Project endpoint. Both rate and comment are required if you want to review. |
SubProjectRequest
{
"vehicle": "string",
"equipment": [
"string"
],
"metadata": {},
"tip": 0
}
A SubProject tells GoShare what vehicle and equipment your Project requires. You can get a list of available vehicles in the getVehicles endpoint and a set of available equipment in the getEquipment endpoint.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
vehicle | string | true | none | The alias property of the vehicle. See Vehicles API. |
equipment | [string] | true | none | A list of the alias of the equipment this Delivery Pro should bring. See equipments list. |
metadata | JsonNode | false | none | Any other data relevant to the Project that does not have a field in GoShare's model. If present it must be a JSON object. |
tip | integer(int32) | false | none | Tip you want to submit for this given SubProject. It can be omitted if you do not want to tip this SubProject. It must be In cents. For example, $5.00 should be consider as 500 . |
TimeWindow
{
"min": "2019-08-24T14:15:22Z",
"max": "2019-08-24T14:15:22Z",
"requireTimeZoneCorrection": true
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
min | string(date-time) | false | none | none |
max | string(date-time) | false | none | none |
requireTimeZoneCorrection | boolean | false |
|
none |
TimeWindows
{
"start": {
"min": "2019-08-24T14:15:22Z",
"max": "2019-08-24T14:15:22Z",
"requireTimeZoneCorrection": true
},
"finish": {
"min": "2019-08-24T14:15:22Z",
"max": "2019-08-24T14:15:22Z",
"requireTimeZoneCorrection": true
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
start | TimeWindow | false | none | none |
finish | TimeWindow | false | none | none |
TipRequest
{
"amount": 0
}
Tip amount data.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
amount | number | true | none | In cents. For example, $5.00 should be consider as 500 . |
Vehicle
{
"equipment": [
{
"alias": "string",
"price": 0,
"object": "string"
}
],
"object": "string"
}
Details of the vehicle, including its name and alias
.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
equipment | [Equipment] | true | none | A list of the equipments the Delivery Pro should bring. |
object | string | false | none | Uncapitalized name of this schema that can used for introspection. |
Webhooks
It could be useful for your application in some situations to receive updates based on certain events
.
The GoShare API provides webhooks that are called whenever the following events
happen:
Event | Description | Payload Schema |
---|---|---|
project_created |
The Project is successfully created. | WebhookEvent |
project_accepted |
A Delivery Pro has been assigned. | WebhookEvent |
project_updated_start_date_time |
The Project's start date time has been updated. | WebhookEvent |
project_stop_en_route |
Delivery Pro is on his way to the stop. | WebhookEvent |
project_stop_arrived |
Delivery Pro arrives at the stop. | WebhookEvent |
project_stop_loaded |
Delivery Pro has loaded the cargo in the vehicle at that stop. | WebhookEvent |
project_stop_unloaded |
Delivery Pro has unloaded the cargo at that stop. | WebhookEvent |
project_completed |
The Project is complete. | WebhookEvent |
project_canceled |
The Project is canceled. | WebhookEvent |
project_started_return |
The Project has started a process to return the cargo back to to the location where it was picked up. | WebhookEvent |
WebhookEvent
Payload of webhook events
.
Example response
{
"project": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"startDateTime": "string",
"status": "string",
"pricingModel": "string",
"totalPrice": 0,
"subProjects": [...],
"subProjectsCount": 0,
"currentStop": {...},
"reference": {...},
"additionalInfo": "string",
"zonedStartDateTime": "2022-06-20T15:45:00-04:00",
"stops": [...],
"cancellationPolicy": {...},
"object": "project"
},
"event": "string",
"timestamp": number,
"tracking": {...}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
project | [Project] | true | none | Same as data found in Get Project. |
event | string | true | none | project_created , project_accepted , project_completed , project_canceled , project_updated_start_date_time , project_stop_arrived , project_stop_loaded , project_stop_unloaded , project_stop_en_route , or project_started_return . |
timestamp | number | true | none | Unix timestamp indicating the broadcasted time of the message. |
tracking | [Tracking] | false | none | This optional property appears only in traceable events, such as project_stop_arrived , project_stop_loaded , project_stop_unloaded , project_stop_en_route , and project_completed . |
A deprecated project_cancelled
is sent along with the project_canceled
event. Your application should ignore
project_cancelled
, which will be removed, and migrate to project_canceled
.
Tracking
Payload of tracking.
Example response
{
"coordinates": {...},
"accuracy": number,
"clientDateTime": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
coordinates | [Coordinates] | true | none | The geographic coordinates that determine this location. Same as data found in [Coordinates] . |
accuracy | number(double) | true | none | Accuracy is the estimated horizontal accuracy radius in meters of this location. |
clientDateTime | string | true | none | Date and Time that the client registered this tracking. |
Cancellation policy
Each Project has 1 or 2 SubProjects. If you cancel a Project all of its SubProjects are cancelled, and cancellation fees are applied for each Delivery Pro.
When no cancellation fee is applied
- If Project is in
pending
status, that is, at least one SubProject is inpending
status.
When a cancellation fees is applied
- If Project is not in
pending
status, that is, no SubProject is inpending
status. - If you cancel a Project with more than 24 hours to the scheduled start time, you will be charged a $10.00 fee for each Delivery Pro.
- If you cancel a Project with less than 24 hours to the scheduled start time, you will be charged a fee for each Delivery Pro according to the values below:
Vehicle | Value |
---|---|
Courier | $15 |
SUV | $15 |
Helper | $20 |
Pickup Truck | $25 |
Cargo Van | $40 |
Box Truck | $70 |