Base address
https://app.do-too.com/api/v1
Every documented operation belongs to version v1.
API reference
A personal contract for a client acting on behalf of a dotoo account. It reads the account and the challenges of whoever issued the token and writes on their behalf: it marks the day, creates and joins challenges, writes in the chat, spends dotoos, runs clubs and changes settings.
This release exists for personal use before opening a third-party platform.
| Resource | Operation | What it returns |
|---|---|---|
| Account |
GET
/api/v1/yo
|
Your level, XP, dotoos and completed days, no email. |
| Challenges |
GET
/api/v1/cohortes
|
Your open or running challenges, with their day and whether today is due. |
| Challenges |
GET
/api/v1/cohortes/{id}
|
The full record of one of your challenges, also once it has finished; someone else's answers 404. |
| Challenges |
GET
/api/v1/cohortes/publicas
|
Public challenges yet to start, with spots, in your language. |
| Challenges |
GET
/api/v1/cohortes/plantillas
|
The templates available to create a challenge. |
| Challenges |
GET
/api/v1/cohortes/historial
|
Your challenges in progress, finished, or abandoned. |
| Challenges |
GET
/api/v1/cohortes/{id}/invitables
|
People from the previous challenge you can invite to one of your challenges. |
| Challenges |
GET
/api/v1/hoy
|
Pending invitations and dissolved challenges you haven't seen yet. |
| Challenges |
GET
/api/v1/invitaciones/{token}
|
A challenge seen from its invitation link. |
| Challenges |
GET
/api/v1/temas
|
The current challenge theme, or a past one by its key. |
| Challenges |
POST
/api/v1/cohortes
|
Creates a challenge; it starts under review except for fixed-text families. |
| Challenges |
PATCH
/api/v1/cohortes/{id}
|
Changes a challenge's description, category, spots or journal fields. |
| Challenges |
POST
/api/v1/cohortes/{id}/reintentar_revision
|
Sends a challenge left without a verdict back to moderation. |
| Challenges |
POST
/api/v1/cohortes/{id}/participacion
|
Joins you to a public challenge by its id. |
| Challenges |
POST
/api/v1/invitaciones/{token}
|
Joins you to a challenge by its invitation link, private ones too. |
| Challenges |
DELETE
/api/v1/cohortes/{id}/participacion
|
You leave a challenge, or dissolve it if you created it. |
| Challenges |
POST
/api/v1/cohortes/{id}/invitaciones
|
Invites people from the previous challenge, with each one's result. |
| Challenges |
PUT
/api/v1/cohortes/{id}/voto_de_franja
|
Your vote for the daily time slot while the challenge is in its lobby. |
| Challenges |
POST
/api/v1/cohortes/{id}/toques
|
A nudge to someone who hasn't checked in today yet. |
| Check-ins and games |
POST
/api/v1/subidas
|
An upload reserved for a check-in photo. |
| Check-ins and games |
POST
/api/v1/cohortes/{id}/checkins
|
Today's check-in for a challenge: new or the one already there. |
| Check-ins and games |
POST
/api/v1/cohortes/{id}/regla/intentos
|
Your entry on The hidden rule board, with its verdict. |
| Check-ins and games |
POST
/api/v1/cohortes/{id}/regla/formulaciones
|
Your guess at the rule, pending the judge. |
| Check-ins and games |
GET
/api/v1/blurs_del_dia/{id}
|
A Blur day: turn, options and your answer. |
| Check-ins and games |
POST
/api/v1/blurs_del_dia/{id}/respuesta
|
Your answer to today's Blur and whether you got it. |
| Check-ins and games |
GET
/api/v1/fotos_de_blur/{id}
|
The blurred photo of a Blur day. |
| Check-ins and games |
GET
/api/v1/fotos_de_blur/{id}/nitida
|
The sharp photo of a Blur day, if you can already see it. |
| Dares |
GET
/api/v1/fotos_de_atrevimientos/{id}
|
The photo of a completed dare in the group. |
| Dares |
POST
/api/v1/atrevimientos_del_dia/{id}/valoracion
|
Your rating (si/no) of a dare you already completed. |
| Chat |
GET
/api/v1/chat/mensajes
|
The thread of a challenge or a shared room. |
| Chat |
POST
/api/v1/chat/novedades
|
What's new in all your chats since this app's last call. |
| Chat |
POST
/api/v1/chat/mensajes
|
Writes a message in a challenge's or room's chat. |
| Chat |
DELETE
/api/v1/chat/mensajes/{id}
|
Deletes your own message. |
| Chat |
PUT
/api/v1/chat/mensajes/{id}/reaccion
|
Sets, changes or clears your reaction on a message. |
| Chat |
POST
/api/v1/chat/mensajes/{id}/denuncia
|
Flags a message for review. |
| Economy |
GET
/api/v1/tesoreria
|
Dotoo balance and the latest ledger movements. |
| Economy |
GET
/api/v1/apuestas
|
Pending and resolved dotoo bets, with the balance. |
| Economy |
POST
/api/v1/cohortes/{id}/apuestas
|
Bets dotoos on completing the week of a running challenge. |
| Economy |
GET
/api/v1/armario
|
Catalog of outfits and fur colors, with what's owned and worn. |
| Economy |
POST
/api/v1/armario/compras
|
Buys an outfit from the wardrobe with dotoos. |
| Economy |
PATCH
/api/v1/armario/compras/{id}
|
Wears or removes an already bought outfit. |
| Economy |
PATCH
/api/v1/armario/pelaje
|
Sets a fur color, buying it first if it costs dotoos. |
| Clubs |
GET
/api/v1/clubs
|
Your clubs, with their review status and your limit. |
| Clubs |
GET
/api/v1/clubs/publicos
|
Open clubs whose name contains some text. |
| Clubs |
POST
/api/v1/clubs
|
Creates a club you own; it stays under review. |
| Clubs |
GET
/api/v1/clubs/{id}
|
One of your clubs: members, review and, if you are an owner, the inbox. |
| Clubs |
POST
/api/v1/clubs/{id}/reintentar_revision
|
Asks again for the review of a club left without a verdict. |
| Clubs |
GET
/api/v1/clubs/invitaciones/{token}
|
The public card a club's link opens. |
| Clubs |
POST
/api/v1/clubs/{id}/solicitudes
|
Asks to join an open club from search. |
| Clubs |
POST
/api/v1/clubs/invitaciones/{token}
|
Asks to join a club through its link. |
| Clubs |
POST
/api/v1/clubs/{id}/solicitudes/{solicitud_id}/aceptar
|
Lets someone who asked into your club. |
| Clubs |
DELETE
/api/v1/clubs/{id}/solicitudes/{solicitud_id}
|
Turns down someone who asked to join your club. |
| Clubs |
GET
/api/v1/clubs/{id}/personas
|
An owner looks up someone to invite by exact username. |
| Clubs |
POST
/api/v1/clubs/{id}/invitaciones
|
An owner invites someone; if they accept, they join without approval. |
| Clubs |
GET
/api/v1/clubs/invitaciones_recibidas
|
Your pending invitations to clubs. |
| Clubs |
POST
/api/v1/clubs/{id}/invitaciones/{invitacion_id}/aceptar
|
Accept an invitation and join the club. |
| Clubs |
DELETE
/api/v1/clubs/{id}/invitaciones/{invitacion_id}
|
Decline an invitation without telling who sent it. |
| Companion |
GET
/api/v1/cohortes/{id}/acompanamiento
|
The companion's settings in one of your challenges. |
| Companion |
GET
/api/v1/cohortes/{id}/acompanamiento/mensajes
|
Today's conversation and the state of the last piece of advice. |
| Companion |
GET
/api/v1/cohortes/{id}/acompanamiento/recuerdos
|
What the companion remembers about you in that challenge. |
| Profiles |
GET
/api/v1/usuarios/{username}
|
A person's profile: yours, in full. |
| Settings |
GET
/api/v1/ajustes
|
Language, daily reminder, notices and quiet hours. |
| Settings |
PATCH
/api/v1/ajustes
|
Changes language, daily reminder, notices or quiet hours. |
| Settings |
PATCH
/api/v1/cohortes/{id}/recordatorio
|
Turns the reminder of one of your challenges on or off. |
| Settings |
GET
/api/v1/ajustes/apps-conectadas
|
The apps connected to your account. |
| Settings |
DELETE
/api/v1/ajustes/apps-conectadas/{id}
|
Disconnects a connected app. |
| Quit smoking |
POST
/api/v1/cohortes/{id}/consumos
|
Adds one unit smoked today. |
| Quit smoking |
DELETE
/api/v1/cohortes/{id}/consumos/ultimo
|
Takes back today's latest use. |
| Quit smoking |
PATCH
/api/v1/cohortes/{id}/dejar_de_fumar/confianza
|
Saves your confidence for tomorrow in the gradual plan. |
| Quit smoking |
POST
/api/v1/cohortes/{id}/antojos
|
Logs a craving and whether you got through it. |
| Quit smoking |
PATCH
/api/v1/cohortes/{id}/dejar_de_fumar/contador
|
Picks the counter your challenge page highlights. |
| Greetings |
GET
/api/v1/saludos
|
The Greetings Room feed, with your supports and reports. |
| Greetings |
POST
/api/v1/saludos
|
Posts a greeting; it stays under review. |
| Greetings |
GET
/api/v1/saludos/{id}
|
One of your greetings and its review, also if moderation deleted it. |
| Greetings |
POST
/api/v1/saludos/{id}/reintentar_revision
|
Asks again for the review of a greeting left without a verdict. |
| Greetings |
DELETE
/api/v1/saludos/{id}
|
Deletes one of your greetings. |
| Greetings |
PUT
/api/v1/saludos/{id}/apoyo
|
Supports a greeting in the feed. |
| Greetings |
DELETE
/api/v1/saludos/{id}/apoyo
|
Removes your support from a greeting. |
| Greetings |
POST
/api/v1/saludos/{id}/denuncia
|
Flags a greeting in the feed for review. |
| Campfires |
GET
/api/v1/fogatas
|
Your live campfires. |
| Campfires |
POST
/api/v1/fogatas
|
Creates a 25 or 50 minute campfire. |
| Campfires |
GET
/api/v1/fogatas/{id}
|
The room: clock, your intention and your result. |
| Campfires |
POST
/api/v1/fogatas/{id}/empezar
|
Starts a campfire you created. |
| Campfires |
PATCH
/api/v1/fogatas/{id}/resultado
|
Tells how it went once it ends. |
| Campfires |
DELETE
/api/v1/fogatas/{id}
|
Deletes a campfire you created. |
| Journal |
GET
/api/v1/journal
|
Lists your journal, with its numbers. |
| Journal |
GET
/api/v1/journal/hoy
|
Opens today's entry from a Journal challenge. |
| Journal |
PUT
/api/v1/journal/hoy
|
Saves today's entry and checks in the day. |
| Journal |
GET
/api/v1/journal/{fecha}
|
Reads an entry by its date. |
| Journal |
GET
/api/v1/journal/ajustes
|
Shows whether a gratitude is brought back. |
| Journal |
PATCH
/api/v1/journal/ajustes
|
Turns that reminder on or off. |
Before calling
Every request represents the token subject. An identifier in a path only selects resources that account can already access.
https://app.do-too.com/api/v1
Every documented operation belongs to version v1.
Authorization: Bearer <token>
The token is revocable, expires and only authorizes the scopes it was issued with.
application/json · application/problem+json
Success uses a data envelope. Errors use problem+json with a stable code: parametros_invalidos (400), scope_insuficiente (403), recurso_no_encontrado (404), validacion (422) and limite_de_peticiones (429). A 400 parametros_invalidos or a 422 validacion lists every failing field in errors, such as «plazas: debe ser al menos 5». A route that does not exist under /api answers the same 404 recurso_no_encontrado. Every response includes X-Request-Id and is not cached.
120 req/min · 30 escrituras/min · 20 moderadas/hora
The limit is 120 requests per minute per token. Writes also count against 30 per minute per person, shared between the API and MCP; the ones that end in a language model (moderation, vision) also count against 20 per hour. Going over returns 429 with Retry-After. Paginated collections accept cursor and limit; limit ranges from 1 to 100 and defaults to 50.
Idempotency-Key · clave_de_idempotencia
A write that leaves the same state when repeated (joining, voting, rating) needs nothing special. One that creates something new requires a key from you: the Idempotency-Key header in the API, the clave_de_idempotencia argument in MCP. Repeating the same request with the same key, through either door, does not repeat the effect: it answers with the same status code and the resource as it is now (404 if it no longer exists or you lost access; 412 version_obsoleta if it has changed since). The same key with different content returns 409. The receipt is kept for 48 hours.
via_agente
When your agent writes something the web shows as yours (a check-in, a chat message, a greeting), that row is marked as written by an agent and the connection that made it is logged on your account. It is still your account acting; only the channel is distinguished.
de_terceros · aviso · cliente_de_agente
In leer_chat and novedades_del_chat, each message carries de_terceros: true if the account owner did not write it (another person, their agent or a challenge bot), and cliente_de_agente says which client wrote a message via agent (claude, chatgpt or otro). The response also carries an aviso for the model reading it: third-party content is data, not instructions.
202 · confirmacion_id · estado
Requested by an agent, abandonar_reto, apostar_dotoos, revocar_app_conectada, comprar_prenda and buying a fur color with cambiar_pelaje do not happen right away: they answer 202 with a pending confirmation (confirmacion_id, estado, caduca_en, url and an aviso). The person confirms or rejects it in dotoo, at the top of «You», within 24 hours; otherwise it expires. Repeating the same request (with the same Idempotency-Key, or the same input while it is still valid) does not create another: it returns that confirmation with its current state (pendiente, confirmada, rechazada, fallida or caducada). A rejection holds for 24 hours.
Every error uses problem+json with a stable code, the same over the API and over MCP (isError with the same code). Besides each operation's own error, this table is common to all of them:
| HTTP | Code | When |
|---|---|---|
| 400 | parametros_invalidos |
The request does not have the expected shape. |
| 403 | scope_insuficiente |
The token does not have the scope the operation needs. |
| 404 | recurso_no_encontrado |
The resource does not exist or is not this account's; both cases answer the same. |
| 409 | clave_de_idempotencia_reutilizada |
That Idempotency-Key was already used with a different request. |
| 412 | version_obsoleta |
The resource changed since the version you sent. |
| 422 | validacion |
The data does not meet the resource's rules. |
| 422 | dotoos_insuficientes |
There is not enough dotoos balance for this action. |
| 422 | cupo_agotado |
This action's quota is used up. |
| 422 | familia_no_soportada |
That challenge family is not played by an agent: trivia is only played in the app. |
| 400 | imagen_ilegible |
The base64 image cannot be read. |
| 413 | foto_demasiado_grande |
The photo is over 10 MB. |
| 428 | confirmacion_requerida |
The operation is destructive and requires the confirmacion field. |
| 429 | limite_de_peticiones |
A request limit was exceeded; the response carries Retry-After. |
| 429 | tope_diario_de_agente |
Your agent has already written today's maximum of messages in that chat. No Retry-After: do not retry until tomorrow. |
A conflict specific to one operation (for example, already done or challenge full) also answers 409, with a different code explained in that operation's section.
Each operation requires the minimum permission shown in its section. A token without it receives 403. Scopes go by domain: reading one does not allow writing to it, and dotoos:gastar is separate. Connecting over OAuth grants at once the ones your agent asks for; if it asks for none, all but dotoos:gastar; an earlier connection keeps only the read ones until you connect it again.
perfil:leer
cohortes:leer
chat:leer
social:leer
journal:leer
companion:leer
spa:leer
perfil:escribir
cohortes:escribir
checkins:escribir
chat:escribir
social:escribir
dotoos:gastar
journal:escribir
spa:escribir
Account
A minimal view of personal state, with no email address or credentials.
GET
/api/v1/yo
perfil:leer
Summarizes the personal account represented by the Bearer.
curl -s \
'https://app.do-too.com/api/v1/yo' \
-H 'Authorization: Bearer <token>'
Challenges
The account's open or running challenges and the public offer: read them, create and adjust them, join, invite, vote the time slot, nudge and leave.
GET
/api/v1/cohortes
cohortes:leer
Returns the live challenges the account belongs to.
curl -s \
'https://app.do-too.com/api/v1/cohortes' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/publicas
cohortes:leer
Discovers future public challenges the account can still join.
curl -s \
'https://app.do-too.com/api/v1/cohortes/publicas?limit=20' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/{id}
cohortes:leer
Reads the full record of a challenge within the account's memberships, running or already closed.
curl -s \
'https://app.do-too.com/api/v1/cohortes/42' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/plantillas
cohortes:leer
Returns the templates a new challenge can be created from.
curl -s \
'https://app.do-too.com/api/v1/cohortes/plantillas' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/historial
cohortes:leer
Returns the account's challenge history rows.
curl -s \
'https://app.do-too.com/api/v1/cohortes/historial?estado=en_curso' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/{id}/invitables
cohortes:leer
Lists the people from the previous challenge that can be invited to one of the account's challenges.
curl -s \
'https://app.do-too.com/api/v1/cohortes/42/invitables' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/hoy
cohortes:leer
The account's pending invitations and unacknowledged dissolved challenges.
curl -s \
'https://app.do-too.com/api/v1/hoy' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/invitaciones/{token}
cohortes:leer
Looks up a challenge from its invitation link.
curl -s \
'https://app.do-too.com/api/v1/invitaciones/abc123' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/temas
cohortes:leer
Looks up the current challenge theme, or a past one by its key.
curl -s \
'https://app.do-too.com/api/v1/temas' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/cohortes
cohortes:escribir
Creates a challenge with the account as its creator: the same signup as the web form.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"nombre":"Leer 20 minutos","categoria":"aprendizaje","duracion_dias":14,"tipo_de_check":"simple"}'
PATCH
/api/v1/cohortes/{id}
cohortes:escribir
Changes a challenge's settings: the same ones as the web settings wheel.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/cohortes/42' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"plazas":10}'
POST
/api/v1/cohortes/{id}/reintentar_revision
cohortes:escribir
Asks again for the moderation verdict of a sin_veredicto challenge.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/reintentar_revision' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/cohortes/{id}/participacion
cohortes:escribir
Signs the account up for a public, approved challenge by its id, without a link.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/participacion' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/invitaciones/{token}
cohortes:escribir
Signs the account up for a challenge from its invitation link, like the web.
curl -s -X POST \
'https://app.do-too.com/api/v1/invitaciones/abc123' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/cohortes/{id}/participacion
cohortes:escribir
Takes the account out of a challenge; if it created it, dissolves it for everyone.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/cohortes/42/participacion?confirmacion=true' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/cohortes/{id}/invitaciones
cohortes:escribir
Invites several people at once and returns each one's result.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/invitaciones' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"user_ids":["7","12"]}'
PUT
/api/v1/cohortes/{id}/voto_de_franja
cohortes:escribir
Votes manana, mediodia or tarde_noche as the challenge's daily time slot.
curl -s -X PUT \
'https://app.do-too.com/api/v1/cohortes/42/voto_de_franja' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"opcion":"manana"}'
POST
/api/v1/cohortes/{id}/toques
cohortes:escribir
Reminds someone in the challenge who hasn't checked in today yet.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/toques' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"user_id":"7"}'
Check-ins and games
The same as the day button and the games on the challenge page. What your agent marks shows on the challenge with a «via agent» label.
POST
/api/v1/subidas
checkins:escribir
Reserves a photo upload to mark the day in a photo, dare or Blur challenge.
curl -s -X POST \
'https://app.do-too.com/api/v1/subidas' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"nombre_de_archivo":"foto.jpg","bytes":183422,"checksum":"1B2M2Y8AsgTpgAmY7PhCfg==","tipo_mime":"image/jpeg"}'
POST
/api/v1/cohortes/{id}/checkins
checkins:escribir
Marks today on one of your challenges, with whatever its family asks for, like the day button on the web.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/checkins' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"cantidad":30}'
POST
/api/v1/cohortes/{id}/regla/intentos
checkins:escribir
Tries a word against today's hidden rule. It stays on the group's board, like on the challenge page.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/regla/intentos' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"texto":"perro"}'
POST
/api/v1/cohortes/{id}/regla/formulaciones
checkins:escribir
Proposes what today's hidden rule is. If you're right, you close the group's day and complete it.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/regla/formulaciones' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"texto":"palabras de cinco letras"}'
GET
/api/v1/blurs_del_dia/{id}
cohortes:leer
A Blur day in one of your challenges: whose turn it is, the four options and your answer.
curl -s \
'https://app.do-too.com/api/v1/blurs_del_dia/42' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/blurs_del_dia/{id}/respuesta
checkins:escribir
Picks what's in today's blurred photo, like the four-option board on the web.
curl -s -X POST \
'https://app.do-too.com/api/v1/blurs_del_dia/42/respuesta' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"opcion":2}'
GET
/api/v1/fotos_de_blur/{id}
cohortes:leer
The blurred photo of a Blur day in one of your challenges, the one to guess.
curl -s \
'https://app.do-too.com/api/v1/fotos_de_blur/42' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/fotos_de_blur/{id}/nitida
cohortes:leer
The original photo of a Blur day.
curl -s \
'https://app.do-too.com/api/v1/fotos_de_blur/42/nitida' \
-H 'Authorization: Bearer <token>'
Dares
Writes on behalf of the account. Repeating the same request leaves the same state.
POST
/api/v1/atrevimientos_del_dia/{id}/valoracion
checkins:escribir
Saves whether you liked (si or no) the daily dare you already completed, like the yes/no on the web.
curl -s -X POST \
'https://app.do-too.com/api/v1/atrevimientos_del_dia/42/valoracion' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"valoracion":"si"}'
GET
/api/v1/fotos_de_atrevimientos/{id}
cohortes:leer
The photo of a completed dare in one of your challenges, like the challenge's gallery.
curl -s \
'https://app.do-too.com/api/v1/fotos_de_atrevimientos/42' \
-H 'Authorization: Bearer <token>'
Chat
Writes on behalf of the account. cohorte_id or sala_id, never both: the discriminated argument, depending on whether you mean a challenge's chat or a room's.
GET
/api/v1/chat/mensajes
chat:leer
The paginated thread of a challenge or a shared room.
curl -s \
'https://app.do-too.com/api/v1/chat/mensajes?cohorte_id=42' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/chat/novedades
chat:leer
The new messages in all of the person's challenges and rooms since this connected app's last call, grouped by chat.
curl -s -X POST \
'https://app.do-too.com/api/v1/chat/novedades' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"limite":50}'
POST
/api/v1/chat/mensajes
chat:escribir
Writes a message in a challenge's or room's chat.
curl -s -X POST \
'https://app.do-too.com/api/v1/chat/mensajes' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"cohorte_id":"42","cuerpo":"¡Hola!"}'
DELETE
/api/v1/chat/mensajes/{id}
chat:escribir
Deletes your own message from the chat.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/chat/mensajes/99?cohorte_id=42' \
-H 'Authorization: Bearer <token>'
PUT
/api/v1/chat/mensajes/{id}/reaccion
chat:escribir
Sets, changes or clears the account's reaction on a message.
curl -s -X PUT \
'https://app.do-too.com/api/v1/chat/mensajes/99/reaccion?cohorte_id=42' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"tipo":"aplauso"}'
POST
/api/v1/chat/mensajes/{id}/denuncia
chat:escribir
Flags a chat message for review.
curl -s -X POST \
'https://app.do-too.com/api/v1/chat/mensajes/99/denuncia?cohorte_id=42' \
-H 'Authorization: Bearer <token>'
Economy
Reads of the dotoo balance and wardrobe, and the writes that spend dotoos: betting, buying an outfit, wearing it or changing the fur color.
GET
/api/v1/tesoreria
perfil:leer
Account's dotoo balance and its latest movements, most recent first.
curl -s \
'https://app.do-too.com/api/v1/tesoreria' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/apuestas
perfil:leer
Account's pending and resolved dotoo bets, with the balance won or lost.
curl -s \
'https://app.do-too.com/api/v1/apuestas' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/cohortes/{id}/apuestas
dotoos:gastar
Bets 3 dotoos on completing 6 of the 7 days of the running natural week; prize 6, no cancellation.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/apuestas' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/armario
perfil:leer
Catalog of outfits and fur colors, with what the account already owns and wears.
curl -s \
'https://app.do-too.com/api/v1/armario' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/armario/compras
dotoos:gastar
Buys an outfit from the wardrobe with dotoos; no refund.
curl -s -X POST \
'https://app.do-too.com/api/v1/armario/compras' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"prenda":"gorro_de_lana","confirmacion":20}'
PATCH
/api/v1/armario/compras/{id}
perfil:escribir
Wears (equipada: true) or removes (equipada: false) an outfit already owned by the account.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/armario/compras/42' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"equipada":true}'
PATCH
/api/v1/armario/pelaje
perfil:escribir
Sets a fur color already unlocked by level, or buys it with dotoos the first time if it costs.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/armario/pelaje' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"tono":"a8edcb"}'
Clubs
Reads with social:leer and writes with social:escribir. A club that isn't yours, or isn't approved yet and isn't yours, answers the same as one that doesn't exist.
GET
/api/v1/clubs
social:leer
The account's clubs, including those still under review.
curl -s \
'https://app.do-too.com/api/v1/clubs' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/clubs/publicos
social:leer
Approved clubs whose name contains the busqueda text.
curl -s \
'https://app.do-too.com/api/v1/clubs/publicos?busqueda=correr' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs
social:escribir
Creates a club the account owns.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"nombre":"Corremos a las nueve"}'
GET
/api/v1/clubs/{id}
social:leer
The card of one of the account's clubs.
curl -s \
'https://app.do-too.com/api/v1/clubs/42' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/{id}/reintentar_revision
social:escribir
Asks again for the review of your own club left without a verdict.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/42/reintentar_revision' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/clubs/invitaciones/{token}
social:leer
What opening a club's link shows.
curl -s \
'https://app.do-too.com/api/v1/clubs/invitaciones/AbCdEfGhJkLmNpQrStUvWxYz' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/{id}/solicitudes
social:escribir
Asks to join an open club by its id.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/42/solicitudes' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/invitaciones/{token}
social:escribir
The same request, with the token of the club's link instead of its id.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/invitaciones/AbCdEfGhJkLmNpQrStUvWxYz' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/{id}/solicitudes/{solicitud_id}/aceptar
social:escribir
An owner lets someone who asked into their club.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/42/solicitudes/7/aceptar' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/clubs/{id}/solicitudes/{solicitud_id}
social:escribir
An owner turns down someone who asked to join their club.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/clubs/42/solicitudes/7' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/clubs/{id}/personas
social:leer
An owner looks up a person by their exact username to invite them.
curl -s \
'https://app.do-too.com/api/v1/clubs/42/personas?username=marta' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/{id}/invitaciones
social:escribir
An owner invites a person by their exact username.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/42/invitaciones' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"username":"marta"}'
GET
/api/v1/clubs/invitaciones_recibidas
social:leer
The invitations the account has yet to accept or decline.
curl -s \
'https://app.do-too.com/api/v1/clubs/invitaciones_recibidas' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/clubs/{id}/invitaciones/{invitacion_id}/aceptar
social:escribir
Join the club without waiting for an owner to approve.
curl -s -X POST \
'https://app.do-too.com/api/v1/clubs/42/invitaciones/9/aceptar' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/clubs/{id}/invitaciones/{invitacion_id}
social:escribir
Deletes the invitation without telling who sent it.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/clubs/42/invitaciones/9' \
-H 'Authorization: Bearer <token>'
Companion
Read only, with companion:leer. An agent reads the companion but doesn't talk to it for you: setting it up, writing to it and correcting or deleting what it remembers happen on the web. The companion is private and lives in each challenge: a challenge that isn't yours, has ended or doesn't allow a companion answers the same as one that doesn't exist.
GET
/api/v1/cohortes/{id}/acompanamiento
companion:leer
The companion's settings in one of the account's challenges.
curl -s \
'https://app.do-too.com/api/v1/cohortes/42/acompanamiento' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/{id}/acompanamiento/mensajes
companion:leer
Today's messages with the companion and the last advice requested.
curl -s \
'https://app.do-too.com/api/v1/cohortes/42/acompanamiento/mensajes' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/cohortes/{id}/acompanamiento/recuerdos
companion:leer
What the companion remembers about the account in that challenge.
curl -s \
'https://app.do-too.com/api/v1/cohortes/42/acompanamiento/recuerdos' \
-H 'Authorization: Bearer <token>'
Profiles
Read with social:leer. An unknown username responds 404.
GET
/api/v1/usuarios/{username}
social:leer
A person's profile by username.
curl -s \
'https://app.do-too.com/api/v1/usuarios/marta' \
-H 'Authorization: Bearer <token>'
Settings
Reads with perfil:leer and writes with perfil:escribir. Disconnecting the agent's own app leaves it without access.
GET
/api/v1/ajustes
perfil:leer
The account's settings.
curl -s \
'https://app.do-too.com/api/v1/ajustes' \
-H 'Authorization: Bearer <token>'
PATCH
/api/v1/ajustes
perfil:escribir
Changes the account's settings; only what is sent.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/ajustes' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"idioma":"es","hora_de_recordatorio":20}'
PATCH
/api/v1/cohortes/{id}/recordatorio
perfil:escribir
Turns the reminder of one of the account's challenges on or off.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/cohortes/42/recordatorio' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"activo":false}'
GET
/api/v1/ajustes/apps-conectadas
perfil:leer
The apps connected to the account, with their permissions.
curl -s \
'https://app.do-too.com/api/v1/ajustes/apps-conectadas' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/ajustes/apps-conectadas/{id}
perfil:escribir
Disconnects an app: it loses access to the account.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/ajustes/apps-conectadas/7' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"confirmacion":"desconectar"}'
Quit smoking
Writes with checkins:escribir on one of the account's Quit smoking challenges; a foreign one or one from another family answers the same as one that doesn't exist. Today's state is read in dejar_de_fumar on the challenge record, and every action returns it.
POST
/api/v1/cohortes/{id}/consumos
checkins:escribir
Adds one unit smoked today, like the page's «+1».
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/consumos' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/cohortes/{id}/consumos/ultimo
checkins:escribir
Takes back today's latest use, like the page's «-1».
curl -s -X DELETE \
'https://app.do-too.com/api/v1/cohortes/42/consumos/ultimo?clave_de_consumo=<uuid>' \
-H 'Authorization: Bearer <token>'
PATCH
/api/v1/cohortes/{id}/dejar_de_fumar/confianza
checkins:escribir
Saves your confidence for tomorrow, 1 to 10, in the gradual plan.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/cohortes/42/dejar_de_fumar/confianza' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"confianza":7}'
POST
/api/v1/cohortes/{id}/antojos
checkins:escribir
Logs a craving and whether you got through it.
curl -s -X POST \
'https://app.do-too.com/api/v1/cohortes/42/antojos' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"superado":true}'
PATCH
/api/v1/cohortes/{id}/dejar_de_fumar/contador
checkins:escribir
Picks which counter the page highlights: dias, unidades, dinero or antojos, or null for none.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/cohortes/42/dejar_de_fumar/contador' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"contador":"dias"}'
Greetings
Reads with spa:leer and writes with spa:escribir. Someone else's greeting that isn't in the feed responds the same as one that doesn't exist.
GET
/api/v1/saludos
spa:leer
The approved greetings from the last seven days, newest first.
curl -s \
'https://app.do-too.com/api/v1/saludos' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/saludos
spa:escribir
Posts a greeting of up to 160 characters in Greetings Room.
curl -s -X POST \
'https://app.do-too.com/api/v1/saludos' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"texto":"Buenos días desde Girona"}'
GET
/api/v1/saludos/{id}
spa:leer
A greeting of the account and its review.
curl -s \
'https://app.do-too.com/api/v1/saludos/42' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/saludos/{id}/reintentar_revision
spa:escribir
Asks again for the review of your greeting left without a verdict.
curl -s -X POST \
'https://app.do-too.com/api/v1/saludos/42/reintentar_revision' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/saludos/{id}
spa:escribir
Deletes a greeting of the account, with its supports.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/saludos/42' \
-H 'Authorization: Bearer <token>'
PUT
/api/v1/saludos/{id}/apoyo
spa:escribir
Leaves the account's support on a greeting in the feed.
curl -s -X PUT \
'https://app.do-too.com/api/v1/saludos/42/apoyo' \
-H 'Authorization: Bearer <token>'
DELETE
/api/v1/saludos/{id}/apoyo
spa:escribir
Removes the account's support from a greeting in the feed.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/saludos/42/apoyo' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/saludos/{id}/denuncia
spa:escribir
Flags a greeting in the feed for review.
curl -s -X POST \
'https://app.do-too.com/api/v1/saludos/42/denuncia' \
-H 'Authorization: Bearer <token>'
Campfires
Reads with spa:leer and writes with spa:escribir. A campfire you are not in responds the same as one that doesn't exist; each campfire is individual: only its creator takes part.
GET
/api/v1/fogatas
spa:leer
The campfires still asking for something: waiting, running or with your result untold.
curl -s \
'https://app.do-too.com/api/v1/fogatas' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/fogatas
spa:escribir
A 25 or 50 minute campfire with your intention, which only you see.
curl -s -X POST \
'https://app.do-too.com/api/v1/fogatas' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"duracion_minutos":25,"intencion":"Terminar el informe"}'
GET
/api/v1/fogatas/{id}
spa:leer
State, end time, and your intention and result.
curl -s \
'https://app.do-too.com/api/v1/fogatas/42' \
-H 'Authorization: Bearer <token>'
POST
/api/v1/fogatas/{id}/empezar
spa:escribir
Starts the clock of a campfire you created.
curl -s -X POST \
'https://app.do-too.com/api/v1/fogatas/42/empezar' \
-H 'Authorization: Bearer <token>'
PATCH
/api/v1/fogatas/{id}/resultado
spa:escribir
Once it ends, tells how it went: hecho, sigo or cambio.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/fogatas/42/resultado' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"resultado":"hecho"}'
DELETE
/api/v1/fogatas/{id}
spa:escribir
Deletes a campfire you created.
curl -s -X DELETE \
'https://app.do-too.com/api/v1/fogatas/42?confirmacion=borrar' \
-H 'Authorization: Bearer <token>'
Journal
Reads with journal:leer and writes with journal:escribir on the account's diary, which nobody else sees. The day is the person's own: zona, like Europe/Madrid, or without it, the account's time zone.
GET
/api/v1/journal
journal:leer
Your entries, newest first, with their first line, days written and days with gratitude.
curl -s \
'https://app.do-too.com/api/v1/journal?zona=Europe/Madrid' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/journal/hoy
journal:leer
The blocks of the challenge you write from, what you already wrote today and its version (0 if nothing).
curl -s \
'https://app.do-too.com/api/v1/journal/hoy?cohorte_id=42&zona=Europe/Madrid' \
-H 'Authorization: Bearer <token>'
PUT
/api/v1/journal/hoy
journal:escribir
Saves today's entry and checks in your Journal challenges, like the button on the web.
curl -s -X PUT \
'https://app.do-too.com/api/v1/journal/hoy' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"cohorte_id":"42","version":0,"diario":"…","agradecimientos":"…"}'
GET
/api/v1/journal/{fecha}
journal:leer
A whole entry by its date (like 2026-09-24); with no entry that day, 404.
curl -s \
'https://app.do-too.com/api/v1/journal/2026-09-24' \
-H 'Authorization: Bearer <token>'
GET
/api/v1/journal/ajustes
journal:leer
Whether the front page brings back an earlier gratitude every day.
curl -s \
'https://app.do-too.com/api/v1/journal/ajustes' \
-H 'Authorization: Bearer <token>'
PATCH
/api/v1/journal/ajustes
journal:escribir
Turns the brought-back gratitude on or off.
curl -s -X PATCH \
'https://app.do-too.com/api/v1/journal/ajustes' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"recordar_agradecimientos":true}'
Remote MCP
Every operation is also served as an MCP server. Your agent connects with OAuth, no token needed: it asks your permission in dotoo and does the same things as through the API, through the same operations.
POST https://app.do-too.com/mcp
Stateless Streamable HTTP transport: each POST carries one JSON-RPC message and gets one JSON response, with no session and no Mcp-Session-Id. GET and DELETE return 405.
/.well-known/oauth-protected-resource/mcp
Without a token, /mcp returns 401 and points to dotoo's authorization server. The agent registers itself, opens dotoo so you sign in and give permission, and exchanges the code with PKCE. The access token lasts one hour and only works on /mcp; the refresh token rotates on every use. You cut it off in Settings → Connected apps.
Authorization: Bearer <token>
Advanced alternative: the personal API token, with its expiry, its revocation and the same limit of 120 requests per minute. Without a valid token it returns 401 as problem+json, just like /api/v1.
content · structuredContent
Each tool returns the same data envelope as its API operation, as JSON text and as structuredContent.
readOnlyHint · idempotentHint
Read tools change nothing, and write tools say so in their annotations, including whether repeating them leaves the same state. Arguments follow each tool's inputSchema. Each one requires its scope and the same checks as its API operation: an error returns isError with the same code, such as scope_insuficiente or parametros_invalidos, and the same errors.
TOOL
quien_soy
perfil:leer
Your profile: the same body as GET /api/v1/yo. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"quien_soy","arguments":{}}}'
TOOL
retos_activos
cohortes:leer
Your open or running challenges: the same body as GET /api/v1/cohortes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"retos_activos","arguments":{}}}'
TOOL
ver_reto
cohortes:leer
The full record of one of your challenges: the same body as GET /api/v1/cohortes/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_reto","arguments":{}}}'
TOOL
buscar_retos_publicos
cohortes:leer
Public availability you can still join: the same body as GET /api/v1/cohortes/publicas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_retos_publicos","arguments":{}}}'
TOOL
resumen_de_hoy
cohortes:leer
Pending invitations and dissolved challenges: the same body as GET /api/v1/hoy. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"resumen_de_hoy","arguments":{}}}'
TOOL
listar_plantillas_de_reto
cohortes:leer
Templates to create a challenge: the same body as GET /api/v1/cohortes/plantillas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_plantillas_de_reto","arguments":{}}}'
TOOL
historial_de_retos
cohortes:leer
The account's challenge history: the same body as GET /api/v1/cohortes/historial. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"historial_de_retos","arguments":{}}}'
TOOL
ver_tema_de_retos
cohortes:leer
The current theme or a past one: the same body as GET /api/v1/temas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_tema_de_retos","arguments":{}}}'
TOOL
ver_invitacion_a_reto
cohortes:leer
A challenge seen from its link: the same body as GET /api/v1/invitaciones/{token}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_invitacion_a_reto","arguments":{}}}'
TOOL
listar_invitables_a_reto
cohortes:leer
People from the previous challenge who can be invited: the same body as GET /api/v1/cohortes/{id}/invitables. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_invitables_a_reto","arguments":{}}}'
TOOL
crear_reto
cohortes:escribir
Creates a challenge: the same operation as POST /api/v1/cohortes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"crear_reto","arguments":{"nombre":"Leer 20 minutos","duracion_dias":14,"tipo_de_check":"simple","clave_de_idempotencia":"<uuid>"}}}'
TOOL
editar_reto
cohortes:escribir
Changes a challenge's settings: the same operation as PATCH /api/v1/cohortes/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"editar_reto","arguments":{"id":"42","plazas":10}}}'
TOOL
reintentar_revision_de_reto
cohortes:escribir
Asks again for the moderation verdict: the same operation as POST /api/v1/cohortes/{id}/reintentar_revision. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reintentar_revision_de_reto","arguments":{"id":"42"}}}'
TOOL
unirse_a_reto
cohortes:escribir
Joins a challenge by id (public) or token (its link): the same operations as POST /api/v1/cohortes/{id}/participacion and POST /api/v1/invitaciones/{token}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"unirse_a_reto","arguments":{"id":"42"}}}'
TOOL
abandonar_reto
cohortes:escribir
You leave a challenge or dissolve it if you created it: the same operation as DELETE /api/v1/cohortes/{id}/participacion. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"abandonar_reto","arguments":{"id":"42","confirmacion":true,"clave_de_idempotencia":"<uuid>"}}}'
TOOL
invitar_a_reto
cohortes:escribir
Invites several people: the same operation as POST /api/v1/cohortes/{id}/invitaciones. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"invitar_a_reto","arguments":{"id":"42","user_ids":["7","12"]}}}'
TOOL
votar_franja
cohortes:escribir
Your daily time-slot vote: the same operation as PUT /api/v1/cohortes/{id}/voto_de_franja. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"votar_franja","arguments":{"id":"42","opcion":"manana"}}}'
TOOL
dar_toque
cohortes:escribir
A nudge to someone in the challenge: the same operation as POST /api/v1/cohortes/{id}/toques. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"dar_toque","arguments":{"id":"42","user_id":"7"}}}'
TOOL
preparar_subida
checkins:escribir
Reserves an upload: the same operation as POST /api/v1/subidas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"preparar_subida","arguments":{"nombre_de_archivo":"foto.jpg","bytes":183422,"checksum":"1B2M2Y8AsgTpgAmY7PhCfg==","tipo_mime":"image/jpeg","clave_de_idempotencia":"<uuid>"}}}'
TOOL
hacer_checkin
checkins:escribir
Today's check-in for one of your challenges: the same operation as POST /api/v1/cohortes/{id}/checkins. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"hacer_checkin","arguments":{"id":"42","cantidad":30}}}'
TOOL
probar_palabra
checkins:escribir
A word against today's hidden rule: the same operation as POST /api/v1/cohortes/{id}/regla/intentos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"probar_palabra","arguments":{"id":"42","texto":"perro"}}}'
TOOL
formular_regla
checkins:escribir
Your guess at the hidden rule: the same operation as POST /api/v1/cohortes/{id}/regla/formulaciones. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"formular_regla","arguments":{"id":"42","texto":"palabras de cinco letras"}}}'
TOOL
ver_blur
cohortes:leer
Turn, options and your answer: the same operation as GET /api/v1/blurs_del_dia/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_blur","arguments":{"id":"42"}}}'
TOOL
responder_blur
checkins:escribir
Your answer to today's Blur: the same operation as POST /api/v1/blurs_del_dia/{id}/respuesta. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"responder_blur","arguments":{"id":"42","opcion":2}}}'
TOOL
ver_foto_de_blur
cohortes:leer
The blurred photo of a Blur day: the same operation as GET /api/v1/fotos_de_blur/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_foto_de_blur","arguments":{"id":"42"}}}'
TOOL
ver_foto_nitida_de_blur
cohortes:leer
The original photo of a Blur day: the same operation as GET /api/v1/fotos_de_blur/{id}/nitida. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_foto_nitida_de_blur","arguments":{"id":"42"}}}'
TOOL
valorar_atrevimiento
checkins:escribir
Your yes or no to a dare you already completed: the same operation as POST /api/v1/atrevimientos_del_dia/{id}/valoracion. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"valorar_atrevimiento","arguments":{"id":"42","valoracion":"si"}}}'
TOOL
ver_foto_de_atrevimiento
cohortes:leer
The photo of a completed dare: the same operation as GET /api/v1/fotos_de_atrevimientos/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_foto_de_atrevimiento","arguments":{"id":"42"}}}'
TOOL
leer_chat
chat:leer
A challenge's or room's thread: the same operation as GET /api/v1/chat/mensajes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"leer_chat","arguments":{"cohorte_id":"42"}}}'
TOOL
novedades_del_chat
chat:leer
What's new in all of the person's chats since this app's last call: the same operation as POST /api/v1/chat/novedades. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"novedades_del_chat","arguments":{"limite":50}}}'
TOOL
escribir_mensaje
chat:escribir
Writes in a challenge's or room's chat: the same operation as POST /api/v1/chat/mensajes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"escribir_mensaje","arguments":{"cohorte_id":"42","cuerpo":"¡Hola!","clave_de_idempotencia":"<uuid>"}}}'
TOOL
borrar_mensaje
chat:escribir
Deletes your own message: the same operation as DELETE /api/v1/chat/mensajes/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"borrar_mensaje","arguments":{"id":"99","cohorte_id":"42","clave_de_idempotencia":"<uuid>"}}}'
TOOL
reaccionar_a_mensaje
chat:escribir
Sets, changes or clears the account's reaction: the same operation as PUT /api/v1/chat/mensajes/{id}/reaccion. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reaccionar_a_mensaje","arguments":{"id":"99","cohorte_id":"42","tipo":"aplauso"}}}'
TOOL
denunciar_mensaje
chat:escribir
Flags a message for review: the same operation as POST /api/v1/chat/mensajes/{id}/denuncia. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"denunciar_mensaje","arguments":{"id":"99","cohorte_id":"42"}}}'
TOOL
ver_tesoreria
perfil:leer
Dotoo balance and latest movements: the same body as GET /api/v1/tesoreria. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_tesoreria","arguments":{}}}'
TOOL
listar_apuestas
perfil:leer
Pending and resolved bets with the balance: the same body as GET /api/v1/apuestas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_apuestas","arguments":{}}}'
TOOL
apostar_dotoos
dotoos:gastar
Bets 3 dotoos on a running challenge; prize 6. Requires clave_de_idempotencia. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"apostar_dotoos","arguments":{}}}'
TOOL
ver_armario
perfil:leer
Outfit and fur catalog with what's owned and worn: the same body as GET /api/v1/armario. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_armario","arguments":{}}}'
TOOL
comprar_prenda
dotoos:gastar
Buys an outfit with dotoos. Requires clave_de_idempotencia and confirmacion with the price read. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"comprar_prenda","arguments":{}}}'
TOOL
equipar_prenda
perfil:escribir
Wears or removes an outfit already owned, by its purchase row id. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"equipar_prenda","arguments":{}}}'
TOOL
cambiar_pelaje
perfil:escribir
Sets a fur color; if it costs and it isn't owned yet, buys it (requires dotoos:gastar). See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cambiar_pelaje","arguments":{}}}'
TOOL
mis_clubs
social:leer
The account's clubs: the same operation as GET /api/v1/clubs. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mis_clubs","arguments":{}}}'
TOOL
buscar_clubs
social:leer
Open clubs by name: the same operation as GET /api/v1/clubs/publicos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_clubs","arguments":{"busqueda":"correr"}}}'
TOOL
crear_club
social:escribir
Creates a club under review: the same operation as POST /api/v1/clubs. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"crear_club","arguments":{"nombre":"Corremos a las nueve","clave_de_idempotencia":"<uuid>"}}}'
TOOL
ver_club
social:leer
The card of your own club and its review: the same operation as GET /api/v1/clubs/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_club","arguments":{"id":"42"}}}'
TOOL
reintentar_revision_de_club
social:escribir
Asks again for the review of a club without a verdict: the same operation as POST /api/v1/clubs/{id}/reintentar_revision. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reintentar_revision_de_club","arguments":{"id":"42"}}}'
TOOL
ver_invitacion_a_club
social:leer
The link's public card: the same operation as GET /api/v1/clubs/invitaciones/{token}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_invitacion_a_club","arguments":{"token":"<token>"}}}'
TOOL
pedir_entrar_en_club
social:escribir
Asks to join by id or by the link's token: the same operation as POST /api/v1/clubs/{id}/solicitudes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"pedir_entrar_en_club","arguments":{"id":"42"}}}'
TOOL
aceptar_solicitud_de_club
social:escribir
An owner lets someone in: the same operation as POST /api/v1/clubs/{id}/solicitudes/{solicitud_id}/aceptar. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"aceptar_solicitud_de_club","arguments":{"id":"42","solicitud_id":"7","clave_de_idempotencia":"<uuid>"}}}'
TOOL
rechazar_solicitud_de_club
social:escribir
An owner turns someone down: the same operation as DELETE /api/v1/clubs/{id}/solicitudes/{solicitud_id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"rechazar_solicitud_de_club","arguments":{"id":"42","solicitud_id":"7","clave_de_idempotencia":"<uuid>"}}}'
TOOL
buscar_persona_para_club
social:leer
Exact username, owners only: the same operation as GET /api/v1/clubs/{id}/personas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"buscar_persona_para_club","arguments":{"id":"42","username":"marta"}}}'
TOOL
invitar_a_club
social:escribir
An owner invites by username: the same operation as POST /api/v1/clubs/{id}/invitaciones. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"invitar_a_club","arguments":{"id":"42","username":"marta"}}}'
TOOL
mis_invitaciones_a_clubs
social:leer
Pending invitations: the same operation as GET /api/v1/clubs/invitaciones_recibidas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mis_invitaciones_a_clubs","arguments":{}}}'
TOOL
aceptar_invitacion_a_club
social:escribir
Join the club without approval: the same operation as POST /api/v1/clubs/{id}/invitaciones/{invitacion_id}/aceptar. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"aceptar_invitacion_a_club","arguments":{"id":"42","invitacion_id":"9","clave_de_idempotencia":"<uuid>"}}}'
TOOL
rechazar_invitacion_a_club
social:escribir
Deletes the invitation without telling anyone: the same operation as DELETE /api/v1/clubs/{id}/invitaciones/{invitacion_id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"rechazar_invitacion_a_club","arguments":{"id":"42","invitacion_id":"9","clave_de_idempotencia":"<uuid>"}}}'
TOOL
ver_companion
companion:leer
The companion's settings: the same operation as GET /api/v1/cohortes/{id}/acompanamiento. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_companion","arguments":{"id":"42"}}}'
TOOL
leer_conversacion_con_companion
companion:leer
Today's messages and the last advice: the same operation as GET /api/v1/cohortes/{id}/acompanamiento/mensajes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"leer_conversacion_con_companion","arguments":{"id":"42"}}}'
TOOL
listar_recuerdos
companion:leer
What the companion remembers: the same operation as GET /api/v1/cohortes/{id}/acompanamiento/recuerdos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_recuerdos","arguments":{"id":"42"}}}'
TOOL
ver_perfil
social:leer
A person's profile: the same operation as GET /api/v1/usuarios/{username}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_perfil","arguments":{"username":"marta"}}}'
TOOL
ver_ajustes
perfil:leer
Settings: the same operation as GET /api/v1/ajustes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_ajustes","arguments":{}}}'
TOOL
cambiar_ajustes
perfil:escribir
Changes settings: the same operation as PATCH /api/v1/ajustes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cambiar_ajustes","arguments":{"avisos":{"toque":false}}}}'
TOOL
configurar_recordatorio_de_reto
perfil:escribir
A challenge's reminder: the same operation as PATCH /api/v1/cohortes/{id}/recordatorio. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"configurar_recordatorio_de_reto","arguments":{"id":"42","activo":false}}}'
TOOL
listar_apps_conectadas
perfil:leer
Connected apps: the same operation as GET /api/v1/ajustes/apps-conectadas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_apps_conectadas","arguments":{}}}'
TOOL
revocar_app_conectada
perfil:escribir
Disconnects an app: the same operation as DELETE /api/v1/ajustes/apps-conectadas/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"revocar_app_conectada","arguments":{"id":"7","confirmacion":"desconectar"}}}'
TOOL
registrar_consumo
checkins:escribir
Adds one unit smoked today: the same operation as POST /api/v1/cohortes/{id}/consumos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"registrar_consumo","arguments":{"id":"42","clave_de_idempotencia":"<uuid>"}}}'
TOOL
deshacer_ultimo_consumo
checkins:escribir
Takes back today's latest use: the same operation as DELETE /api/v1/cohortes/{id}/consumos/ultimo. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"deshacer_ultimo_consumo","arguments":{"id":"42","clave_de_consumo":"<uuid>"}}}'
TOOL
fijar_confianza_de_fumar
checkins:escribir
Saves the confidence for tomorrow: the same operation as PATCH /api/v1/cohortes/{id}/dejar_de_fumar/confianza. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fijar_confianza_de_fumar","arguments":{"id":"42","confianza":7}}}'
TOOL
registrar_antojo
checkins:escribir
Logs a craving: the same operation as POST /api/v1/cohortes/{id}/antojos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"registrar_antojo","arguments":{"id":"42","superado":true,"clave_de_idempotencia":"<uuid>"}}}'
TOOL
fijar_contador_de_fumar
checkins:escribir
Picks the page's counter: the same operation as PATCH /api/v1/cohortes/{id}/dejar_de_fumar/contador. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fijar_contador_de_fumar","arguments":{"id":"42","contador":"dias"}}}'
TOOL
leer_saludos
spa:leer
The Greetings Room feed: the same operation as GET /api/v1/saludos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"leer_saludos","arguments":{}}}'
TOOL
publicar_saludo
spa:escribir
Posts a greeting under review: the same operation as POST /api/v1/saludos. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"publicar_saludo","arguments":{"texto":"Buenos días desde Girona","clave_de_idempotencia":"<uuid>"}}}'
TOOL
ver_saludo
spa:leer
One of your greetings and its review: the same operation as GET /api/v1/saludos/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_saludo","arguments":{"id":"42"}}}'
TOOL
reintentar_revision_de_saludo
spa:escribir
Asks again for the review of a greeting without a verdict: the same operation as POST /api/v1/saludos/{id}/reintentar_revision. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reintentar_revision_de_saludo","arguments":{"id":"42"}}}'
TOOL
borrar_saludo
spa:escribir
Deletes one of your greetings: the same operation as DELETE /api/v1/saludos/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"borrar_saludo","arguments":{"id":"42","clave_de_idempotencia":"<uuid>"}}}'
TOOL
apoyar_saludo
spa:escribir
Supports a greeting in the feed: the same operation as PUT /api/v1/saludos/{id}/apoyo. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"apoyar_saludo","arguments":{"id":"42"}}}'
TOOL
retirar_apoyo_a_saludo
spa:escribir
Removes the support from a greeting: the same operation as DELETE /api/v1/saludos/{id}/apoyo. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"retirar_apoyo_a_saludo","arguments":{"id":"42"}}}'
TOOL
denunciar_saludo
spa:escribir
Flags a greeting for review: the same operation as POST /api/v1/saludos/{id}/denuncia. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"denunciar_saludo","arguments":{"id":"42"}}}'
TOOL
mis_fogatas
spa:leer
Your live campfires: the same operation as GET /api/v1/fogatas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mis_fogatas","arguments":{}}}'
TOOL
crear_fogata
spa:escribir
Creates a campfire: the same operation as POST /api/v1/fogatas. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"crear_fogata","arguments":{"duracion_minutos":25,"intencion":"Terminar el informe","clave_de_idempotencia":"<uuid>"}}}'
TOOL
ver_fogata
spa:leer
The room, without marking you present: the same operation as GET /api/v1/fogatas/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_fogata","arguments":{"id":"42"}}}'
TOOL
empezar_fogata
spa:escribir
Starts a campfire you created: the same operation as POST /api/v1/fogatas/{id}/empezar. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"empezar_fogata","arguments":{"id":"42"}}}'
TOOL
registrar_resultado_de_fogata
spa:escribir
Your result once it ends: the same operation as PATCH /api/v1/fogatas/{id}/resultado. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"registrar_resultado_de_fogata","arguments":{"id":"42","resultado":"hecho"}}}'
TOOL
borrar_fogata
spa:escribir
Deletes a campfire you created: the same operation as DELETE /api/v1/fogatas/{id}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"borrar_fogata","arguments":{"id":"42","confirmacion":"borrar","clave_de_idempotencia":"<uuid>"}}}'
TOOL
listar_entradas_de_journal
journal:leer
Your entries with their first line and your numbers: the same operation as GET /api/v1/journal. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"listar_entradas_de_journal","arguments":{"zona":"Europe/Madrid"}}}'
TOOL
ver_journal_de_hoy
journal:leer
Today's blocks, text and version: the same operation as GET /api/v1/journal/hoy. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_journal_de_hoy","arguments":{"cohorte_id":"42","zona":"Europe/Madrid"}}}'
TOOL
escribir_journal_de_hoy
journal:escribir
Saves today's entry: the same operation as PUT /api/v1/journal/hoy. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"escribir_journal_de_hoy","arguments":{"cohorte_id":"42","version":0,"diario":"…","agradecimientos":"…"}}}'
TOOL
leer_entrada_de_journal
journal:leer
An entry by its date: the same operation as GET /api/v1/journal/{fecha}. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"leer_entrada_de_journal","arguments":{"fecha":"2026-09-24"}}}'
TOOL
ver_ajustes_de_journal
journal:leer
The gratitude reminder: the same operation as GET /api/v1/journal/ajustes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ver_ajustes_de_journal","arguments":{}}}'
TOOL
cambiar_ajustes_de_journal
journal:escribir
Turns the reminder on or off: the same operation as PATCH /api/v1/journal/ajustes. See the equivalent operation.
curl -s -X POST \
'https://app.do-too.com/mcp' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"cambiar_ajustes_de_journal","arguments":{"recordar_agradecimientos":true}}}'
Tell us which client you want to connect. Access remains manual while we validate this first contract.