Customer API
Customer CRM endpoints and the Agrosystems SAP Business Partner creation contract.
Customer API
Crear cliente SAP
POST /api/customagro/sap-customers
Este endpoint crea un BusinessPartners de tipo cliente en SAP Service Layer.
El contrato es un único request: datos principales, clasificación comercial,
condiciones de pago, vendedor, direcciones y contactos iniciales.
La ruta valida el payload antes de llamar SAP. Después hace el write directo en SAP y deja que SAP devuelva el error exacto si el cliente ya existe o algún campo no es válido.
Autenticación
Requiere sesión activa de Recerc en un workspace Agrosystems/Hydro habilitado.
El sourceKey puede ser agro o hydro; si no se envía, se resuelve desde el
workspace actual.
Request body
Campos requeridos:
cardCode: código SAP del cliente.rut: RUT o identificador tributario que se envía comoFederalTaxID.name: razón social o nombre del cliente.addresses: al menos una dirección. Cada dirección requierenameytype.
Campos comerciales opcionales:
groupCode: código de grupo de cliente SAP. Usa este campo para mantener el flujo en un único request.currency: moneda SAP, por ejemploCLP,USDo##.paymentTermsCodeopaymentTermsName: condición de pago.Contadose normaliza a-1.salesPersonCode: vendedor asociado en SAP.businessActivity: se envía enNotes.
Direcciones:
type: "billing"se envía comobo_BillTo.type: "shipping"se envía comobo_ShipTo.statedebe ser el código exacto que SAP acepta enStatespara el país. Para Chile, Región Metropolitana es13.countryacepta código SAP comoCL;Chiletambién se normaliza aCL.
Contactos:
codese usa comoNameen SAP; si no se envía, se usaname.name,firstName,lastName,position,phone,mobilePhone,emailse envían dentro deContactEmployees.- El primer contacto queda como
ContactPersondel Business Partner.
{
"sourceKey": "agro",
"cardCode": "C000000",
"rut": "11111111-1",
"name": "Cliente prueba Recerc",
"customerType": "customer",
"groupCode": 115,
"currency": "CLP",
"paymentTermsName": "Contado",
"salesPersonCode": 1,
"email": "compras@cliente.cl",
"phone": "+56911111111",
"country": "CL",
"businessActivity": "Cliente creado desde Recerc",
"addresses": [
{
"name": "FACTURA",
"type": "billing",
"street": "Av. Apoquindo 3000",
"city": "Las Condes",
"county": "Las Condes",
"state": "13",
"country": "CL",
"taxCode": "IVA"
},
{
"name": "DESPACHO",
"type": "shipping",
"street": "Av. Apoquindo 3000",
"city": "Las Condes",
"county": "Las Condes",
"state": "13",
"country": "CL",
"taxCode": "IVA"
}
],
"contacts": [
{
"code": "COMPRAS",
"name": "Contacto Compras",
"email": "compras@cliente.cl",
"phone": "+56911111111",
"active": true
}
]
}Respuesta
Creación exitosa:
{
"status": "ok",
"result": {
"sourceKey": "agro",
"mode": "created",
"cardCode": "C000000",
"name": "Cliente prueba Recerc"
}
}Payload inválido:
{
"error": "Invalid SAP customer payload",
"issues": [
{
"path": "addresses",
"message": "Array must contain at least 1 element(s)"
}
]
}Ejemplo curl
curl -X POST "https://app.recerc.com/api/customagro/sap-customers" \
-H "Content-Type: application/json" \
-b "next-auth.session-token=..." \
--data @customer.jsonBorrar cliente SAP
DELETE /api/customagro/sap-customers/{cardCode}?sourceKey=agro
Ruta operacional para borrar clientes de prueba por CardCode. Está restringida
a usuarios con rol admin del workspace. Ejecuta el DELETE directo en SAP; si
el cliente no existe o SAP no permite borrarlo, la respuesta expone el error SAP.
{
"status": "ok",
"result": {
"sourceKey": "agro",
"mode": "deleted",
"cardCode": "C000000"
}
}Obtener payload SAP desde una orden Recerc
GET /api/customagro/sap-sales-documents/payload?orderId={orderId}&kind=quotation&sourceKey=agro
Construye el payload SAP que Recerc generaría para una orden seleccionada, sin
crear ni actualizar nada en SAP. kind acepta quotation o sales-order.
La respuesta queda lista para usar en los endpoints raw de creación o
actualización. Si Recerc detecta datos que probablemente SAP rechazará, devuelve
warnings pero no bloquea la generación del payload.
{
"status": "ok",
"result": {
"sourceKey": "agro",
"documentKind": "quotation",
"orderId": "fFNgQs8YOGPUwo2RngAVj",
"payload": {
"CardCode": "C000000",
"DocDate": "2026-06-11",
"DocDueDate": "2026-06-11",
"TaxDate": "2026-06-11",
"DocCurrency": "CLP",
"SalesPersonCode": 1,
"DocumentLines": [
{
"ItemCode": "ITEM001",
"Quantity": 1,
"UnitPrice": 1000,
"Currency": "CLP",
"WarehouseCode": "ALM1000",
"TaxCode": "IVA"
}
]
},
"warnings": [
{
"code": "sap_sales_item_false",
"message": "Order item 3YvDb3e2YqVmH8xhWinau (C0000018274 - FILTRO 2T S/MALLA) is not marked as SAP SalesItem for Agro. SAP will reject it in DocumentLines.ItemCode.",
"itemId": "3YvDb3e2YqVmH8xhWinau",
"itemCode": "C0000018274"
}
]
}
}Crear cotización SAP raw
POST /api/customagro/sap-quotations
Ejecuta POST Quotations en SAP Service Layer. El contrato recibe el payload
SAP explícito dentro de payload; Recerc valida estructura mínima con el schema
SAP actual y no resuelve datos desde una orden Recerc.
{
"sourceKey": "agro",
"payload": {
"CardCode": "C000000",
"DocDate": "2026-06-11",
"DocDueDate": "2026-06-11",
"TaxDate": "2026-06-11",
"DocCurrency": "CLP",
"SalesPersonCode": 1,
"PaymentGroupCode": -1,
"Comments": "Cotizacion raw creada desde Recerc",
"DocumentLines": [
{
"ItemCode": "ITEM001",
"Quantity": 1,
"UnitPrice": 1000,
"Currency": "CLP",
"WarehouseCode": "ALM1000",
"TaxCode": "IVA"
}
]
}
}Actualizar cotización SAP raw
PATCH /api/customagro/sap-quotations/{docEntry}
Ejecuta PATCH Quotations({docEntry}) con B1S-ReplaceCollectionsOnPatch: true. El body usa el mismo formato que creación.
Cancelar cotización SAP raw
POST /api/customagro/sap-quotations/{docEntry}?sourceKey=agro
Ruta admin para cancelar una Quotation por DocEntry. Ejecuta la acción
Quotations({docEntry})/Cancel en SAP y devuelve el error exacto de Service
Layer si SAP no permite cancelar el documento.
Crear nota de venta SAP raw
POST /api/customagro/sap-sales-orders
Ejecuta POST Orders en SAP Service Layer. El payload se envía como contrato
SAP explícito dentro de payload.
{
"sourceKey": "agro",
"payload": {
"CardCode": "C000000",
"DocDate": "2026-06-11",
"DocDueDate": "2026-06-11",
"TaxDate": "2026-06-11",
"U_f_comp": "13",
"U_via_embarque_vta": "RETIRA CLIENTE",
"SalesPersonCode": 1,
"Comments": "Orden raw creada desde Recerc",
"DocumentLines": [
{
"ItemCode": "ITEM001",
"Quantity": 1,
"UnitPrice": 1000,
"Currency": "CLP",
"WarehouseCode": "ALM1000",
"TaxCode": "IVA"
}
]
}
}Actualizar nota de venta SAP raw
PATCH /api/customagro/sap-sales-orders/{docEntry}
Ejecuta PATCH Orders({docEntry}) con B1S-ReplaceCollectionsOnPatch: true.
El body usa el mismo formato que creación.
Cancelar nota de venta SAP raw
POST /api/customagro/sap-sales-orders/{docEntry}?sourceKey=agro
Ruta admin para cancelar un Order por DocEntry. Ejecuta la acción
Orders({docEntry})/Cancel en SAP y devuelve el error exacto de Service Layer
si SAP no permite cancelar el documento.