Download OpenAPI specification:
Camelから情報を取得するパターンとCamelへ情報を登録するパターンの2つがあり、連携開始までのフロー概要は下記のようになります。
※webhookURLについてはPRD環境と同一でも異なるものでも構いません。
※テスト注文機能利用方法
※尚、上記のテスト注文機能は注文形式や商品パターン等、全てを網羅的にテストすることは出来ません。テスト注文機能で実施できないテストは弊社がサポートいたしますのでご連絡ください。
※全ての処理において、文字コードはUTF-8を使用してください。
連携事業者様の商品コードとCAMELで保持する商品IDを統合するためのフローになります。
2022年3月現在、メニューAPIが準備出来ていないためCAMELの管理画面にて連携事業者様の商品コードを入力することで紐付けしていただくフローとなっております。
※1 CSV一括登録とUI経由の2つの手段がございます。
※2 こちらの作業を担当いただくのはクライアント企業のご担当者様を想定しておりますが、代行いただいても問題ございません。
※3 商品コード設定のパターンは運用途中で変更できません。どうしても変更が必要な場合は弊社担当者へご連絡ください。
※4 商品IDの統合をしなくても注文連携は可能です。
連携事業者様のシステムの仕様や、クライアント企業様の方針等により「商品コードがどの単位で設定されているか」のパターンがいくつかあると認識しております。
CAMELでは標準で下記の4パターンに対応しております。これらのパターンに沿って商品コードをご設定いただけます。
業態ごとに商品コードが振られている。
ex) テストブランド1とテストブランド2で販売している緑茶という商品のコードは異なる。ただデリバリーサービスごとには分かれていない。
商品名 | 業態名 | デリバリーサービス名 | 商品コード |
---|---|---|---|
緑茶 | テストブランド1 | UberEats, Wolt | 100 |
緑茶 | テストブランド2 | UberEats, Wolt | 200 |
業態ごと及びデリバリーサービスごとに商品コードが振られている。
ex) テストブランド1とテストブランド2で販売している緑茶という商品のコードは業態及びデリバリーサービスごとに異なる。
商品名 | 業態名 | デリバリーサービス名 | 商品コード |
---|---|---|---|
緑茶 | テストブランド1 | UberEats | 100 |
緑茶 | テストブランド2 | Wolt | 300 |
緑茶 | テストブランド1 | UberEats | 200 |
緑茶 | テストブランド2 | Wolt | 400 |
デリバリーサービスごとに商品コードが振られている。
ex) UberEatsとWoltで販売している緑茶という商品のコードは異なる。ただ業態ごとには分かれていない。
商品名 | 業態名 | デリバリーサービス名 | 商品コード |
---|---|---|---|
緑茶 | テストブランド1,テストブランド2 | UberEats | 100 |
緑茶 | テストブランド1,テストブランド2 | Wolt | 200 |
拠点(店舗)ごとに商品コードが振られている。
ex) 緑茶という商品のコードは拠点ごとに異なる。テストストア渋谷店とテストストア新宿店ではブランド単位で同じ商品でもコードが異なる
商品名 | 拠点(店舗)名 | デリバリーサービス名 | 業態名 | 商品コード |
---|---|---|---|---|
緑茶 | テストストア新宿店 | UberEats, Wolt | テストブランド1 | 100 |
緑茶 | テストストア渋谷店 | UberEats, Wolt | テストブランド1 | 300 |
リクエスト制限表
エンドポイント | 時間あたりリクエスト制限 |
---|---|
/oauth/token | 10/10s |
/orders/:order_id | 150/10s |
/orders/:order_id/state | 150/10s |
/stores | 10/10s |
/stores/:store_id | 50/10s |
/stores/:store_id/state | 50/10s |
/stores/:store_id/webhook-status | 50/10s |
Camel Public APIではOAuth2.0に対応しています。2022年3月現在、AuthorizationAPIのグラントタイプは「Client Credentials」のみに対応しております。
APIの詳細仕様はAuthorizationAPIのセクションをご確認ください。
*OAuth2.0 仕様概要
RFC6749 The OAuth 2.0 Authorization Framework(他にもRFCが存在しますがここでは割愛します)
clientCredentials
/oauth/token
orders.read
- 注文の取得
orders.delivery.read
- 注文の配達情報の取得
orders.state.write
- 注文ステートの更新
orders.webhook
- 注文の作成・更新(Webhook)
stores.read
- 店舗の取得
stores.webhook_status.write
- 店舗のWebhookステータスの更新
stores.state.write
- 店舗ステートの更新
注文のステータスイベントなどを通知するためWebhookとして送信します。
正常にWebhookイベントの受信が完了した場合HTTP 200のステータスコードを返してください。
HTTP 200の応答が確認できない場合、最大6回再送信を試みます。
Webhookの送信元がtacomsであることを受信元で確認するため、全てのWebhookにはX-Camel-Signatureヘッダーが含まれています。
tacomsではセキュリティの観点からこの署名を検証することを推奨しています。
*Goでの実装例
// X-Camel-Signature: 76b95b9a9d50b72c4347784708b4121cdd778d5278f89437b8fb506a386877e4
clientSecretSample := "y_6e01JuPLO2tu0IavWoNJuOPN-2Nm6FpZsQe21-"
requestBodySample := `{"event_type": "OrderCreated", "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7", "event_time": 1640962800, "event_data": {"order_id": "f3d34064-k93c-4f33-12f4-0570d7e3e123", "store_id": 100}}`
h := hmac.New(sha256.New, []byte(clientSecretSample))
io.WriteString(h, requestBodySample)
fmt.Println(hex.EncodeToString(h.Sum(nil)))
// 76b95b9a9d50b72c4347784708b4121cdd778d5278f89437b8fb506a386877e4
X-Camel-Signature required | string |
Content-Type required | string Default: application/json |
event_type required | string (EventType)
| ||||||||||||
event_id required | string <uuid> | ||||||||||||
event_time required | integer unix time | ||||||||||||
required | object |
{- "event_type": "OrderCreated",
- "event_id": "a7a26ff2-e851-45b6-9634-d595f45458b7",
- "event_time": 1643641200,
- "event_data": {
- "order_id": "f3d34064-k93c-4f33-12f4-0570d7e3e123",
- "store_id": "100"
}
}
grant_type required | string Default: "client_credentials" |
client_id required | string |
client_secret required | string |
scope required | string (Scope) Enum: "orders.read" "orders.state.write" "orders.delivery.read" "orders.webhook" "stores.read" "stores.webhook_status.write" "stores.state.write" |
grant_type=client_credentials&client_id=0345d26b-3687-4a9e-946c-6bad13f8b36b&client_secret=example_secret&scope=orders.read%2Cstores.read%2Cstores.webhook_status.write
{- "access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.tyh-VfuzIxCyGYDlkBA7DfyjrqmSHu6pQ2hoZuFqUSLPNY2N0mpHb3nk5K17HWP_3cYHBw7AhHale5wky6-sVA",
- "token_type": "Bearer",
- "expires_in": 2592000,
- "scope": "orders.read"
}
store_id required | string Example: 100 |
Content-Type required | string Default: application/json |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
webhook_status required | string (WebhookStatus) Enum: "ENABLED" "DISABLED" Webhookの送信がされるか否かを表すステータスです。
|
{- "webhook_status": "ENABLED"
}
"400 Bad Request"
注文情報に関するAPIです。
Camelから情報を取得するパターンとCamelへ情報を登録するパターンの2つがあり、それぞれ下記のようなフローになります。
Create OrderAPIやCancel OrderAPIで注文情報及びキャンセル情報を連携してください。
Camelでステータス変更がされた時、webhookを発行いたしますのでそちらを受け取ることで連携事業者様側で注文確定処理をすることも可能になります。
店舗連携・webhook受信設定のフローに関しましては、Integration Flowを別途参照してください。
注文の詳細を取得するAPIです。
order_id required | string <uuid> |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
{- "order_id": "93101167-9065-4b9c-b98b-5d789a3ed9fe",
- "type": "PICK_UP",
- "display_id": "04F32",
- "external_order_id": "1828ac55-1c28-4a35-9b85-30d455e2d437",
- "delivery_order_id": "DAubB",
- "state": "CREATED",
- "pay_type": "CREDIT_CARD",
- "delivery_service": "UBER_EATS",
- "order_date_and_time": "2021-12-01T12:00:00+09:00",
- "estimated_pickup_time": "2021-12-01T12:00:30+09:00",
- "note": "おしぼりお願いします!",
- "items": [
- {
- "id": "10000",
- "external_item_id": "1eba8c0b-ed00-48e5-9ff1-4f05b071626c",
- "name": "たこ焼き 10個",
- "item_alias": "たこ焼き(期間限定タイムサービス)",
- "quantity": 2,
- "unit_price": 1000,
- "pos_code": "100000",
- "external_pos_code": "200000",
- "selected_modifier_groups": [
- {
- "name": "ソースをお選びください。",
- "external_item_id": "2eba8c0b-ed00-48e5-9ff1-4f05b071626c",
- "pos_code": "500000",
- "external_pos_code": "600000",
- "selected_items": [
- {
- "name": "自家製ソース",
- "quantity": 1,
- "unit_price": 100,
- "pos_code": "2000"
}
]
}
], - "note": "ネギは抜いてください"
}
], - "items_total_price": 2100,
- "delivery_fee": 100,
- "store_promo_discount": 0,
- "delivery_service_promo_discount": 0,
- "total_price": 2100,
- "price_per_taxes": [
- [
- {
- "tax_rate": 8,
- "price": 2200,
- "tax_amount": 176,
- "price_type": "total"
}, - {
- "tax_rate": 10,
- "price": 100,
- "tax_amount": 8,
- "price_type": "total"
}, - {
- "tax_rate": 8,
- "price": 80,
- "tax_amount": 6,
- "price_type": "usage_point"
}, - {
- "tax_rate": 10,
- "price": 20,
- "tax_amount": 2,
- "price_type": "usage_point"
}
]
], - "store": {
- "id": "100",
- "name": "たこ焼き たこむす 本郷店",
- "webhook_status": "ENABLED",
- "brand": {
- "id": "100",
- "name": "たこ焼き たこむす",
- "delivery_service_store": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "たこ焼き たこむす 本郷店 Tacoms Hongo",
- "delivery_service": "UBER_EATS",
- "store_state": "ACCEPTING"
}
}
}, - "is_test": true,
- "is_preorder": true,
- "promotions": [
- [
- {
- "type": "UNKNOWN",
- "title": "300円OFFクーポン",
- "internal_title": "内部管理用_300円OFFクーポン",
- "discount_price": 300
}, - {
- "type": "UNKNOWN",
- "title": "期間限定タイムサービス",
- "internal_title": "001_期間限定タイムサービス",
- "discount_price": null
}
]
], - "metadatas": [
- {
- "key": "string",
- "value": "string"
}
]
}
注文のステータスを変更できるAPIです。こちらのAPIを利用するとCAMELを経由して各デリバリーサービスのAPIへリクエストします。
order_id required | string <uuid> |
Content-Type required | string Default: application/json |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
state required | string |
adjust_min | integer Enum: 10 20 30 40 調理時間の調整。指定の分数が現在時刻に加算される |
{- "state": "accepted",
- "adjust_min": 10
}
"400 Bad Request"
新規注文を登録するAPIです。
パラメーターはorder_type(注文形式)によって変化します。
デリバリー形式(自社・代行)の場合は配達に関するパラメーターの入力が必須になります。
店舗で連携しているPOS事業者がCamelと連携している場合、注文データをCamel経由でPOSに送信することが可能です。
条件として、事業者様側で事前にPOS連携を完了している必要があります。
POSへの注文送信には、POS事業者にて管理しているPOSコードをサービス事業者がCamelに送信し、Camelが送られてきたPOSコードをPOS事業者に送信するという手続きを踏みます。
・POSコードをCamelに送信する方法 (事業者様側で既にPOS連携が完了している場合)
Create OrderAPIのリクエストボディにitemsオブジェクトが存在します。そのうちのpos_codeというパラメータに商品のPOSコードを入力してください。
また、商品のトッピングや数量などの情報が格納されているselected_modifier_groupsの中にもトッピンググループのPOSコードを記入する欄がございます。
selected_itemsオブジェクトにもitemsオブジェクト同様pos_codeパラメータがございますので、トッピング商品のPOSコードを入力してください。
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
order_type required | string (OrderType) Enum: "DINE_IN" "PICK_UP" "DELIVERY_BY_SERVICE" "DELIVERY_BY_STORE" 注文の形式を示す項目です。
| ||||||||||||||||||||||||||||||||
external_store_id required | string 注文を登録する店舗の事業者側で保持している識別IDです。 | ||||||||||||||||||||||||||||||||
external_order_id required | string 注文を登録する店舗の当該注文の事業者側で保持している識別IDです。 | ||||||||||||||||||||||||||||||||
display_id required | string <= 255 注文を登録する店舗の当該注文のエンドユーザー向けに表示するIDです。 | ||||||||||||||||||||||||||||||||
required | Array of objects (ItemParams) 注文された商品に関する項目です。 | ||||||||||||||||||||||||||||||||
total_price required | integer 注文全体の料金です。 | ||||||||||||||||||||||||||||||||
item_total_price required | integer 注文全体の小計金額です。 | ||||||||||||||||||||||||||||||||
order_date_and_time required | string <date-time> タイムゾーン込みで入力してください。eg."2021-12-01T12:00:30+09:00" | ||||||||||||||||||||||||||||||||
point_discount | integer ポイントによる割引金額です。 | ||||||||||||||||||||||||||||||||
store_promo_discount | integer 店舗側で実施された | ||||||||||||||||||||||||||||||||
service_promo_discount | integer サービス側で実施された | ||||||||||||||||||||||||||||||||
Array of objects (PromotionParams) デリバリーサービス経由の割引に関する項目です。 | |||||||||||||||||||||||||||||||||
note | string <= 600 商品に関するお客様からの追記事項です | ||||||||||||||||||||||||||||||||
object (Customer) 注文した顧客の情報に関する項目です。 | |||||||||||||||||||||||||||||||||
pay_type | string (PayType) Enum: "CREDIT_CARD" "CASH" "PAYPAY" "IN_STORE_PAYMENT" "ON_DELIVERY" "FULL_POINT_PAYMENT" "E_MONEY" "INVOICE" "AMAZON_PAY" "LINE_PAY" "D_POINT" "D_PAY" "D_PAY_MINI" "AU_PAY" "SOFTBANK_PAY" 支払いの方法を示す項目です。
| ||||||||||||||||||||||||||||||||
pay_place | string Enum: "ONLINE" "STORE" 支払い場所を示す項目です。オンライン支払い(ONLINE)と店頭支払い(STORE)の2項目を想定しております。 | ||||||||||||||||||||||||||||||||
estimated_pickup_time | string <date-time> order_typeが「PICK_UP」、「DELIVERY_BY_STORE」、「DELIVERY_BY_SERVICE」の際、必須項目となります。
| ||||||||||||||||||||||||||||||||
is_preorder | boolean order_typeが「PICK_UP」、「DELIVERY_BY_STORE」、「DELIVERY_BY_SERVICE」の際、必須項目となります。 | ||||||||||||||||||||||||||||||||
disposable_items | string Enum: "required" "not_required" <font color="red"d>order_typeが「PICK_UP」、「DELIVERY_BY_STORE」、「DELIVERY_BY_SERVICE」の際、必須項目となります。 | ||||||||||||||||||||||||||||||||
delivery_fee | integer order_typeが「DELIVERY_BY_STORE」の際、必須項目となります。 | ||||||||||||||||||||||||||||||||
delivery_phone_number | string order_typeが「DELIVERY_BY_SERVICE」、「DELIVERY_BY_STORE」の際、必須項目となります。 | ||||||||||||||||||||||||||||||||
delivery_address | string order_typeが「DELIVERY_BY_SERVICE」、「DELIVERY_BY_STORE」の際、必須項目となります。 | ||||||||||||||||||||||||||||||||
delivery_instructions | string 配達に関するメモです。 | ||||||||||||||||||||||||||||||||
receive_type | string (ReceiveType) Enum: "DELIVER_TO_DOOR" "LEAVE_AT_DOOR" "CURBSIDE" "RECEIVE_IN_STORE" "DRIVE_IN_THROUGH" "RECEIVE_IN_PARKING" "LEAVE_IN_LOBBY" "MEET_IN_LOBBY" "LEAVE_INSIDE_BUILDING_DOOR" order_typeが「DELIVERY_BY_SERVICE」、「DELIVERY_BY_STORE」の際、必須項目となります。
|
{- "order_type": "DELIVERY_BY_STORE",
- "external_store_id": "ca2a6601-bba4-ca10-099e-1471ae0c5c19",
- "external_order_id": "af76739b-9962-5cde-bd0b-1c3492a7d07f",
- "display_id": "04F32",
- "items": [
- {
- "external_item_id": "1eba8c0b-ed00-48e5-9ff1-4f05b071626c",
- "pos_code": "10000",
- "name": "たこ焼き 10個",
- "quantity": 2,
- "unit_price": 1000,
- "selected_modifier_groups": [
- {
- "name": "ソースをお選びください。",
- "external_item_id": "2eba8c0b-ed00-48e5-9ff1-4f05b071626c",
- "pos_code": "500000",
- "selected_items": [
- {
- "name": "自家製ソース",
- "quantity": 1,
- "unit_price": 100,
- "pos_code": "2000"
}
]
}
], - "note": "ネギは抜いてください"
}
], - "total_price": 2100,
- "item_total_price": 2200,
- "order_date_and_time": "2021-12-01T12:00:00+09:00",
- "point_discount": 0,
- "store_promo_discount": 0,
- "service_promo_discount": 300,
- "promotions": [
- {
- "promo_type": "flat_off",
- "discount_items": [
- {
- "external_item_id": "b916c542-6d8c-b4fe-6d2d-87257126c24d",
- "discounted_quantity": 1
}
]
}
], - "note": "ネギは抜いてください",
- "customer": {
- "name": "たこ太郎",
- "phone_number": "080-1234-5678",
- "address": "日本、〒113-0033 東京都文京区本郷3丁目13−3 4階"
}, - "pay_type": "CREDIT_CARD",
- "pay_place": "ONLINE",
- "estimated_pickup_time": "2021-12-01T12:00:30+09:00",
- "is_preorder": false,
- "disposable_items": "not_required",
- "delivery_fee": 100,
- "delivery_phone_number": "080-1111-2222",
- "delivery_address": "東京都港区芝公園1-1-1",
- "delivery_instructions": "出来るだけ早く届けてください。",
- "receive_type": "DELIVER_TO_DOOR"
}
{- "order_id": "aaa7cfde-1e6a-f949-29e3-b7fc0dfce2aa"
}
注文をキャンセルするAPIです。
注文登録時に返却される注文IDを送信し、該当の注文をキャンセルします。
その際、注文全体の小計(item_total_price)が0になり、売上に計上されないように処理が行われます。
order_id required | string <uuid> Example: aaa7cfde-1e6a-f949-29e3-b7fc0dfce2aa 注文作成時に返却された注文IDです。 |
Content-Type required | string Default: application/json |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
"400 Bad Request"
cursor | string <base64> Example: cursor=NzBjOGZkNzUtYzlmYS00ZDA0LTgwNjItNDA0NzI2OGRlZmM4Cg== レスポンスのnext_cursorを入れる |
limit | integer [ 1 .. 50 ] Default: 30 最大50件まで取得可能。指定しないと連携開始日の降順で30件取得される。 |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
{- "stores": [
- {
- "id": "100",
- "name": "たこ焼き たこむす 本郷店",
- "webhook_status": "ENABLED",
- "brands": [
- {
- "id": "100",
- "name": "たこ焼き たこむす",
- "delivery_service_stores": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "たこ焼き たこむす 本郷店 Tacoms Hongo",
- "delivery_service": "UBER_EATS"
}, - {
- "id": "333f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "たこ焼き たこむす 本郷店 Tacoms Hongo",
- "delivery_service": "WOLT"
}
]
}
]
}, - {
- "id": "200",
- "name": "たこ焼き たこむす 新宿店",
- "webhook_status": "ENABLED",
- "brands": [
- {
- "id": "100",
- "name": "たこ焼き たこむす",
- "delivery_service_stores": [
- {
- "id": "123f6eca-6276-4993-bfeb-53cbbbba622",
- "name": "たこ焼き たこむす 新宿店 Tacoms Hongo",
- "delivery_service": "UBER_EATS"
}, - {
- "id": "444f6eca-6276-4993-bfeb-53cbbbba622",
- "name": "たこ焼き たこむす 新宿店 Tacoms Hongo",
- "delivery_service": "WOLT"
}
]
}
]
}
], - "next_cursor": "ZXhhbXBsZV9pZAo="
}
store_id required | string Example: 100 |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
{- "id": "100",
- "name": "たこ焼き たこむす 本郷店",
- "webhook_status": "ENABLED",
- "brands": [
- {
- "id": "100",
- "name": "たこ焼き たこむす",
- "delivery_service_stores": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "たこ焼き たこむす 本郷店 Tacoms Hongo",
- "delivery_service": "UBER_EATS"
}, - {
- "id": "333f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "たこ焼き たこむす 本郷店 Tacoms Hongo",
- "delivery_service": "WOLT"
}
]
}
]
}
拠点に紐づく指定した店舗のステータスを切り替えるAPIです。
※現在「出前館」と「EPARK Takeout」は本APIの対象外となっております
store_id required | string Example: 100 |
Content-Type required | string Default: application/json |
Authorization required | string Example: Bearer <token> curlでのHeader指定例 -H "Authorization: Bearer JA.VUNmGAAAAAAAEgASAAAFAAAAAA......" |
store_state required | string (StoreStateReq) Enum: "ACCEPTING" "PENDING" 店舗が注文を受け付けているか否かを表すステータスです。
| ||||||
ids required | Array of strings unique Get Store DetailsAPIのDeliveryServiceStore配列に存在するIDを指定 |
{- "store_state": "ACCEPTING",
- "ids": [
- "a2226692-c9bd-fb22-52e5-cbb7490b497b",
- "r2ebfcf3-4f65-12a4-bfb1-63107c82a037"
]
}
{- "error_stores": [
- {
- "id": "a2226692-c9bd-fb22-52e5-cbb7490b497b",
- "message": "string",
- "status": 400
}
]
}