🔵 Crear Proceso de Anexos
POST /attachments
Este servicio permite iniciar un proceso para solicitar anexos para firma o simplemente anexos sin firma. Cada anexo puede configurarse como obligatorio u opcional.
Si deseas incluir un proceso de firma, puedes enviar directamente un documento PDF en formato base64, si deseas que la firma y solicitud de anexos hagan parte de una plantilla, ten en cuenta que este flujo no puede configurarse directamente mediante el endpoint; debes realizar una solicitud a nuestro equipo de soporte.
Antes de integrar este endopint puede necesitar ver cómo definir posiciones de firma y configuraciones de validación de identidad.
Autenticación
Incluye tu llave privada en el encabezado Authorization
.
Authorization: prk_xxx...
Parámetros de creación
Nombre | Tipo | Requerido | Descripción |
---|---|---|---|
email | String | Requerido | Correo electrónico del creador del proceso. |
document | String | Condicional | Si desea crear el proceso por medio de una plantilla, debe enviar el id de dicha plantilla en este campo. Para ver y obtener plantillas acceda esta documentación. |
name | String | Requerido | Nombre del proceso del documento a firmar, solo si el proceso de adjuntos incluye firma de documento. |
packageName | String | Requerido | Nombre con que será creada la carpeta contenedora de los archivos adjuntos y el documento a firmar (Si contiene). |
message | String | Requerido | Mensaje que llegará en el cuerpo del correo notificando a los firmantes u aprobadores del documento. |
subject | String | Requerido | Asunto con el que será enviado el correo de notificación a los firmantes u aprobadores. |
file | String | Condicional | En caso de querer cargar el documento en la misma petición, en éste parámetro se envía el archivo PDF en Base64. (Sólo para archivos pequeños) |
compress | Boolean | Condicional | Si el archivo PDF que se desea cargar es demasiado grande, se recomienda no enviar el parámetro file, en sulugar, se debe usar compress: true , de esta forma el servicio retorna una url firmada para cargar el archivo PDF en formato binario mediante una petición de tipo PUT. |
folder | String | Condicional | Si desea guardar este proceso en una carpeta específica, en este parámetro debe igresar el path de dicha carpeta, tenga en cuenta que la carpeta debe existir y pertenecer al creador del proceso. |
remember | Number | Condicional | Parámetro que habilita recordatorios automáticos con el lapso de tiempo (horas) entre cada notificación. Debe ser múltiplo de 3 |
expiredDate | Date | Opcional | Fecha de expiración del documento. Esta debe ser mayor a 3 días de la fecha de creación del proceso y se envia en formato Date JSON. |
camera | Boolean | Opcional | Este parámetro indica si es obligatoria la validación con foto, por defecto va en false . |
otpCode | Boolean | Opcional | Este parámetro indica si es obligatorio la validación por código OTP, por defecto va en false . |
options | Object | Opcional | En este parámetro se indican las especificaciones de la validación de identidad. |
notification | Boolean | Opcional | Este parámetro define si se va a anotificar a los participante suna vez creado el proceso, por defecto es true |
signProfile | Array | Requerido | Este campo es una lista de objetos, donde se encuentra la información de cada firmante o aprobador para su notificación y firma. |
signProfile[x].name | String | Requerido | nombre del usuario anexador. |
signProfile[x].email | String | Requerido | correo del usuario anexador. |
signProfile[x].phone | String | Requerido | número de teléfono del usuario anexador. |
signProfile[x].role | String | Condicional | Este parámetro define el role del participante, puede ser 'APPROVER' o 'SIGNER' . |
signProfile[x].order | String | Condicional | Este parámetro define el orden en que se realizará el proceso de notificación para firma o aprobación. |
signProfile[x].label | Boolean | Condicional | Parámetro que indica si se realizará el posicionamiento de firmas por medio de labels en el pdf. |
signProfile[x].position | Array | Condicional | En este parámetro se envían las posiciones de firma de este firmante en cada página. Las posiciones de firma pueden estar previamente cargadas en plantillas, obtenga mas informacion en . |
signProfile[x].type | Array | Condicional | Nombre con el que se identifica el tipo de firmante en caso de estar pre guardadas en una plantilla, por ejemplo: 'codeudor' . |
signProfile[x].options | Object | Opcional | Permite definir validaciones personalizadas para un firmante específico. Si se desea aplicar validaciones de forma individual por firmante, este parámetro acepta los mismos campos definidos en options a nivel global. Es posible combinar validaciones globales e individuales, aplicando las generales por defecto y las individuales donde se requiera un tratamiento particular. |
signProfile[x].camera | Boolean | Opcional | Si se desea tener validaciones individuales por firmante y se requiere validación con foto o video, se debe enviar este parametro en true por defecto es false . |
signProfile[x].otpCode | Boolean | Opcional | Si se desea tener validaciones individuales por firmante y se requiere validación con otp, se debe enviar este parametro en true por defecto es false . |
signProfile[x].both | Boolean | Opcional | Si se desea tener validaciones individuales por firmante y se requiere que el proceso de firma se pueda hacer por medio de WhatsApp y/o correo electrónico, se debe enviar este parámetro en true , por defecto es false . |
signProfile[x].files | Array | Requerido | En este parámetro se especifica la lista de archivos adjuntos que se le solicitará al firmante. |
signProfile[x].files[x].name | String | Requerido | Nombre del archivo adjunto. |
signProfile[x].files[x].optional | Boolean | Opcional | En caso de ser opcional algún archivo adjunto es importante enviar este parámetro en true , por defecto es false . |
🧪 Ejemplos de uso
Puedes copiar cualquiera de los ejemplos según el lenguaje de tu preferencia.
Anexos opcionales con firma de documento (PDF Base64)
- curl
- Python
- Node.js
curl --location 'https://dev.auco.ai/v1.5/ext/package/upload' \
--header 'Authorization: prk_prk_tuLlavePrivada' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Contratación de prueba upload 1",
"email": "owner@auco.ai",
"message": "Cargar adjuntos de prueba",
"subject": "Solicitud de adjuntos",
"packageName": "Adjuntos api prueba",
"file": Base64,
"signProfile": [
{
"name": "Nombre Firmante 1",
"email": "example@auco.ai",
"phone": "+573000000000",
"position": [
{
"page": 1,
"x": 0.5854166461564629,
"y": 0.8034861200774693,
"w": 100,
"h": 50
}
],
"files": [
{
"name": "cedula de ciudadanía"
},
{
"name": "hoja de vida"
},
{
"name": "pasaporte",
"optional": true
}
]
}
],
}'
import requests
import json
url = "https://dev.auco.ai/v1.5/ext/package/upload"
payload = json.dumps({
"name": "Contratación de prueba upload 1",
"email": "owner@auco.ai",
"message": "Cargar adjuntos de prueba",
"subject": "Solicitud de adjuntos",
"packageName": "Adjuntos api prueba",
"file": Base64,
"signProfile": [
{
"name": "Nombre Firmante 1",
"email": "example@auco.ai",
"phone": "+573000000000",
"position": [
{
"page": 1,
"x": 0.5854166461564629,
"y": 0.8034861200774693,
"w": 100,
"h": 50
}
],
"files": [
{
"name": "cedula de ciudadanía"
},
{
"name": "hoja de vida"
},
{
"name": "pasaporte",
"optional": True
}
]
}
],
})
headers = {
'Authorization': 'prk_prk_tuLlavePrivada',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
const axios = require('axios');
let data = JSON.stringify({
name: 'Contratación de prueba upload 1',
email: 'owner@auco.ai',
message: 'Cargar adjuntos de prueba',
subject: 'Solicitud de adjuntos',
packageName: 'Adjuntos api prueba',
file: Base64,
file:
signProfile: [
{
name: 'Nombre Firmante 1',
email: 'example@auco.ai',
phone: '+573000000000',
position: [
{
page: 1,
x: 0.5854166461564629,
y: 0.8034861200774693,
w: 100,
h: 50,
},
],
files: [
{
name: 'cedula de ciudadanía',
},
{
name: 'hoja de vida',
},
{
name: 'pasaporte',
optional: true,
},
],
},
],
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://dev.auco.ai/v1.5/ext/package/upload',
headers: {
Authorization: 'prk_tuLlavePrivada',
'Content-Type': 'application/json',
},
data: data,
};
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Anexos opcionales con firma de documento (PDF compress y validaciones individuales)
- curl
- Python
- Node.js
curl --location 'https://dev.auco.ai/v1.5/ext/package/upload' \
--header 'Authorization: prk_private_key_company' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Prueba de Anexos Compress y validaciones individuales",
"email": "owner@auco.ai",
"message": "Cargar adjuntos de prueba",
"subject": "Solicitud de adjuntos",
"packageName": "Adjuntos api prueba 2",
"signProfile": [
{
"type": "firmante1",
"name": "Nombre Firmante 1",
"email": "example @auco.ai",
"camera": true,
"otpCode": true,
"options": {
"camera": "identification",
"video": true,
"whatsapp": true,
"otpCode": "email"
},
"phone": "+573000000000",
"files": [
{
"name": "cedula de ciudadanía"
},
{
"name": "hoja de vida"
},
{
"name": "pasaporte",
"optional": true
}
]
},
{
"type": "firmante2",
"name": "Nombre Firmante 2",
"email": "example2@auco.ai",
"phone": "+573000000000",
"otpCode": true,
"options": {
"otpCode": "email"
},
"files": [
{
"name": "certificado"
}
]
}
],
"compress": true
}'
import requests
import json
url = "https://dev.auco.ai/v1.5/ext/package/upload"
payload = json.dumps({
"name": "Prueba de Anexos Compress y validaciones individuales",
"email": "owner@auco.ai",
"message": "Cargar adjuntos de prueba",
"subject": "Solicitud de adjuntos",
"packageName": "Adjuntos api prueba 2",
"signProfile": [
{
"type": "firmante1",
"name": "Nombre Firmante 1",
"email": "example @auco.ai",
"camera": True,
"otpCode": True,
"options": {
"camera": "identification",
"video": True,
"whatsapp": True,
"otpCode": "email"
},
"phone": "+573000000000",
"files": [
{
"name": "cedula de ciudadanía"
},
{
"name": "hoja de vida"
},
{
"name": "pasaporte",
"optional": True
}
]
},
{
"type": "firmante2",
"name": "Nombre Firmante 2",
"email": "example2@auco.ai",
"phone": "+573000000000",
"otpCode": True,
"options": {
"otpCode": "email"
},
"files": [
{
"name": "certificado"
}
]
}
],
"compress": True
})
headers = {
'Authorization': 'prk_private_key_company',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
const axios = require('axios');
let data = JSON.stringify({
name: 'Prueba de Anexos Compress y validaciones individuales',
email: 'owner@auco.ai',
message: 'Cargar adjuntos de prueba',
subject: 'Solicitud de adjuntos',
packageName: 'Adjuntos api prueba 2',
signProfile: [
{
type: 'firmante1',
name: 'Nombre Firmante 1',
email: 'example @auco.ai',
camera: true,
otpCode: true,
options: {
camera: 'identification',
video: true,
whatsapp: true,
otpCode: 'email',
},
phone: '+573000000000',
files: [
{
name: 'cedula de ciudadanía',
},
{
name: 'hoja de vida',
},
{
name: 'pasaporte',
optional: true,
},
],
},
{
type: 'firmante2',
name: 'Nombre Firmante 2',
email: 'example2@auco.ai',
phone: '+573000000000',
otpCode: true,
options: {
otpCode: 'email',
},
files: [
{
name: 'certificado',
},
],
},
],
compress: true,
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://dev.auco.ai/v1.5/ext/package/upload',
headers: {
Authorization: 'prk_private_key_company',
'Content-Type': 'application/json',
},
data: data,
};
axios
.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
📥 Ejemplos de respuesta
🔹 Enviando PDF en Base64 en el atributo file
{
"package": "PROCESSID",
"code": "DOCUMENTCODE"
}
🔸 Enviando el atributo compress
La URL firmada proporcionada en la respuesta es de un solo uso y estar á disponible únicamente durante 5 segundos. Debe utilizarse para cargar el documento PDF en formato binario mediante una solicitud HTTP PUT.
{
"package": "PROCESSID",
"code": "DOCUMENTCODE",
"url": "signed_url"
}
⚠️ Respuestas de error
Código | Descripción |
---|---|
400 | Faltan parámetros, o alguna de las validaciones no coinciden con las condiciones de aplicabilidad |
401 | Autenticación inválida o ausente |