Ir a la documentación
SDK

Formularios

`forms.list`, `get`, `create`, `update`, `delete`, `publish`, `pause`, `resume`, `duplicate`, `analytics`, `listStarters`, `getStarter`, `listSubmissions`, `getSubmission`, `deleteSubmission`, `deleteSubmissions`, `approveSubmission`, `resendConfirmation` y `subscribe`.

Todos los métodos

forms.ts
const form = await openemail.forms.create({  name: 'Newsletter sign-up',  starter: 'newsletter',  settings: { audienceIds: ['aud_4c1b8e2a7d9f05c36b4e8a71'] },  publish: true,}) console.log(form.url, form.subscribeUrl) const saved = await openemail.forms.update(form.id, {  settings: { doubleOptIn: true, senderAddress: '[email protected]' },  expectedUpdatedAt: form.updatedAt,}) const signup = await openemail.forms.subscribe(form.id, {  email: '[email protected]',  first_name: 'Ann',  consent: true,}) for await (const submission of openemail.forms.iterateSubmissions(form.id, { status: 'pending' })) {  if (submission.expired) await openemail.forms.resendConfirmation(form.id, submission.id)} const stats = await openemail.forms.analytics(form.id, { days: 30 })const starters = await openemail.forms.listStarters() await openemail.forms.pause(form.id)await openemail.forms.resume(form.id)const copy = await openemail.forms.duplicate(form.id)await openemail.forms.delete(copy.id) console.log(saved.senderIssue, signup.outcome, stats.totals.conversion, starters.length)

Un formulario guarda un borrador document y el publishedDocument que ven los visitantes. update cambia el borrador y los ajustes, y publish activa el borrador. Los ajustes surten efecto al instante, esté publicado o no, y expectedUpdatedAt rechaza con 409 version_conflict un guardado que sobrescribiría el de otra persona.

Leer requiere forms:read y cambiar requiere forms:write. approveSubmission también requiere contacts:write, porque añade un contacto. resendConfirmation también requiere emails:send, igual que una llamada que haga que el formulario envíe correo: activar doubleOptIn, configurar senderAddress o el correo de confirmación, o publicar o reanudar un formulario con doble opt-in. delete pide un código de verificación a un token de acceso OAuth, y a una clave de API nunca.

subscribe suscribe a alguien como lo hace la página del formulario y no envía ninguna credencial, ni siquiera desde un cliente que tenga una. Todas las suscripciones desde una misma red comparten un límite de 40 cada diez minutos, así que un servidor que reenvía suscripciones de muchas personas lo alcanza enseguida: en su lugar, añade a las personas que ya conoces con audiences.importContacts. Pasa la página en la que estaba el formulario como oe_source, omite oe_started y envía oe_website vacío o no lo envíes.

Un 422 de subscribe es invalid_form_submission, y el fields del error lista cada respuesta que falta o no es válida como { key, error }, con motivos como required, email y option. El cliente es para servidores. En un navegador, envía las respuestas con fetch al subscribeUrl del formulario, como cuerpo JSON o con una cabecera Accept: application/json, y responde con JSON a cualquier origen. Sin ninguna de las dos cosas, responde con una redirección 303 a la página alojada.

Respuesta: FormDetailResource

list se resuelve en una página de FormResource, del más reciente al más antiguo, sin document ni settings, y listAll e iterate recorren todas las páginas. get, create, update, publish, pause, resume y duplicate se resuelven en un FormDetailResource, que añade document, publishedDocument, settings, audiences, senderIssue y senderProblem.

idstring
El identificador duradero, `frm_` seguido de 24 caracteres hexadecimales.
status'draft' | 'live' | 'paused'
`draft` hasta la primera publicación, luego `live` mientras acepta suscripciones y `paused` mientras no las acepta. Un formulario nunca vuelve a `draft`.
urlstring
La página alojada del formulario publicado, para compartirla como enlace.
subscribeUrlstring
Adónde envían las respuestas un formulario HTML simple o `fetch`.
documentFormDocument
El borrador: los `fields` en orden, los textos de `copy` que los rodean y el `style`.
publishedDocumentFormDocument | null
Lo que ven ahora los visitantes. Null hasta la primera publicación.
settingsFormSettings
Adónde van las suscripciones y qué pasa después de cada una: `audienceIds`, `doubleOptIn`, `senderAddress`, el correo de confirmación, `successAction`, `redirectUrl` y `notifyAddresses`.
hasUnpublishedChangesboolean
True cuando el borrador difiere de lo que ven los visitantes. Siempre false antes de la primera publicación.
senderIssue'missing' | 'not_sendable' | 'not_allowed' | null
Por qué un formulario con doble opt-in no puede enviar sus correos de confirmación ahora mismo, o null cuando puede.
statsFormStats
`views`, `submissions`, `added`, `pending` y `lastSubmittedAt`, contados en el momento de la lectura.

Envíos

listSubmissions devuelve páginas del más reciente al más antiguo, con q para buscar en las direcciones de correo y status para pending o added, y listAllSubmissions e iterateSubmissions recorren todas las páginas. Cada FormSubmissionResource guarda las respuestas tal como se enviaron, etiquetas incluidas, así que se sigue leyendo bien después de que cambie el formulario.

resendConfirmation se resuelve en el envío con confirmationSent. Es false cuando no salió nada: una dirección recibe una confirmación por formulario cada diez minutos y cinco al día en todo el espacio de trabajo, y un envío ya añadido no recibe ninguna. expired marca una suscripción pendiente cuyo último enlace ha caducado.

Tu bandeja de entrada,
en tus propios términos.

Infraestructura de correo para empresas, IA, agentes y correo personal. Creada para escalar, con privacidad y control. Todo lo que el correo debería haber tenido desde el primer día.

© 2026 OpenEmail. Todos los derechos reservados.