Introduction
Welcome to the Proximity API! You can use our API to access certain Proximity data and features. This API is a work in progress, and as such, is incomplete.
Authentication
The Proximity API uses bearer tokens to grant access to endpoints. There are two types of token: client
and user
. You can use a client
token to access all endpoints not requiring use authentication. To act on behalf of a user, you must obtain and use a user
token. Current published API endpoints all use a client
token.
Client Token
To authorize, make a POST request like:
curl -X "POST" "https://app.sushi.prx.dev/oauth/token" \
-H 'Accept: application/json' \
-H 'Content-Type: text/plain; charset=utf-8' \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=CLIENT_ID" \
--data-urlencode "client_secret=CLIENT_SECRET"
Make sure to replace
CLIENT_ID
andCLIENT_SECRET
with your values.The above command returns JSON structured like this:
{
"token_type": "Bearer",
"expires_in": 5184000,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjZmOGJhMzQ3ZGRlZDc5ZTQ4OGJlZDYyMGVmYjdhOWQ0NjgyNDMwYmFlMzhlMmFjOGU4M2ZkZWU1OGM1NzhhMjlhMjRkOGE2ODg3MDEzYzY0In0 ... D8V__MXzWVHC8Iccu8N1AdqEZG1W3QwRQOhjPhl5SNQ541EAVKE2ADkJmSY3rFDu4Uetnzv1qjnsXZ69d14pjU"
}
Retrive a client token for use with unauthenticated endpoints.
HTTP Request
Production: POST https://proximity.app/oauth/token
Development: POST https://app.sushi.prx.dev/oauth/token
Headers
Header | Description |
---|---|
Accept | application/json |
Body
Parameter | Description |
---|---|
grant_type | client_credentials |
client_id | CLIENT_ID |
client_secret | CLIENT_SECRET |
Authenticating Endpoints
All other endpoints must have the following headers
Header | Description |
---|---|
Accept | application/json |
Authorization | Bearer BEARER_TOKEN |
Locations & Reservations
Get All Locations
curl "https://app.sushi.prx.dev/api/partner/locations?limit=20&page=2"
The above command returns JSON structured like this:
{
"data": [
{
"id": 1,
"name": "FACTORY",
"currency": "usd",
"locale": "en-US",
"timezone": "America/Denver",
"platformWebsite": "https://members.factorycoworking.com",
"marketingWebsite": "https://factorycoworking.com",
"description": "Welcome to FACTORY. We're so glad you're here.\r\n\r\nAny of the high-top tables are available on a first-come, first-serve basis. There is coffee available in the kitchen and restrooms are located upstairs near the entryway and downstairs directly under the upstairs restrooms. \r\n\r\nIf you have any questions, you can email our Community Manager at info@factorycoworking.com!",
"location": {
"address": "730 Mesa Avenue",
"address2": "",
"locality": "Grand Junction",
"region": "Colorado",
"regionShort": "CO",
"country": "United States",
"countryShort": "US",
"postalCode": "81501",
"latitude": "39.0829949",
"longitude": "-108.55995230000002",
"timezone": "America/Denver",
"formatted": "730 Mesa Avenue, Grand Junction, CO 81501"
},
"size": null,
"hours": {
"monday": {
"open": "9:00 AM",
"close": "4:00 PM"
},
"tuesday": {
"open": "9:00 AM",
"close": "4:00 PM"
},
"wednesday": {
"open": "9:00 AM",
"close": "4:00 PM"
},
"thursday": {
"open": "9:00 AM",
"close": "4:00 PM"
},
"friday": {
"open": "9:00 AM",
"close": "4:00 PM"
},
"saturday": {
"open": null,
"close": null
},
"sunday": {
"open": null,
"close": null
}
},
"allowsPrivateReservations": false,
"updatedAt": "2021-03-09T20:13:43-07:00",
"styles": {
"data": {
"colorPrimary": "#EE487C",
"colorPrimaryContrast": "#ffffff",
"colorSecondary": "#ffe055",
"colorSecondaryContrast": "#000000",
"gradientPrimary": "linear-gradient(135deg, rgb(255,224,85) 0%, rgb(247,151,68) 25%, rgb(242,108,69) 50%, rgb(231,67,57) 75%, rgb(238,72,124) 100%)",
"underlineLinks": 0,
"fontHeadings": null,
"fontBody": null
}
},
"amenities": {
"data": [
{
"title": "24/7 Access",
"additionalCharge": false,
"description": null
},
{
"title": "Accessibility",
"additionalCharge": false,
"description": null
},
{
"title": "Apple TV",
"additionalCharge": false,
"description": null
},
{
"title": "WiFi",
"additionalCharge": false,
"description": null
}
]
},
"resources": {
"data": [
{
"id": 2703,
"name": "Bird's Eye View (Room 202)",
"description": "Upstairs conference room that seats 10, with a view of the Maverick Innovation Center. Equipped with 70\" Screen, enterprise video conferencing equipment and a large dry erase board. ",
"seats": 6,
"reservationParameters": {
"maxDaysOut": 30,
"minLength": 15,
"maxLength": 480,
"earliestStartTime": "09:00:00",
"latestEndTime": "17:00:00"
},
"price": {
"hourly": 2500,
"daily": null,
"monthly": null
},
"updatedAt": "2020-07-20T13:42:28-06:00",
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2019/12/ba114f1f12996e4e130a7fd2c872b968_o.jpg"
}
]
},
"taxes": {
"data": []
},
"category": {
"data": {
"id": 1,
"title": "Conference Rooms",
"singularTitle": "Conference Room",
"slug": "conference-rooms"
}
}
},
{
"id": 2704,
"name": "The Fish Bowl (Room 106)",
"description": "Middle Conference Room on the main floor of the Innovation Center. Seats 6 comfortably and 8 if needed. Large screen to cast to. ",
"seats": 4,
"reservationParameters": {
"maxDaysOut": 30,
"minLength": 30,
"maxLength": 480,
"earliestStartTime": "09:00:00",
"latestEndTime": "17:00:00"
},
"price": {
"hourly": 2000,
"daily": null,
"monthly": null
},
"updatedAt": "2020-07-20T13:43:36-06:00",
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2019/12/d1a015e075e6563504b9224f50ef662c_o.jpg"
}
]
},
"taxes": {
"data": []
},
"category": {
"data": {
"id": 1,
"title": "Conference Rooms",
"singularTitle": "Conference Room",
"slug": "conference-rooms"
}
}
}
]
},
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2020/09/d0dd006bced6bf24aca98488425c1b71_o.jpg",
"sortOrder": 0
},
{
"url": "https://app.sushi.prx.dev/assets/uploads/2020/09/f4c3ff9274543821b9606f63a18cbfdd_o.jpg",
"sortOrder": 1
}
]
},
"brand": {
"data": {
"id": 1,
"name": "Proximity"
}
}
},
{
"id": 2,
"name": "Proximity Space: Montrose",
"currency": "usd",
"locale": "en-US",
"timezone": "America/Denver",
"platformWebsite": "https://montrose.proximity.app",
"marketingWebsite": "https://montrose.proximitycoworking.com",
"description": "Welcome to the Montrose Proximity Space. We are happy to have you here and want you to be able to get to work quickly. First things, let's get you a seat. Take a look around and notice the signs that say \"Work Space\". These signs represent where you are welcome to sit and contain additional information about this specific space.",
"location": {
"address": "210 East Main Street",
"address2": "",
"locality": "Montrose",
"region": "Colorado",
"regionShort": "CO",
"country": "United States",
"countryShort": "US",
"postalCode": "81401",
"latitude": "38.4781717",
"longitude": "-107.8781609",
"timezone": "America/Denver",
"formatted": "210 East Main Street, Montrose, CO 81401"
},
"size": {
"area": 6000,
"system": "imperial",
"formatted": "6000 sq. ft."
},
"hours": {
"monday": {
"open": "8:00 AM",
"close": "5:00 PM"
},
"tuesday": {
"open": "8:00 AM",
"close": "5:00 PM"
},
"wednesday": {
"open": "8:00 AM",
"close": "5:00 PM"
},
"thursday": {
"open": "8:00 AM",
"close": "5:00 PM"
},
"friday": {
"open": "8:00 AM",
"close": "5:00 PM"
},
"saturday": {
"open": null,
"close": null
},
"sunday": {
"open": null,
"close": null
}
},
"allowsPrivateReservations": false,
"updatedAt": "2020-12-01T06:02:22-07:00",
"styles": {
"data": {
"colorPrimary": "#ee487c",
"colorPrimaryContrast": "#ffffff",
"colorSecondary": "#F5E86B",
"colorSecondaryContrast": "#000000",
"gradientPrimary": "linear-gradient(135deg, rgb(255,224,85) 0%, rgb(247,151,68) 25%, rgb(242,108,69) 50%, rgb(231,67,57) 75%, rgb(238,72,124) 100%)",
"underlineLinks": 0,
"fontHeadings": null,
"fontBody": null
}
},
"amenities": {
"data": [
{
"title": "24/7 Access",
"additionalCharge": false,
"description": null
},
{
"title": "Accessibility",
"additionalCharge": false,
"description": null
},
{
"title": "Air Conditioning",
"additionalCharge": false,
"description": null
},
{
"title": "Whiteboard",
"additionalCharge": false,
"description": null
},
{
"title": "WiFi",
"additionalCharge": false,
"description": null
}
]
},
"resources": {
"data": [
{
"id": 4,
"name": "Main Conference Room",
"description": "Our largest conference room on the ground floor. ",
"seats": 6,
"reservationParameters": {
"maxDaysOut": 30,
"minLength": 30,
"maxLength": 480,
"earliestStartTime": "09:00:00",
"latestEndTime": "16:00:00"
},
"price": {
"hourly": 3500,
"daily": null,
"monthly": null
},
"updatedAt": "2020-07-24T11:25:01-06:00",
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2019/02/263ecc592d4e37294824d0cbe034ed74_o.jpg"
}
]
},
"taxes": {
"data": []
},
"category": {
"data": {
"id": 2,
"title": "Conference Rooms",
"singularTitle": "Conference Room",
"slug": "conference-rooms"
}
}
},
{
"id": 15,
"name": "The Studio",
"description": "Media Studio with presentation and photography capabilities. Great for one on one meetings and consultations. ",
"seats": 4,
"reservationParameters": {
"maxDaysOut": 30,
"minLength": 60,
"maxLength": 240,
"earliestStartTime": "08:00:00",
"latestEndTime": "17:00:00"
},
"price": {
"hourly": 2000,
"daily": null,
"monthly": null
},
"updatedAt": "2020-07-20T13:58:29-06:00",
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2019/08/620514282c89bcc96cd66caa5fb19a2b_o.jpg"
}
]
},
"taxes": {
"data": []
},
"category": {
"data": {
"id": 2,
"title": "Conference Rooms",
"singularTitle": "Conference Room",
"slug": "conference-rooms"
}
}
},
{
"id": 48,
"name": "The Classroom",
"description": "Upstairs Conference Room near kitchen and bonus bathrooms.",
"seats": 6,
"reservationParameters": {
"maxDaysOut": 30,
"minLength": 60,
"maxLength": 240,
"earliestStartTime": "08:00:00",
"latestEndTime": "17:00:00"
},
"price": {
"hourly": 3500,
"daily": null,
"monthly": null
},
"updatedAt": "2020-07-24T11:25:17-06:00",
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2019/01/8dbe6f6f36a69dd383d98ffd74c9ee7c_o.jpg"
}
]
},
"taxes": {
"data": []
},
"category": {
"data": {
"id": 2,
"title": "Conference Rooms",
"singularTitle": "Conference Room",
"slug": "conference-rooms"
}
}
}
]
},
"photos": {
"data": [
{
"url": "https://app.sushi.prx.dev/assets/uploads/2020/07/a47fec87b190d375bdcfcb1b79ee0396_o.jpg",
"sortOrder": 0
}
]
},
"brand": {
"data": {
"id": 1,
"name": "Proximity"
}
}
}
],
"meta": {
"pagination": {
"total": 221,
"count": 1,
"per_page": 20,
"current_page": 2,
"total_pages": 12,
"links": {
"previous": "https://app.sushi.prx.dev/api/partner/locations?limit=20&page=1",
"next": "https://app.sushi.prx.dev/api/partner/locations?limit=20&page=3"
}
}
}
}
Retrieve all locations and resources.
Authentication
Requires a Client Token
HTTP Request
Production: GET https://proximity.app/api/partner/locations
Development: GET https://app.sushi.prx.dev/api/partner/locations
Query Parameters
Parameter | Required | Default | Description |
---|---|---|---|
limit | no | unlimited | If set, limits the number of locations returned |
page | no | 1 | If set with limit, determines which page of results to return |
Get Resource Availability
curl "https://app.sushi.prx.dev/api/partner/availability?resourceIds=1,3&startDate=2021-11-05&startTime=05:00&endTime=14:00"
The above command returns JSON structured like this:
{
"data": {
"4878": false,
"5131": true,
"5133": true
}
}
Determine the availability of resources.
Authentication
Requires a Client Token
HTTP Request
Production: GET https://proximity.app/api/partner/availability
Development: GET https://app.sushi.prx.dev/api/partner/availability
URL Parameters
Parameter | Required | Default | Description |
---|---|---|---|
resourceIds | yes | A numeric ID or comma-separated list of IDs | |
startDate | yes | The start of the date range to check in format YYYY-MM-DD |
|
endDate | no | startDate | The end of the date range to check in format YYYY-MM-DD |
startTime | yes | The start of the time range to check in format HH:MM (24 hour) |
|
endTime | yes | The end of the time range to check in format HH:MM (24 hour) |
Create Reservations
curl -X "POST" "https://app.sushi.prx.dev/api/partner/create-reservation" \
--data-urlencode "resourceIds=4878,4877,4879" \
--data-urlencode "startDate=2022-02-12" \
--data-urlencode "startTime=10:00" \
--data-urlencode "endTime=16:00" \
--data-urlencode "reservationName=My Reservation" \
--data-urlencode "contactFirstName=Josh" \
--data-urlencode "contactLastName=Hudnall" \
--data-urlencode "contactPhone=5558398293" \
--data-urlencode "contactCompany=My Company"
The above command returns JSON structured like this:
{
"data": [
{
"id": 28,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
},
{
"id": 29,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
},
{
"id": 30,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
}
]
}
Create reservations for resources.
Authentication
Requires a Client Token
HTTP Request
Production: POST https://proximity.app/api/partner/create-reservation
Development: POST https://app.sushi.prx.dev/api/partner/create-reservation
URL Parameters
Parameter | Required | Default | Description |
---|---|---|---|
resourceIds | yes | A numeric ID or comma-separated list of IDs | |
startDate | yes | The start of the date range to check in format YYYY-MM-DD |
|
endDate | no | startDate | The end of the date range to check in format YYYY-MM-DD |
startTime | yes | The start of the time range to check in format HH:MM (24 hour) |
|
endTime | yes | The end of the time range to check in format HH:MM (24 hour) |
|
reservationName | yes | The name of the reservation | |
additionalInfo | yes | Any additional info or requests to be included with the reservation (plain text) | |
contactFirstName | yes | The contact's first name | |
contactLastName | yes | The contact's last name | |
contactPhone | if no email | The contact's phone number | |
contactEmail | if no phone | The contact's email address | |
contactCompany | no | The contact's company name |
Cancel Reservations
curl -X "POST" "https://app.sushi.prx.dev/api/partner/cancel-reservation" \
--data-urlencode "linkedReservationId=2"
The above command returns JSON structured like this:
{
"data": [
{
"id": 28,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
},
{
"id": 29,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
},
{
"id": 30,
"linkedReservationId": 2,
"title": "My Reservation",
"start": "2022-02-12T10:00:00-07:00",
"end": "2022-02-12T16:00:00-07:00",
"checkedInAt": null,
"checkInRequired": false,
"reservationStatus": "Approved",
"private": false,
"updated_at": "2021-04-27T21:17:48-06:00"
}
]
}
Create reservations for resources.
Authentication
Requires a Client Token
HTTP Request
Production: POST https://proximity.app/api/partner/cancel-reservation
Development: POST https://app.sushi.prx.dev/api/partner/cancel-reservation
URL Parameters
Parameter | Required | Default | Description |
---|---|---|---|
linkedReservationId | yes | A numeric ID representing the reservation group to cancel |