KivoSign

API de campos

Adicione campos de assinatura e de formulário aos documentos pela API.

Documentos e modelos estão sendo descontinuados e substituídos por envelopes. Leia o guia de migração.

Este guia pode não refletir os endpoints ou parâmetros mais recentes. Para uma referência sempre atualizada, consulte a especificação OpenAPI.

Objeto campo

PropriedadeTipoDescrição
idnumberIdentificador único do campo
secondaryIdstringIdentificador secundário para logs de auditoria
typestringTipo do campo (veja Tipos de campo)
recipientIdnumberID do destinatário associado ao campo
envelopeIdstringID do envelope
envelopeItemIdstringID do item (PDF) em que o campo está
pagenumberNúmero da página (começa em 1)
positionXstringCoordenada X em percentual (0-100), decimal serializado como string
positionYstringCoordenada Y em percentual (0-100), decimal serializado como string
widthstringLargura em percentual da página (0-100), decimal serializado como string
heightstringAltura em percentual da página (0-100), decimal serializado como string
customTextstringValor preenchido pelo destinatário
insertedbooleanSe o campo já foi preenchido
fieldMetaobject | nullOpções de configuração específicas do tipo

Exemplo de objeto campo

{
  "id": 456,
  "secondaryId": "field_abc123",
  "type": "SIGNATURE",
  "recipientId": 123,
  "envelopeId": "envelope_abcdefhiklmnorst",
  "envelopeItemId": "envelope_item_abcdefhiklmnorst",
  "page": 1,
  "positionX": "10",
  "positionY": "80",
  "width": "30",
  "height": "5",
  "customText": "",
  "inserted": false,
  "fieldMeta": {
    "type": "signature",
    "required": true,
    "overflow": "auto"
  }
}

Tipos de campo

TipoDescriçãoPreenchimento automático
SIGNATUREAssinatura desenhada, digitada ou enviada como imagemNão
FREE_SIGNATUREAssinatura livre antiga. Aceita pelo schema de criação da v2, mas rejeitada pela API v1 e sem suporte na tela de assinatura. Evite em novas integraçõesNão
INITIALSIniciais do destinatárioNão
NAMENome completo do destinatárioSim
EMAILE-mail do destinatárioSim
DATEData em que o campo foi preenchidoSim
TEXTTexto livreNão
NUMBERNúmero, com validação opcionalNão
RADIOEscolha única entre opçõesNão
CHECKBOXMúltipla escolha entre opçõesNão
DROPDOWNEscolha única em uma lista suspensaNão

Consultar campo

Consulta um campo pelo ID.

GET /envelope/field/{fieldId}

Parâmetros de caminho

ParâmetroTipoDescrição
fieldIdnumberO ID do campo

Exemplos

curl -X GET "https://app.kivosign.com.br/api/v2/envelope/field/456" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx"

Resposta

Retorna o objeto campo.


Criar campos

Adiciona um ou mais campos a um documento.

POST /envelope/field/create-many

Corpo da requisição

CampoTipoObrigatórioDescrição
envelopeIdstringSimO ID do envelope
dataarraySimLista de configurações de campo

Cada item de data exige type, recipientId e uma posição: coordenadas explícitas (page, positionX, positionY, width, height) ou um marcador de texto (placeholder, com width, height e matchAll opcionais). Propriedades opcionais por item: envelopeItemId (em qual PDF do envelope colocar o campo; o padrão é o primeiro) e fieldMeta.

Exemplos

curl -X POST "https://app.kivosign.com.br/api/v2/envelope/field/create-many" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "envelopeId": "envelope_abcdefhiklmnorst",
    "data": [
      {
        "type": "SIGNATURE",
        "recipientId": 456,
        "page": 1,
        "positionX": 10,
        "positionY": 80,
        "width": 30,
        "height": 5
      },
      {
        "type": "DATE",
        "recipientId": 456,
        "page": 1,
        "positionX": 50,
        "positionY": 80,
        "width": 20,
        "height": 3
      },
      {
        "type": "TEXT",
        "recipientId": 456,
        "page": 1,
        "positionX": 10,
        "positionY": 70,
        "width": 40,
        "height": 4,
        "fieldMeta": {
          "type": "text",
          "label": "Cargo",
          "placeholder": "Informe seu cargo",
          "required": true
        }
      }
    ]
  }'

