Privacy

Export the household's data, or delete it.8 operations

Headers on every response

Every response on this page carries these 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).

Operations

DELETE/api/v1/me

Delete the caller's account and sign out

Any signed-in user (GDPR art. 17). Households nobody else uses go with it; shared ones lose this member. Also removes the caller's invites, waitlist entry and problem reports with their screenshots, then signs the session out. 400 while the caller owns a household others still use — make someone else an owner, or remove the others, first.

Parameters

No parameters

Responses

204No Content
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  -X DELETE \
  "https://bryti.app/api/v1/me"
DELETE/api/v1/households/{householdId}

Delete the household and everything it owns

Owner only. 400 with the reason while other people still use it — hand ownership over and leave, or remove them — or while a subscription is still linked (cancel it in the portal first). Every household-owned table goes with the household row (#299).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Responses

204No Content
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  -X DELETE \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6"
GET/api/v1/households/{householdId}/export

Export everything the household has put into Bryti as one document

Any member (GDPR art. 20). Derived data the app can rebuild — candidate pools, price caches — and internal costs are left out. Personal to the caller: only their own conversations and push devices are included, and co-members appear by name and role only (#984, ADR-084).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Responses

200OK
application/jsonDataExportResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/export"

Example response

200application/json
{
  "exportedAt": "2026-09-07T16:30:00Z",
  "account": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "email": "string",
    "displayName": "string"
  },
  "household": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "timeZoneId": "string",
    "defaultDinnerTime": "string",
    "preferredLanguage": "string",
    "country": "string",
    "address": "string",
    "loyaltyPrograms": [
      "string"
    ],
    "createdAt": "2026-09-07T16:30:00Z"
  },
  "people": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "string",
      "birthDate": "2026-09-07",
      "isActive": false,
      "eatsDinnerAtHome": false,
      "isBreastfed": false,
      "isPregnant": false
    }
  ],
  "access": [
    {
      "userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "displayName": "string",
      "role": "string"
    }
  ],
  "allergies": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "tastes": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "rules": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "events": [
    {
      "date": "2026-09-07",
      "endDate": "2026-09-07",
      "kind": "string",
      "note": "string",
      "guestAdults": 0,
      "guestChildren": 0,
      "guestAvoids": [
        "string"
      ]
    }
  ],
  "calendars": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "recipes": [
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "title": "string",
      "category": "string",
      "source": "string",
      "activeMinutes": 0,
      "totalMinutes": 0,
      "basePortions": 0,
      "tags": [
        "string"
      ],
      "ingredients": [
        "string"
      ],
      "steps": [
        "string"
      ],
      "isBase": false
    }
  ],
  "favourites": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "exclusions": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "wishes": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "plans": [
    {
      "weekStart": "2026-09-07",
      "status": "string",
      "days": [
        {}
      ]
    }
  ],
  "inventory": [
    {
      "foodKey": "string",
      "displayName": "string",
      "quantity": 0,
      "unit": "string",
      "storageLocation": "string",
      "observationType": "string",
      "observedAt": "2026-09-07T16:30:00Z"
    }
  ],
  "shoppingLists": [
    {
      "weekStart": "2026-09-07",
      "createdAt": "2026-09-07T16:30:00Z",
      "items": [
        {}
      ]
    }
  ],
  "stores": [
    {
      "description": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "productChoices": [
    {
      "foodKey": "string",
      "displayName": "string",
      "chainCode": "string",
      "productName": "string",
      "chosenAt": "2026-09-07T16:30:00Z"
    }
  ],
  "conversations": [
    {
      "createdAt": "2026-09-07T16:30:00Z",
      "title": "string",
      "messages": [
        {}
      ]
    }
  ],
  "outcomes": [
    {
      "date": "2026-09-07",
      "status": "string",
      "note": "string"
    }
  ],
  "imports": [
    {
      "kind": "string",
      "status": "string",
      "source": "string",
      "createdAt": "2026-09-07T16:30:00Z"
    }
  ],
  "priceObservations": [
    {
      "foodKey": "string",
      "productName": "string",
      "rawText": "string",
      "store": "string",
      "location": "string",
      "linePrice": 0,
      "unitPrice": 0,
      "unitPriceUnit": "string",
      "latitude": 0,
      "longitude": 0,
      "observedAt": "2026-09-07T16:30:00Z"
    }
  ],
  "subscription": {
    "planCode": "string",
    "planName": "string",
    "periodStartsAt": "2026-09-07T16:30:00Z",
    "periodEndsAt": "2026-09-07T16:30:00Z",
    "creditsUsed": 0,
    "creditLimit": 0
  },
  "devices": [
    {
      "platform": "string",
      "provider": "string",
      "tokenSuffix": "string",
      "listChanges": false,
      "householdNews": false,
      "runDone": false,
      "registeredAt": "2026-09-07T16:30:00Z",
      "lastSeenAt": "2026-09-07T16:30:00Z"
    }
  ],
  "consents": [
    {
      "kind": "string",
      "who": "string",
      "givenBy": "string",
      "textVersion": "string",
      "givenAt": "2026-09-07T16:30:00Z",
      "withdrawnAt": "2026-09-07T16:30:00Z"
    }
  ]
}
GET/api/v1/households/{householdId}/deletion-preview

See what deleting the household would take with it, and whether it is allowed

Owner only. CanDelete is false with BlockerCode other_members while another login still belongs, or billing_subscription while a Stripe subscription is linked (#299).

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Responses

200OK
application/jsonDeleteHouseholdPreviewResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/deletion-preview"

Example response

200application/json
{
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "string",
  "otherMembers": 0,
  "hasBillingSubscription": false,
  "canDelete": false,
  "blockerCode": "string"
}
GET/api/v1/me/deletion-preview

See what deleting the account would do to each of the caller's households

Any signed-in user. A household nobody else uses is deleted with the account; a shared one just loses this member. CanDelete is false, with BlockerCode sole_owner_with_members, while the caller owns a household others still use. Blocker is the same thing in an English sentence, for a log — a screen says it from the code and Households (#2362).

Parameters

No parameters

Responses

200OK
application/jsonDeleteAccountPreviewResponse
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  "https://bryti.app/api/v1/me/deletion-preview"

Example response

200application/json
{
  "households": [
    {
      "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "name": "string",
      "role": "string",
      "otherMembers": 0,
      "willBeDeleted": false
    }
  ],
  "canDelete": false,
  "blocker": "string"
}
GET/api/v1/households/{householdId}/consents

List the household's explicit yesses, given and withdrawn

Any member. Withdrawn rows stay in the list with the moment they were taken back: the register answers «what was agreed, to which words, and until when» (GDPR art. 7(1)). householdMemberId null means the consent covers everyone at the table.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Responses

200OK
application/jsonConsentResponse[]
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/consents"

Example response

200application/json
[
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "householdMemberId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "kind": "HealthData",
    "textVersion": "string",
    "givenAt": "2026-09-07T16:30:00Z",
    "withdrawnAt": "2026-09-07T16:30:00Z"
  }
]
POST/api/v1/households/{householdId}/consents

Record an explicit yes to storing health data about one person

Adults only; a Junior member gets 403 — a child cannot consent for themselves, and the adult who presses it consents for a child in their care (art. 8). textVersion is the version of the text that was on the screen, so the stored yes can always be read back as the words the person saw; the register of versions is docs/GDPR.md §10. Giving a yes that already stands returns the standing one rather than a second row.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—

Request body

application/jsonRequiredGiveConsentRequest

Responses

201Created
application/jsonConsentResponse
400Bad Request
application/problem+jsonProblemDetails
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  -X POST \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/consents" \
  -H "Content-Type: application/json" \
  -d '{"kind":"HealthData","textVersion":"string"}'

Example response

201application/json
{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "householdMemberId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "kind": "HealthData",
  "textVersion": "string",
  "givenAt": "2026-09-07T16:30:00Z",
  "withdrawnAt": "2026-09-07T16:30:00Z"
}
DELETE/api/v1/households/{householdId}/consents/{consentId}

Take a yes back and clear the health data it allowed

Adults only; a Junior member gets 403. The row is kept and stamped withdrawn — deleting it would say the yes never happened — and in the same transaction the allergies, intolerances and diets recorded for the subject are deleted and the person's breastfeeding, pregnancy and hand-set nutrition targets go back to «nothing said» (art. 7(3)). A consent that is already withdrawn answers 204 and clears nothing again.

Parameters

NameInTypeRequiredDescription
householdIdpathstring (uuid)Required—
consentIdpathstring (uuid)Required—

Responses

204No Content
401No session, or the session is no longer valid.
application/problem+jsonProblemDetails
404Not Found
application/problem+jsonProblemDetails
426The build named in X-App-Version is below its platform's version floor (ADR-070). Problem type app-version-unsupported; the only way forward is the store. Callers without the header are never turned away.
application/problem+jsonProblemDetails
429Too many calls in the window; Retry-After says how long.
application/problem+jsonProblemDetails
Headers
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 -b "bryti_session=…" \
  -X DELETE \
  "https://bryti.app/api/v1/households/3fa85f64-5717-4562-b3fc-2c963f66afa6/consents/3fa85f64-5717-4562-b3fc-2c963f66afa6"

Schemas

ConsentKind

Type

Values

HealthData

ConsentResponse

PropertyTypeRequired
idstring (uuid)Required
householdIdstring (uuid)Required
householdMemberIdstring (uuid) | nullRequired
kindConsentKindRequired
textVersionstringRequired
givenAtstring (date-time)Required
withdrawnAtstring (date-time) | nullRequired

DataExportResponse

PropertyTypeRequired
exportedAtstring (date-time)Required
accountExportAccountRequired
householdExportHouseholdRequired
peopleExportPerson[]Required
accessExportAccess[]Required
allergiesExportNamed[]Required
tastesExportNamed[]Required
rulesExportNamed[]Required
eventsExportEvent[]Required
calendarsExportNamed[]Required
recipesExportRecipe[]Required
favouritesExportNamed[]Required
exclusionsExportNamed[]Required
wishesExportNamed[]Required
plansExportPlan[]Required
inventoryExportInventoryItem[]Required
shoppingListsExportShoppingList[]Required
storesExportNamed[]Required
productChoicesExportProductChoice[]Required
conversationsExportConversation[]Required
outcomesExportOutcome[]Required
importsExportImport[]Required
priceObservationsExportPriceObservation[]Required
subscriptionExportSubscriptionRequired
devicesExportDevice[]Required
consentsExportConsent[]Required

DeleteAccountPreviewResponse

PropertyTypeRequired
householdsDeleteHouseholdImpact[]Required
canDeletebooleanRequired
blockerstring | nullRequired
blockerCodestring | null—

DeleteHouseholdImpact

PropertyTypeRequired
householdIdstring (uuid)Required
namestringRequired
rolestringRequired
otherMembersinteger (int32)Required
willBeDeletedbooleanRequired

DeleteHouseholdPreviewResponse

PropertyTypeRequired
householdIdstring (uuid)Required
namestringRequired
otherMembersinteger (int32)Required
hasBillingSubscriptionbooleanRequired
canDeletebooleanRequired
blockerCodestring | nullRequired

ExportAccess

PropertyTypeRequired
userIdstring (uuid) | nullRequired
displayNamestringRequired
rolestringRequired

ExportAccount

PropertyTypeRequired
idstring (uuid)Required
emailstring | nullRequired
displayNamestringRequired

ExportConsent

PropertyTypeRequired
kindstringRequired
whostringRequired
givenBystringRequired
textVersionstringRequired
givenAtstring (date-time)Required
withdrawnAtstring (date-time) | nullRequired

ExportConversation

PropertyTypeRequired
createdAtstring (date-time)Required
titlestring | nullRequired
messagesExportMessage[]Required

ExportDevice

PropertyTypeRequired
platformstringRequired
providerstringRequired
tokenSuffixstringRequired
listChangesbooleanRequired
householdNewsbooleanRequired
runDonebooleanRequired
registeredAtstring (date-time)Required
lastSeenAtstring (date-time)Required

ExportEvent

PropertyTypeRequired
datestring (date)Required
endDatestring (date) | nullRequired
kindstringRequired
notestring | nullRequired
guestAdultsinteger (int32)Required
guestChildreninteger (int32)Required
guestAvoidsstring[]Required

ExportHousehold

PropertyTypeRequired
idstring (uuid)Required
namestringRequired
timeZoneIdstringRequired
defaultDinnerTimestringRequired
preferredLanguagestringRequired
countrystringRequired
addressstring | nullRequired
loyaltyProgramsstring[]Required
createdAtstring (date-time)Required

ExportImport

PropertyTypeRequired
kindstringRequired
statusstringRequired
sourcestring | nullRequired
createdAtstring (date-time)Required

ExportInventoryItem

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
quantitynumber (double)Required
unitstring | nullRequired
storageLocationstringRequired
observationTypestringRequired
observedAtstring (date-time)Required

ExportMessage

PropertyTypeRequired
rolestringRequired
contentstringRequired
createdAtstring (date-time)Required

ExportNamed

PropertyTypeRequired
descriptionstringRequired
createdAtstring (date-time) | nullRequired

ExportOutcome

PropertyTypeRequired
datestring (date)Required
statusstringRequired
notestring | nullRequired

ExportPerson

PropertyTypeRequired
idstring (uuid)Required
namestringRequired
birthDatestring (date) | nullRequired
isActivebooleanRequired
eatsDinnerAtHomebooleanRequired
isBreastfedboolean—
isPregnantboolean—

ExportPlan

PropertyTypeRequired
weekStartstring (date)Required
statusstringRequired
daysExportPlanDay[]Required

ExportPlanDay

PropertyTypeRequired
datestring (date)Required
kindstringRequired
titlestring | nullRequired
lockedbooleanRequired

ExportPriceObservation

PropertyTypeRequired
foodKeystringRequired
productNamestringRequired
rawTextstring | nullRequired
storestring | nullRequired
locationstring | nullRequired
linePricenumber (double)Required
unitPricenumber (double) | nullRequired
unitPriceUnitstring | nullRequired
latitudenumber (double) | nullRequired
longitudenumber (double) | nullRequired
observedAtstring (date-time)Required

ExportProductChoice

PropertyTypeRequired
foodKeystringRequired
displayNamestringRequired
chainCodestringRequired
productNamestringRequired
chosenAtstring (date-time)Required

ExportRecipe

PropertyTypeRequired
idstring (uuid)Required
titlestringRequired
categorystringRequired
sourcestringRequired
activeMinutesinteger (int32)Required
totalMinutesinteger (int32)Required
basePortionsinteger (int32)Required
tagsstring[]Required
ingredientsstring[]Required
stepsstring[]Required
sourceUrlstring | null—
isBaseboolean—
sectionsstring[] | null—
referencesstring[] | null—
photostring | null—

ExportShoppingItem

PropertyTypeRequired
displayNamestringRequired
quantitynumber (double) | nullRequired
unitstring | nullRequired
statusstringRequired
purchasedbooleanRequired

ExportShoppingList

PropertyTypeRequired
weekStartstring (date)Required
createdAtstring (date-time)Required
itemsExportShoppingItem[]Required

ExportSubscription

PropertyTypeRequired
planCodestringRequired
planNamestringRequired
periodStartsAtstring (date-time) | nullRequired
periodEndsAtstring (date-time) | nullRequired
creditsUsedinteger (int32)Required
creditLimitinteger (int32)Required

GiveConsentRequest

PropertyTypeRequired
kindConsentKindRequired
textVersionstringRequired
householdMemberIdstring (uuid) | null—

ProblemDetails

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