curl --request GET \
--url https://api.pruff.com/api/clients/reporting/portfolio \
--header 'x-api-key: <api-key>'import requests
url = "https://api.pruff.com/api/clients/reporting/portfolio"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.pruff.com/api/clients/reporting/portfolio', 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/reporting/portfolio",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/reporting/portfolio"
req, _ := http.NewRequest("GET", url, nil)
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.get("https://api.pruff.com/api/clients/reporting/portfolio")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/reporting/portfolio")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "00123456-dd49-43ae-8429-f5ef123456f2",
"type": "Factura electrónica",
"executive": "Ana Pérez",
"executiveId": 1015,
"executiveEmail": "ana.perez@example.com",
"commercialExecutiveAssignedId": 1015,
"commercialExecutiveAssignedName": "Ana Pérez",
"commercialExecutiveAssignedEmail": "ana.perez@example.com",
"commercialExecutivePortfolioId": 1287,
"commercialExecutivePortfolioName": "Luis Soto",
"commercialExecutivePortfolioEmail": "luis.soto@example.com",
"clientIdentifier": "11111111-1",
"clientName": "Cliente Ejemplo SpA",
"businessIdentifier": "11111111-1",
"businessName": "Cliente Ejemplo SpA",
"stakeholderIdentifier": "76111111-6",
"stakeholderName": "Deudor Ejemplo Ltda.",
"requestId": 5634,
"requestType": "Factoring",
"requestDate": "2026-02-02",
"documentType": "Factura electrónica",
"folio": "12673",
"amount": 1045631,
"invoiceAmount": 1045631,
"dueDate": "2026-03-20",
"requestDocuments": 3,
"requestCost": 1667,
"requestCostIVA": 317,
"requestExpenses": 1944,
"requestExpensesIVA": 369,
"advancedPercentage": 99,
"advancedAmount": 941068,
"conciliationAmount": 0,
"conciliationDocumentAmount": 0,
"conciliationArrearAmount": 0,
"lastConciliationDate": null,
"lastConciliationPaidBy": "",
"lastConciliationAmount": 0,
"biggerPayerName": "",
"documentPaymentDate": null,
"documentPaymentDays": null,
"totalPaymentDate": null,
"totalPaymentDays": null,
"priceDifference": 61856,
"collectionStatus": "Estado Normal",
"inLegalCollection": false,
"arrearDays": 0,
"arrearDaysTillDocumentPaid": 0,
"arrearAmount": 0,
"state": "Vigente",
"remainingAmount": 1045631,
"documentRemainingAmount": 1045631,
"documentRemainingAmountNet": 941068,
"totalRemainingNet": 941068,
"economicSector": "-",
"arrearRate": 3,
"dailyAccrual": 1048,
"rate": 1.8,
"fund": "Fondo Ejemplo SpA",
"cessionaryIdentifier": "96111111-0",
"fundSellDate": "2026-02-03",
"fundSellRate": 0.97,
"stillInFund": "En fondo",
"resellDate": "2026-02-03",
"resellRate": 0.97,
"resellDays": 27,
"fundCostTotal": 19841,
"stillInResell": "En fondo",
"lastCollectionManagementStatus": "Estado Normal",
"lastCollectionManagementOption": "Gestionado",
"lastCollectionManagementDescription": "Enviado email de cobranza",
"lastCollectionManagementDate": "2026-03-20",
"issuedDate": "2026-01-29",
"cancelDate": null,
"confirmDate": null,
"originalDueDate": "2026-03-01",
"creditNoteAmount": 0,
"operationDays": 25,
"requestDays": 25,
"siiDescription": "Cedida a Fondo Ejemplo SpA",
"financingAt": "2026-02-02",
"surplusTotal": 10123,
"surplusEffective": 0,
"collectorName": "Roberto Díaz",
"executiveManagerName": "Jane Smith",
"executiveManagerEmail": "jane.smith@example.com",
"exception": false,
"cessionStatus": "Fondo"
}
],
"pagination": {
"total": 1,
"page": 1,
"pageSize": 10,
"totalPages": 1
}
}Obtener cartera
Devuelve la cartera de documentos: un registro por documento, con su solicitud, saldos, mora, conciliaciones, venta a fondo y cobranza. Por defecto devuelve la cartera activa (documentos sin pagar) de todos los productos. Cambia dataType para ver los documentos pagados, los que están en mora o toda la cartera.
Filtros de fechas. Cada rango se puede enviar con ambos extremos o con uno solo, y se aplica con el extremo que envíes: startRequestDate y endRequestDate (fecha de operación de la solicitud), startPaymentDate y endPaymentDate (vencimiento original del documento, sin prórrogas), y startPaidAt y endPaidAt (fecha de pago). Los extremos incluyen el día completo. Los filtros de fecha de pago solo se pueden usar con dataType=completed o all: con active (el valor por defecto) o inArrear los documentos están sin pagar, y la solicitud responde 400.
Paginación. El servicio está paginado y soporta un tamaño máximo de página de 100.
Versiones de campos. La respuesta trae los campos de la versión 1 (marcados como obsoletos) y de la versión 2 (actual). Usa los de la versión 2: los de la versión 1 se eliminarán.
Alcance. Si tu API key pertenece a un usuario sin acceso a toda la cartera, solo ves los documentos de los clientes de su cartera y de su equipo, y los de las solicitudes que tiene asignadas.
Cobranza judicial. Según la configuración de tu empresa, los documentos en cobranza judicial pueden no aparecer en la cartera.
Todos los campos vienen siempre en cada registro: cuando no hay valor llegan en null, en lugar de omitirse.
curl --request GET \
--url https://api.pruff.com/api/clients/reporting/portfolio \
--header 'x-api-key: <api-key>'import requests
url = "https://api.pruff.com/api/clients/reporting/portfolio"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.pruff.com/api/clients/reporting/portfolio', 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/reporting/portfolio",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.pruff.com/api/clients/reporting/portfolio"
req, _ := http.NewRequest("GET", url, nil)
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.get("https://api.pruff.com/api/clients/reporting/portfolio")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pruff.com/api/clients/reporting/portfolio")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "00123456-dd49-43ae-8429-f5ef123456f2",
"type": "Factura electrónica",
"executive": "Ana Pérez",
"executiveId": 1015,
"executiveEmail": "ana.perez@example.com",
"commercialExecutiveAssignedId": 1015,
"commercialExecutiveAssignedName": "Ana Pérez",
"commercialExecutiveAssignedEmail": "ana.perez@example.com",
"commercialExecutivePortfolioId": 1287,
"commercialExecutivePortfolioName": "Luis Soto",
"commercialExecutivePortfolioEmail": "luis.soto@example.com",
"clientIdentifier": "11111111-1",
"clientName": "Cliente Ejemplo SpA",
"businessIdentifier": "11111111-1",
"businessName": "Cliente Ejemplo SpA",
"stakeholderIdentifier": "76111111-6",
"stakeholderName": "Deudor Ejemplo Ltda.",
"requestId": 5634,
"requestType": "Factoring",
"requestDate": "2026-02-02",
"documentType": "Factura electrónica",
"folio": "12673",
"amount": 1045631,
"invoiceAmount": 1045631,
"dueDate": "2026-03-20",
"requestDocuments": 3,
"requestCost": 1667,
"requestCostIVA": 317,
"requestExpenses": 1944,
"requestExpensesIVA": 369,
"advancedPercentage": 99,
"advancedAmount": 941068,
"conciliationAmount": 0,
"conciliationDocumentAmount": 0,
"conciliationArrearAmount": 0,
"lastConciliationDate": null,
"lastConciliationPaidBy": "",
"lastConciliationAmount": 0,
"biggerPayerName": "",
"documentPaymentDate": null,
"documentPaymentDays": null,
"totalPaymentDate": null,
"totalPaymentDays": null,
"priceDifference": 61856,
"collectionStatus": "Estado Normal",
"inLegalCollection": false,
"arrearDays": 0,
"arrearDaysTillDocumentPaid": 0,
"arrearAmount": 0,
"state": "Vigente",
"remainingAmount": 1045631,
"documentRemainingAmount": 1045631,
"documentRemainingAmountNet": 941068,
"totalRemainingNet": 941068,
"economicSector": "-",
"arrearRate": 3,
"dailyAccrual": 1048,
"rate": 1.8,
"fund": "Fondo Ejemplo SpA",
"cessionaryIdentifier": "96111111-0",
"fundSellDate": "2026-02-03",
"fundSellRate": 0.97,
"stillInFund": "En fondo",
"resellDate": "2026-02-03",
"resellRate": 0.97,
"resellDays": 27,
"fundCostTotal": 19841,
"stillInResell": "En fondo",
"lastCollectionManagementStatus": "Estado Normal",
"lastCollectionManagementOption": "Gestionado",
"lastCollectionManagementDescription": "Enviado email de cobranza",
"lastCollectionManagementDate": "2026-03-20",
"issuedDate": "2026-01-29",
"cancelDate": null,
"confirmDate": null,
"originalDueDate": "2026-03-01",
"creditNoteAmount": 0,
"operationDays": 25,
"requestDays": 25,
"siiDescription": "Cedida a Fondo Ejemplo SpA",
"financingAt": "2026-02-02",
"surplusTotal": 10123,
"surplusEffective": 0,
"collectorName": "Roberto Díaz",
"executiveManagerName": "Jane Smith",
"executiveManagerEmail": "jane.smith@example.com",
"exception": false,
"cessionStatus": "Fondo"
}
],
"pagination": {
"total": 1,
"page": 1,
"pageSize": 10,
"totalPages": 1
}
}Parámetros de consulta
Identificador del ejecutivo comercial de cartera. Filtra la cartera a los clientes que ese ejecutivo tiene asignados. Es el mismo valor que llega en el campo commercialExecutivePortfolioId de la respuesta. Si el ejecutivo no tiene clientes o documentos en la cartera pedida, data llega vacío. Se puede combinar con los demás filtros.
x >= 1