Resposta

{
  "data": [
    {
      "id": 101,
      "secondaryId": "field_abc123",
      "envelopeId": "envelope_abcdefhiklmnorst",
      "envelopeItemId": "envelope_item_abcdefhiklmnorst",
      "type": "SIGNATURE",
      "recipientId": 456,
      "page": 1,
      "positionX": "10",
      "positionY": "80",
      "width": "30",
      "height": "5",
      "customText": "",
      "inserted": false,
      "fieldMeta": {
        "type": "signature",
        "fontSize": 18,
        "overflow": "auto"
      }
    },
    {
      "id": 102,
      "secondaryId": "field_def456",
      "envelopeId": "envelope_abcdefhiklmnorst",
      "envelopeItemId": "envelope_item_abcdefhiklmnorst",
      "type": "DATE",
      "recipientId": 456,
      "page": 1,
      "positionX": "50",
      "positionY": "80",
      "width": "20",
      "height": "3",
      "customText": "",
      "inserted": false,
      "fieldMeta": {
        "type": "date",
        "fontSize": 12,
        "textAlign": "left",
        "overflow": "auto"
      }
    },
    {
      "id": 103,
      "secondaryId": "field_ghi789",
      "envelopeId": "envelope_abcdefhiklmnorst",
      "envelopeItemId": "envelope_item_abcdefhiklmnorst",
      "type": "TEXT",
      "recipientId": 456,
      "page": 1,
      "positionX": "10",
      "positionY": "70",
      "width": "40",
      "height": "4",
      "customText": "",
      "inserted": false,
      "fieldMeta": {
        "type": "text",
        "label": "Cargo",
        "placeholder": "Informe seu cargo",
        "required": true
      }
    }
  ]
}

Atualizar campos

Atualiza um ou mais campos em uma única requisição.

POST /envelope/field/update-many

Corpo da requisição

CampoTipoObrigatórioDescrição
envelopeIdstringSimO ID do envelope
dataarraySimLista de objetos de atualização

Cada item de data exige o id e o type do campo. As propriedades de posição (page, positionX, positionY, width, height), envelopeItemId e fieldMeta são opcionais: só os valores enviados são atualizados. Quando fieldMeta é enviado, ele substitui o fieldMeta salvo por inteiro, então inclua todas as propriedades que quer manter. Mudar o type sem enviar fieldMeta aplica o fieldMeta padrão do novo tipo. A atualização não aceita posicionamento por marcador; use coordenadas.

Exemplos

curl -X POST "https://app.kivosign.com.br/api/v2/envelope/field/update-many" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "envelopeId": "envelope_abcdefhiklmnorst",
    "data": [
      {
        "id": 101,
        "type": "SIGNATURE",
        "positionY": 85
      },
      {
        "id": 102,
        "type": "DATE",
        "positionY": 85
      }
    ]
  }'

Resposta

{
  "data": [
    {
      "id": 101,
      "secondaryId": "field_abc123",
      "envelopeId": "envelope_abcdefhiklmnorst",
      "envelopeItemId": "envelope_item_abcdefhiklmnorst",
      "type": "SIGNATURE",
      "recipientId": 456,
      "page": 1,
      "positionX": "10",
      "positionY": "85",
      "width": "30",
      "height": "5",
      "customText": "",
      "inserted": false,
      "fieldMeta": {
        "type": "signature",
        "fontSize": 18,
        "overflow": "auto"
      }
    },
    {
      "id": 102,
      "secondaryId": "field_def456",
      "envelopeId": "envelope_abcdefhiklmnorst",
      "envelopeItemId": "envelope_item_abcdefhiklmnorst",
      "type": "DATE",
      "recipientId": 456,
      "page": 1,
      "positionX": "50",
      "positionY": "85",
      "width": "20",
      "height": "3",
      "customText": "",
      "inserted": false,
      "fieldMeta": {
        "type": "date",
        "fontSize": 12,
        "textAlign": "left",
        "overflow": "auto"
      }
    }
  ]
}

