Plan Pro
Conecta tu agente
puertafria tiene una API HTTP, y su propio servidor MCP encima. Tu agente lee la cola, abre una empresa y apunta lo que pasó, por HTTPS y nunca contra la base de datos. Las mismas filas, las mismas reglas, otra puerta.
Incluido en Pro, 9 € al mes, y en Equipo. En el plan Gratis la API responde 403 PLAN_API.
# Claude Code, por MCP $ claude mcp add puertafria \ -e PUERTAFRIA_TOKEN=pf_... \ -- npx -y @puertafria/mcp # Cualquier cliente, por HTTP $ curl -sS https://puertafria.es/api/v1/me \ -H "Authorization: Bearer $PUERTAFRIA_TOKEN"
Cuatro pasos
Crea una clave
En tu cuenta, debajo del panel de la suscripción. Una etiqueta que diga dónde vas a usarla y una casilla para si puede escribir, desmarcada por defecto. La clave se enseña una vez y se guarda como hash, así que nadie la vuelve a leer. Conectar un agente forma parte del plan Pro. Ir a tu cuenta.
Mándala en la cabecera
En cada petición y en ningún otro sitio. Nunca como parámetro, que se queda en los logs. Nunca la cookie de sesión: un navegador con sesión abierta no puede llegar aquí sin querer.
Authorization: Bearer pf_...
Pregunta qué tienes en la mano
La primera llamada dice de quién es la cuenta, en qué plan está y si esta clave puede escribir. El agente que lo lee primero no descubre el límite a base de que lo rechacen.
curl -sS https://puertafria.es/api/v1/me \ -H "Authorization: Bearer $PUERTAFRIA_TOKEN"
Trabaja la cartera
Lista las carteras, lee la cola, abre una empresa, apunta lo que pasó. Cada llamada pasa por la misma función que la pantalla, así que se topa con los mismos rechazos que tú.
curl -sS https://puertafria.es/api/v1/funnels/$FUNNEL/queue \ -H "Authorization: Bearer $PUERTAFRIA_TOKEN"
El servidor MCP
stdio, un proceso que arranca el host de tu agente, con los mismos tools de la tabla de abajo. No lleva lógica: cada tool es una petición a esas rutas, así que lo remoto es la API y no el shim, y a una clave de solo lectura se le ofrecen tools de solo lectura en vez de dejarla descubrir un 403 llamando.
Una línea en Claude Code, con una clave de tu cuenta. Cursor, Windsurf y Zed arrancan el mismo npx -y @puertafria/mcp desde sus ajustes de MCP, con la clave en PUERTAFRIA_TOKEN.
claude mcp add puertafria -e PUERTAFRIA_TOKEN=pf_... \ -- npx -y @puertafria/mcp
Cada puerta, y lo que hay detrás
Las rutas, los nombres de los tools y los rechazos se quedan en inglés en los dos idiomas. Una ruta traducida es una ruta equivocada.
Lecturas
- GET
/api/v1/me - The account this key opens, its plan, and whether this key may change anything.tool: whoami
- GET
/api/v1/funnels - Every funnel this account holds. Start here: nothing else takes a funnel by name.tool: list_funnels
- GET
/api/v1/funnels/:id - One funnel: counts by stage, how many are due, its campaigns and provinces, and its tracking fields with their ids, kinds and options, and its saved views.tool: funnel
- GET
/api/v1/funnels/:id/queue - Who to call today. Takes ?stage= &campaign= &province= &q= &field= &value= (or &from= &to=) &sort= &dir= &page=. A company that asked to stop is never in it.tool: queue
- GET
/api/v1/companies/:id - One card: the row, its branches, its people, its history, its tracking values, its reminders and its email draft, { subject, body, updatedAt } or null.tool: company
- GET
/api/v1/funnels/:id/metrics - One funnel's numbers over ?days=7, 30 or 90. Pro and above; the free plan answers 403 PLAN_METRICS.tool: metrics
- GET
/api/v1/funnels/:id/export/:file - prospects.csv, contacts.csv or activities.csv. For curl and a pipe, never offered as a tool.sin tool, a propósito
Escrituras, y cada una necesita una clave que pueda escribir
- PATCH
/api/v1/funnels/:id - A funnel's new name, as { name }. BAD_NAME when blank or too long, NAME_TAKEN when another funnel has it.tool: rename_funnel
- POST
/api/v1/companies/:id/activities - What happened on a call. An outcome that leaves the company open needs nextActionAt; a losing one needs a note.tool: record_outcome
- PATCH
/api/v1/companies/:id/tracking - The funnel's own fields on one company, keyed by field id. A blank clears a value; a field left out is left alone; an unknown id is FIELD_GONE.tool: save_tracking
- PATCH
/api/v1/companies/:id/branches/:locationId/tracking - The funnel's branch fields on one branch of that company. The same rules; a branch of another company is BRANCH_GONE.tool: save_branch_tracking
- PATCH
/api/v1/companies/:id/contacts/:contactId/tracking - The funnel's contact fields on one contact of that company. The same rules; a contact of another company is CONTACT_GONE.tool: save_contact_tracking
- PUT
/api/v1/companies/:id/draft - The company's one email draft, as { subject, body }: at most 200 and 10,000 characters, TOO_LONG past that. An empty body clears it. Never sent by puertafria. SUPPRESSED on a company that asked to stop.tool: save_draft
- POST
/api/v1/companies/:id/reminders - A promise to come back to this company on a day. Pro and above.tool: add_reminder
- PATCH
/api/v1/reminders/:id - Tick a reminder off, put it back, or correct its day or note. One of those per call; what is left out stays.tool: update_reminder
- PATCH
/api/v1/companies/:id/branches/:locationId - One researched fact about one branch of this company. A blank string clears it.tool: edit_branch_fact
- POST
/api/v1/funnels/:id/activate - Move named companies into a campaign. Ids only, never a filter: read the queue first and send what you looked at. One write per company.tool: activate_cohort
- POST
/api/v1/funnels/:id/companies - One company typed in, for when there is no file. Bulk loading is the import screen, not this. A match for a company that asked not to be contacted is SUPPRESSED.tool: add_company
Lo que te va a rechazar
No borra nada. Ninguna ruta quita una empresa, una cartera, un campo o un recordatorio. Un agente que se enrede puede liarla de forma que la leas, nunca de forma que desaparezca.
Un no es para siempre. La empresa que pidió que no la llamaras sale de todas las colas, y el servidor se niega a registrar otro contacto lo pida quien lo pida.
Un resultado que deja la empresa abierta tiene que decir cuándo se retoma, y uno perdedor tiene que llevar nota. Las mismas reglas que obedece la pantalla.
500 intentos de escritura por clave y día. Intentos, no aciertos: un bucle al que rechazan es justo el bucle que hay que parar. Activar una cohorte gasta uno por empresa. Las lecturas no gastan.
Una clave solo lee salvo que marcaras la casilla, y la revocas desde el mismo panel. Revocar no deshace nada de lo que escribió.
El archivo al que apuntar tu agente
Todo lo de esta página, más el sobre, las palabras de rechazo y las reglas que hay detrás, en una sola dirección en texto plano. Eso es lo que tiene que leer un agente, y es el contrato entero y no un resumen.