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

# Crear una plantilla

> Una plantilla define cómo se lee y se factura un tipo de documento (CUIT, punto de venta, modo, cliente fijo, precios, instrucciones para la IA, columnas de la planilla) y, con recurrence, una factura que sale sola todos los meses.



## OpenAPI

````yaml /openapi.json post /documents/templates
openapi: 3.1.0
info:
  title: Facturear API
  description: >-
    API para emitir facturas electrónicas de ARCA (Argentina) desde tu sistema:
    facturas, notas de crédito y débito, lotes, PDF y XML, envío por email,
    borradores desde documentos, webhooks y reportes. Autenticación con API Key
    en el header x-api-key: la key de testing opera en homologación y la de
    producción emite comprobantes reales.
  version: 1.0.0
  contact:
    name: Facturear Support
    email: support@facture.ar
    url: https://facture.ar
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
  - url: https://www.facture.ar/api
    description: Servidor de producción
security:
  - apiKey: []
tags:
  - name: CUITs
    description: CUITs emisores, sus defaults, puntos de venta y diseño
  - name: Facturas
    description: Emitir, listar y consultar facturas, su PDF y XML, y enviarlas por email
  - name: Lotes
    description: 'El resultado de cada emisión: toda factura se procesa en un lote'
  - name: Borradores
    description: >-
      Facturas propuestas desde documentos, planillas o datos, para revisar y
      emitir
  - name: Plantillas
    description: Cómo se lee y se factura cada tipo de documento, y facturas recurrentes
  - name: Importar desde ARCA
    description: Traer a Facturear los comprobantes que ARCA ya autorizó
  - name: Webhooks
    description: Notificaciones a tu sistema cuando pasa algo con tus facturas
  - name: Reportes
    description: Libro IVA Ventas
  - name: Utilidades
    description: Parámetros de ARCA
