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

# Send a transactional email

> Envía un correo transaccional de forma asíncrona. Devuelve el estado del envío con un statusId que se puede usar para consultar el estado utilizando la API de estado de envío de correo.

export const ScopesList = ({scopes = [], description = "Esta API requiere uno de los siguientes ámbitos:"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

export const SupportedProducts = ({marketing, sales, service, cms, marketingLevel, salesLevel, serviceLevel, cmsLevel}) => {
  const translations = {
    header: "Productos compatibles",
    description: "Se requiere uno de los siguientes productos o productos de ediciones superiores.",
    productNames: {
      marketing: "Marketing Hub",
      sales: "Sales Hub",
      service: "Service Hub",
      cms: "Content Hub"
    },
    tiers: {
      free: "Gratuito",
      starter: "Starter",
      professional: "Pro",
      enterprise: "Enterprise"
    }
  };
  const translateTier = tier => {
    if (!tier) return '';
    const lowerTier = tier.toLowerCase();
    return translations.tiers[lowerTier] || tier;
  };
  const products = [{
    name: marketing ? translations.productNames.marketing : '',
    level: translateTier(marketingLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/marketing-bolt.svg",
    alt: "Marketing Hub"
  }, {
    name: sales ? translations.productNames.sales : '',
    level: translateTier(salesLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/sales-star.svg",
    alt: "Sales Hub"
  }, {
    name: service ? translations.productNames.service : '',
    level: translateTier(serviceLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/service-heart.svg",
    alt: "Service Hub"
  }, {
    name: cms ? translations.productNames.cms : '',
    level: translateTier(cmsLevel),
    icon: "https://mintlify-assets.b-cdn.net/Icons/content-play.svg",
    alt: "Content Hub"
  }].filter(product => product.name && product.level);
  if (products.length === 0) return null;
  return <div>
      <div className="text-sm mb-2">{translations.description}</div>
      <div className={`grid ${products.length === 1 ? 'grid-cols-1' : 'grid-cols-2'} gap-1.5`}>
        {products.map((product, index) => <div key={index} style={{
    display: 'flex',
    alignItems: 'center'
  }}>
            <img src={product.icon} alt={product.alt} className="w-3.5 h-3.5 mr-1.5 mt-2.5 mb-2.5 flex-shrink-0 align-middle" />
            <span className="font-medium mr-1 text-sm">{product.name} -</span>
            <span className="text-sm">{product.level}</span>
          </div>)}
      </div>
    </div>;
};

<AccordionGroup>
  <Accordion title="Supported products" defaultOpen="true" icon="cubes">
    <SupportedProducts marketing={true} sales={true} service={true} cms={true} marketingLevel="PROFESSIONAL" salesLevel="FREE" serviceLevel="FREE" cmsLevel="FREE" />
  </Accordion>

  <Accordion title="Required Scopes" icon="key">
    <ScopesList
      scopes={[
  'transactional-email'
]}
    />
  </Accordion>
</AccordionGroup>


## OpenAPI

````yaml specs/2026-03/marketing-transactional-single-send-v2026-03.json POST /marketing/transactional/2026-03/single-email/send
openapi: 3.0.1
info:
  title: Envío de un solo correo transaccional
  description: Basepom for all HubSpot Projects
  version: 2026-03
  x-hubspot-product-tier-requirements:
    marketing: PROFESSIONAL
    sales: FREE
    service: FREE
    cms: FREE
    commerce: FREE
    crmHub: FREE
    dataHub: FREE
  x-hubspot-api-use-case: >-
    Después de que un cliente se convierta o compre un producto de tu empresa,
    quieres enviarle un recibo de su transacción.
  x-hubspot-introduction: >-
    Utiliza la API de correos transaccionales para enviar correos desde una
    dirección IP dedicada a tus contactos relacionados con transacciones
    comerciales esenciales, como actualizaciones de cuentas o cambios en los
    términos del servicio.
servers:
  - url: https://api.hubapi.com
security: []
tags:
  - name: Send transactional email
  - name: SMTP Tokens
paths:
  /marketing/transactional/2026-03/single-email/send:
    post:
      tags:
        - Send transactional email
      summary: Envía un único correo electrónico transaccional de forma asíncrona.
      description: >-
        Envía un correo transaccional de forma asíncrona. Devuelve el estado del
        envío con un statusId que se puede usar para consultar el estado
        utilizando la API de estado de envío de correo.
      operationId: post-/marketing/transactional/2026-03/single-email/send_sendEmail
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicSingleSendRequestEgg'
        required: true
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailSendStatusView'
        default:
          $ref: '#/components/responses/Error'
          description: ''
      security:
        - oauth2:
            - transactional-email
components:
  schemas:
    PublicSingleSendRequestEgg:
      required:
        - contactProperties
        - customProperties
        - emailId
        - message
      type: object
      properties:
        contactProperties:
          type: object
          additionalProperties:
            type: string
          description: >-
            El campo contactProperties es un mapa de valores de propiedad de
            contacto. Cada uno de estos valores contiene una propiedad de nombre
            y valor. Cada propiedad se establecerá en el registro de contacto y
            será visible en la plantilla bajo {{ contact.NAME }}. Utiliza estas
            propiedades cuando desees establecer una propiedad de contacto
            mientras envías el correo. Por ejemplo, al enviar un recibo, puede
            que desees establecer una propiedad last_paid_date, ya que el envío
            del recibo tendrá información sobre el último registro de pago.
        customProperties:
          type: object
          additionalProperties:
            type: object
            properties: {}
          description: >-
            El campo customProperties es un mapa de valores de propiedad. Cada
            uno de estos valores contiene una propiedad de nombre y valor. Cada
            propiedad será visible en la plantilla bajo {{ custom.NAME }}.

            Nota: Las propiedades personalizadas actualmente no admiten
            secuencias. Para proporcionar una lista en un correo, un método
            alternativo es construir una lista HTML (ya sea con tablas o ul) y
            especificarla como una propiedad personalizada.
        emailId:
          type: integer
          description: >-
            El ID del contenido del correo transaccional, que se puede encontrar
            en la UI de la herramienta de correo.
          format: int64
        message:
          $ref: '#/components/schemas/PublicSingleSendEmail'
    EmailSendStatusView:
      required:
        - status
        - statusId
      type: object
      properties:
        completedAt:
          type: string
          description: La hora cuando se completó el envío.
          format: date-time
        eventId:
          $ref: '#/components/schemas/EventIdView'
        message:
          type: string
          description: >-
            Un mensaje legible en el que se describa el error y los pasos para
            solucionarlo, si procede
        requestedAt:
          type: string
          description: La hora cuando se solicitó el envío.
          format: date-time
        sendResult:
          type: string
          description: Resultado del envío.
          enum:
            - ADDRESS_LIST_BOMBED
            - ADDRESS_ONLY_ACCEPTED_ON_PROD
            - ADDRESS_OPTED_OUT
            - ATTACHMENT_DOWNLOAD_QUEUE_FULL
            - BLOCKED_ADDRESS
            - BLOCKED_DOMAIN
            - BRAND_RECIPIENT_FATIGUE_SUPPRESSED
            - CAMPAIGN_CANCELLED
            - CANCELLED_ABUSE
            - CONTACT_VIEW_PERMISSION
            - CORRUPT_INPUT
            - EMAIL_DISABLED
            - EMAIL_UNCONFIRMED
            - GDPR_DOI_ENABLED
            - GRAYMAIL_SUPPRESSED
            - HUBL_LIMIT_EXCEEDED
            - IDEMPOTENT_FAIL
            - IDEMPOTENT_IGNORE
            - INVALID_APP_ID_ATTRIBUTION
            - INVALID_FROM_ADDRESS
            - INVALID_TO_ADDRESS
            - LOW_CONTACT_QUALITY_SCORE
            - MARKETING_ACTIVATION_DISALLOWED
            - MISSING_CONTENT
            - MISSING_REQUIRED_PARAMETER
            - MISSING_TEMPLATE_PROPERTIES
            - MTA_IGNORE
            - NON_MARKETABLE_CONTACT
            - PORTAL_AUTHENTICATION_FAILURE
            - PORTAL_EXPIRED
            - PORTAL_MISSING_MARKETING_SCOPE
            - PORTAL_NOT_AUTHORIZED_FOR_APPLICATION
            - PORTAL_OVER_LIMIT
            - PORTAL_SUSPENDED
            - PREVIOUS_SPAM
            - PREVIOUSLY_BOUNCED
            - PREVIOUSLY_UNSUBSCRIBED_BRAND
            - PREVIOUSLY_UNSUBSCRIBED_BUSINESS_UNIT
            - PREVIOUSLY_UNSUBSCRIBED_MESSAGE
            - PREVIOUSLY_UNSUBSCRIBED_PORTAL
            - QUARANTINED_ADDRESS
            - QUEUED
            - RECIPIENT_FATIGUE_SUPPRESSED
            - SENT
            - TEMPLATE_RENDER_EXCEPTION
            - THROTTLED
            - TOO_MANY_RECIPIENTS
            - UBB_GOVERNANCE_MISSING
            - UNCONFIGURED_SENDING_DOMAIN
            - UNDELIVERABLE
            - VALIDATION_FAILED
        startedAt:
          type: string
          description: La hora cuando comenzó el procesamiento del envío.
          format: date-time
        status:
          type: string
          description: Estado de la solicitud de envío.
          enum:
            - CANCELED
            - COMPLETE
            - PENDING
            - PROCESSING
        statusId:
          type: string
          description: Identificador utilizado para consultar el estado del envío.
    PublicSingleSendEmail:
      required:
        - bcc
        - cc
        - replyTo
      type: object
      properties:
        bcc:
          type: array
          description: Lista de direcciones de correo a las que se enviará como Cco.
          items:
            type: string
        cc:
          type: array
          description: Lista de direcciones de correo a las que se enviará como Cc.
          items:
            type: string
        from:
          type: string
          description: El encabezado De del correo.
        replyTo:
          type: array
          description: Lista de valores del encabezado Responder a del correo.
          items:
            type: string
        sendId:
          type: string
          description: >-
            ID para un envío en particular. No se enviará más de un correo por
            cada sendId.
        to:
          type: string
          description: El destinatario del correo.
    EventIdView:
      required:
        - created
        - id
      type: object
      properties:
        created:
          type: string
          description: Hora de creación del evento.
          format: date-time
        id:
          type: string
          description: Identificador del evento.
          format: uuid
    Error:
      required:
        - category
        - correlationId
        - message
      type: object
      properties:
        category:
          type: string
          description: La categoría del error
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto de la condición de error
          example: >-
            {invalidPropertyName=[propertyValue], missingScopes=[scope1,
            scope2]}
        correlationId:
          type: string
          description: >-
            Un identificador único para la solicitud. Incluye este valor con
            cualquier informe de error o ticket de asistencia.
          format: uuid
          example: aeb5f871-7f07-4993-9211-075dc63e7cbf
        errors:
          type: array
          description: información adicional acerca del error
          items:
            $ref: '#/components/schemas/ErrorDetail'
        links:
          type: object
          additionalProperties:
            type: string
          description: >-
            Un mapa de nombres de enlaces a las URI asociadas que contienen
            documentación sobre el error o los pasos recomendados para
            solucionarlo
        message:
          type: string
          description: >-
            Un mensaje legible en el que se describa el error y los pasos para
            solucionarlo, si procede
          example: An error occurred
        subCategory:
          type: string
          description: >-
            Una categoría específica que contiene detalles más concretos acerca
            del error
      example:
        message: Invalid input (details will vary based on the error)
        correlationId: aeb5f871-7f07-4993-9211-075dc63e7cbf
        category: VALIDATION_ERROR
        links:
          knowledge-base: https://www.hubspot.com/products/service/knowledge-base
    ErrorDetail:
      required:
        - message
      type: object
      properties:
        code:
          type: string
          description: El código de estado asociado al detalle del error
        context:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          description: Contexto de la condición de error
          example: '{missingScopes=[scope1, scope2]}'
        in:
          type: string
          description: El nombre del campo o parámetro en el que se encontró el error.
        message:
          type: string
          description: >-
            Un mensaje legible en el que se describa el error y los pasos para
            solucionarlo, si procede
        subCategory:
          type: string
          description: >-
            Una categoría específica que contiene detalles más concretos acerca
            del error
  responses:
    Error:
      description: An error occurred.
      content:
        '*/*':
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.hubspot.com/oauth/authorize
          tokenUrl: https://api.hubapi.com/oauth/v1/token
          scopes:
            content: ''
            transactional-email: ''

````