ロカオプ予約 API リファレンス

ワークスペース配下の店舗情報と予約情報を外部システムから取得するための API です。

共通仕様

API を利用する際に共通して必要な Base URL, 認証, レート制限をまとめています。

Base URL

https://api.res-app.locaop.jp

認証

すべての API は Authorization header に Bearer token を指定します。

Authorization: Bearer <token>

token は管理画面のワークスペース設定にある API 連携 から発行します。発行直後に表示される token は再表示できないため、利用者側で安全に保管してください。

token はワークスペース単位で管理されます。同じワークスペース配下の店舗であれば、店舗一覧 API で取得した shopId を予約一覧 API の path に指定することで取得対象店舗を切り替えられます。

token を失効させた場合, 反映まで最大 60 秒かかる場合があります。

レート制限

レート制限はワークスペース単位で適用されます。同じワークスペースで複数の API キーを発行している場合でも、制限は合算されます。

  • 上限: 1 ワークスペースあたり 1 秒間に 10 リクエストまで

短時間にリクエストが集中した場合も制限されることがあります。レート制限を超えた場合は 429 Too Many Requests を返します。429 が返った場合は、少し時間をおいてから再試行してください。

AI 向けファイル

AI に API 仕様を共有する場合は, llms.txt を利用できます。

エンドポイント

店舗一覧取得

GET /v1/shops

token に紐づくワークスペース配下の店舗一覧を取得します。

予約一覧 API の shopId には、この API のレスポンスに含まれる shops[].id を指定します。

レスポンス

200 店舗一覧を取得しました。

application/json

Schema: ListShopsResponse

レスポンス例: success

{
  "shops": [
    {
      "id": 2383,
      "uid": "ginza",
      "name": "銀座店"
    },
    {
      "id": 2384,
      "uid": "shibuya",
      "name": "渋谷店"
    }
  ]
}
401 token が不正、失効済み、期限切れです。

application/json

Schema: ErrorResponse

レスポンス例: unauthorized

{
  "message": "Unauthorized"
}
403 必要な scope がない、または指定店舗を利用できません。

application/json

Schema: ErrorResponse

レスポンス例: forbidden

{
  "message": "必要な scope がありません"
}
429 レート制限を超過しました。少し時間をおいてから再試行してください。

application/json

Schema: ErrorResponse

レスポンス例: tooManyRequests

{
  "message": "Too Many Requests"
}
500 サーバーエラーです。

application/json

Schema: ErrorResponse

レスポンス例: internalServerError

{
  "message": "Internal server error"
}

予約一覧取得

GET /v1/shops/{shopId}/reservations

指定した店舗の予約一覧を取得します。

shopId には、token に紐づくワークスペース配下の店舗 ID を指定します。

startDateendDate の期間は最大 13 ヶ月です。

dateField=canceledAt の場合、includingCanceled の指定に関係なくキャンセル済み予約のみ返します。

取得順序

予約は指定した dateField の対象日時の昇順で返ります。

  • dateField=reservationDate: 予約日 (来店日), 予約時刻, 予約作成日時, 予約 ID の昇順
  • dateField=createdAt: 予約作成日時, 予約 ID の昇順
  • dateField=updatedAt: 予約更新日時, 予約 ID の昇順
  • dateField=canceledAt: キャンセル日時, 予約 ID の昇順

ページネーション

レスポンスの nextCursornull でない場合、次ページがあります。次回リクエストでは同じ query 条件に cursor=<nextCursor> を追加してください。

cursorshopIdstartDateendDatedateFieldcourseIdsincludingCanceled の組み合わせに紐づきます。条件を変えた場合は cursor を使わず、最初のページから取得してください。

formResponse

formResponse は予約フォーム回答です。詳細は Response schema を確認してください。

  • formResponse.fields[].uid はフォーム項目の識別子です。連携先では表示名ではなく uid を安定キーとして扱ってください。
  • formResponse.fields[].name, type, values[].text は現在のコースフォーム設定から補完されます。そのため, 予約時点の表示内容と異なる場合があります。
  • 現在のコースフォーム設定から項目や選択肢を解決できない場合, name, type, values[].textnull になる場合があります。
  • formResponse.fields[].type の有効な値と意味は FormFieldType schema を参照してください。
  • 初期値がない任意項目などで利用者が入力操作をしていない場合, その項目は formResponse.fields に含まれません。
  • 初期値がある項目, または利用者が入力操作をした項目は formResponse.fields に含まれます。
  • 選択を解除した場合など, 項目が含まれていて回答値がない場合は values が空配列 ([]) になることがあります。
  • テキスト入力を空にした場合など, 実際に空文字が保存された場合は values に空文字が含まれることがあります。
  • radio / checkbox の値は uidtext を含む object 形式で返ります。その他の入力値は基本的に文字列で返ります。

パラメータ

