Documentos
Crear documentos del tipo venta (Boleta, Factura electrónica, etc) o documentos asociados al proceso de venta (notas de venta, cotizaciones, etc).
Listar documentos generados en Bsale, del tipo venta, pre-venta, despachos, etc. Se puede obtener detalles, referencias, datos generales, etc.
Estructura JSON
Al realizar una petición HTTP, el servicio retornara un JSON con la siguiente estructura:
{
"href": "https://api.bsale.cl/v1/documents/382.json",
"id": 382,
"emissionDate": 1463540400,
"expirationDate": 1464663600,
"generationDate": 1463593575,
"rcofDate": 1464663600,
"number": 1,
"totalAmount": 14280.0,
"netAmount": 12000.0,
"taxAmount": 2280.0,
"exemptAmount": 0,
"exportTotalAmount": 0,
"exportNetAmount": 0,
"exportTaxAmount": 0,
"exportExemptAmount": 0,
"commissionRate": 0,
"commissionNetAmount": 0,
"commissionTaxAmount": 0,
"commissionTotalAmount": 0,
"percentageTaxWithheld": 0,
"purchaseTaxAmount": 0,
"purchaseTotalAmount": 0,
"urlTimbre": null,
"ted": null,
"urlPublicView": "http://app2.bsale.cl/view/2/a2d9b4da5128?sfd=99",
"urlPdf": "http://app2.bsale.cl/view/2/a2d9b4da5128.pdf?sfd=99",
"urlPublicViewOriginal": "http://app2.bsale.cl/view/2/a2d9b4da5128",
"urlPdfOriginal": "http://app2.bsale.cl/view/2/a2d9b4da5128.pdf",
"token": "a2d9b4da5128",
"state": 0,
"userId": 2,
"urlXml": null,
"address": null,
"municipality": null,
"city": null,
"informedSii": 1,
"responseMsgSii": null,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/1.json",
"id": "1"
},
"client": {
"href": "https://api.bsale.cl/v1/clients/7.json",
"id": "7"
},
"office": {
"href": "https://api.bsale.cl/v1/offices/2.json",
"id": "2"
},
"user": {
"href": "https://api.bsale.cl/v1/users/2.json",
"id": "2"
},
"references": {
"href": "https://api.bsale.cl/v1/documents/382/references.json"
},
"document_taxes": {
"href": "https://api.bsale.cl/v1/documents/382/document_taxes.json"
},
"details": {
"href": "https://api.bsale.cl/v1/documents/382/details.json"
},
"sellers": {
"href": "https://api.bsale.cl/v1/documents/382/sellers.json"
}
}
href, url del documento (String).
id, identificador único del documento (Integer).
emissionDate, fecha de emisión del documento (Integer) (no se debe aplicar zona horaria, solo considerar la fecha).
expirationDate, fecha de vencimiento del documento (Integer) (no se debe aplicar zona horaria, solo considerar la fecha).
generationDate, fecha y hora en que se genero el documento (Integer).
rcofDate, fecha de envío RCOF (Integer)
number, folio del documento (Integer).
totalAmount, monto total del documento (Float).
netAmount, monto neto del documento (Float).
taxAmount, monto de impuestos del documento (Float).
exemptAmount, monto exento del documento (Float).
exportTotalAmount, monto total del documento de exportación (Float).
exportNetAmount, monto neto del documento de exportación (Float).
exportTaxAmount, monto de impuestos del documento de exportación (Float).
exportExemptAmount, monto exento del documento de exportación (Float).
commissionRate, porcentaje de la comisión en la liquidación del documento (Float).
commissionNetAmount, monto neto de la comisión en la liquidación del documento (Float).
commissionTaxAmount, monto de impuesto de la comisión en la liquidación del documento (Float).
commissionTotalAmount, monto total de la comisión en la liquidación del documento (Float).
percentageTaxWithheld, porcentaje de impuesto retenido para los documentos de compra (Float).
purchaseTaxAmount, monto de impuesto retenido para los documentos de compra (Float).
purchaseTotalAmount, monto total del documento de compra (Float).
ted, ted del documento en caso de ser electrónico. (String)
urlTimbre, url de la firma de un documento (String).
urlPublicView, url publica para visualizar el documento, con todas sus copias (String).
urlPdf, url del pdf del documento, con todas sus copias (String).
urlPublicViewOriginal, url publica para visualizar el documento, solo muestra el original (String).
urlPdfOriginal, url del pdf del documento, solo muestra el original (String).
token, token único del documento (String).
state, estado del documento indica si el documento esta activo(0) o inactivo (1) (Boolean).
urlXml, respaldo del documento electrónico (String).
address, dirección del documento (String).
municipality, comuna del documento (String).
city, ciudad del documento (String).
informedSii, indica si el documento fue informado al SII, 0 es correcto, 1 es enviado, 2 es rechazado (Integer).
responseMsgSii, respuesta de la declaración del documento al SII en caso de ser electrónico (String).
document_type, nodo que indica el tipo del documento al cual pertenece el documento.
client, nodo que indica el cliente al cual se le emitió el documento.
office, nodo que indica la sucursal a la cual pertenece el documento.
user, nodo que indica el usuario que emitió el documento.
references, nodo que indica las referencias de un documento.
document_taxes, nodo que indica el detalle de impuesto de un documento.
details, nodo que indica los detalles de un documento.
relatedDetailId, id detalle relacionado al documento.
sellers, nodo que indica los vendedores de un documento, pueden ser mas de 1 por ejemplo al emitir un documento a partir de varias notas de venta.
GET lista de documentos
GET /v1/documents.json retorna todos los documentos.
Parametros
limit, limita la cantidad de items de una respuesta JSON, por defecto el limit es 25, el máximo permitido es 50.
offset, permite paginar los items de una respuesta JSON, por defecto el offset es 0.
fields, solo devolver atributos específicos de un recurso
expand, permite expandir instancias y colecciones para traer relaciones en una sola petición.
emissiondate, filtra documentos por la fecha de emisión.
expirationdate, filtra documentos por la fecha de vencimiento.
emissiondaterange, filtra documentos por un rango de fecha.
number, filtra documentos por el folio.
token, filtra documentos por el token.
documenttypeid, filtra documentos por el tipo de documento.
clientid, filtra documentos por el cliente.
clientcode, filtra rut del cliente.
officeid, filtra documentos por la sucursal.
saleconditionid, filtra documentos por la condición de venta.
informedsii, filtra documentos si fue declarado en el SII, 0 es correcto, 1 es enviado, 2 es rechazado (Integer).
codesii, filtra documentos por el código tributario.
totalamount, filtra documentos por el monto total.
referencecode, filtra documentos por el código tributario de una referencia (ej. el código de una orden de compra).
referencenumber, filtra documentos por el folio de una referencia (ej. el folio de una orden de compra).
state, boolean (0 o 1) indica si los documentos están activos(0) inactivos (1).
Ejemplos
GET /v1/documents.json?limit=50&offset=0
GET /v1/documents.json?fields=[number,totalAmount]
GET /v1/documents.json?number=53
GET /v1/documents.json?documenttypeid=1
GET /v1/documents.json?informedsii=0
GET /v1/documents.json?expand=[document_types,client,office,details,payments]
GET /v1/documents.json?emissiondate=1309478400&expirationdate=1309478400&state=0
GET /v1/documents.json?emissiondaterange=[1414800000,1417391990]
GET /v1/documents.json?codesii=33&totalamount=14280
GET /v1/documents.json?referencecode=801
GET /v1/documents.json?referencenumber=123
GET /v1/documents.json?referencecode=801&referencenumber=123
GET /v1/documents.json?rcofdate=1629244800
GET /v1/documents.json?detailid=5350
GET /v1/documents.json?expand=details,payments
Respuesta
{
"href": "https://api.bsale.cl/v1/documents.json",
"count": 3947,
"limit": 3,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/documents/382.json",
"id": 382,
"emissionDate": 1350615600,
"expirationDate": 1350615600,
"rcofDate": 1350615600,
"number": 1,
"totalAmount": 14280,
"netAmount": 12000,
"taxAmount": 2280,
"exemptAmount": 0,
"exportTotalAmount": 0,
"exportNetAmount": 0,
"exportTaxAmount": 0,
"exportExemptAmount": 0,
"commissionRate": 0,
"commissionNetAmount": 0,
"commissionTaxAmount": 0,
"commissionTotalAmount": 0,
"percentageTaxWithheld": 0,
"purchaseTaxAmount": 0,
"purchaseTotalAmount": 0,
"urlTimbre": null,
"ted": null,
"urlPublicView": "http://app2.bsale.cl/view/2/439d299fb053?sfd=99",
"urlPdf": "http://app2.bsale.cl/view/2/439d299fb053.pdf?sfd=99",
"urlPublicViewOriginal": "http://app2.bsale.cl/view/2/439d299fb053",
"urlPdfOriginal": "http://app2.bsale.cl/view/2/439d299fb053.pdf",
"token": "439d299fb053",
"state": 0,
"urlXml": null,
"address": null,
"municipality": null,
"city": null,
"informedSii": 1,
"responseMsgSii": null,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/1.json",
"id": "1"
},
"office": {
"href": "https://api.bsale.cl/v1/offices/2.json",
"id": "2"
},
"user": {
"href": "https://api.bsale.cl/v1/users/2.json",
"id": "2"
},
"references": {
"href": "https://api.bsale.cl/v1/documents/382/references.json"
},
"document_taxes": {
"href": "https://api.bsale.cl/v1/documents/382/document_taxes.json"
},
"details": {
"href": "https://api.bsale.cl/v1/documents/382/details.json"
},
"sellers": {
"href": "https://api.bsale.cl/v1/documents/382/sellers.json"
}
},
{
"href": "https://api.bsale.cl/v1/documents/404.json",
"id": 404,
"emissionDate": 1351047600,
"expirationDate": 1351047600,
"rcofDate": 1351047600,
"number": 1,
"totalAmount": 14280,
"netAmount": 0,
"taxAmount": 0,
"exemptAmount": 0,
"exportTotalAmount": 0,
"exportNetAmount": 0,
"exportTaxAmount": 0,
"exportExemptAmount": 0,
"commissionRate": 0,
"commissionNetAmount": 0,
"commissionTaxAmount": 0,
"commissionTotalAmount": 0,
"percentageTaxWithheld": 0,
"purchaseTaxAmount": 0,
"purchaseTotalAmount": 0,
"urlTimbre": null,
"ted": null,
"urlPublicView": "http://app2.bsale.cl/view/2/ad0496679450?sfd=99",
"urlPdf": "http://app2.bsale.cl/view/2/ad0496679450.pdf?sfd=99",
"urlPublicViewOriginal": "http://app2.bsale.cl/view/2/ad0496679450",
"urlPdfOriginal": "http://app2.bsale.cl/view/2/ad0496679450.pdf",
"token": "ad0496679450",
"state": 0,
"urlXml": null,
"address": null,
"municipality": null,
"city": null,
"informedSii": 1,
"responseMsgSii": null,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/3.json",
"id": "3"
},
"office": {
"href": "https://api.bsale.cl/v1/offices/2.json",
"id": "2"
},
"user": {
"href": "https://api.bsale.cl/v1/users/20.json",
"id": "20"
},
"references": {
"href": "https://api.bsale.cl/v1/documents/404/references.json"
},
"document_taxes": {
"href": "https://api.bsale.cl/v1/documents/404/document_taxes.json"
},
"details": {
"href": "https://api.bsale.cl/v1/documents/404/details.json"
},
"sellers": {
"href": "https://api.bsale.cl/v1/documents/404/sellers.json"
}
},
{
"href": "https://api.bsale.cl/v1/documents/421.json",
"id": 421,
"emissionDate": 1351652400,
"expirationDate": 1351652400,
"rcofDate": 1351652400,
"number": 1,
"totalAmount": 5117000,
"netAmount": 4300000,
"taxAmount": 817000,
"exemptAmount": 0,
"exportTotalAmount": 0,
"exportNetAmount": 0,
"exportTaxAmount": 0,
"exportExemptAmount": 0,
"commissionRate": 0,
"commissionNetAmount": 0,
"commissionTaxAmount": 0,
"commissionTotalAmount": 0,
"percentageTaxWithheld": 0,
"purchaseTaxAmount": 0,
"purchaseTotalAmount": 0,
"urlTimbre": null,
"ted": null,
"urlPublicView": "http://app2.bsale.cl/view/2/f806d6a6ae73?sfd=99",
"urlPdf": "http://app2.bsale.cl/view/2/f806d6a6ae73.pdf?sfd=99",
"urlPublicViewOriginal": "http://app2.bsale.cl/view/2/f806d6a6ae73",
"urlPdfOriginal": "http://app2.bsale.cl/view/2/f806d6a6ae73.pdf",
"token": "f806d6a6ae73",
"state": 0,
"urlXml": null,
"address": "San Francisco 402, jj perez 7248",
"municipality": "Santiago",
"city": "Santiago",
"informedSii": 2,
"responseMsgSii": null,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/4.json",
"id": "4"
},
"client": {
"href": "https://api.bsale.cl/v1/clients/7.json",
"id": "7"
},
"office": {
"href": "https://api.bsale.cl/v1/offices/2.json",
"id": "2"
},
"user": {
"href": "https://api.bsale.cl/v1/users/2.json",
"id": "2"
},
"references": {
"href": "https://api.bsale.cl/v1/documents/421/references.json"
},
"document_taxes": {
"href": "https://api.bsale.cl/v1/documents/421/document_taxes.json"
},
"details": {
"href": "https://api.bsale.cl/v1/documents/421/details.json"
},
"sellers": {
"href": "https://api.bsale.cl/v1/documents/421/sellers.json"
}
}
],
"next": "https://api.bsale.cl/v1/documents.json?limit=3&offset=3"
}
GET único documento
GET /v1/documents/421.json retorna un documento específico.
Parámetros
expand, permite expandir instancias y colecciones.
Ejemplos
GET /v1/documents/421.json?expand=[document_type,office]
Respuesta
{
"href": "https://api.bsale.cl/v1/documents/421.json",
"id": 421,
"emissionDate": 1351652400,
"expirationDate": 1351652400,
"rcofDate": 1351652400,
"number": 1,
"totalAmount": 5117000,
"netAmount": 4300000,
"taxAmount": 817000,
"exemptAmount": 0,
"exportTotalAmount": 0,
"exportNetAmount": 0,
"exportTaxAmount": 0,
"exportExemptAmount": 0,
"commissionRate": 0,
"commissionNetAmount": 0,
"commissionTaxAmount": 0,
"commissionTotalAmount": 0,
"percentageTaxWithheld": 0,
"purchaseTaxAmount": 0,
"purchaseTotalAmount": 0,
"urlTimbre": null,
"ted": null,
"urlPublicView": "http://app2.bsale.cl/view/2/f806d6a6ae73?sfd=99",
"urlPdf": "http://app2.bsale.cl/view/2/f806d6a6ae73.pdf?sfd=99",
"urlPublicViewOriginal": "http://app2.bsale.cl/view/2/f806d6a6ae73",
"urlPdfOriginal": "http://app2.bsale.cl/view/2/f806d6a6ae73.pdf",
"token": "f806d6a6ae73",
"state": 0,
"urlXml": null,
"address": "San Francisco 402, jj perez 7248",
"municipality": "Santiago",
"city": "Santiago",
"informedSii": 2,
"responseMsgSii": null,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/4.json",
"id": "4"
},
"client": {
"href": "https://api.bsale.cl/v1/clients/7.json",
"id": "7"
},
"office": {
"href": "https://api.bsale.cl/v1/offices/2.json",
"id": "2"
},
"user": {
"href": "https://api.bsale.cl/v1/users/2.json",
"id": "2"
},
"references": {
"href": "https://api.bsale.cl/v1/documents/421/references.json"
},
"document_taxes": {
"href": "https://api.bsale.cl/v1/documents/421/document_taxes.json"
},
"details": {
"href": "https://api.bsale.cl/v1/documents/421/details.json"
},
"sellers": {
"href": "https://api.bsale.cl/v1/documents/421/sellers.json"
}
}
GET resumen de documentos emitidos
GET /v1/documents/summary.json retorna resumen.
Parámetros
limit, limita la cantidad de items de una respuesta JSON, si no se envía el limit es 25.
offset, permite paginar los items de una respuesta JSON, si no se envía el offset es 0.
fields, solo devolver atributos específicos de un recurso
expand, permite expandir instancias y colecciones.
emissiondaterange, filtra por rango de fecha de emisión.
generationdaterange, filtra por rango de fecha de generación.
codesii, Código documento basado en los identificadores del SII, pueden ser varios separados por coma.
perdocument, Boolean (0 o 1) indica si el resultado lo agrupa por documento.
Ejemplos
GET /v1/documents.json?limit=10&offset=0
GET /v1/documents/summary.json?emissiondaterange=[1404187200,1406779200]
GET /v1/documents/summary.json?generationdaterange=[1404187200,1406779200]
GET /v1/documents/summary.json?codesii=[33,31]
GET /v1/documents/summary.json?perdocument=1
GET /v1/documents/summary.json?rcofdaterange=[1627776000,1627862400]&codesii=[39]
Respuesta
[
{
"generationDate": "",
"emissionDate": "",
"documentTypeName": "Boleta Electrónica",
"codeSii": "39",
"month": 7,
"year": 2014,
"officeId": 2,
"officeName": "Los Angeles",
"officeCostCenter": "",
"count": 1,
"totalNetAmount": 2791.0,
"totalTaxAmount": 530.0,
"totalAmount": 3321.0,
"totalExemptAmount": 0.0,
"taxes": [
{
"taxId": 1,
"taxName": "IVA",
"taxAmount": 530.0
}
],
"details": [
{
"itemLedgerAccount": "",
"totalNetAmount": 2791.0
}
],
"documentId": 10383,
"documentNumber": 9093
},
{
"generationDate": "",
"emissionDate": "",
"documentTypeName": "Boleta Electrónica",
"codeSii": "39",
"month": 7,
"year": 2014,
"officeId": 2,
"officeName": "Los Angeles",
"officeCostCenter": "",
"count": 1,
"totalNetAmount": 15132.0,
"totalTaxAmount": 2875.0,
"totalAmount": 18007.0,
"totalExemptAmount": 0.0,
"taxes": [
{
"taxId": 1,
"taxName": "IVA",
"taxAmount": 2875.0
}
],
"details": [
{
"itemLedgerAccount": "",
"totalNetAmount": 15132.0
}
],
"documentId": 10384,
"documentNumber": 9094
}
]
GET resumen de ventas Boletas electrónicas
GET /v1/documents/summary/ticket.json retorna resumen.
Parámetros
rcofdaterange, Filtra por rango de fecha de RCOF
Ejemplos
GET /v1/documents/summary/ticket.json?rcofdaterange=[1635724800,1638230400]
Respuesta
[
{
"codeSii": "39",
"documentTypeName": "BOLETA ELECTRÓNICA T",
"count": 233,
"totalNetAmount": 432340.0,
"totalExemptAmount": 123333.0,
"totalIvaAmount": 324344.0,
"totalAmount": 7787654.0
}
]
GET detalles de un documento
GET /v1/documents/12644/details.json
{
"href": "https://api.bsale.cl/v1/documents/12644/details.json",
"count": 1,
"limit": 25,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/documents/12644/details/23596.json",
"id": 23596,
"quantity": 1.0,
"netUnitValue": 4193,
"totalUnitValue": 4990,
"netAmount": 4193.0,
"taxAmount": 797.0,
"totalAmount": 4990.0,
"netDiscount": 0.0,
"totalDiscount": 0.0,
"variant": {
"href": "https://api.bsale.cl/v1/variants/418.json",
"id": 418,
"description": "Radio reloj",
"code": "1375139891"
}
}
]
}
GET un detalle de un documento
GET /v1/documents/2467/details/3216.json
{
"href": "https://api.bsale.cl/v1/documents/2467/details/3216.json",
"id": 3216,
"lineNumber": 0,
"quantity": 1.0,
"netUnitValue": 343434,
"totalUnitValue": 617882,
"netAmount": 343434.0,
"taxAmount": 274448.0,
"totalAmount": 617882.0,
"netDiscount": 0.0,
"totalDiscount": 0.0,
"variant": {
"href": "https://api.bsale.cl/v1/variants/5172.json",
"id": 5172,
"description": "sssss",
"code": "16104856624263"
},
"note": "",
"relatedDetailId": 3215
}
GET referencias de un documento
GET /v1/documents/11561/references.json
{
"href": "https://api.bsale.cl/v1/documents//references.json",
"count": 2,
"limit": 25,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/documents/11561/references/5.json",
"id": 5,
"referenceDate": 1407643200,
"number": "123",
"reason": "Orden de Compra 123",
"dte_code": {
"href": "https://api.bsale.cl/v1/dte_codes/20.json",
"id": "20"
}
},
{
"href": "https://api.bsale.cl/v1/documents/11561/references/6.json",
"id": 6,
"referenceDate": 1407643200,
"number": "456",
"reason": "Guia despacho 456",
"dte_code": {
"href": "https://api.bsale.cl/v1/dte_codes/15.json",
"id": "15"
}
}
]
}
GET una única referencia de un documento
GET /v1/documents/11561/references/5.json
{
"href": "https://api.bsale.cl/v1/documents/11561/references/5.json",
"id": 5,
"referenceDate": 1407643200,
"number": "123",
"reason": "Orden de Compra 123",
"dte_code": {
"href": "https://api.bsale.cl/v1/dte_codes/20.json",
"id": "20"
}
}
GET impuestos de un documento
GET /v1/documents/12644/document_taxes.json
{
"href": "https://api.bsale.cl/v1/documents/12644/document_taxes.json",
"count": 1,
"limit": 25,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/documents/12644/document_taxes/12626.json",
"id": 12626,
"totalAmount": 797.0,
"exemptAmount": 0.0,
"tax": {
"href": "https://api.bsale.cl/v1/taxes/1.json",
"id": "1"
}
}
]
}
GET un impuesto de un documento
GET /v1/documents/12644/document_taxes/12626.json
{
"href": "https://api.bsale.cl/v1/documents/12644/document_taxes/12626.json",
"id": 12626,
"totalAmount": 797.0,
"exemptAmount": 0.0,
"tax": {
"href": "https://api.bsale.cl/v1/taxes/1.json",
"id": "1"
}
}
GET vendedores de un documento
GET /v1/documents/421/sellers.json
{
"href": "https://api.bsale.cl/v1/documents/421/sellers.json",
"count": 1,
"limit": 25,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/users/2.json",
"id": 2,
"firstName": "Demo",
"lastName": "Bsale"
}
]
}
GET costos de una venta
GET /v1/documents/costs.json
Entrega los costos asociados a una venta solo si los productos fueron despachados (entregados).
Parámetros
documentid, filtra por el id del documento.
number, filtra documentos por el folio.
codesii, filtra documentos por el código tributario.
Ejemplos
GET /v1/documents/costs.json?documentid=145071
GET /v1/documents/costs.json?codesii=33&number=320
{
"href": "https://api.bsale.cl/v1/documents/145071.json",
"id": 145071,
"name": "FACTURA ELECTRONICA",
"number": 320,
"totalCost": 37949.0,
"cost_detail": [
{
"variant": {
"href": "https://api.bsale.cl/v1/variants/6884.json",
"id": 6884,
"description": "Morado",
"code": "DD1009M"
},
"shipping_detail": {
"href": "https://api.bsale.cl/v1/shippings/121576/details/290425.json",
"id": 290425,
"quantity": 1.0,
"variantStock": 0.0,
"variantCost": 25611.0,
"variantTotalCost": 25611.0
}
},
{
"variant": {
"href": "https://api.bsale.cl/v1/variants/11272.json",
"id": 11272,
"description": "Morado",
"code": "CE3703"
},
"shipping_detail": {
"href": "https://api.bsale.cl/v1/shippings/121576/details/290426.json",
"id": 290426,
"quantity": 1.0,
"variantStock": 0.0,
"variantCost": 4948.0,
"variantTotalCost": 4948.0
}
},
{
"variant": {
"href": "https://api.bsale.cl/v1/variants/6949.json",
"id": 6949,
"description": "Rojo",
"code": "HB1026"
},
"shipping_detail": {
"href": "https://api.bsale.cl/v1/shippings/121576/details/290427.json",
"id": 290427,
"quantity": 2.0,
"variantStock": 15.0,
"variantCost": 3695.0,
"variantTotalCost": 7390.0
}
}
]
}
href, url del documento (String).
id, identificador único del documento (Integer).
name, Nombre del documento (String.)
number, folio del documento (Integer).
totalCost, costo total del documento (Float).
cost_detail, nodo que indica el costo de cada variante (variant) y salida de stock (shipping_detail).
GET atributos dinamicos de un documento
GET /v1/documents/9682/attributes.json
Respuesta
{
"href": "https://api.bsale.cl/v1/documents/9682/attributes.json",
"count": 3,
"limit": 25,
"offset": 0,
"items": [
{
"href": "https://api.bsale.cl/v1/dynamic_attributes/70.json",
"id": 70,
"name": "DETALLE DE PAGO",
"value": ""
},
{
"href": "https://api.bsale.cl/v1/dynamic_attributes/90.json",
"id": 90,
"name": "Tipo Descuento",
"value": ""
},
{
"href": "https://api.bsale.cl/v1/dynamic_attributes/92.json",
"id": 92,
"name": "SubTotal Venta",
"value": ""
}
]
}
GET cantidad de documentos
GET /v1/documents/count.json
Parámetros
state, permite filtrar por estado, activos (0) inactivos (1).
Respuesta
{
"count": 1449
}
POST un documento
POST /v1/documents.json
Para crear un documento de venta ya sea electrónico (Factura y Boleta Electrónica) o no (Nota de venta, Factura y Boleta manual), se debe enviar un JSON con la siguiente estructura:
Referencias y Fechas
{
"documentTypeId": 8,
"officeId": 1,
"priceListId": 18,
"emissionDate": 1407715200,
"expirationDate": 1407715200,
"declareSii": 1
}
documentTypeId, Id del tipo de documento que indicara si es factura, boleta, nota de venta etc. (Integer).
officeId, Id de la sucursal donde se emite el documento, si no es especificada el documento quedara asignado a la sucursal por defecto del sistema (Integer).
priceListId, Id de la lista de precio utilizada por el documento, si no es especificada se utilizara la lista de precio por defecto de la sucursal (Integer).
emissionDate, Fecha de emisión del documento (Integer) (no se debe aplicar zona horaria, solo considerar la fecha).
expirationDate, Fecha vencimiento del documento (Integer) (no se debe aplicar zona horaria, solo considerar la fecha).
declareSii, Si se desea declarar el documento al Servicio de impuestos internos se envía 1, en caso contrario un 0 (Boolean).
Opcionalmente puedes utilizar el parámetro codeSii en vez de documentTypeId si conoces el código tributario del documento.
{
"codeSii": 39,
"officeId": 1,
"priceListId": 18,
"emissionDate": 1407715200,
"expirationDate": 1407715200,
"declareSii": 1
}
Si se necesita generar una liquidación de factura, se debe enviar el porcentaje de la comisión (commissionRate) junto al tipo de documento que se desea liquidar (commissionCodeSii).
{
"codeSii": 39,
"officeId": 1,
"priceListId": 18,
"emissionDate": 1407715200,
"expirationDate": 1407715200,
"declareSii": 1,
"commissionRate": 20,
"commissionCodeSii": 33
}
Si se necesita generar una factura de compra, puedes enviar el porcentaje de impuesto que deseas retener (percentageTaxWithheld) en este caso es 35%.
{
"codeSii": 46,
"officeId": 1,
"priceListId": 18,
"emissionDate": 1407715200,
"expirationDate": 1407715200,
"declareSii": 1,
"percentageTaxWithheld": 35
}
Es posible que puedas asociar un vendedor diferente al que hace la petición para crear el documento, para eso debes enviar el atributo sellerId, con el id vendedor en Bsale.
{
"sellerId": 5
}
Si vas a entregar inmediatamente tus productos puedes enviar el atributos dispatch en 1 el cual despacha y rebaja el stock de los productos, esto funcionara siempre y cuando el producto tenga stock en la sucursal indicada.
{
"dispatch": 1
}
Renovaciones en nota de venta (opcional)
Para documentos pre-venta, es posible que desees facturar de forma recurrente, puedes enviar una renovación a la pre-venta para que en cierta fecha esté disponible a facturar. (Ver más)
{
"renovationId": 1,
"renovationDate": 1585160716
}
renovationId, Identificador del evento de renovación.
renovationDate, Fecha de la renovación.
Cliente del documento (opcional)
En algunos documentos no es necesario agregar el cliente como en el caso de la boleta, sin embargo, para la factura es obligatorio.
{
"client": {
"code": "1-9",
"city": "Puerto Varas",
"company": "Imaginex",
"municipality": "comuna",
"activity": "giro",
"address": "direccion",
"email": "someemail@imaginex.cl",
"companyOrPerson": 1
},
}
code, Rut del cliente (String).
city, Ciudad del cliente (String).
company, Razón social del cliente (String).
municipality, Comuna del cliente (String).
activity, Giro del cliente (String).
address, Dirección del cliente (String).
email, indica el correo electronico del cliente (String).
companyOrPerson, indica si el cliente es persona natural o empresa (0)Persona o (1)Empresa (Boolean).
firstName: Nombre de persona
lastName: Apellido de persona
Opcionalmente puedes utilizar el parámetro clientId si el cliente ya esta creado en Bsale y conoces su identificador.
{
"clientId": 24
}
Si tienes una dirección ya ingresada en Bsale para ese cliente, puedes enviar el id de esa dirección en el parámetro addressId.
{
"clientId": 24,
"addressId": 8
}
Si el cliente es extranjero se debe enviar el atributo isForeigner en 1, por defecto este valor es 0, esto es necesario para los documentos de exportación.
{
"client": {
"code": "1-9",
"city": "Puerto Varas",
"company": "Imaginex",
"municipality": "comuna",
"activity": "giro",
"address": "direccion",
"email": "someemail@imaginex.cl",
"isForeigner": 1
},
}
Si necesitas que Bsale envié el documento al correo del cliente puedes agregar a la raíz del JSON el atributo sendEmail, es decir, fuera del nodo client:
{
"client": {
"code": "1-9",
"city": "Puerto Varas",
"company": "DEMO API BSALE SA",
"municipality": "Comuna",
"activity": "Giro Informática",
"address": "Dirección",
"email": "api@bsale.cl",
"isForeigner": 1,
"companyOrPerson": 1
},
"sendEmail": 1
}
Detalles del documento
En el caso de manejar tu stock con Bsale, el detalle tendría una estructura similar a:
{
"details": [
{
"variantId": 1,
"netUnitValue": 53975,
"quantity": 1,
"taxId": "[1,2]",
"discount": 0,
}
]
}
En el caso de solo necesitar declarar documentos en el SII con Bsale, el detalle tendría una estructura similar a:
{
"details": [
{
"netUnitValue": 53975,
"quantity": 1,
"taxId": "[1,2]",
"comment": "el nombre del producto que voy a vender",
"discount": 5
}
],
}
También es posible especificar los impuestos, enviando su código tributario y el porcentaje que se le quiere aplicar al producto.
{
"details": [
{
"netUnitValue": 53975,
"quantity": 1,
"taxes": [
{
"code": 14,
"percentage": 19
},
{
"code": 35,
"percentage": 46.9
}
],
"comment": "el nombre del producto que voy a vender",
"discount": 5
}
],
}
*El 'percentage' enviado, actualizará el porcentaje usado en la configuración de Bsale.
Si se desea generar un documento a partir de otro, se debe enviar el identificador del detalle del documento original:
{
"details": [
{
"detailId": 105,
"quantity": 1
}
],
}
es decir no se envía el id de la variante y el atributo "comment" contiene el nombre del producto que voy a vender.
variantId, Id de la variante que indicara cual variante es la que se esta vendiendo de la variante (Integer).
code, De forma alternativa al Id, se puede utilizar el SKU de la variante (String).
barCode, De forma alternativa al Id, se puede utilizar el código de barras de la variante (String).
netUnitValue, Valor unitario neto de la variante, este valor es sin impuestos (Float).
quantity, Cantidad de la variante que se esta vendiendo (Integer).
taxId, Arreglo de identificadores de los impuestos a utilizar, estos tienen que ir dentro de "[]" (String).
comment, Descripción breve de la variante (String).
discount, Porcentaje del descuento si se desea aplicar uno. (Float).
Es muy importante que se envíen los impuestos por cada detalle, de lo contrario el documento saldrá exento.
Pagos asociados al documento (opcional)
Se pueden especificar los pagos asociados al documento, se requiere un nodo similar a:
{
"payments": [
{
"paymentTypeId": 1,
"amount": 70000,
"recordDate": 1407715200
}
],
}
de lo contrario Bsale detectara la forma de pago por defecto y asignara el monto total del documento a esa forma de pago.
paymentTypeId, Id de la forma de pago utilizada en el pago del documento (Integer).
amount, monto del pago del documento (Integer).
recordDate, Fecha en la cual se realizo el pago del documento, se envía en formato GMT (Integer).
Referencias de documentos (opcional)
Se pueden enviar referencias par aun documento como ordenes de compra, guías de despacho etc. Se requiere un nodo similar a:
{
"references": [
{
"number": "123",
"referenceDate": 1407715200,
"reason": "Orden de Compra 123",
"codeSii": 801
}
],
}
number, Folio del documento de referencia (String).
referenceDate, Fecha del documento de referencia (Integer).
reason, Razón del documento (String).
codeSii, Código tributario del documento de referencia (Integer).
Atributos dinámicos (opcional)
En el caso de necesitar agregar atributos adicionales al documento, se necesita un nodo similar a:
{
"dynamicAttributes": [
{
"description": "098",
"dynamicAttributeId": 17
},
{
"description": "nombre",
"dynamicAttributeId": 18
}
],
}
description, Valor del atributo (String).
dynamicAttributeId, Id de la atributo dinámico (Integer).
Para usar atributos adicionales deben primero deben crearse y referenciar su id.
Id referencia externa (opcional)
Se pueden enviar un id de referencia propio de su sistema para evitar duplicidad de emisión. La API buscará por el id al hacer POST de un documento, y si ya existe retornará el documento que se generó previamente en vez de generar uno nuevo.
{
"salesId": "AAA000012"
}
salesId, ID de referencia (String 255).
Ejemplo de estructura JSON
{
"documentTypeId": 8,
"officeId": 1,
"emissionDate": 1407715200,
"expirationDate": 1407715200,
"declareSii": 1,
"priceListId": 18,
"client": {
"code": "1-9",
"city": "Puerto Varas",
"company": "Imaginex",
"municipality": "comuna",
"activity": "giro",
"address": "direccion"
},
"details": [
{
"variantId": 1,
"netUnitValue": 53975,
"quantity": 1,
"taxId": "[1,2]",
"comment": "Producto 1",
"discount": 0
}
],
"payments": [
{
"paymentTypeId": 1,
"amount": 70000,
"recordDate": 1407715200
}
],
"references": [
{
"number": 123,
"referenceDate": 1407715200,
"reason": "Orden de Compra 123",
"codeSii": 801
}
],
"dynamicAttributes": [
{
"description": "098",
"dynamicAttributeId": 17
},
{
"description": "nombre",
"dynamicAttributeId": 18
}
]
}
Respuesta
{
"urlTimbre": "http://s3.amazonaws.com/bsale/timbres/T33_F933.png",
"client": {
"href": "https://api.bsale.cl/v1/clients/211.json",
"id": "211"
},
"address": "direccion valida",
"token": "a1a3291afd78",
"userId": 1,
"exemptAmount": 0.0,
"office": {
"href": "https://api.bsale.cl/v1/offices/1.json",
"id": "1"
},
"urlXml": " ",
"expirationDate": 1407643200,
"municipality": "puerto montt",
"netAmount": 53975.0,
"totalAmount": 74486.0,
"document_type": {
"href": "https://api.bsale.cl/v1/document_types/8.json",
"id": "8"
},
"taxAmount": 20511.0,
"number": 933,
"href": "https://api.bsale.cl/v1/documents/11561.json",
"emissionDate": 1407643200,
"urlPdf": "http://app.bsale.cl/view/339/a1a3291afd78.pdf",
"id": 11561,
"references": {
"href": "https://api.bsale.cl/v1/documents/11561/references.json"
},
"city": "puerto montt",
"state": 0
}
DELETE un documento
DELETE /v1/documents/30.json?officeId=2 elimina un documento.
Se debe enviar la sucursal en la cual se eliminara el documento
Ejemplos de casos usando Postman
POST Boleta
Caso 1: Detalles usando glosa
POST Boleta
Caso 2: Detalles afectos y detalle exento
POST Boleta
Caso 3: Detalles usando Sku o código de barra (control stock)
POST Boleta
Caso 4: Envío con multiples formas de pago y vuelto
POST Factura
Caso 5: Impuestos adicionales y descuento en 1 detalle
POST Factura
Caso 6: Referencia cliente creado y orden de compra
POST Factura
Caso 7: Forma de Pago crédito y condición de venta
POST Factura
Caso 8: Cliente extranjero y atributo adicional al documento
POST Factura exportación
Caso 9: Ejemplo completo