App

Version floor and health, for the apps and the platform.5 operations

Operations

GET/healthNo session needed

Say which build is answering

Public. Always ok with the version and build id of the process that answered; the platform's liveness and readiness probes live beside it and are not part of the contract.

Parameters

No parameters

Responses

200OK
application/jsonHealthResponse
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).

Example

curl \
  "https://bryti.app/health"

Example response

200application/json
{
  "status": "string",
  "version": "string",
  "build": "string"
}
GET/robots.txtNo session needed

Tell crawlers to stay off the API host

Public. Plain text that disallows every path and sets the content signals to no; the API has no pages for a crawler and no sitemap.

Parameters

No parameters

Responses

200OK
text/plainstring
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl \
  "https://bryti.app/robots.txt"
GET/health/liveNo session needed

Say whether the process is up

Public. The platform's liveness probe: always ok with the version and build id of the process that answered. Infrastructure rather than contract — the apps have no reason to call it.

Parameters

No parameters

Responses

200OK
application/jsonHealthResponse
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).

Example

curl \
  "https://bryti.app/health/live"

Example response

200application/json
{
  "status": "string",
  "version": "string",
  "build": "string"
}
GET/health/readyNo session needed

Say whether this build can serve

Public. The platform's readiness probe, which Railway gates deploy cutover on: ok when the database answers and this build's migrations are all applied, 503 otherwise. Infrastructure rather than contract — the apps have no reason to call it.

Parameters

No parameters

Responses

200OK
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).

Example

curl \
  "https://bryti.app/health/ready"
GET/api/v1/app/versionNo session needed

Get the oldest app version each platform may still use

Public, and the one path the version gate never blocks: a stopped build must be able to ask whether it is still stopped (ADR-070, #725). Both fields null for a platform means no floor. Cached for 60 seconds (Cache-Control: public, max-age=60).

Parameters

No parameters

Responses

200OK
application/jsonAppVersionResponse
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
X-Trace-Id
— The W3C trace id of this request — the same id in the log and in the traceId of a problem. Quote it when reporting.
Server-Timing
— Where the time went: total, db;dur=…;desc="N queries", and every step the handler named (ADR-163).
X-Diagnostics
— Only when the request asked with X-Diagnostics: 1 or ?diagnostics=1: the same breakdown as one JSON object, with the trace id (ADR-163).
Retry-After
— Seconds to wait when a rate limit answered, or an HTTP date when the household's AI is paused. Absent when the household's AI quota for the period is used up — that resets by itself.

Example

curl \
  "https://bryti.app/api/v1/app/version"

Example response

200application/json
{
  "ios": {
    "minimum": "string",
    "storeUrl": "string"
  },
  "android": {
    "minimum": "string",
    "storeUrl": "string"
  }
}

Schemas

AppVersionFloorResponse

PropertyTypeRequired
minimumstring | nullRequired
storeUrlstring | nullRequired

AppVersionResponse

PropertyTypeRequired
iosAppVersionFloorResponseRequired
androidAppVersionFloorResponseRequired

HealthResponse

PropertyTypeRequired
statusstringRequired
versionstringRequired
buildstringRequired

ProblemDetails

PropertyTypeRequired
typestring | null—
titlestring | null—
statusinteger (int32) | null—
detailstring | null—
instancestring | null—
codestring | null—