Majim-e

Documentación API

EB.Api.Security · EB.Api.Adapter — v1 / v2

v1 / v2 ← Volver al sitio
🔐

AuthenticationController

Base: /api/v1/Authentication

POST /api/v1/Authentication/Authenticate Anonymous

Autentica un usuario estándar (roles Admin / User). Devuelve JWT Bearer token.

Request — AuthenticateRequest
CampoTipoReq
Usernamestring
Passwordstring
Ejemplo
{ "Username": "john.doe", "Password": "Pass123!" }
Respuesta 200 — AuthenticateResponse
{
  "ID": "usr_001", "Name": "John", "LastName": "Doe",
  "Phone": "3001234567", "Username": "john.doe",
  "Email": "john@example.com",
  "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "Role": "Admin", "CompanyKey": "COMP001"
}
Códigos
200OK
401Credenciales inválidas
400Datos inválidos
📋

Modelos — Security

AuthenticateRequest

Request
CampoTipo
Usernamestring
Passwordstring

AuthenticateResponse

Response
CampoTipoDescripción
IDstringID del usuario
Name / LastNamestringNombre y apellido
Phone / EmailstringContacto
UsernamestringUsername de acceso
TokenstringJWT Bearer token
RolestringAdmin | User | Sudo | Broker | Seller
CompanyKeystringCódigo de empresa/tenant
Autenticación: Todos los endpoints (excepto ValidateByCufe) requieren header Authorization: Bearer <token> obtenido desde EB.Api.Security. El tenant se extrae automáticamente del JWT.
📄

DocumentController v1

Base: /api/v1/Document

POST /api/v1/Document User · Admin

Procesa un documento electrónico individual. Guarda fuente en storage y dispara transformación XML asíncrona. El tenant se extrae del claim JWT.

