NAV
Shell HTTP JavaScript Ruby Python PHP Java Go

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 and POST /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.

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",
  "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": {}
      },
      "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": {}
      },
      "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",
  "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": {}
      },
      "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": {}
      },
      "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",
  "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": {}
      },
      "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": {}
      },
      "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",
  "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": {}
      },
      "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": {}
      },
      "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",
  "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": {}
      },
      "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": {}
      },
      "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",
  "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": {}
      },
      "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": {}
      },
      "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",
    "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": {}
        },
        "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": {}
        },
        "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",
    "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": {}
        },
        "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": {}
        },
        "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
  • min: 30 minutes from now
  • interval: 5AM to 11:30PM
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
  • min: 30 minutes from now
  • interval: 5AM to 11:30PM
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
  • max: 2
A list of SubProjects. It can be omitted if you do not want to update any SubProjects.
stops [StopPatchRequest] true
  • max: 23
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
  • min: 1
  • max: 5
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",
  "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": {}
      },
      "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": {}
      },
      "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
  • min: 30 minutes from now
  • interval: 5AM to 11:30PM
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
  • min: 30 minutes from now
  • interval: 5AM to 11:30PM
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 [SubProjectRequest] true
  • min: 1
  • max: 2
A list of SubProjects.
stops [StopRequest] true
  • min: 2
  • max: 23
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. If you need to pass something bigger like UUID you can pass it to project.metadata.
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 ids 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.

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].

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
    • min: 1
    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

    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": {}
    }
    
    

    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.

    Project

    {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "subProjects": [
        {
          "vehicle": {
            "alias": "string",
            "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",
      "totalPrice": 0,
      "subProjectsCount": 0,
      "cancellation": {
        "reasons": [
          "string"
        ],
        "fee": 0,
        "object": "string"
      },
      "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:
    • 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.

    startDateTime string true
    • min: 30 minutes from now
    • interval: 5AM to 11:30PM
    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:
    • pending: The Project was successfully created, but no Delivery Pro has been assigned yet.
    • accepted: A Delivery Pro has been assigned to the Project.
    • started: Delivery Pro arrived and is loading the cargo in the vehicle.
    • finished: Delivery Pro has delivered the cargo and the Project is complete.
    • canceled: The Project was canceled.
    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. If you need to pass something bigger like UUID you can pass it to project.metadata.
    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 ids 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.
    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.
    cancellation Cancellation false none Cancellation data such as list of reasons and fee charged.
    zonedStartDateTime string true
    • min: 30 minutes from now
    • interval: 5AM to 11:30PM
    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.
    • If you cancel a Project with more than toleranceDurationInMinutes minutes to project.startDateTime, that is, more than 24 hours to the scheduled start time, then underToleranceDurationFee is applied.
    • If you cancel a Project with less than toleranceDurationInMinutes minutes to project.startDateTime, that is, less than 24 hours to the scheduled start time, then overToleranceDurationFee is applied.

    This object is present in Project and its SubProject(s). project.cancellationPolicy fee values are sum of all subProject[].cancellationPolicy respective fees.

    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:
    • 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.
    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:

    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. If you need to pass something bigger like UUID you can pass it to project.metadata.
    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 ids 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. If you need to pass something bigger like UUID you can pass it to project.metadata.
    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 ids 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
    • min: 1
    • max: 5
    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:

    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:
    • pending: Delivery Pro hasn't arrived at the stop yet.
    • arrived: Delivery Pro arrived at the stop.
    • loaded: Delivery Pro has loaded the cargo in the vehicle at that stop.
    • unloaded: Delivery Pro has unloaded the cargo at that stop.
    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
    • min: 1
    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": {}
      },
      "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
    • min: 1
    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": {
        "alias": "string",
        "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:
    • pending: The Project was successfully created, but no Delivery Pro has been assigned yet.
    • accepted: A Delivery Pro has been assigned to the Project.
    • started: Delivery Pro arrived and is loading the cargo in the vehicle.
    • finished: Delivery Pro has delivered the cargo and the Project is complete.
    • canceled: The Project was canceled.
    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.
    • If you cancel a Project with more than toleranceDurationInMinutes minutes to project.startDateTime, that is, more than 24 hours to the scheduled start time, then underToleranceDurationFee is applied.
    • If you cancel a Project with less than toleranceDurationInMinutes minutes to project.startDateTime, that is, less than 24 hours to the scheduled start time, then overToleranceDurationFee is applied.

    This object is present in Project and its SubProject(s). project.cancellationPolicy fee values are sum of all subProject[].cancellationPolicy respective fees.

    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
      write-only
    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

    {
      "alias": "string",
      "equipment": [
        {
          "alias": "string",
          "price": 0,
          "object": "string"
        }
      ],
      "object": "string"
    }
    
    

    Details of the vehicle, including its name and alias.

    Properties

    Name Type Required Restrictions Description
    alias string true none The alias property of the vehicle. See Vehicles API.
    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

    When a cancellation fees is applied

    Vehicle Value
    Courier $15
    SUV $15
    Helper $20
    Pickup Truck $25
    Cargo Van $40
    Box Truck $70