The API is included in the plan. The account owner creates keys in the developer settings. For a test account, email hello@storebay.co.uk.

Developers
Access

Create an access credential

Refused with 409 `access_held` while the credential is for a booking whose access is waiting for the customer's ID to be checked (by its agreement, the unit it has, or its customer at the site). The check passing issues the credential itself, so there is nothing to retry.

POST
/access-credentials

Refused with 409 access_held while the credential is for a booking whose access is waiting for the customer's ID to be checked (by its agreement, the unit it has, or its customer at the site). The check passing issues the credential itself, so there is nothing to retry.

Authorization

AuthorizationBearer <token>

Present an API key (sb_live_… / sb_test_…), an OAuth2 access token, or a static token as a Bearer credential. The operator is implied by the credential; it is never in the path. Only a SHA-256 hash of an API key is stored server-side.

In: header

Header Parameters

Idempotency-Key?string

A unique key that makes this mutation safe to retry. Repeats replay the stored response; reuse with a different body returns 409 idempotency_conflict.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/access-credentials" \  -H "Content-Type: application/json" \  -d '{    "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",    "vendor": "noke"  }'
{  "data": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "object": "access_credential",    "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",    "unit_id": "5becc822-b69e-4e66-a762-ad8e868dcab6",    "agreement_id": "67dd069b-637c-4b8e-8d92-17a313d06fb8",    "contact_id": "f245e2a3-e141-4d41-912c-b1c1f5bd5598",    "vendor": "noke",    "credential_type": "pin",    "external_credential_id": "string",    "status": "pending",    "issued_at": "2019-08-24T14:15:22Z",    "suspended_at": "2019-08-24T14:15:22Z",    "revoked_at": "2019-08-24T14:15:22Z",    "expires_at": "2019-08-24T14:15:22Z",    "created_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z"  }}
{  "error": {    "code": "unauthorized",    "message": "Missing or invalid credential."  }}
{  "error": {    "code": "insufficient_scope",    "message": "The credential lacks a scope required by this endpoint."  }}
{  "error": {    "code": "conflict",    "message": "The request conflicts with current resource state."  }}
{  "error": {    "code": "validation_error",    "message": "One or more fields are invalid.",    "details": [      {        "field": "email",        "issue": "must be a valid email address"      }    ]  }}
{  "error": {    "code": "rate_limited",    "message": "Rate limit exceeded. Retry after 7s."  }}
{  "error": {    "code": "validation_error",    "message": "string",    "details": [      {        "field": "string",        "issue": "string"      }    ]  }}