Request — DocumentRequest v1 (campos principales)
CampoTipoReqDescripción
DocumentIdstringCódigo único en ERP
ConsecutivelongConsecutivo del documento
InvoiceTypeCodeTypeDocumentEnumTipo: 1=Venta, 2=Exportación, 3=Contingencia, 5=Soporte, 91=NC, 92=ND, 60=SPD, 100=Adjunto
IssueDateDateTimeFecha de emisión
DocumentCurrencyCodestringMoneda (ej: COP)
IsTestboolNoAmbiente de pruebas
ResolutionNumberlongNoNúmero de resolución
ResolutionPrefixstringNoPrefijo de resolución
ClientIDstringIdentificación del cliente
ClientIdentificationTypeintTipo ID (11=RC,12=TI,13=CC,22=CE,31=NIT,41=Pasaporte…)
ClientAdditionalAccountIDintTipo organización (1=Persona jurídica, 2=Persona natural)
ClientRegistrationNamestringRazón social
ClientNamestringNombre comercial
ClientEmailstringEmail del cliente
ClientObligationsList<string>Obligaciones tributarias
ClientPartyTaxList<TaxScheme>Impuestos del cliente
ClientCountrySubentityCodestringCódigo departamento
ClientCityCode / CityNamestringCódigo y nombre ciudad
ClientAddressLinestringDirección
ClientCountryIdentificationCodestringCódigo país (ej: CO)
PaymentIDstringForma pago: 1=Contado, 2=Crédito
PaymentCodestringMedio de pago DIAN
PaymentDateDateTime?Sí si créditoFecha vencimiento pago
TotalGrossdecimalTotal bruto antes de impuestos
TotalTaxBasedecimalBase gravable
TotalGrossPlusTaxesdecimalTotal bruto con impuestos
TotalPayableAmountdecimalTotal a pagar
TotalDiscountsdecimal?NoTotal descuentos
TaxTotalsList<TaxTotal>Totales de impuestos
WithholdingTaxTotalsList<TaxTotal>NoRetenciones
DocumentLinesList<DocumentLine>Líneas del documento
AllowanceChargesList<AllowanceCharge>NoCargos y descuentos globales
DocRefId / DocRefCufestringNC/NDReferencia a documento origen (notas)
DocRefCreditNoteConceptstringNCConcepto de nota crédito
DocRefDebitNoteConceptstringNDConcepto de nota débito
BatchExternalIdstringNoID de lote si es parte de envío masivo
SectorTypeCodeSectorTypeNoSector: 0=General, 1=Salud
SendAutomaticEmailbool?NoForzar envío de email
Ejemplo mínimo
{
  "DocumentId": "FV-001",
  "Consecutive": 1,
  "InvoiceTypeCode": 1,
  "IssueDate": "2025-04-01T00:00:00",
  "DocumentCurrencyCode": "COP",
  "ResolutionNumber": 18760000001,
  "ResolutionPrefix": "FV",
  "ClientID": "900123456",
  "ClientIdentificationType": 31,
  "ClientDigitCheck": "7",
  "ClientAdditionalAccountID": 1,
  "ClientRegistrationName": "Empresa SAS",
  "ClientName": "Empresa SAS",
  "ClientEmail": "cliente@empresa.com",
  "ClientObligations": ["O-13"],
  "ClientPartyTax": [{ "ID": "ZZ", "Name": "No aplica" }],
  "ClientCountrySubentityCode": "11",
  "ClientCountrySubentity": "Bogotá D.C.",
  "ClientCityCode": "11001",
  "ClientCityName": "Bogotá",
  "ClientCountryIdentificationCode": "CO",
  "ClientCountryName": "Colombia",
  "ClientLanguage": "es",
  "ClientAddressLine": "Calle 100 # 10-20",
  "PaymentID": "1",
  "PaymentCode": "10",
  "TotalGross": 100000,
  "TotalTaxBase": 100000,
  "TotalGrossPlusTaxes": 119000,
  "TotalPayableAmount": 119000,
  "TaxTotals": [{ "TaxAmount": 19000, "TaxSubtotals": [{ "TaxAmount": 19000, "Percent": 19, "TaxableAmount": 100000, "TaxScheme": { "ID": "01", "Name": "IVA" } }] }],
  "DocumentLines": [{
    "LineExtensionAmount": 100000,
    "BaseQuantity": 1,
    "UnitCode": "EA",
    "Description": "Servicio profesional",
    "StandardItemIdentificationID": "SRV001",
    "StandardItemIdentificationCode": "999",
    "TaxTotals": [{ "TaxAmount": 19000, "TaxSubtotals": [{ "TaxAmount": 19000, "Percent": 19, "TaxableAmount": 100000, "TaxScheme": { "ID": "01", "Name": "IVA" } }] }]
  }]
}
Códigos
200Procesando (async)
400Request inválido
401No autorizado
GET /api/v1/Document/ValidateByCufe?cufe={cufe} API Key Header

Valida un documento por CUFE/CUDE. Usa autenticación por API Key en header (no Bearer token).

Autenticación especial: En lugar de JWT, enviar la API Key en el header configurado por ValidateDocument:ApiKeyHeaderAttribute. El endpoint es [AllowAnonymous] pero requiere este header.
Query param
ParamTipoDescripción
cufestringCUFE/CUDE/CUDS del documento a validar
Respuesta 200 — ValidateByCufeResponse
CampoTipoDescripción
CufestringCUFE del documento
IssueDateDateTimeFecha de emisión
ResponseEventResponseBaseRespuesta de la DIAN
DocumentReferenceEventDocReferenceBaseReferencia del documento
AccountingCustomerEventPartyDatos del adquirente
Códigos
200OK
404No encontrado
401API Key inválida
📦

BatchController

Base: /api/v1/Batch

POST /api/v1/Batch User · Admin

Procesa un lote de documentos almacenados en storage externo. Dispara transformación masiva asíncrona.

