NAV
shell

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 and CLIENT_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