> ## Documentation Index
> Fetch the complete documentation index at: https://formpaste.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrar desde Web3Forms

> Reemplaza tu clave de acceso de Web3Forms por una clave de Formpaste, luego revisa las redirecciones y el manejo de spam antes de cambiar.

Si ya tienes un formulario funcional respaldado por Web3Forms, moverlo a
Formpaste es un cambio pequeño: tu formulario ya envía al mismo patrón de
endpoint compartido `/submit` y ya se identifica con un campo oculto
`access_key`.

En la mayoría de los casos, solo necesitas reemplazar tu clave de acceso
existente de Web3Forms por la clave de acceso de Formpaste del formulario
que crees. Esta guía cubre ese cambio y las diferencias de comportamiento
que vale la pena revisar antes de salir a producción.

## El cambio central

Un formulario típico de Web3Forms usa el endpoint compartido e incluye un
`access_key` en el cuerpo de la solicitud:

```html theme={null}
<form action="https://api.web3forms.com/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY_HERE">

  <input type="text" name="name" required>
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>

  <input type="hidden" name="redirect" value="https://web3forms.com/success">

  <button type="submit">Submit Form</button>
</form>
```

El equivalente en Formpaste mantiene la misma estructura de formulario,
nombres de campo, y el campo `redirect`. Reemplaza el endpoint y usa la
clave de acceso de tu formulario de Formpaste:

```html theme={null}
<form action="https://api.formpaste.com/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_FORMPASTE_ACCESS_KEY">

  <input type="text" name="name" required>
  <input type="email" name="email" required>
  <textarea name="message" required></textarea>

  <input type="hidden" name="redirect" value="https://your-site.com/success">

  <button type="submit">Submit Form</button>
</form>
```

Tus campos normales, como `name`, `email`, y `message`, se mantienen
exactamente igual. Formpaste identifica el formulario de destino mediante
el `access_key`, en lugar de reservar nombres para tus campos
personalizados.

