Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.mareaalcalina.com/llms.txt

Use this file to discover all available pages before exploring further.

Terms of Service and jurisdiction

Marea Alcalina is incorporated under Mexican law (LFPDPPP — Ley Federal de Protección de Datos Personales en Posesión de los Particulares). All accounts agree to the ToS at sign-up; agent-bootstrapped accounts inherit a deferred-acceptance flow described below. This page documents:
  1. How ToS acceptance is tracked.
  2. The 451 tos_not_accepted error envelope.
  3. The 90-day no-ToS cleanup (involuntary deletion).
  4. Jurisdiction.
For the related Mexican data-rights flow (Acceso, Rectificación, Cancelación, Oposición), see ARCO procedures.

How acceptance is tracked

Each user document has a tosAcceptedAt timestamp:
StatetosAcceptedAt valueSurface in GET /v1/me
Not yet acceptednulltosAcceptedAt: null
Accepted (any path)ISO-8601 timestamp stringtosAcceptedAt: "2026-04-15T10:00:00Z"
Dashboard sign-ups accept ToS at the same step that creates the account. Agent-bootstrapped accounts (POST /v1/users) are created with tosAcceptedAt: null and agentBootstrapped: true — the user is expected to accept ToS later via the dashboard modal during their first interactive visit.

The 90-day cleanup

A scheduled job runs daily at 03:00 America/Mexico_City and applies four sweeps for agent-bootstrapped accounts:
SweepTriggerAction
Unverified 30dverificationStatus: pending + createdAt < now-30dHard-delete (reason: 30d_unverified)
Day 7 reminderVerified, tosAcceptedAt: null, verified 7+ days agoEmail reminder #1
Day 14 reminderSame, 14+ days, reminder count = 1Email reminder #2
Day 60 pre-deletion warningSame, 60+ days, no warning sent yet (feature-flag gated)Email warning #3
No-ToS 90dVerified, tosAcceptedAt: null, verified 90+ days agoHard-delete (reason: 90d_no_tos)
The 90d cleanup is governed by Mexican counsel guidance — an agent that creates an account on behalf of a user does not have authority to bind that user to the ToS, so the user must accept (or implicitly reject by not visiting) within a bounded window.

The 451 error envelope

451 tos_not_accepted is the reserved error type that future ToS-gated mutations (publish, public-facing webhook delivery) will return when the calling user has not accepted the ToS.
{
  "error": {
    "type": "tos_not_accepted",
    "code": "tos_required",
    "message": "User must accept the Terms of Service before this operation.",
    "doc": "https://docs.mareaalcalina.com/concepts/tos-jurisdiction",
    "param": null,
    "recoverable": true,
    "retryAfterMs": null,
    "nextActions": [
      {
        "label": "Open the Marea dashboard and accept the Terms of Service.",
        "method": "GET",
        "url": "https://mareaalcalina.com/dashboard"
      }
    ],
    "upgrade": null
  }
}
Agent contract for 451 tos_not_accepted:
  • Surface nextActions[0].url verbatim. The user must accept the ToS through the dashboard modal — the agent cannot accept on the user’s behalf.
  • Treat it as recoverable: true. After the user accepts, the next call (same Idempotency-Key) succeeds.
  • Do not retry without surfacing the action. This is the canonical agent-failure-mode for this error.
The enum value tos_not_accepted is locked in the error envelope (src/api/contracts/error.zod.ts). The publish endpoint declares it in its OpenAPI error set today; gating activation for specific endpoints is rolling out behind the ToS modal launch.

Jurisdiction

PropertyValue
Governing lawMexican federal law
Privacy frameworkLFPDPPP (Articles 16–18 → user rights; see ARCO procedures)
Brazilian residualLGPD disclosures apply to Brazilian residents
DisputesCourts of Mexico City
The current production ToS is available at the dashboard sign-up flow. Modal copy is counsel-reviewed; do not paraphrase it here — the dashboard URL is the source of truth.

What the agent surfaces to the user

SituationSurface
Bootstrap completed”Your account is created. Open the dashboard within 90 days to accept the Terms of Service.”
451 tos_not_acceptedVerbatim nextActions[0].label + click-through to nextActions[0].url
Day-7 / Day-14 / Day-60 reminder emailThe user receives these directly from Marea — agent doesn’t surface anything
90d cleanup firedAgent receives a user.cancelled webhook with reason: 90d_no_tos (see Webhooks)

Verification in code

  • src/api/contracts/error.zod.ts — locked tos_not_accepted enum value.
  • src/api/scheduled/CleanupUnverifiedAccounts.ts — 30d/60d/90d sweeps.
  • src/api/constants/cleanup.constants.tsTOS_DEADLINE_DAYS, TOS_REMINDER_DAYS, TOS_PREDELETION_WARNING_DAY.
  • src/api/services/account-delete.service.tshardDeleteUserAccount (reason: 90d_no_tos).