PortalFirma

api-integration · Template

Plantillas

Listado del catálogo (JWT o token MCP de resolveByPhone), búsqueda semántica, formulario agrupado y envío a firma. El backend rellena el HTML, genera el PDF y cobra wallet.

GET{URL}/template/getAll

Lista las plantillas master del partner autenticado (entity del JWT).

  • La entidad se toma de `customer_id` del JWT. No enviar HTML.
Headers
id
{api-key}
Auth
Bearer
{token}

Response

Success
{
  success: true,
  data: [
    {
      id: uuid,
      name: string,
      description: string | null,
      icon: string | null,
      ghost_slug: string | null,
      type: "master",
      version: number,
      template_version_id: uuid
    }
  ],
  error: null
}
Error
{
  success: false,
  data: null,
  error: <error description>
}
POST{URL}/template/getAllByToken

Lista las plantillas master del partner contenido en un access_token MCP (`pf_mcp_at_*`), el mismo que entrega resolveByPhone.

  • `token` es el `access_token` de `POST /api/session/resolveByPhone`.
  • Si el token es inválido, expirado o revocado: 401.
Body
{
  token: string
}
Headers
id
{api-key}
Auth
Bearer
{token}

Response

Success
{
  success: true,
  data: [
    {
      id: uuid,
      name: string,
      description: string | null,
      icon: string | null,
      ghost_slug: string | null,
      type: "master",
      version: number,
      template_version_id: uuid
    }
  ],
  error: null
}
Error
{
  success: false,
  data: null,
  error: <error description>
}
POST{URL}/template/searchByToken

Búsqueda semántica + DocIA. Devuelve hasta 3 plantillas listas (mismo shape que getAll).

  • `token` es el `access_token` de `POST /api/session/resolveByPhone`.
  • `message` es la intención del usuario (mín. 2 caracteres).
  • Pipeline: RAG → DocIA → hidrata al catálogo (máx. 3).
  • Si el token es inválido, expirado o revocado: 401.
Body
{
  token: string,
  message: string
}
Headers
id
{api-key}
Auth
Bearer
{token}

Response

Success
{
  success: true,
  data: [
    {
      id: uuid,
      name: string,
      description: string | null,
      icon: string | null,
      ghost_slug: string | null,
      type: "master",
      version: number,
      template_version_id: uuid
    }
  ],
  error: null
}
Error
{
  success: false,
  data: null,
  error: <error description>
}
GET{URL}/template/:template_version_id/forms

Devuelve los grupos de campos a completar (signer / nosigner), con campos sintéticos de firmante si faltan.

  • `template_version_id` sale de getAll, getAllByToken, searchByToken o de MCP search.
  • Los `id` de cada variable son las keys de `values` en sendSign.
  • En grupos signer se agregan RUT, correo, teléfono y nombre completo si no están en el HTML.
  • No se exige que la plantilla pertenezca al partner del JWT.
Headers
id
{api-key}
Auth
Bearer
{token}

Response

Success
{
  success: true,
  data: {
    template_version_id: uuid,
    name: string,
    description: string | null,
    groups: [
      {
        group: string,
        type: "signer" | "nosigner",
        variables: [
          {
            id: string,
            label: string,
            name: string,
            group: string,
            type: "signer" | "nosigner",
            required: true,
            synthetic: boolean,
            input_type: "rut" | "phone" | "email" | "address" | "date" | "select" | "text"
          }
        ]
      }
    ]
  },
  error: null
}
Error
{
  success: false,
  data: null,
  error: <error description>
}
POST{URL}/template/sendSign

Rellena la plantilla con `values`, genera el PDF, cobra wallet y envía a firmar.

  • No enviar HTML ni PDF. El backend aplica `values` al HTML y genera el PDF.
  • Los firmantes se derivan de los grupos `signer`.
  • No se exige que la plantilla pertenezca al partner del JWT. El JWT define quién paga (wallet) y de quién es la operación.
  • Si el wallet no cubre el total: `Error saldo insuficiente`.
Body
{
  template_version_id: uuid,
  values: {
    "rut_comprador_signer": "12.345.678-9"
  }
}
Headers
id
{api-key}
Auth
Bearer
{token}

Response

Success
{
  success: true,
  data: {
    processId: uuid,
    operation: string,
    createdDateAt: string,
    signatories: [
      {
        alias: string,
        rut: string,
        email: string,
        name: string
      }
    ]
  },
  error: null
}
Error
{
  success: false,
  data: null,
  error: <error description>
}