パスパラメータ
名前説明
shopId必須integer

取得対象店舗の ID。token に紐づくワークスペース配下の店舗 ID を指定します。

2383
クエリパラメータ
名前説明
startDate必須string, format: date

取得開始日。YYYY-MM-DD 形式。

2026-05-01
endDate必須string, format: date

取得終了日。YYYY-MM-DD 形式。

2026-05-31
dateFieldReservationDateField

期間条件の対象日。省略時は reservationDate

  • reservationDate: 予約日 (来店日)
  • createdAt: 予約作成日時
  • updatedAt: 予約更新日時
  • canceledAt: キャンセル日時。キャンセル済み予約のみ取得対象になります
reservationDate
courseIdsstring

コース ID のカンマ区切り。例: 1,2,3

省略時は、指定店舗のすべてのコースの予約を取得します。

コース ID は、管理画面のコース編集画面 URL の末尾の数字で確認できます。たとえば https://res-app.locaop.jp/a/test-workspace/settings/courses/123 の場合、コース ID は 123 です。

1,2,3
includingCanceledboolean, default: false

キャンセル済み予約を含める場合は true。省略時は false

true
limitinteger, default: 50

1 ページあたりの取得件数。省略時は 50、最大 100

50
cursorstring

次ページ取得用 cursor。前回レスポンスの nextCursor をそのまま指定します。

eyJ2IjoxLCJkYXRlRmllbGQiOiJyZXNlcnZhdGlvbkRhdGUi...

レスポンス

200 予約一覧を取得しました。

application/json

Schema: ListReservationsResponse

レスポンス例: success

{
  "reservations": [
    {
      "reservationId": 1001,
      "courseId": 20,
      "courseName": "初回カウンセリング",
      "reservationDate": "2026-05-13",
      "reservationHour": 10,
      "reservationMinute": 30,
      "status": "active",
      "customer": {
        "id": 3001,
        "name": "山田 太郎",
        "nameKana": "ヤマダ タロウ",
        "email": "taro@example.com",
        "tel": "09012345678",
        "lineDisplayName": "山田"
      },
      "note": "予約メモ",
      "inflowSource": {
        "uid": "web",
        "name": "Web"
      },
      "labels": [
        {
          "id": 1,
          "name": "重要"
        }
      ],
      "resources": [
        {
          "id": 5,
          "name": "個室 A"
        }
      ],
      "minutesRequired": 60,
      "createdAt": "2026-05-01 09:00:00",
      "updatedAt": "2026-05-01 09:10:00",
      "deletedAt": null,
      "formResponse": {
        "fields": [
          {
            "uid": "2tEOYE",
            "name": "お名前",
            "type": "name",
            "values": [
              "山田 太郎"
            ]
          },
          {
            "uid": "xtJppM",
            "name": "電話番号",
            "type": "tel",
            "values": [
              "09012345678"
            ]
          },
          {
            "uid": "a8KpQ2",
            "name": "メールアドレス",
            "type": "email",
            "values": [
              "taro@example.com"
            ]
          },
          {
            "uid": "Bn72xR",
            "name": "生年月日",
            "type": "birthDate",
            "values": [
              "1990-01-23"
            ]
          },
          {
            "uid": "mQ4zLp",
            "name": "来店理由",
            "type": "text",
            "values": [
              "Web サイトを見て予約しました"
            ]
          },
          {
            "uid": "V7nDk3",
            "name": "相談内容",
            "type": "textarea",
            "values": [
              "肩こりが気になります"
            ]
          },
          {
            "uid": "rT9wXb",
            "name": "希望メニュー",
            "type": "radio",
            "values": [
              {
                "uid": "Lp4Qz9",
                "text": "メニュー A"
              }
            ]
          },
          {
            "uid": "hY8kNc",
            "name": "気になる症状",
            "type": "checkbox",
            "values": [
              {
                "uid": "P0mXa2",
                "text": "肩こり"
              },
              {
                "uid": "zR6tWq",
                "text": "頭痛"
              }
            ]
          },
          {
            "uid": "cE3uHs",
            "name": "来店人数",
            "type": "number",
            "values": [
              "2"
            ]
          },
          {
            "uid": "nK5pVa",
            "name": "希望日",
            "type": "date",
            "values": [
              "2026-05-20"
            ]
          },
          {
            "uid": "X4gTq1",
            "name": "任意メモ",
            "type": "text",
            "values": []
          }
        ]
      }
    }
  ],
  "limit": 50,
  "nextCursor": null
}
400 query parameter が不正です。

application/json

Schema: ErrorResponse

レスポンス例: invalidDate

{
  "message": "startDate は YYYY-MM-DD 形式で指定してください"
}
401 token が不正、失効済み、期限切れです。

application/json

Schema: ErrorResponse

レスポンス例: unauthorized

{
  "message": "Unauthorized"
}
403 必要な scope がない、または指定店舗を利用できません。