Excluir campo

Remove um campo de um documento.

POST /envelope/field/delete

Corpo da requisição

CampoTipoObrigatórioDescrição
fieldIdnumberSimO ID do campo

Exemplos

curl -X POST "https://app.kivosign.com.br/api/v2/envelope/field/delete" \
  -H "Authorization: api_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "fieldId": 456
  }'

Resposta

{
  "success": true
}

Posicionamento dos campos

Os campos usam coordenadas em percentual, relativas ao tamanho da página do PDF.

PropriedadeFaixaDescrição
positionX0-100Posição horizontal a partir da borda esquerda (0 = borda esquerda)
positionY0-100Posição vertical a partir do topo (0 = topo)
width0-100Largura do campo em percentual da largura da página
height0-100Altura do campo em percentual da altura da página
page1+Número da página (começa em 1)

Sistema de coordenadas

(0,0) ─────────────────────────── (100,0)
  │                                   │
  │    ┌─────────┐                    │
  │    │  Campo  │ (positionX: 10,    │
  │    │         │  positionY: 20,    │
  │    └─────────┘  width: 30,        │
  │                 height: 5)        │
  │                                   │
(0,100) ─────────────────────────(100,100)

Exemplo: assinatura no canto inferior direito

const field = {
  type: 'SIGNATURE',
  recipientId: 123,
  page: 1,
  positionX: 60, // 60% a partir da esquerda
  positionY: 85, // 85% a partir do topo (perto do rodapé)
  width: 30, // 30% da largura da página
  height: 8, // 8% da altura da página
};

Posicionamento por marcador

Em vez de informar coordenadas exatas, você pode posicionar campos com marcadores de texto dentro do PDF. Inclua marcadores como {{signature, r1}} no documento e a KivoSign cria os campos nesses locais quando o documento é enviado.

Isso é útil quando você gera PDFs por código ou usa modelos com layout fixo.

Os marcadores só funcionam nos endpoints envelope.*. POST /template/use não processa marcadores.

Veja o guia Marcadores em PDF para a referência completa do formato, incluindo tipos de campo, identificadores de destinatário e opções de campo.

Marcadores pela API

POST /envelope/field/create-many aceita uma posição por marcador no lugar das coordenadas. Em vez de page, positionX, positionY, width e height, envie:

CampoTipoObrigatórioDescrição
placeholderstringSimTexto a procurar no PDF (ex.: {{name}}). O campo é colocado na área da primeira ocorrência.
widthnumberNãoSobrescreve a largura do campo. O padrão é a largura do texto encontrado.
heightnumberNãoSobrescreve a altura do campo. O padrão é a altura do texto encontrado.
matchAllbooleanNãoCria um campo em cada ocorrência do marcador, e não só na primeira.
{
  "envelopeId": "envelope_abcdefhiklmnorst",
  "data": [
    {
      "type": "SIGNATURE",
      "recipientId": 456,
      "placeholder": "{{signature}}",
      "matchAll": true
    }
  ]
}

POST /envelope/field/update-many não aceita marcadores: a atualização de campos é só por coordenadas.


Opções de fieldMeta

Cada tipo de campo aceita configurações próprias em fieldMeta.

Opções comuns

Todos os tipos de campo aceitam estas opções básicas:

OpçãoTipoDescrição
labelstringTexto exibido junto ao campo
placeholderstringTexto de dica quando o campo está vazio
requiredbooleanSe o campo é obrigatório
readOnlybooleanTrava o campo com um valor pré-preenchido
fontSizenumberTamanho do texto em pixels (8-96, padrão: 12)

Campo de assinatura

{
  "type": "SIGNATURE",
  "fieldMeta": {
    "type": "signature",
    "required": true
  }
}

Campo de texto