Request — BatchUploadDocumentsRequest
CampoTipoReqDescripción
BatchExternalIdstringID único del lote
ContainerNamestringNombre del contenedor (empresa)
NumberOfFilesintNúmero de archivos en el lote
Respuesta 200
{ "GUID": "a1b2c3...", "Message": "Batch processing started" }
Códigos
200Iniciado
400Request inválido
500Error interno
POST /api/v1/Batch/ProcessPdfFiles User · Admin

Carga archivos PDF del directorio de lote al storage y genera representaciones gráficas.

Request — BatchUploadDocumentsRequest
CampoTipoDescripción
BatchExternalIdstringID del lote
ContainerNamestringContenedor destino
NumberOfFilesintCantidad de archivos PDF
Códigos
200OK
400Inválido
GET /api/v1/Batch/{BatchExternalId} User · Admin

Consulta el estado y detalle de un lote por su ID externo.

Path param
ParamTipo
BatchExternalIdstring
Códigos
200Detalle del lote
404No encontrado
⚙️

EventController

Base: /api/v1/Event

POST /api/v1/Event Payroll · Admin

Procesa un evento sobre un documento existente: acuse de recibo, aceptación, rechazo.

Request — EventRequest
CampoTipoReqDescripción
UUIDstringCUFE/CUDE/CUDS del documento
Actionint30=Acuse recibo, 31=Rechazo, 32=Aceptación mercancía, 33=Aceptación expresa
EventIdstringID único del evento en la empresa
IsTestboolNoAmbiente de pruebas
ActionName / ActionLastNamestringNoNombre del responsable
ActionIdentificationTypeintNoTipo ID responsable (11-42, 50, 91)
ActionIdentificationNumberstringNoNúmero de ID
ActionTitle / ActionAreastringNoCargo y área del responsable
ClaimCodeint?Sí si Action=31Motivo rechazo: 1=Inconsistencias, 2=Entrega parcial mercancía, 3=Entrega parcial servicio, 4=Servicio no prestado
Ejemplo
{
  "UUID": "fe6e2bf4abc1234567890abcdef1234567890abc1234567890abc12345678901234",
  "Action": 30,
  "EventId": "EVT-001",
  "ActionName": "John",
  "ActionLastName": "Doe",
  "ActionIdentificationType": 13,
  "ActionIdentificationNumber": "12345678"
}
Códigos
200Procesado
400Request inválido
💼

PayrollController

Base: /api/v1/Payroll

POST /api/v1/Payroll Payroll · Admin

Procesa un documento de nómina electrónica. Genera CUNE y envía a la DIAN.

Request — PayrollRequest (campos principales)
CampoTipoReqDescripción
DocumentIdstringID del documento
IssueDateDateTimeFecha de emisión
DocumentTypePayrollDocumentTypeTipo de nómina
IsTestboolNoPruebas DIAN
PayrollPeriodPeriodTypePeríodo de pago
Prefix / Consecutivestring / longPrefijo y consecutivo
CurrencyCodestringMoneda (ej: COP)
NoveltyCUNEstringNoCUNE si es novedad
PeriodIncomeSettlementDateDateTimeInicio período liquidación
PeriodEndSettlementDateDateTimeFin período liquidación
EmployeePayrollEmployeeDatos del empleado
LocationLocationUbicación
PaymentMeanPaymentMeanTypeForma de pago
PaymentMethodstringMétodo de pago
PaymentDateDateTimeFecha de pago
AccrualsList<Accrued>Devengados
DeductionsList<Deduction>Deducciones
TotalAccruedTotalAmountdecimalTotal devengado
TotalDeductionTotalAmountdecimalTotal deducido
TotalPayableAmountdecimalNeto a pagar
PayrollReferencePayrollReferenceNoReferencia a nómina anterior (novedades)
PayrollEmployee
CampoTipoDescripción
Type / SubTypeenumTipo y subtipo de empleado
IdentificationTypePayrollIdentificationTypeTipo de identificación
IdentificationstringNúmero de documento
Surname / SecondSurname / NamestringApellidos y nombre
ContractStartDateDateTime?Fecha inicio contrato
IntegralSalaryboolSalario integral
SalarydecimalSalario base
ContractTypeContractTypeEnumTipo de contrato
Códigos
200Procesando
400Request inválido
GET /api/v1/Payroll/Trace/{TrackId} User · Admin

