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

# Submit a public signup form

> Submits signup details. Supports JSON and browser form submissions; a Turnstile response may be required.



## OpenAPI

````yaml /openapi.json post /forms/{publicId}
openapi: 3.0.0
info:
  title: JetEmail API
  version: 1.0.0
  description: API documentation for JetEmail's transactional email service.
servers:
  - url: https://api.jetemail.com
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Email
    description: Send transactional email
  - name: Outbound
    description: 'Outbound sending: keys, SMTP users, domains, logs, suppression'
  - name: Inbound
    description: Inbound routing, domains and forward destinations
  - name: DMARC
    description: DMARC aggregate-report domain setup, DNS verification and analytics
  - name: Marketing
    description: >-
      Marketing suite: templates, audiences, contacts, broadcasts, themes,
      assets and signup forms
  - name: Signup Forms
    description: Hosted signup pages and form submissions
externalDocs:
  description: Download OpenAPI Specification
  url: /openapi.json
paths:
  /forms/{publicId}:
    parameters:
      - name: publicId
        in: path
        required: true
        schema:
          type: string
          pattern: ^form_[A-Za-z0-9_-]{20,64}$
        example: form_oCiNpdGJPDhgV4kFa6t1jeoF
    post:
      tags:
        - Signup Forms
      summary: Submit a public signup form
      description: >-
        Submits signup details. Supports JSON and browser form submissions; a
        Turnstile response may be required.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicSignupFormSubmission'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PublicSignupFormSubmission'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PublicSignupFormSubmission'
      responses:
        '200':
          description: Submission accepted; returned for JSON clients
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormResult'
        '303':
          description: Submission accepted; browser redirected to the next form state
          headers:
            Location:
              schema:
                type: string
                format: uri
        '400':
          description: Invalid field, missing consent or failed Turnstile challenge
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '402':
          description: Subscription unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '403':
          description: Submission not permitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '404':
          description: Form does not exist or is paused
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '413':
          description: Request body exceeds 64 KiB
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '429':
          description: Too many requests
          headers:
            Retry-After:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '500':
          description: Submission failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
        '503':
          description: Service temporarily unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicSignupFormError'
            text/html:
              schema:
                type: string
      security: []
components:
  schemas:
    PublicSignupFormSubmission:
      type: object
      required:
        - email
      additionalProperties:
        type: string
        maxLength: 1000
      description: >-
        Configured custom fields are accepted as additional string properties
        using their field keys.
      properties:
        email:
          type: string
          format: email
          maxLength: 320
        firstName:
          type: string
          maxLength: 64
        lastName:
          type: string
          maxLength: 64
        consent:
          type: string
          enum:
            - 'yes'
            - 'true'
            - '1'
            - 'on'
          description: Required when the form configuration requires consent.
        cf-turnstile-response:
          type: string
          maxLength: 2048
          description: Required when Turnstile is enabled.
    PublicSignupFormResult:
      type: object
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          example: true
        message:
          type: string
          example: You're subscribed. Thanks for joining!
        redirect:
          type: string
          format: uri
          description: Present when a success redirect is configured.
    PublicSignupFormError:
      type: object
      required:
        - success
        - message
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          example: Enter a valid email address.
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      description: API key for account management endpoints. Use your api_ prefixed token.

````