Availability

List start times

GET
/api/v1/availability/starts

Bookable start times for a given day and service selection. Also callable with a publishable key (shyni_pk_...). Mirrors the customer booking widget's start-time step exactly (same allocator), scoped to the calling key's own studio. The selection is checked like POST /orders checks it: it must contain at least one primary or secondary service (add-ons alone answer 400 INVALID_INPUT, field: serviceIds), and no start later than one year ahead is offered (a date beyond that horizon returns an empty list).

Authorization

ApiKeyAuth catalog:read
headerAuthorizationBearer <shyni_sk_live_*>

An API key, issued once and never retrievable again: an organization key in the developer portal, or a studio key in the studio's admin (Moje studio → API). Send as Authorization: Bearer shyni_sk_live_....

Scope: catalog:read

Query Parameters

date*string

Day to compute starts for (YYYY-MM-DD).

Formatdate
serviceIds*string

Comma-separated service ids (at least one, at most 10; more answers 400 INVALID_INPUT).

variant?string

Variant code the order will be booked with (a code from the service variants). Its extraMinutes lengthen the work, so pass the same value you later send in POST /orders. Omitted, no variant minutes are added.

optionAnswers?string

Configurator answers, the POST /orders optionAnswers[] pairs as comma-separated questionId:optionId (the parameter may also repeat). The picked options' minutes lengthen the work, so pass the same answers you later send in POST /orders; without them a configurator service's window is too short and the order is refused. The same rules as the order apply: an unknown question or option, a question answered twice, an unanswered required question, or answers with no configurator service in the selection answer 400 INVALID_INPUT (field: optionAnswers); a malformed pair is 400 too.

inspection?boolean

true returns the windows of the studio's free inspection (konzultace) instead of the selection's own duration: every window is as long as the studio's inspection length, whatever variant and optionAnswers say, and the selection is not priced or checked for it (serviceIds is still required). Book one with POST /orders and inspection: true. Anything but true or false is 400 INVALID_INPUT, field: inspection.

Defaultfalse

Response Body

Bookable start/end windows on the requested day, in allocator order, wrapped in the list envelope ({"data": [...]}; not paged, so no meta).

application/json
  1. response
data*array<>
Example Request
curl -X GET 'https://api.shyni.io/api/v1/availability/starts?date=2019-08-24&serviceIds=3b7e9c52-81d4-4f6a-a0c3-2d9e5b8f1a47%2C7d2f4a10-5c96-4e83-b1a7-9f0e3c6d8b25&variant=MEDIUM&optionAnswers=9c1d2e3f-4a5b-6c7d-8e9f-0a1b2c3d4e5f%3A5a6b7c8d-9e0f-1a2b-3c4d-5e6f7a8b9c0d' \  -H 'Authorization: Bearer shyni_sk_test_YOUR_KEY'

Response 200

Bookable start/end windows on the requested day, in allocator order, wrapped in the list envelope ({"data": [...]}; not paged, so no meta).

{  "data": [    {      "start": "2019-08-24T14:15:22Z",      "end": "2019-08-24T14:15:22Z"    }  ]}

Response 400

A parameter, header or request body is missing, malformed, or out of range. A request body property the endpoint does not define answers UNKNOWN_FIELD instead, with field naming it.

{  "code": "INVALID_INPUT",  "message": "Parameter perPage must be between 1 and 100."}

Response 401

Missing, malformed, unknown, or revoked API key (INVALID_API_KEY).

{  "code": "INVALID_API_KEY",  "message": "Missing or invalid API key."}

Response 403

The key is valid but the request is refused. Branch on code: INSUFFICIENT_SCOPE (the key lacks the permission this endpoint requires), PLAN_REQUIRED (the studio is not on a plan that includes API keys, Pro and above), ORIGIN_NOT_ALLOWED, SECRET_KEY_IN_BROWSER, or DEMO_STUDIO on a write to the demo studio. See Authentication and Scopes above.

{  "code": "INSUFFICIENT_SCOPE",  "message": "This API key does not have the permission this endpoint requires."}

Response 409

The studio is not published, so its booking data is not available (STUDIO_NOT_PUBLISHED).

{  "code": "STUDIO_NOT_PUBLISHED",  "message": "The studio is not published; booking data is not available."}

Response 429

Burst rate limit exceeded.

{  "code": "RATE_LIMITED",  "message": "Too many requests. Retry after the time given in the Retry-After header."}