Consulta el estado de procesamiento de una nómina por TrackId.

Path param
ParamTipo
TrackIdstring
Códigos
200Estado del proceso
404No encontrado
🔍

TraceController

Base: /api/v1/Trace

GET /api/v1/Trace/{TrackId} User · Admin

Consulta el estado de procesamiento de un documento por TrackId (GUID generado en el proceso).

Path param
ParamTipo
TrackIdstring
Códigos
200Estado del proceso
404No encontrado
GET /api/v1/Trace/QueryByERPDocumentIdAsync/{DocumentId} User · Admin

Consulta el estado de procesamiento por el ID del documento en el ERP (DocumentId enviado originalmente).

Path param
ParamTipo
DocumentIdstring
Códigos
200Estado del proceso
404No encontrado
📎

LoadPdfController

Base: /api/v1/LoadPdf

POST /api/v1/LoadPdf User · Admin

Carga un PDF en base64 asociado a un documento existente y lo almacena en storage.

Request — LoadPdfRequest
CampoTipoReqDescripción
DocumentIdstringID del documento ERP al que pertenece el PDF
Base64ContentstringContenido del PDF codificado en Base64
Ejemplo
{ "DocumentId": "FV-001", "Base64Content": "JVBERi0xLjQK..." }
Códigos
200Cargado
400Inválido
404Documento no encontrado
📋

Modelos — Adapter

TaxScheme

Compartido
CampoTipoDescripción
IDstring01=IVA, 02=IC, 03=ICA, 04=INC, 05=ReteIVA, 06=ReteRenta, 07=ReteICA, 08=IC Porcentual, ZZ=No aplica
NamestringNombre del tributo

TaxTotal / TaxSubtotal

Compartido
CampoTipoDescripción
TaxAmountdecimalValor total del impuesto
TaxSubtotalsList<TaxSubtotal>Subtotales por tarifa
TaxSubtotal
TaxAmountdecimalValor del impuesto en este subtotal
TaxableAmountdecimal?Base gravable
Percentdecimal?Porcentaje (ej: 19)
TaxSchemeTaxSchemeTributo aplicado
BaseUnitMeasure / BaseUnitMeasureCodedecimal? / stringBase por unidad (tributos unitarios)
PerUnitAmountdecimal?Valor por unidad

DocumentLine

Request
CampoTipoReqDescripción
LineExtensionAmountdecimalTotal de la línea
BaseQuantitydecimalCantidad
UnitCodestringUnidad de medida UNECE (EA, KGM, LTR…)
DescriptionstringDescripción del bien/servicio
StandardItemIdentificationIDstringCódigo del ítem en el ERP
StandardItemIdentificationCodestringEstándar de codificación (999=interno, 001=EAN, etc.)
PriceAmountdecimal?NoPrecio unitario
TaxTotalsList<TaxTotal>Impuestos de la línea
WithholdingTaxTotalsList<TaxTotal>NoRetenciones de la línea
AllowanceChargesList<AllowanceCharge>NoDescuentos/cargos de la línea
BrandName / ModelNamestringNoMarca y modelo
NotestringNoNota adicional

AllowanceCharge

Request
CampoTipoReqDescripción
ChargeIndicatorbooltrue=cargo, false=descuento
AllowanceChargeReasonstringDescripción del descuento/cargo
AmountdecimalValor
AllowanceTypeAllowanceType1=Valor fijo, 2=Porcentaje
MultiplierFactorNumericdecimalSi %Porcentaje aplicado
BaseAmountdecimalSi %Base para calcular el porcentaje
AllowanceChargeReasonCodeAllowanceCodeNoCódigo de categoría de descuento