application/json

Schema: ErrorResponse

レスポンス例: forbidden

{
  "message": "必要な scope がありません"
}
429 レート制限を超過しました。少し時間をおいてから再試行してください。

application/json

Schema: ErrorResponse

レスポンス例: tooManyRequests

{
  "message": "Too Many Requests"
}
500 サーバーエラーです。

application/json

Schema: ErrorResponse

レスポンス例: internalServerError

{
  "message": "Internal server error"
}

Schema

ListShopsResponse

型: object

プロパティ説明
shopsarray<Shop>-

Shop

型: object

プロパティ説明
idinteger店舗 ID。予約一覧 API の shopId に指定します。
uidstring予約フォーム URL などで使われる店舗 UID。
namestring店舗名。

ListReservationsResponse

型: object

プロパティ説明
reservationsarray<Reservation>-
limitinteger-
nextCursorstring | null次ページがある場合に返る cursor。次回リクエストの cursor にそのまま指定します。

Reservation

型: object

プロパティ説明
reservationIdinteger予約 ID。
courseIdinteger予約コース ID。
courseNamestring取得時点のコース名。
reservationDatestring, format: date予約日 (来店日)。YYYY-MM-DD 形式。
reservationHourinteger予約時刻 (来店時刻) の時。
reservationMinuteinteger予約時刻 (来店時刻) の分。
statusReservationStatus-
customerReservationCustomer | null顧客情報。formResponse の氏名, メールアドレス, 電話番号の回答とは別の顧客紐づき情報です。顧客が紐づかない場合は null
notestring管理画面で入力した予約メモ。未入力の場合は空文字。
inflowSourceReservationInflowSource予約の流入元。未設定の場合は uidunknown, name不明 になる場合があります。
labelsarray<ReservationLabel>管理画面で付与した予約ラベル。付与されていない場合は空配列。
resourcesarray<ReservationResource>予約に割り当てられたリソース。割り当てられていない場合は空配列。
minutesRequiredinteger | nullフォーム回答とコースの所要時間設定から計算した所要時間 (分)。計算できない場合は null
createdAtstring予約作成日時。YYYY-MM-DD HH:mm:ss 形式。
updatedAtstring予約更新日時。YYYY-MM-DD HH:mm:ss 形式。
deletedAtstring | nullキャンセル日時。未キャンセルの場合は null
formResponseFormResponse予約フォーム回答。

ReservationStatus

予約ステータス。

  • active: 有効な予約
  • canceled: キャンセル済み予約

型: string, enum: active | canceled

値: active canceled

ReservationDateField

期間条件の対象日。

  • reservationDate: 予約日 (来店日)
  • createdAt: 予約作成日時
  • updatedAt: 予約更新日時
  • canceledAt: キャンセル日時。キャンセル済み予約のみ取得対象になります

型: string, enum: reservationDate | createdAt | canceledAt | updatedAt, default: reservationDate

値: reservationDate createdAt canceledAt updatedAt

ReservationCustomer

型: object

プロパティ説明
idinteger顧客 ID。
namestring | null顧客名。未設定の場合は null
nameKanastring | null顧客名かな。未設定の場合は null
emailstring | nullメールアドレス。未設定の場合は null
telstring | null電話番号。未設定の場合は null
lineDisplayNamestring | nullLINE 表示名。未連携または未取得の場合は null

ReservationInflowSource

型: object

プロパティ説明
uidstring流入元 UID。
namestring流入元名。

ReservationLabel

型: object

プロパティ説明
idintegerラベル ID。
namestringラベル名。

ReservationResource

型: object

プロパティ説明
idintegerリソース ID。
namestringリソース名。

FormResponseField

型: object

プロパティ説明
uidstringフォーム項目の識別子。通常は英数字 6 文字です。連携先では表示名ではなく uid を安定キーとして扱ってください。
namestring | null現在のコースフォーム設定から補完した項目名。解決できない場合は null
typeFormFieldType | null-
valuesarray<FormResponseValue>回答値の配列。項目が含まれていて回答値がない場合は空配列になります。

FormResponseOptionValue

型: object

プロパティ説明
uidstring選択肢の識別子。通常は英数字 6 文字です。
textstring | null現在のコースフォーム設定から補完した選択肢表示名。解決できない場合は null

FormFieldType

フォーム項目の入力種別。

  • tel: 電話番号
  • email: メールアドレス
  • name: 氏名
  • birthDate: 生年月日
  • text: 1 行テキスト
  • textarea: 複数行テキスト
  • radio: 単一選択
  • checkbox: 複数選択
  • number: 数値
  • date: 日付

型: string, enum: tel | email | name | birthDate | text | textarea | radio | checkbox | number | date

値: tel email name birthDate text textarea radio checkbox number date

ErrorResponse

型: object

プロパティ説明
messagestring-