# Cantabebe API

Public HTTPS API for the free personalized family song. Base URL: `https://api.cantabebe.com`.

Machine-readable description: [openapi.json](https://cantabebe.com/openapi.json). Catalog: [/.well-known/api-catalog](https://cantabebe.com/.well-known/api-catalog).

## POST /submit-form

Request the free **family** song in **Spanish**. No authentication. No credit card.

### Body

| Field | Required | Notes |
| --- | --- | --- |
| `personalEmail` | yes | Parent email |
| `babyName` | yes | 1–100 characters; letters, spaces, hyphens, apostrophes, periods. The website accepts a single given name only |
| `babyGender` | yes | `female` or `male` |
| `language` | no | `spanish` (default on the website) or `english` |
| `songType` | yes | Use `family` for the free song |

### Example

```json
{
  "personalEmail": "tucorreo@ejemplo.com",
  "babyName": "sofia",
  "babyGender": "female",
  "language": "spanish",
  "songType": "family"
}
```

### Responses

- `201` `{ "message": "Form submitted successfully", "submissionId": "<uuid>" }`
- `400` `{ "message": "Invalid request body", "validationErrors": [{ "field", "message" }] }`

CORS origin: `https://cantabebe.com`.

## POST /subscribe

Subscribe an email to the blog list. Body: `{ "email": "tucorreo@ejemplo.com" }`. `200` if already subscribed, `201` if created.

## POST /mcp

Model Context Protocol (Streamable HTTP). Tool `request_family_song` with `personalEmail`, `babyName`, and `babyGender`. Same effect as `/submit-form` for the free family song.

## GET /health

`{ "status": "ok" }` when the API gateway is reachable.

## What this API does not offer

Song files are not returned from these endpoints. After approval, Cantabebe emails a download page. Payments use PayPal from the song page, not this public form.
