curl --request POST \
--url https://api.pruff.com/api/clients/requirements/record \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form requirementTemplateId=1 \
--form documentId=fb36463e-903f-44ff-8c8d-a3713df70744 \
--form 'observation=Factura firmada' \
--form 'file=@example-file;type=application/octet-stream'import requests
url = "https://api.pruff.com/api/clients/requirements/record"
files = { "file": ("example-file", open("example-file", "rb"), "application/octet-stream") }
payload = {
"requirementTemplateId": "1",
"documentId": "fb36463e-903f-44ff-8c8d-a3713df70744",
"observation": "Factura firmada"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('requirementTemplateId', '1');
form.append('documentId', 'fb36463e-903f-44ff-8c8d-a3713df70744');
form.append('observation', 'Factura firmada');
form.append('file', 'factura-10235.pdf');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.pruff.com/api/clients/requirements/record', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pruff.com/api/clients/requirements/record",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/requirements/record"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pruff.com/api/clients/requirements/record")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/requirements/record")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"requirementTemplateId": 1,
"documentId": "fb36463e-903f-44ff-8c8d-a3713df70744",
"fileUploaded": true
}Subir documento a un requerimiento
Asocia un archivo a un requerimiento de un documento (por ejemplo, la Factura de una factura cedida). Obtén el requirementTemplateId en Listar requerimientos de documentos y el documentId en Obtener documentos o Crear documentos.
La operación es idempotente: si ya existe un registro para ese requerimiento y ese documento, se actualiza y el archivo nuevo reemplaza al anterior, que se elimina. Si actualizas el registro sin enviar un archivo (en requerimientos que no exigen archivo), se conserva el archivo anterior. Si no envías observation, la observación del registro queda vacía.
La solicitud se envía como multipart/form-data (no JSON). El campo del archivo debe llamarse exactamente file. El archivo es obligatorio cuando el requerimiento tiene requiresFile: true; si no lo tiene, puedes omitirlo y registrar solo la observation. La subida completa debe terminar en 55 segundos.
El archivo puede pesar hasta 20 MB, y la solicitud completa (Content-Length) no puede superar 21 MB. Envía siempre el header Content-Length; una subida sin él (por ejemplo, con Transfer-Encoding: chunked) se rechaza.
Formatos permitidos: PDF, JPG, JPEG, PNG, GIF, WEBP, HEIC, DOC, DOCX, XLS, XLSX, PPT, PPTX, ODT, CSV, TXT, XML, MSG, ZIP y RAR. Pruff revisa solo la extensión del nombre del archivo; el Content-Type de la parte no se valida y puede faltar.
curl --request POST \
--url https://api.pruff.com/api/clients/requirements/record \
--header 'Content-Type: multipart/form-data' \
--header 'x-api-key: <api-key>' \
--form requirementTemplateId=1 \
--form documentId=fb36463e-903f-44ff-8c8d-a3713df70744 \
--form 'observation=Factura firmada' \
--form 'file=@example-file;type=application/octet-stream'import requests
url = "https://api.pruff.com/api/clients/requirements/record"
files = { "file": ("example-file", open("example-file", "rb"), "application/octet-stream") }
payload = {
"requirementTemplateId": "1",
"documentId": "fb36463e-903f-44ff-8c8d-a3713df70744",
"observation": "Factura firmada"
}
headers = {"x-api-key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('requirementTemplateId', '1');
form.append('documentId', 'fb36463e-903f-44ff-8c8d-a3713df70744');
form.append('observation', 'Factura firmada');
form.append('file', 'factura-10235.pdf');
const options = {method: 'POST', headers: {'x-api-key': '<api-key>'}};
options.body = form;
fetch('https://api.pruff.com/api/clients/requirements/record', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pruff.com/api/clients/requirements/record",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/requirements/record"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pruff.com/api/clients/requirements/record")
.header("x-api-key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/requirements/record")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"requirementTemplateId\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nfb36463e-903f-44ff-8c8d-a3713df70744\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"observation\"\r\n\r\nFactura firmada\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\nfactura-10235.pdf\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"requirementTemplateId": 1,
"documentId": "fb36463e-903f-44ff-8c8d-a3713df70744",
"fileUploaded": true
}Cuerpo
Respuesta
Registro guardado.