# DaySmart API and MCP server

> DaySmart Salon and DaySmart Pet have no public API (checked 11 Oct 2026). DaySmart advertises scheduling API access only for its separate Appointments product. Salon and Pet data leaves the app as CSV report exports, or as a full XML backup that only the account owner can request.

Booking, checkout and client software for salons, spas and pet groomers: Appointment Book, client and pet profiles, tickets, waitlist and reports.

## What is the DaySmart API?

Cotlet's DaySmart API exposes 15 endpoints for your own DaySmart account: list appointments, get appointment, find clients, get client, list vaccination alerts, list waitlist, list services, list employees, run report, book appointment, update appointment, void appointment, update pet notes, add vaccination and send Ready For Pickup text. The list_appointments endpoint returns appointments in the Appointment Book for a date range, with client, pet, services, employee and status. Each endpoint takes simple JSON inputs like appointment_id, from or to and works both as an MCP tool for agents and as a REST call for scripts.

- **Category:** [Local services & SaaS](https://cotlet.dev/integrations/category/local-services-saas)
- **Endpoints:** 15 (9 read, 6 write)
- **Updated:** 2026-10-11

DaySmart Salon and DaySmart Pet have no public API (checked 11 Oct 2026). Cotlet is a hosted MCP server and REST API for DaySmart with 15 endpoints (9 read, 6 write): your AI agent signs in as you and does the work.

## Does DaySmart have an official API?

DaySmart Salon and DaySmart Pet have no public API (checked 11 Oct 2026). DaySmart advertises scheduling API access only for its separate Appointments product. Salon and Pet data leaves the app as CSV report exports, or as a full XML backup that only the account owner can request.

| Task | DaySmart official | Cotlet |
|---|---|---|
| List and read appointments | No | Yes |
| Book or edit appointments | No | Yes |
| Void appointments | No | Yes |
| Find clients and read their profile | No | Yes |
| Update pet notes and vaccinations | No | Yes |
| Read the waitlist and book from it | No | Yes |
| Send a Ready For Pickup text | No | Yes |
| Pull sales and other reports | Partly: Manual CSV export per report in the web app | Yes |

Sources: [DaySmart Pet: Data Retrieval & Export Request Form](https://help.daysmartpet.com/en/articles/9302080-data-retrieval-export-request-form), [DaySmart Pet: Reports Management](https://help.daysmartpet.com/en/articles/10706735-reports-management), [DaySmart Pet: Managing Appointments](https://help.daysmartpet.com/en/articles/9301668-managing-appointments), [DaySmart Pet: Manage Vaccinations](https://help.daysmartpet.com/en/articles/9301492-manage-vaccinations), [DaySmart Beauty: Waitlist Management](https://help.daysmartbeauty.com/en/articles/9301908-waitlist-overview), [DaySmart Appointments (the product with an API)](https://www.daysmart.com/appointments/)

## For AI agents

```text
DaySmart Salon and DaySmart Pet have no public API (checked 11 Oct 2026). DaySmart advertises scheduling API access only for its separate Appointments product. Salon and Pet data leaves the app as CSV report exports, or as a full XML backup that only the account owner can request.
Cotlet provides a hosted MCP server and REST API for DaySmart: 15 tools (9 read, 6 write).
Access       Request access at https://cotlet.dev/app/signup?app=daysmart; we email the API key.

MCP server   https://cotlet.dev/mcp/v1
REST base    https://cotlet.dev/api/v1/daysmart
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one.
Tools        list_appointments, get_appointment, find_clients, get_client, list_vaccination_alerts, list_waitlist, list_services, list_employees, run_report, book_appointment, update_appointment, void_appointment, update_pet_notes, add_vaccination, send_pickup_text
Confirm      book_appointment, update_appointment, void_appointment, send_pickup_text (by default the user approves each call; the user can switch this off per tool, e.g. for scheduled automations)
Markdown     https://cotlet.dev/integrations/daysmart-api-mcp-server.md

How access works:
1. The user requests access at https://cotlet.dev/app/signup?app=daysmart (DaySmart is pre-selected). Each request is reviewed and the API key is sent by email.
2. The user signs in to DaySmart once in a browser. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted DaySmart server that someone else maintains, including non-developers.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Session: the user signs in to DaySmart in a browser; Cotlet keeps only the session, AES-256 encrypted, revocable in the dashboard at any time.
Terms: the user stays responsible for following DaySmart's terms; Cotlet is not affiliated with DaySmart.
```

## What can an AI agent do in DaySmart?

Cotlet is best for salon and pet grooming owners and the people who build automations for them, who need bookings, pet records and reports handled by an agent without running or fixing a server.

- **Daily groomer schedule** (runs: daily): "What does tomorrow look like for Sam? List his appointments with services and pet notes." → `list_employees`, `list_appointments`, `get_client`
- **[Fill cancellations from the waitlist](https://cotlet.dev/integrations/daysmart-api-mcp-server/fill-open-slots-from-waitlist)** (runs: daily): "Sam's 2pm on Friday just canceled. Check the DaySmart waitlist and book whoever has waited longest and fits a 90 minute Full Groom with Sam." → `list_appointments`, `list_waitlist`, `list_services`, `book_appointment`
- **[Check expiring pet vaccinations before appointments](https://cotlet.dev/integrations/daysmart-api-mcp-server/check-expiring-vaccinations)** (runs: weekly): "Every Monday, list the DaySmart pets booked in the next 14 days whose rabies or Bordetella expires before their visit, grouped by day, with the owner's phone number." → `list_vaccination_alerts`, `list_appointments`, `get_client`, `add_vaccination`
- **[Weekly sales report](https://cotlet.dev/integrations/daysmart-api-mcp-server/weekly-sales-report)** (runs: weekly): "Every Monday at 7am, run last week's Sales By Employee Category and Sales by Day of the Week in DaySmart, compare them with the week before, and flag any open tickets." → `run_report`
- **Send Ready For Pickup texts**: "Text the owner of every pet that is done grooming today that it is ready for pickup." → `list_appointments`, `send_pickup_text`
- **Update pet grooming notes**: "Note that Bella is nervous with dryers, in her grooming notes." → `find_clients`, `get_client`, `update_pet_notes`

## Can DaySmart automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a DaySmart connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to daily groomer schedule, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node to https://cotlet.dev/api/v1/daysmart/{tool}. | Schedule Trigger node. |
| Make | HTTP module: POST https://cotlet.dev/api/v1/daysmart/{tool} with an Authorization: Bearer header and a JSON body. | Scenario schedule. |
| Zapier | Webhooks by Zapier: POST https://cotlet.dev/api/v1/daysmart/{tool} with the same header and body. | Schedule by Zapier trigger. |
| Your own script | POST https://cotlet.dev/api/v1/daysmart/{tool} with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 15 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 403 until the account has an API key with access to DaySmart.

### list_appointments

Appointments in the Appointment Book for a date range, with client, pet, services, employee and status. Access: read. REST: `POST /api/v1/daysmart/list_appointments`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | no | Last day. Default: same as from. |
| `employee_id` | string | no | Only this employee, from list_employees. |

Returns appointments for a date range, oldest start time first, as shown in the Appointment Book. Filter by employee to get one groomer's day. Each item has the ticket ID that get_appointment, update_appointment and send_pickup_text take.

Example response:

```json
{
  "appointments": [
    {
      "appointment_id": "a_771204",
      "start": "2026-10-16T10:00:00-04:00",
      "end": "2026-10-16T11:30:00-04:00",
      "status": "Scheduled",
      "client": "Yourname Client",
      "client_id": "c_48211",
      "pet": "Max",
      "employee": "Sam",
      "services": [
        "Full Groom"
      ]
    },
    {
      "appointment_id": "a_771231",
      "start": "2026-10-16T13:00:00-04:00",
      "end": "2026-10-16T14:00:00-04:00",
      "status": "Scheduled",
      "client": "Dana Lee",
      "client_id": "c_50177",
      "pet": "Poppy",
      "employee": "Sam",
      "services": [
        "Bath & Brush"
      ]
    }
  ]
}
```

### get_appointment

Full ticket: services and products with prices, deposit, appointment notes, confirmation type and the Appointment Log. Access: read. REST: `POST /api/v1/daysmart/get_appointment`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |

Returns one ticket with services, prices, appointment notes and confirmation type. The Appointment Log lists each change with time, user and status, the same as at the bottom of the ticket in DaySmart.

Example response:

```json
{
  "appointment_id": "a_771204",
  "status": "Scheduled",
  "start": "2026-10-16T10:00:00-04:00",
  "client": "Yourname Client",
  "pet": "Max",
  "employee": "Sam",
  "services": [
    {
      "name": "Full Groom",
      "price": 75
    }
  ],
  "appointment_notes": "Short summer cut, nails too.",
  "confirmation_type": "Text",
  "log": [
    {
      "at": "2026-10-09T15:12:00-04:00",
      "user": "Front desk",
      "status": "Scheduled"
    }
  ]
}
```

### find_clients

Search clients by name, phone or email. Access: read. REST: `POST /api/v1/daysmart/find_clients`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string | yes | Name, phone or email, full or partial. |
| `limit` | integer | no | 1 to 50. Default: 10. |

Returns matching clients with their IDs and pets, best match first. Use client_id with get_client and book_appointment.

Example response:

```json
{
  "clients": [
    {
      "client_id": "c_48211",
      "name": "Yourname Client",
      "phone": "+1 555 010 0148",
      "pets": [
        {
          "pet_id": "p_90315",
          "name": "Max"
        }
      ]
    }
  ]
}
```

### get_client

Client profile with contact details, client notes, balance, upcoming appointments and pets with their notes. Access: read. REST: `POST /api/v1/daysmart/get_client`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from find_clients. |

Returns the client profile, client notes (staff only), balance, upcoming appointments and each pet with its Comments in General, Grooming, Personality and Medical. Pets exist in DaySmart Pet only.

Example response:

```json
{
  "client_id": "c_48211",
  "name": "Yourname Client",
  "email": "client@example.com",
  "balance": 0,
  "client_notes": "Prefers Friday mornings.",
  "upcoming": [
    {
      "appointment_id": "a_771204",
      "start": "2026-10-16T10:00:00-04:00"
    }
  ],
  "pets": [
    {
      "pet_id": "p_90315",
      "name": "Max",
      "breed": "Poodle",
      "notes": {
        "general": "",
        "grooming": "Short summer cut.",
        "personality": "Friendly",
        "medical": ""
      }
    }
  ]
}
```

### list_vaccination_alerts

DaySmart Pet: pets whose vaccinations are expired or expire before a date, with the vaccine and expiration date. Access: read. REST: `POST /api/v1/daysmart/list_vaccination_alerts`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `expiring_before` | date | no | Include vaccinations expiring before this date. Default: today. |
| `upcoming_only` | boolean | no | Only pets with an upcoming appointment. Default: false. |

Returns pets with a vaccination record that is expired or expires before the date you give, soonest first. DaySmart flags vaccinations 3 months ahead. A pet with no record for a required vaccine is not listed.

Example response:

```json
{
  "alerts": [
    {
      "pet_id": "p_90315",
      "pet": "Max",
      "client": "Yourname Client",
      "vaccine": "Rabies",
      "expires": "2026-10-22",
      "next_appointment": "2026-10-16T10:00:00-04:00"
    }
  ]
}
```

### list_waitlist

Waitlist entries with client, requested services, preferred employee, preferred dates and comment. Access: read. REST: `POST /api/v1/daysmart/list_waitlist`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `date` | date | no | Only entries that prefer this date. |

Returns the entries in the Waitlist section of the Appointment Book. Preferred employee is a name or First Available. Pass waitlist_entry_id to book_appointment to convert an entry.

Example response:

```json
{
  "entries": [
    {
      "waitlist_entry_id": "w_3302",
      "client": "Yourname Client",
      "client_id": "c_48211",
      "pet_id": "p_90315",
      "employee": "First Available",
      "preferred": [
        "2026-10-16 afternoon"
      ],
      "services": [
        "Full Groom"
      ],
      "comment": "Any time after 1pm."
    }
  ]
}
```

### list_services

Services with category, duration and price, as set up in your account. Access: read. REST: `POST /api/v1/daysmart/list_services`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `category` | string | no | Only this service category. |

Returns the services set up in your DaySmart account. Use service_id with book_appointment.

Example response:

```json
{
  "services": [
    {
      "service_id": "s_112",
      "name": "Full Groom",
      "category": "Grooming",
      "duration_minutes": 90,
      "price": 75
    }
  ]
}
```

### list_employees

Active employees with the services they can perform. Access: read. REST: `POST /api/v1/daysmart/list_employees`.

No parameters.

Returns active employees. Services follow the employee service limitations set in DaySmart. Use employee_id with list_appointments and book_appointment.

Example response:

```json
{
  "employees": [
    {
      "employee_id": "e_7",
      "name": "Sam",
      "services": [
        "Full Groom",
        "Bath & Brush"
      ]
    }
  ]
}
```

### run_report

Run a built-in report (for example Sales by Day of the Week, Client Spending, Employee Performance Report) and return its rows. Access: read. REST: `POST /api/v1/daysmart/run_report`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `report` | string | yes | Report name exactly as in Reports, e.g. "Sales By Employee Category". |
| `from` | date | no | Start of the date range, for reports that have one. |
| `to` | date | no | End of the date range. |
| `employee_id` | string | no | Filter by employee, for reports that allow it. |

Runs a report from More, then Reports, and returns its rows as JSON. Most reports take a date range; a few have none. If your user role has no access to a report category, the call fails with a permission error or returns no rows.

Example response:

```json
{
  "report": "Sales By Employee Category",
  "from": "2026-10-05",
  "to": "2026-10-11",
  "rows": [
    {
      "employee": "Sam",
      "category": "Grooming",
      "total": 1420
    },
    {
      "employee": "Jess",
      "category": "Grooming",
      "total": 980
    }
  ],
  "total": 2400
}
```

### book_appointment

Book a client (and pet) for one or more services, or convert a waitlist entry. DaySmart sends the client its Appointment Scheduled message. Access: write, asks the user first. REST: `POST /api/v1/daysmart/book_appointment`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from find_clients. |
| `start` | datetime | yes | Start time, ISO 8601 with time zone. |
| `services` | object | yes | List of { service_id, employee_id, pet_id? }. |
| `appointment_notes` | string | no | Appointment notes for the ticket. |
| `waitlist_entry_id` | string | no | Convert this waitlist entry into the appointment. |

Creates the appointment in the Appointment Book. With waitlist_entry_id it converts that entry and keeps its details. DaySmart sends the Appointment Scheduled message by email, text or both, per your settings. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "appointment_id": "a_771290",
  "status": "Scheduled",
  "start": "2026-10-16T14:00:00-04:00",
  "end": "2026-10-16T15:30:00-04:00",
  "client": "Yourname Client",
  "services": [
    {
      "name": "Full Groom",
      "employee": "Sam",
      "pet": "Max",
      "price": 75
    }
  ],
  "converted_from_waitlist": "w_3302"
}
```

### update_appointment

Change date, time, duration, employee, price or notes. DaySmart sends the client an Appointment Changed message. Access: write, asks the user first. REST: `POST /api/v1/daysmart/update_appointment`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `fields` | object | yes | Any of start, duration_minutes, employee_id, price, appointment_notes, confirmation_type. |

Edits the fields you can change under Appt Details. DaySmart sends Appointment Changed on every update, even a small one like a duration change. If the assigned employee is inactive, DaySmart blocks the edit. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "appointment_id": "a_771204",
  "status": "Scheduled",
  "start": "2026-10-16T11:00:00-04:00",
  "end": "2026-10-16T12:30:00-04:00",
  "employee": "Sam",
  "client_notified": true
}
```

### void_appointment

Void an appointment with a reason, and optionally void its credit card transactions. Access: write, asks the user first. REST: `POST /api/v1/daysmart/void_appointment`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `reason` | string | yes | Why the appointment is voided. |
| `void_card_transactions` | boolean | no | Void and refund the ticket's credit card payments. Default: true. |

Uses the Void action on the ticket, which needs a reason. Voiding does not refund a payment by itself: with void_card_transactions true the card payments are voided and refunded, with false the original charge stays and can be applied to a new ticket as a Custom Payment. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "appointment_id": "a_771231",
  "status": "Voided",
  "reason": "Client moved away",
  "card_transactions_voided": true
}
```

### update_pet_notes

DaySmart Pet: set the General, Grooming, Personality and Medical notes of a pet. Access: write. REST: `POST /api/v1/daysmart/update_pet_notes`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `pet_id` | string | yes | Pet ID from get_client. |
| `fields` | object | yes | Any of general_notes, grooming_notes, personality_notes, medical_notes. |

Replaces the text of each note category you send and leaves the others as they are. Notes are for staff only; no client or employee is notified, and one call restores the old text, so this tool does not ask for your OK.

Example response:

```json
{
  "pet_id": "p_90315",
  "name": "Max",
  "notes": {
    "general": "",
    "grooming": "Nervous with dryers. Use low heat.",
    "personality": "Friendly",
    "medical": ""
  }
}
```

### add_vaccination

DaySmart Pet: record a vaccine with its expiration date on the pet's Medical Information. Access: write. REST: `POST /api/v1/daysmart/add_vaccination`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `pet_id` | string | yes | Pet ID from get_client. |
| `vaccine` | string | yes | Vaccine name as on your Master Vaccination list. |
| `expires` | date | yes | Expiration date. |

Adds the vaccine with its Expiration date under Medical Information. The vaccine must be on your Master Vaccination list. No client is notified and one more call fixes a wrong date, so this tool does not ask for your OK.

Example response:

```json
{
  "pet_id": "p_90315",
  "vaccinations": [
    {
      "vaccine": "Rabies",
      "expires": "2027-09-30"
    }
  ]
}
```

### send_pickup_text

Text the client that their pet is ready, from the appointment ticket. Access: write, asks the user first. REST: `POST /api/v1/daysmart/send_pickup_text`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `message` | string | yes | Text to send to the client. |

Sends the one-way Ready For Pickup text from the ticket. DaySmart keeps no saved default message, so you give the text each time. It counts toward your monthly text allotment and needs texting set up with client opt-in. By default you confirm each call; you can switch that off for this tool.

Example response:

```json
{
  "appointment_id": "a_771204",
  "sent": true,
  "channel": "text",
  "message": "Max is ready for pickup. See you soon!"
}
```

## How do I connect DaySmart to Claude Code, Codex or Cursor?

Connecting DaySmart takes three steps: request access, sign in to DaySmart once, then add one MCP server or call the REST API with the same key.

### Connect DaySmart to your agent.

1. **Create an account** Sign up and add DaySmart in the console. Your API key is there too.

2. **Sign in to DaySmart once** Open the connect page from the console and sign in to DaySmart the way you always do. We keep the session, never your password, and you can revoke it anytime.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the DaySmart tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
What does tomorrow look like for Sam? List his appointments with services and pet notes.
```

### Call DaySmart from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is a POST endpoint at /api/v1/daysmart/{tool}. Send its parameters as JSON, exactly as listed in the endpoints above.

```
curl https://cotlet.dev/api/v1/daysmart/book_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"c_48211","start":"2026-10-16T14:00:00-04:00","services":[{"service_id":"s_112","employee_id":"e_7","pet_id":"p_90315"}],"waitlist_entry_id":"w_3302"}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

```
{
  "appointment_id": "a_771290",
  "status": "Scheduled",
  "start": "2026-10-16T14:00:00-04:00",
  "end": "2026-10-16T15:30:00-04:00",
  "client": "Yourname Client",
  "services": [
    {
      "name": "Full Groom",
      "employee": "Sam",
      "pet": "Max",
      "price": 75
    }
  ],
  "converted_from_waitlist": "w_3302"
}
```

## Why use Cotlet for DaySmart?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to DaySmart yourself. We keep only the session, encrypted with AES-256.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Pick read only, or read and write.
- Anything that reaches other people waits for your OK, unless you switch it off per tool.
- Revoke access in one click.

**Kept working for you**

- We test every integration daily.
- When DaySmart changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is there a DaySmart MCP server on GitHub?

No official Zapier app or MCP server for DaySmart Salon or Pet turned up. Today the data comes out through manual CSV report exports, and everything else is typed into the Appointment Book by hand.

|  | Manual CSV export | Cotlet |
|---|---|---|
| Setup | Open each report, pick dates, click Export | Request access, sign in to DaySmart once in your browser, add one MCP server or API key |
| What you get | One report at a time as CSV, read-only | Appointments, clients, pets, waitlist and reports on demand |
| Write actions | None: every booking and note is typed by hand | Book, edit and void appointments, pet notes, vaccinations, pickup texts, with your OK where clients are reached |
| When the session expires | You log in again | If DaySmart logs you out, your agent gets a link to sign in again |
| When DaySmart changes | You find the new menu | Our team tests it daily and fixes it for you; failed calls are free |
| Where it runs | In your browser, when you do it | Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule |
| Price | Free with your plan | Free 7-day trial with 5,000 credits, then credits per call |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when DaySmart changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want the session to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the DaySmart API cost?

Free 7-day trial with 5,000 credits, no card needed. After that, the DaySmart API comes with the Cotlet plan, from $29 a month for 3,000 credits, with no limit on apps. Each month's credits stay valid for 3 months, so unused credits add up.

| Size | Price | Credits / month | Per credit |
|---|---|---|---|
| Solo | $29/mo | 3,000 | about $0.0097 |
| Pro | $99/mo | 12,000 | about $0.0083 |
| Agency | $299/mo | 40,000 | $0.0075 |

Each successful call uses credits for the work it takes; failed calls and timeouts cost nothing. A hard spend cap is on by default. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own DaySmart account.

- **Company details:** The legal name, address and registration numbers of the company behind Cotlet are in the Terms of service. [Terms](https://cotlet.dev/terms)
- **Your session:** You sign in to DaySmart yourself, in your browser. We keep only the session, never your password: encrypted with AES-256 in an EU vault, isolated to your account and used only when your agent calls a DaySmart tool you allowed. When it expires, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security)
- **Revoking access:** Disconnect DaySmart in your dashboard: the session is deleted and access ends at once. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **DaySmart's terms:** You use your own DaySmart account and stay responsible for following DaySmart's terms. Cotlet is independent and not affiliated with DaySmart. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Request access and pick DaySmart. Cotlet reviews each request and emails you your API key.

**Do I need to be technical?**

No. You sign in to DaySmart once in your browser and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is a hosted server safe? My DaySmart session would leave my computer.**

Cotlet keeps your DaySmart session encrypted with AES-256 in an EU vault, isolated to your account and used only for the tools you allow: read only, or read and write. The AI model never sees it, and you revoke it in one click. A local server keeps the same session in a file on your computer, readable by any program you run, and needs a fresh sign-in whenever it expires.

**Can I get my DaySmart data out without Cotlet?**

Yes. The account owner can download a backup from More, Settings, Support, Download Backup, or submit the Data Retrieval Request Form. DaySmart fulfils requests as a full XML backup, usually within 2 business days, and only the account owner can ask (checked 11 Oct 2026).

**Does this work for both DaySmart Salon and DaySmart Pet?**

Appointments, clients, waitlist and reports work in both. Pets, vaccinations, pet notes and the Ready For Pickup text exist in DaySmart Pet only.

**Can my agent post or send messages in DaySmart without asking me?**

No. Every call to book_appointment, update_appointment, void_appointment or send_pickup_text waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. update_pet_notes, add_vaccination runs without asking, because it sends nothing to anyone and one call undoes it.

**Can I use the DaySmart API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call https://cotlet.dev/api/v1/daysmart/{tool} from the HTTP Request node.
