FoyerDevelopers

Public API · Reference

Read API

What you can read, how a request is shaped, and what stops one.

The Public API exposes 174 GET endpoints under /api/v1/developer/, generated from the same tool registry that backs Connect. Most of the surface is produced automatically from Foyer's internal tool definitions; a handful of endpoints predate that generator and are still hand-written — stays, rates, availability and the developer landing route. The distinction is invisible to a caller: every endpoint documents its own request and response shape, whichever way it was built.

Resources

The current list of paths lives in the API reference, rendered from the live OpenAPI document rather than copied into prose here — copying nearly a hundred paths into a page a generator already produces exactly would drift the moment either one changed.

Browse every endpoint in the API reference.

Query parameters

A path segment in curly braces, such as {stayId} in /developer/stays/{stayId}, is substituted directly into the URL. Everything else is a query parameter: strings and enums pass through as-is, numbers are coerced from the query string, booleans are the literal strings true or false (not 1/0), and an array-valued parameter is one comma-separated value, for example ?status=open,done.

Pagination

There is no cursor or page token on this surface. Where a list endpoint takes a limit parameter, it caps at a maximum documented on that route in the API reference — ask for what you need within that cap; nothing here lets you page further to reach the rest.

Errors specific to this surface

Beyond the general responses on the HTTP responses page, three refusals are worth knowing before you integrate:

  • 403 { error: "role_or_module_denied", module } — the key's role or module scope does not cover this resource.
  • 403 { error: "plan_upgrade_required", feature: "mcp_agent" } — the tenant is on an explicit plan below AI. The generated endpoints require the AI plan; a tenant with no plan set yet is not refused. The five hand-written endpoints (the developer landing route, stays, a single stay, rates and availability) are not plan-gated at all.
  • 429 { error: "rate_limited", retryAfterSec } — the key has exceeded 60 requests in 60 seconds. The same value is repeated in a retry-after header.

Writes

Every endpoint here is a GET. There is no POST, PUT, PATCH or DELETE on this surface. To send a message, create a task, unlock a door or otherwise change something, use Connect, which exposes the full read/write tool surface behind OAuth or an API key.

Connect — the read/write tool surface.