La API de Integración de Presupuestos permite que sistemas externos consulten, inserten y gestionen presupuestos generados en Promob. La API sigue una arquitectura RESTful, utiliza autenticación mediante API Key y devuelve datos en formato JSON. Fue desarrollada utilizando Azure Functions.
Características principales:
Autenticación segura mediante API Key.
Respuestas en formato JSON.
Autenticación
La autenticación se realiza mediante una API Key exclusiva. Todas las solicitudes deben contener el encabezado:
X-Integration-ApiKey: su-api-key-aquí.
Endpoints de la API
La API cuenta con endpoints para consulta y descarga de presupuestos.
Solicitudes
1. Consultar Presupuestos (GET /api/Budgets/SearchBudgets)
Permite buscar presupuestos por período y filtros opcionales.
Respuestas posibles:
200 OK: Lista de BudgetInfo en JSON.
204 No Content: No se encontraron presupuestos para los filtros aplicados.
400 Bad Request: Parámetros inválidos o cuerpo malformado.
401 Unauthorized: API Key ausente o inválida.
403 Forbidden: API Key inválida.
Ejemplo de solicitud:
GET https://api-pr-connect-budgets-integrations.promob.com/api/Budgets/SearchBudgets?createdAfter=2024-01-01T00:00:00&createdBefore=2024-12-31T23:59:59&serialNumber=58192707&accountId=3942&systemId=SYS-001
Encabezados:
X-Integration-ApiKey: abc123xyz789
Ejemplo de respuesta (200 OK):
[
{
"id":"8e92b1a5-42d1-4b12-a9e8-3f8c109d22b4",
"lang":"pt-BR",
"createOn":"2026-03-05T14:20:00Z",
"currencySymbol":"R$",
"connectInfo":{
"projectId":"f9e8d7c6-b5a4-4321-0fed-cba987654321",
"projectDesignId":null,
"projectDesignVersionId":null
},
"systemId":"SYS-999",
"accountId":"ACC-888777",
"distribution":"Enterprise",
"serialnumber":"SN-2026-XPT",
"systemRevision":"2026-02-15T08:00:00Z",
"promobVersion":"6.1.2.5",
"connectVersion":"3.1.0",
"metadatas":[
{
"id":"CustomerName",
"value":"Mariana Oliveira"
}
],
"paymentTerms":{
"additionalEntries":[
{
"id":"ADIT-001",
"description":"Tarifa de Instalación",
"operationType":"Service",
"value":"350.00",
"deleted":false,
"systemMd5":"mno456pqr789"
}
],
"terms":[
{
"id":"TERM-999",
"description":"Pago a Plazos",
"hasDownPayment":false,
"selected":true,
"parcelQuantity":10,
"percentualDiscount":5.0,
"parcelValue":1200.00,
"initialValue":0.00,
"parceledTotal":12000.00,
"generalTotal":11750.00,
"calculusValue":12000.00,
"deleted":false,
"hasCustomParcels":false
}
]
},
"pluginId":"9900"
}
]
| IMPORTANTE: Los campos projectDesignId y projectDesignVersionId fueron renombrados a designOptionId y designVersionId, respectivamente, con el fin de estandarizar y clarificar la nomenclatura. Ambos continúan siendo de tipo GUID nullable. |
2. Obtener Presupuesto por ID (GET /api/Budgets/GetBudgetInfoId/{id})
Devuelve un presupuesto específico basado en su identificador único (GUID).
Respuestas posibles:
200 OK: Objeto BudgetInfo devuelto con éxito.
204 No Content: Presupuesto no encontrado.
400 Bad Request: Identificador inválido o malformado.
401 Unauthorized: Error de autenticación (API Key ausente o PluginID inválido).
403 Forbidden: API Key inválida.
Ejemplo de solicitud:
GET https://api-pr-connect-budgets-integrations.promob.com/api/Budgets/GetBudgetInfoId/123e4567-e89b-12d3-a456-426614174000 3. Obtener URI de Descarga del Presupuesto (GET /api/Budgets/{budgetId})
Devuelve la URI para descargar el archivo del presupuesto.
Respuestas posibles:
200 OK: Objeto BudgetInfoURI devuelto con éxito.
204 No Content: Presupuesto no encontrado o no se pudo generar la URI.
400 Bad Request: Parámetros inválidos o malformados.
401 Unauthorized: No autorizado o encabezados inválidos.
403 Forbidden: API Key inválida.
Ejemplo de respuesta:
{
"budgetId": "123e4567-e89b-12d3-a456-426614174000",
"uri": "https://api-pr-connect-budgets-integrations.promob.com/budgets/123e4567-e89b-12d3-a456-426614174000/download"
}
OBSERVACIONES:
|
Modelos de Datos
A continuación, se presentan los principales modelos de datos utilizados por la API. Todas las respuestas siguen el formato JSON.
BudgetInfo contiene los campos: Id, Lang, CreateOn, CurrencySymbol, SystemId, AccountId, Serialnumber, PromobVersion, ConnectInfo, PaymentTerms, PluginId.
ConnectInfo contiene: ProjectId, DesignOptionId y DesignVersionId.
PaymentTerms contiene: AdditionalEntries y Terms.
Códigos de Respuesta HTTP
La API utiliza los códigos HTTP estándar para indicar el estado de las solicitudes:
200 OK: Éxito con retorno de datos.
201 Created: Recurso creado con éxito.
204 No Content: Solicitud exitosa sin contenido.
400 Bad Request: Error en la solicitud.
401 Unauthorized: Autenticación inválida.
403 Forbidden: Acceso denegado.
404 Not Found: Recurso inexistente.
500 Internal Server Error: Error interno del servidor.
Estructura del archivo budget.json
El archivo budget.json, devuelto en la descarga del presupuesto, contiene información detallada del proyecto, precios totales y categorías del presupuesto.
Objeto Project
El objeto Project identifica el proyecto, la opción de diseño y la versión de diseño asociados al presupuesto.
Campos
Campo | Tipo | Descripción |
| ProjectId | GUID | Identificador del proyecto |
| DesignOptionId | GUID (nullable) | Identificador de la opción de diseño |
| DesignVersionId | GUID (nullable) | Identificador de la versión de diseño |
Campo eliminado
El campo DesignOptionType ha sido descontinuado y ya no se devuelve en el budget.json.
Ejemplo:
"Project": {
"ProjectId": "f9e8d7c6-b5a4-4321-0fed-cba987654321",
"DesignOptionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"DesignVersionId": "11223344-5566-7788-99aa-bbccddeeff00"
}
Objeto TotalPrices
El objeto TotalPrices representa los precios totales consolidados del presupuesto, separados entre precio de pedido (Order) y precio de presupuesto (Budget).
Campos
Campo | Tipo |
| Value | string |
| Order | objeto PriceInfo |
| Budget | objeto PriceInfo |
Estructura del objeto PriceInfo
Campo | Tipo |
| Value | string |
| Items | lista de PriceItem |
Estructura del objeto PriceItem
Campo | Tipo |
| Id | string |
| Description | string |
| Value | string |
Ejemplo:
"TotalPrices": {
"Value": "15000.00",
"Order": {
"Value": "15000.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "15000.00"
}
]
},
"Budget": {
"Value": "14250.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "14250.00"
}
]
}
}
Objeto Categories
La lista Categories agrupa los ítems del presupuesto por categoría, cada una con sus respectivos precios totales.
Campos de cada categoría
Campo | Tipo | Descripción |
| Description | string | Nombre/Descripción de la categoría |
| TotalPrices | objeto TotalPrices | Precios totales de la categoría |
Ejemplo:
"Categories": [
{
"Description": "Cocina",
"TotalPrices": {
"Value": "8500.00",
"Order": {
"Value": "8500.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "8500.00"
}
]
},
"Budget": {
"Value": "8000.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "8000.00"
}
]
}
}
},
{
"Description": "Dormitorio",
"TotalPrices": {
"Value": "6500.00",
"Order": {
"Value": "6500.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "6500.00"
}
]
},
"Budget": {
"Value": "6250.00",
"Items": [
{
"Id": "PRICE-001",
"Description": "Precio de lista",
"Value": "6250.00"
}
]
}
}
}
]