Soho House API(非官方技术指南2025)
对Soho House数字生态系统的全面技术深入分析。我们分析了舞台环境、第三方集成(Oracle Simphony、Agora、Algolia)以及2025年公共API规范中揭示的“House Pay”、房间预订和会员连接背后的内部逻辑。
The Tech Insider
Author
The Tech Insider

Soho House API(非官方技术指南2025)
2025年10月8日,Soho House数字生态系统的全面Postman集合在docs.sohohousedigital.com上公开发布。虽然该集合旨在内部使用,但其可用性为全球奢侈酒店品牌如何构建数字会员体验提供了一个迷人的窗口。
本指南分析了技术堆栈、舞台环境和第三方集成(Oracle Simphony、Agora、3C),这些技术支持从房间预订到“House Pay”账单分摊功能的所有操作。它包括规范中找到的端点、参数和配置详细信息的完整参考。
免责声明: 我们与Soho House & Co.没有关联。本分析严格基于公开可用的文档,旨在用于教育和互操作性研究目的。
1. 基础设施与环境
API规范揭示了生产环境与舞台环境之间的明确分离,采用微服务风格的路由架构。它还暴露了特定的子品牌,如“ The Ned”和“Soho Works”,这些品牌在不同的身份提供者上运行。
主机名与服务
- 生产API:
https://api.production.sohohousedigital.com - 舞台API:
https://api.staging.sohohousedigital.com - The Ned(舞台):
https://api-ned.staging.sohohousedigital.com - 版本控制服务:
https://vcs-master.staging.sohohousedigital.com(用于force_update检查) - Algolia搜索:
https://MRH59RRZDT-dsn.algolia.net(应用ID:MRH59RRZDT)
身份提供者
身份验证在不同品牌之间是联合的:
- Soho House:
identity.houseseven.com - The Ned:
identity.thened.com - Soho Works:
identity.sohohouse.com
2. 身份验证与“公共秘密”
API使用标准OAuth2。由于移动应用程序是“公共客户端”,client_id和client_secret直接嵌入在应用程序代码中。Postman集合明确暴露了这些凭据,使我们能够理解身份验证流程。
在规范中找到的凭据:
client_id: "200140c7**************************************3b96fef0"
client_secret: "7362f55c4**************************************2e29018a6"
网关头
一旦用户通过/oauth/token登录,API网关会将特定头注入上游请求。这揭示了Soho House如何在不对每个请求查询数据库的情况下管理多场地权限:
X-Sh-Global-Id:用户的唯一UUID。X-Sh-Business-Unit:按品牌对用户进行分段(例如,sh、ned)。X-Sh-Memberships:例如,EVERY_HOUSE、REGULAR、CITIES_WITHOUT_HOUSES。X-Sh-Sites:授权场地代码的逗号分隔列表(例如,180_HOUSE、SHD(Shoreditch)、BH(Babington)、GRS(Greek Street))。
3. 端点参考与配置
A. 身份验证与身份
标准OAuth2流程用于生成所有其他端点所需的Bearer令牌。
| 方法 | 端点 | 描述 | 参数 / 负载 |
|---|---|---|---|
GET |
/oauth/authorize |
网络登录流程 | response_type=code、client_id、redirect_uri |
POST |
/oauth/token |
交换代码/凭据 | grant_type(password/authorization_code)、client_id、client_secret |
POST |
/api/v1/identities |
创建账户 | email、password、first_name、last_name、phone_number |
PUT |
/api/v1/password |
更改密码 | old_password、password、password_confirmation |
GET |
/api/v1/me |
旧账户信息 | 返回基本ID和本地场地 |
B. 账户、个人资料与会员资格
用于管理用户数字身份的端点。include参数暗示后端的关系数据库结构。
| 方法 | 端点 | 描述 | 配置 / 备注 |
|---|---|---|---|
GET |
/profiles/accounts/me |
完整账户详情 | include=profile,membership,local_house |
PATCH |
/profiles/accounts/me |
更新账户 | 更新地址、同意、电话号码 |
GET |
/profiles/profiles/me |
公开个人资料数据 | 返回个人简介、社交账号、职位 |
PATCH |
/profiles/profiles/me |
更新个人资料 | 更新个人简介、社交账号、职业 |
GET |
/profiles/memberships/me |
会员状态 | 返回状态、开始/结束日期、员工类型(is_staff) |
GET |
/profiles/interests |
列出兴趣 | filter[name][prefix]用于自动完成 |
GET |
/profiles/occupations |
列出职业 | filter[name][prefix]用于自动完成 |
GET |
/profiles/membership_cards/{number}/profile |
按卡查找 | 将物理卡号解析为全球ID |
C. 事件与电影院
用于列出和预订房屋活动的全面端点。逻辑包括对“抽奖”(高需求事件)的特定处理。
| 方法 | 端点 | 描述 | 关键过滤器 / 参数 |
|---|---|---|---|
GET |
/events/events |
搜索事件 | filter[location_id]、filter[date][from]、filter[category]、filter[event_type] |
GET |
/events/events/{id} |
单个事件 | include=venue,resource |
GET |
/events/event_categories |
列出类别 | filter[event_type] |
GET |
/events/bookings |
列出用户预订 | filter[state](已预订/已取消)、include=event,venue |
POST |
/events/bookings |
预订事件 | 负载:guests数组、event ID、payment_card ID |
DELETE |
/events/bookings/{id} |
取消预订 | N/A |
D. 房间(酒店预订)
rooms端点揭示了房间类型和费率计划的内部代码。days端点特别有趣,因为它暴露了原始定价日历。
| 方法 | 端点 | 描述 | 内部备注 / 参数 |
|---|---|---|---|
GET |
/rooms/hotels |
列出酒店 | 返回预订URL和税务信息 |
GET |
/rooms/availabilities |
搜索房间 | filter[rate_plan_type](例如,MEMBER_RATE、FRIENDS) |
GET |
/rooms/days |
费率日历 | 暴露房间代码:TINY、SMALL、MEDM、LARG |
GET |
/rooms/room_bookings |
列出预订 | filter[status]、filter[starts_at][from] |
POST |
/rooms/room_bookings |
创建预订 | 负载:address、dates、availability_rate ID |
PATCH |
/rooms/room_bookings/{id} |
修改预订 | 更改日期或客人数量 |
E. House Pay(账单与Simphony集成)
本节揭示了与Oracle Micros Simphony的紧密集成。API允许会员直接支付餐厅账单。它包括一个特定的“Walkout”端点,可能用于自动关闭与会员档案相关的账单。
| 方法 | 端点 | 描述 | 内部备注 |
|---|---|---|---|
GET |
/checks/public/checks |
列出开放账单 | filter['status']=open |
GET |
/checks/public/checks/{id} |
获取账单详情 | 返回项目、税务、服务费 |
POST |
/checks/public/payments |
支付账单 | 负载:check_id、amount_cents、card_id、tip_amount_cents |
POST |
/checks/public/payments/walkout |
Walkout支付 | 使用simphony_manager_id强制关闭账单 |
POST |
/checks/public/checks/{id}/discount |
应用折扣 | 负载:discount_id(例如U27费率) |
POST |
/checks/public/checks/{id}/email |
发送收据 | 触发PDF收据电子邮件 |
GET |
/payments/cards |
列出卡片 | filter[venue](通常硬编码为'GRS') |
F. 餐桌(餐厅预订)
API使用“锁定”机制以防止在结账过程中重复预订。
| 方法 | 端点 | 描述 | 内部备注 |
|---|---|---|---|
GET |
/tables/availabilities |
搜索时段 | filter[restaurant_id](例如,SH_SIXTH_FLOOR_RESTAURANTS) |
POST |
/tables/locks |
锁定餐桌 | 在用户完成预订时锁定一个时段x分钟 |
POST |
/tables/table_bookings |
确认预订 | 需要有效的table_lock ID |
G. 连接与聊天(Agora集成)
“House Connect”功能利用Agora进行实时通信,通过agora_id参数得以证明。
| 方法 | 端点 | 描述 | 备注 |
|---|---|---|---|
GET |
/connect/checkins |
通知板 | filter[venue_id]查看谁在房屋中 |
POST |
/connect/checkins |
发布到通知板 | 负载:status、venue_id |
GET |
/chat/timeslots |
聊天可用性 | 列出“House Connect”的开放时段 |
POST |
/chat/chat_tokens |
获取聊天令牌 | 返回Stream/Agora集成的令牌 |
POST |
/chat/rooms/{id}/room_accesses |
加入房间 | 负载包括agora_id |
H. 会员申请
在注册流程中使用的端点,包括Braintree支付集成。
| 方法 | 端点 | 描述 |
|---|---|---|
GET |
/applications |
列出用户的申请 |
POST |
/applications |
提交新申请 |
POST |
/applications/{id}/attachments |
上传身份证/头像 |
GET |
/products |
列出会员产品 |
I. 内容与编辑
只读端点用于应用内容、房屋笔记和静态页面。
| 方法 | 端点 | 描述 | 关键过滤器 |
|---|---|---|---|
GET |
/content/house_notes |
编辑内容 | filter[venue_id]、filter[content_category_id] |
GET |
/content/perks |
会员福利 | filter[region] |
GET |
/content/house_rules |
房屋规则 | filter[venue_id] |
GET |
/content/house_tours |
房屋导览 | filter[venue_id] |
J. 系统控制
| 方法 | 端点 | 描述 |
|---|---|---|
GET |
/force_update |
如果应用版本与已弃用列表匹配,则返回426 Upgrade Required,强制用户通过App Store更新。 |
结论
Soho House API是JSON:API标准的复杂实现,协调了遗留POS系统(Simphony)、现代实时技术(Agora)和全球身份管理的复杂网络。对于开发者来说,它是如何将遗留酒店系统包装在现代、以移动为先的REST API中的一堂大师课。
免责声明:本分析基于2025年10月公开可用文档的快照。
参考与引用
编辑披露
本文是独立出版物。我们与Soho House & Co.无关。信息基于公共来源和合理使用原则,用于评论和批评。没有暗示任何认可。