paths:
  /documents/templates:
    post:
      tags:
        - Plantillas
      summary: Crear una plantilla
      description: >-
        Una plantilla define cómo se lee y se factura un tipo de documento
        (CUIT, punto de venta, modo, cliente fijo, precios, instrucciones para
        la IA, columnas de la planilla) y, con recurrence, una factura que sale
        sola todos los meses.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateInput'
      responses:
        '201':
          description: Plantilla creada
          content:
            application/json:
              schema:
                type: object
                properties:
                  template:
                    $ref: '#/components/schemas/Template'
        '400':
          description: Datos inválidos
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    TemplateInput:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          maxLength: 120
        cuitId:
          type:
            - string
            - 'null'
          description: CUIT emisor. Obligatorio en modo automático y en las recurrentes
        ptoVta:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 99999
        mode:
          type: string
          enum:
            - manual
            - automatic
          default: manual
        concepto:
          type: integer
          enum:
            - 1
            - 2
            - 3
          default: 1
        ivaRate:
          type: number
          enum:
            - 0
            - 2.5
            - 5
            - 10.5
            - 21
            - 27
          default: 21
        pricesIncludeIva:
          type: boolean
          default: true
        receiverDocType:
          type:
            - string
            - 'null'
          enum:
            - CUIT
            - CUIL
            - DNI
            - null
          description: 'Cliente fijo: todas las facturas de la plantilla van a él'
        receiverDocNumber:
          type:
            - string
            - 'null'
          maxLength: 20
        receiverName:
          type:
            - string
            - 'null'
          maxLength: 200
        receiverCondicionIva:
          type:
            - integer
            - 'null'
        receiverEmail:
          type:
            - string
            - 'null'
          format: email
        items:
          type:
            - array
            - 'null'
          maxItems: 100
          description: Líneas fijas, para las facturas recurrentes
          items:
            type: object
            required:
              - description
              - quantity
              - unitPrice
            properties:
              description:
                type: string
              quantity:
                type: number
              unitPrice:
                type: number
                minimum: 0
        priceList:
          type:
            - array
            - 'null'
          maxItems: 2000
          description: Precios para documentos que no los traen (remitos)
          items:
            type: object
            required:
              - description
              - unitPrice
            properties:
              description:
                type: string
              unitPrice:
                type: number
                minimum: 0
        instructions:
          type:
            - string
            - 'null'
          maxLength: 4000
          description: Lo que la IA tiene que saber para leer este tipo de documento
        columnMapping:
          type:
            - object
            - 'null'
          description: Columnas de la planilla → campos de la factura
          properties:
            headerRow:
              type: integer
              minimum: 1
            columns:
              type: object
              description: >-
                Campo → nombre de la columna. Campos: receiverName, receiverDoc,
                receiverEmail, receiverCondicionIva, receiverAddress,
                description, quantity, unitPrice, lineTotal, ivaRate, reference,
                date, concepto
              additionalProperties:
                type: string
            groupBy:
              type:
                - string
                - 'null'
            pricesIncludeIva:
              type: boolean
        paymentTermDays:
          type:
            - integer
            - 'null'
          minimum: 0
          maximum: 365
        sendEmail:
          type: boolean
          default: true
          description: Mandarle la factura al cliente por email
        emailCopyTo:
          type:
            - string
            - 'null'
          format: email
        recurrence:
          type:
            - string
            - 'null'
          enum:
            - monthly
            - null
          description: 'monthly: emite las líneas fijas todos los meses en dayOfMonth'
        dayOfMonth:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 28
        active:
          type: boolean
          default: true
    Template:
      type: object
      properties:
        id:
          type: string
        userId:
          type: string
        name:
          type: string
          maxLength: 120
        cuitId:
          type:
            - string
            - 'null'
          description: CUIT emisor. Obligatorio en modo automático y en las recurrentes
        ptoVta:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 99999
        mode:
          type: string
          enum:
            - manual
            - automatic
          default: manual
        concepto:
          type: integer
          enum:
            - 1
            - 2
            - 3
          default: 1
        ivaRate:
          type: number
          enum:
            - 0
            - 2.5
            - 5
            - 10.5
            - 21
            - 27
          default: 21
        pricesIncludeIva:
          type: boolean
          default: true
        receiverDocType:
          type:
            - string
            - 'null'
          enum:
            - CUIT
            - CUIL
            - DNI
            - null
          description: 'Cliente fijo: todas las facturas de la plantilla van a él'
        receiverDocNumber:
          type:
            - string
            - 'null'
          maxLength: 20
        receiverName:
          type:
            - string
            - 'null'
          maxLength: 200
        receiverCondicionIva:
          type:
            - integer
            - 'null'
        receiverEmail:
          type:
            - string
            - 'null'
          format: email
        items:
          type:
            - array
            - 'null'
          maxItems: 100
          description: Líneas fijas, para las facturas recurrentes
          items:
            type: object
            required:
              - description
              - quantity
              - unitPrice
            properties:
              description:
                type: string
              quantity:
                type: number
              unitPrice:
                type: number
                minimum: 0
        priceList:
          type:
            - array
            - 'null'
          maxItems: 2000
          description: Precios para documentos que no los traen (remitos)
          items:
            type: object
            required:
              - description
              - unitPrice
            properties:
              description:
                type: string
              unitPrice:
                type: number
                minimum: 0
        instructions:
          type:
            - string
            - 'null'
          maxLength: 4000
          description: Lo que la IA tiene que saber para leer este tipo de documento
        columnMapping:
          type:
            - object
            - 'null'
          description: Columnas de la planilla → campos de la factura
          properties:
            headerRow:
              type: integer
              minimum: 1
            columns:
              type: object
              description: >-
                Campo → nombre de la columna. Campos: receiverName, receiverDoc,
                receiverEmail, receiverCondicionIva, receiverAddress,
                description, quantity, unitPrice, lineTotal, ivaRate, reference,
                date, concepto
              additionalProperties:
                type: string
            groupBy:
              type:
                - string
                - 'null'
            pricesIncludeIva:
              type: boolean
        paymentTermDays:
          type:
            - integer
            - 'null'
          minimum: 0
          maximum: 365
        sendEmail:
          type: boolean
          default: true
          description: Mandarle la factura al cliente por email
        emailCopyTo:
          type:
            - string
            - 'null'
          format: email
        recurrence:
          type:
            - string
            - 'null'
          enum:
            - monthly
            - null
          description: 'monthly: emite las líneas fijas todos los meses en dayOfMonth'
        dayOfMonth:
          type:
            - integer
            - 'null'
          minimum: 1
          maximum: 28
        active:
          type: boolean
          default: true
        nextRunAt:
          type:
            - string
            - 'null'
          format: date-time
        lastRunAt:
          type:
            - string
            - 'null'
          format: date-time
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Error:
      type: object
      description: >-
        Error de la API. Los errores de autenticación (401), validación (400),
        CUIT inexistente (404), conflicto (409) e internos (500) vienen como
        application/problem+json (RFC 9457) con code, message y resolution.
        Otros errores vienen como JSON con error y, a veces, details y code. En
        los dos casos está el campo error.
      required:
        - error
      properties:
        error:
          type: string
          description: Mensaje de error
        code:
          type: string
          description: >-
            Código estable: unauthorized, invalid_request, cuit_not_found,
            conflict, internal_error, o códigos propios como
            SUBSCRIPTION_LIMIT_EXCEEDED
        message:
          type: string
          description: Qué pasó (problem+json)
        resolution:
          type: string
          description: Qué hacer para resolverlo (problem+json)
        type:
          type: string
          format: uri
          description: URI del tipo de problema (problem+json)
        title:
          type: string
          description: Título corto del problema (problem+json)
        status:
          type: integer
          description: Código HTTP (problem+json)
        detail:
          type: string
          description: Igual que message (problem+json)
        details:
          description: 'Detalle del error: un texto, o la lista de errores de validación'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API Key para autenticación. Formato: test_sk_xxx para testing,
        prod_sk_xxx para producción.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.