{
  "type": "TEXT",
  "fieldMeta": {
    "type": "text",
    "label": "Razão social",
    "placeholder": "Informe a razão social",
    "text": "Valor padrão",
    "characterLimit": 100,
    "textAlign": "left",
    "required": true
  }
}
OpçãoTipoDescrição
textstringValor padrão
characterLimitnumberMáximo de caracteres
textAlignstringleft, center ou right
lineHeightnumberEspaçamento entre linhas (1-10)
letterSpacingnumberEspaçamento entre caracteres (0-100)

Campo numérico

{
  "type": "NUMBER",
  "fieldMeta": {
    "type": "number",
    "label": "Quantidade",
    "minValue": 1,
    "maxValue": 100,
    "value": "10",
    "required": true
  }
}
OpçãoTipoDescrição
valuestringValor padrão
minValuenumberValor mínimo
maxValuenumberValor máximo
numberFormatstringFormato de exibição

Campo de data

{
  "type": "DATE",
  "fieldMeta": {
    "type": "date",
    "textAlign": "left",
    "required": true
  }
}

Campo de caixa de seleção

{
  "type": "CHECKBOX",
  "fieldMeta": {
    "type": "checkbox",
    "label": "Aceites",
    "values": [
      { "id": 1, "value": "Termos de uso", "checked": false },
      { "id": 2, "value": "Política de privacidade", "checked": false }
    ],
    "validationRule": "min",
    "validationLength": 1,
    "direction": "vertical",
    "required": true
  }
}
OpçãoTipoDescrição
valuesarrayLista de opções
validationRulestringTipo de validação das seleções
validationLengthnumberNúmero usado na regra de validação
directionstringLayout vertical ou horizontal

Campo de opção única (radio)

{
  "type": "RADIO",
  "fieldMeta": {
    "type": "radio",
    "label": "Forma de pagamento",
    "values": [
      { "id": 1, "value": "Cartão de crédito", "checked": false },
      { "id": 2, "value": "Pix", "checked": true },
      { "id": 3, "value": "Boleto", "checked": false }
    ],
    "direction": "vertical",
    "required": true
  }
}

Campo de lista suspensa

{
  "type": "DROPDOWN",
  "fieldMeta": {
    "type": "dropdown",
    "label": "Estado",
    "values": [{ "value": "São Paulo" }, { "value": "Rio de Janeiro" }, { "value": "Minas Gerais" }],
    "defaultValue": "São Paulo",
    "required": true
  }
}
OpçãoTipoDescrição
valuesarrayLista de opções
defaultValuestringOpção pré-selecionada

Exemplo completo

Cria um bloco de assinatura com vários tipos de campo:

async function addSignatureBlock(envelopeId: string, recipientId: number) {
  const data = [
    {
      type: 'SIGNATURE',
      recipientId,
      page: 1,
      positionX: 10,
      positionY: 80,
      width: 30,
      height: 8,
      fieldMeta: {
        type: 'signature',
        required: true,
      },
    },
    {
      type: 'NAME',
      recipientId,
      page: 1,
      positionX: 10,
      positionY: 90,
      width: 30,
      height: 4,
      fieldMeta: {
        type: 'name',
        label: 'Nome por extenso',
      },
    },
    {
      type: 'DATE',
      recipientId,
      page: 1,
      positionX: 50,
      positionY: 80,
      width: 20,
      height: 4,
      fieldMeta: {
        type: 'date',
        label: 'Data',
      },
    },
    {
      type: 'TEXT',
      recipientId,
      page: 1,
      positionX: 50,
      positionY: 90,
      width: 30,
      height: 4,
      fieldMeta: {
        type: 'text',
        label: 'Cargo',
        placeholder: 'Informe seu cargo',
      },
    },
  ];

  const response = await fetch('https://app.kivosign.com.br/api/v2/envelope/field/create-many', {
    method: 'POST',
    headers: {
      Authorization: 'api_xxxxxxxxxxxxxxxx',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ envelopeId, data }),
  });

  return response.json();
}

Respostas de erro

StatusDescrição
400Configuração de campo inválida ou documento já enviado
401Chave de API inválida ou ausente
404Documento, destinatário ou campo não encontrado
500Erro no servidor

Os campos não podem ser alterados depois que o documento é enviado para assinatura. Faça todas as alterações enquanto o documento está em DRAFT.


Veja também

Nesta página