Obtén tu `access_key` de Formpaste (`fp_…`) creando un formulario en el
[panel](https://app.formpaste.com), o pidiéndole a un agente que cree uno
con la herramienta MCP [`create_form`](/docs/agents/create-form). Consulta [Tu
primer formulario](/docs/es/first-form) para el recorrido de configuración
completo.

## Si estás usando Web3Forms con AJAX o fetch

La migración sigue el mismo enfoque: envía tus campos de formulario
existentes al endpoint de Formpaste e incluye el `access_key` de Formpaste
en el cuerpo de la solicitud.

```js theme={null}
const form = new FormData(e.currentTarget);

form.set("access_key", "YOUR_FORMPASTE_ACCESS_KEY");

const res = await fetch("https://api.formpaste.com/submit", {
  method: "POST",
  body: new URLSearchParams(form),
});

const data = await res.json();

if (res.ok && data.success) {
  console.log("Submission received:", data.id);
}
```

Un envío exitoso a Formpaste devuelve `200` con:

```json theme={null}
{
  "success": true,
  "message": "Submission received.",
  "id": "sub_..."
}
```

Verifica `res.ok` o `data.success` en el mismo lugar donde actualmente
manejas una respuesta exitosa de Web3Forms.

## Mapeo del resto de tu configuración

| Concepto de Web3Forms                  | Equivalente en Formpaste                                                                                                                    |
| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Endpoint compartido `/submit`          | Endpoint compartido `/submit` en `https://api.formpaste.com/submit`                                                                         |
| Campo de solicitud `access_key`        | Campo de solicitud `access_key`, usando tu clave `fp_…` de Formpaste                                                                        |
| Campos de formulario personalizados    | Mantén los mismos nombres de campo, incluyendo `name`, `email`, y `message`                                                                 |
| Redirección tras el envío (`redirect`) | Campo `redirect`, consulta [Redirecciones](/docs/es/features/redirects); el destino debe estar en la lista de dominios permitidos del formulario |
| Campo de protección contra spam        | Campo honeypot `botcheck`, consulta [Prevenir spam](/docs/es/guides/preventing-spam)                                                             |
| CAPTCHA                                | No aplica, Formpaste no tiene ningún widget o acertijo de CAPTCHA                                                                           |
| Correo de destino                      | [Notificaciones por correo](/docs/es/features/notifications), verifica cada dirección de destino una vez por OTP                                 |
| Dominios permitidos                    | [Lista permitida de dominios](/docs/es/features/custom-domains), configurada por formulario en el panel                                          |
| Inbox de envíos                        | Pestañas de inbox y spam del [panel](https://app.formpaste.com) de Formpaste                                                                |
| Automatizaciones e integraciones       | [Webhooks](/docs/es/features/webhooks) en Pro; sin API REST general para formularios o envíos                                                    |

## Diferencias que vale la pena conocer antes de cambiar

**Tu estructura de campos puede mantenerse igual.** [Web3Forms y
Formpaste ambos](https://formpaste.com/alternatives/web3forms/) usan un
endpoint de envío compartido más un campo `access_key`. Eso significa que
la migración no requiere que renombres campos estándar como `name`,
`email`, o `message`. Reemplaza la URL, reemplaza la clave, y mantén el
resto de tu marcado intacto.

**Las redirecciones deben apuntar a un dominio permitido.** Si tu
formulario actualmente incluye un campo `redirect`, puedes seguir usando
ese campo con Formpaste. Actualiza la URL a una página de éxito en tu
propio sitio, luego agrega el dominio relevante a la [lista permitida de
dominios](/docs/es/features/custom-domains) del formulario.

**Sin acertijos de spam.** Formpaste no usa CAPTCHA de ningún tipo.
Depende de heurísticas del lado del servidor incluyendo honeypots,
tiempo, densidad de enlaces, tasa, y verificaciones de correo desechable.
Si agregas un campo honeypot, debe llamarse `botcheck` y estar oculto con
CSS usando `display:none`, no `type="hidden"`, para que los bots básicos
todavía puedan interactuar con él. Consulta [Prevenir
spam](/docs/es/guides/preventing-spam).

**Los envíos sospechosos se ponen en cuarentena.** Formpaste no descarta
simplemente un envío que parece sospechoso. Aparece en la pestaña Spam
del panel, donde puedes inspeccionarlo. En Free, esta vista es de solo
lectura; rescatar y reentregar un falso positivo es una función
[Pro](/docs/es/features/quarantine-rescue).

**Sin API REST general.** Formpaste no ofrece una API REST para crear
formularios o listar envíos. Crea formularios mediante el panel o la
herramienta MCP `create_form`. Lee envíos en el panel, mediante
exportación CSV, o con la herramienta MCP `list_submissions`. Consulta
[Recuperar envíos](/docs/es/reference/submissions-api).

**Hay soporte MCP disponible para flujos de trabajo impulsados por
agentes.** Si estás usando un agente compatible con MCP, como Claude Code
o Cursor, puede crear un formulario de Formpaste y devolver un snippet
listo para usar. Consulta [Servidor MCP](/docs/agents/mcp-server) y los
[prompts de cookbook](/docs/agents/cookbook-prompts).

## Después de cambiar

1. Cambia el `action` del formulario de `https://api.web3forms.com/submit`
   a `https://api.formpaste.com/submit`.
2. Reemplaza tu clave de Web3Forms por el `access_key` de Formpaste del
   nuevo formulario.
3. Mantén tus campos personalizados existentes, incluyendo `name`,
   `email`, y `message`.
4. Revisa cualquier valor de `redirect` y agrega su dominio a la [lista
   permitida de dominios](/docs/es/features/custom-domains).
5. Verifica la dirección de correo de destino mediante su OTP único.
6. Agrega un honeypot `botcheck` oculto con CSS si quieres uno, y elimina
   cualquier widget o script de CAPTCHA.
7. Envía una prueba real y confirma que llega tanto al inbox del panel
   como a tu correo.
8. Revisa la pestaña Spam ocasionalmente después del lanzamiento por si
   un envío legítimo queda en cuarentena.

<CardGroup cols={2}>
  <Card title="Tu primer formulario" icon="inbox" href="/docs/es/first-form">
    Crea un formulario, obtén una clave de acceso, y verifica su correo de destino.
  </Card>

  <Card title="Snippets por framework" icon="brackets-curly" href="/docs/es/framework-snippets">
    Ejemplos de Formpaste para HTML, React, Next.js, Astro, Vue, y Svelte.
  </Card>

  <Card title="Prevenir spam" icon="shield" href="/docs/es/guides/preventing-spam">
    Aprende cómo Formpaste filtra envíos sospechosos sin CAPTCHA.
  </Card>

  <Card title="Recuperar envíos" icon="database" href="/docs/es/reference/submissions-api">
    Usa el panel, la exportación CSV, o las herramientas MCP para acceder a los envíos.
  </Card>
</CardGroup>
