# Setup

> Read the setup steps for you and your agency, and record that a step was done, skipped or dismissed.

The setup API returns the steps on the setup page for the signed-in person and, for an admin, for the agency. Fondaro works out whether a step is done from what the step produces, so the only thing you write is a person's choice to mark a step done, skip it or dismiss the page.

These endpoints take a signed-in member's session token (`Authorization: Bearer <session-token>`); API keys do not open them. See [Authentication](https://www.fondaro.com/docs/api/authentication.md).

## Read your setup

`GET /me/setup`

Returns your own steps and, for an organization admin, the agency's steps, invitations and what is already on. Takes no parameters.

```bash
curl https://api.fondaro.com/me/setup \
  -H "Authorization: Bearer $SESSION_TOKEN"
```

```json
{
  "role": "admin",
  "plan": { "kind": "crm", "trialing": true, "trialEndsAt": "2026-10-10T09:00:00.000Z" },
  "entitled": true,
  "teamMode": "team",
  "dismissed": false,
  "agency": [
    { "id": "agency", "status": "done", "hidden": false, "detail": null },
    { "id": "leads", "status": "done", "hidden": false, "detail": { "count": 5 } },
    { "id": "team", "status": "open", "hidden": false, "detail": { "count": 1, "invited": 1 } },
    { "id": "website", "status": "skipped", "hidden": false, "detail": null }
  ],
  "you": [
    { "id": "phone", "status": "done", "hidden": false, "detail": { "phoneNumber": "+34612345678" } },
    { "id": "email", "status": "open", "hidden": false, "detail": null },
    { "id": "profile", "status": "open", "hidden": false, "detail": { "photo": true, "languages": true, "areas": false } },
    { "id": "app", "status": "open", "hidden": false, "detail": null }
  ],
  "progress": { "done": 3, "total": 8 },
  "invitations": [
    { "clerkInvitationId": "orginv_2x...", "role": "org:member", "status": "pending", "invitedAt": "2026-09-26T09:05:00.000Z" }
  ],
  "kicked": [],
  "alreadyOn": { "ask": true, "smartRouting": true, "calling": false }
}
```

| Field | Type | Description |
|---|---|---|
| `role` | `admin` or `member` | Your role in the organization |
| `plan.kind` | `none`, `crm`, `growth` or `crm_and_growth` | The plans the organization holds |
| `plan.trialing`, `plan.trialEndsAt` | boolean, string or null | Whether the organization is in its free trial, and when it ends |
| `plan.trialPrice` | object, optional | A trialing CRM plan only: `{ seatCount, amountCents, currency }`, the monthly price once the trial ends |
| `entitled` | boolean | `false` before any plan: `agency` is null, `you` is empty and `progress` is 0 of 0 |
| `teamMode` | `solo` or `team` | Solo is one person and no invitation; the `team` step is then `hidden` |
| `dismissed` | boolean | The page was dismissed: by an admin for all admins, or by you as a member |
| `agency` | step[] or null | Admins only. `ads` appears only with a Growth plan |
| `you` | step[] | Your own steps |
| `progress` | `{ done, total }` | Counts visible steps only |
| `invitations` | array | Admins only, newest first. `status` is `pending`, `accepted` or `revoked` |
| `kicked` | `{ name, at }[]` | Admins only: people removed in the last 30 days because the team was over its plan's people |
| `alreadyOn` | object or null | Admins only: whether Ask Fondaro, Smart routing and Calling are on |

### Steps

Each step is `{ id, status, hidden, detail }`. `status` is `done`, `open` or `skipped`. A step is `done` when what it produces exists; otherwise the latest recorded choice decides. Choices on agency steps count from any admin; choices on your own steps count only from you.

| `id` | Group | Done when |
|---|---|---|
| `agency` | Agency | The agency name and both logos are set |
| `leads` | Agency | A lead exists, leads were imported, or a listing source is connected |
| `team` | Agency | Two or more people are on the team, or an invitation was sent |
| `website` | Agency | The website exists |
| `ads` | Agency | A Growth plan has at least one language chosen |
| `phone` | You | Your own number is verified and assigned to you |
| `email` | You | Your own inbox is connected and working |
| `profile` | You | You have a profile photo, languages and areas |
| `app` | You | You signed in on the phone app |

## Record a step

`POST /me/setup/events`

Records that you did, skipped or dismissed a step. The person is always the caller.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `step` | Body, string | Yes | A step `id` above, or `setup` for the whole page. Must match `^[a-z][a-z0-9_-]{0,39}$` |
| `action` | Body, `done`, `skipped` or `dismissed` | Yes | What you did |

```bash
curl -X POST https://api.fondaro.com/me/setup/events \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "step": "website", "action": "skipped" }'
```

Returns `204 No Content`.

`{ "step": "setup", "action": "dismissed" }` dismisses the page: from an admin, for every admin of the organization; from a member, for that member only. Nothing is deleted; the latest choice per person and step wins, and a step that later becomes done reads as done.

## Errors

| Status | When |
|---|---|
| `400` | `step` is not a short lowercase key, or `action` is not one of the three values |
| `401` | No valid session token |
| `403` | The caller is not a member of the organization |

Source: https://www.fondaro.com/docs/api/setup
