Introducción
Bienvenido a la documentación de la API REST de mynube. En esta página encontrará la explicación de cómo utilizar los diferentes métodos API que esta ofrece para conectarse con el sistema mynube.
Proveemos ejemplos de desarrollo en Shell, Java, JavaScript (NodeJS), C# y PHP. Los ejemplos se encuentran en la sección oscura de la derecha. Puede cambiar el lenguaje de programación con las pestañas en la parte superior derecha. Estos ejemplos son únicamente con fines explicativos y no representan una sugerencia de uso específico ni ofrecen ninguna garantía de las librerías usadas.
El envío de la información se hace en formato JSON. En algunos métodos se deberá utilizar un formato distinto si la documentación lo especifica.
Autenticación
Para autenticarse puede utilizar este código de ejemplo:
curl --location --request GET 'https://api.mynube.com/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
OkHttpClient client = new OkHttpClient().newBuilder().build();
Request request = new Request.Builder()
.url("https://api.mynube.com/")
.method("GET")
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
let axios = require('axios');
let config = {
method: 'get',
url: 'https://api.mynube.com/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Asegurese de cambiar
Llave
por la API key asignada a su establecimiento.
La API mynube usa API Keys para permitir acceso a los métodos que ofrece la API. Para solicitar la habilitación de una API Key contacte al equipo de soporte.
Puesto que es el método de autenticación, la API key es de uso privado y debe permanecer inaccesible fuera del servidor que realiza la solicitud. Es total responsabilidad del cliente el resguardo de la misma para evitar acceso no autorizado a la API de parte del cliente.
La API mynube requiere que se incluya la API Key en todas las solicitudes que se le realizen. Esta debe ser incluida en un header como en el siguiente ejemplo:
X-Api-Key: Llave
Certificación FEL
Certificar un documento
El método de certificación de documentos electrónicos DTE permite registrar un documento electrónico FEL en mynube. El sistema mynube realiza el proceso de firma electrónica y envía el XML firmado al Certificador Megaprint, para que la factura sea autorizada y registrada en la Agencia Virtual de la SAT en Guatemala.
curl --location --request POST 'https://api.mynube.com/v1/fel/certify-dte-json/test' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"tipoDocumento": "FACT",
"correosDestinatarios": "cliente@empresa.com",
"documento": {
"codigoCliente": "10001",
"datosCliente": {
"nit": "7434391",
"nombre": "ANA SANCHEZ",
"direccionCliente": {
"direccion": "CIUDAD",
"municipio": "Guatemala",
"departamento": "Guatemala",
"pais": "GT",
"codigoPostal": "01001"
}
},
"fechaEmision": "2021-01-01T12:00:00-06:00",
"moneda": "GTQ",
"valorTotal": 2900.00,
"aplicaIva": "Si",
"tipoVenta": "Local",
"detalle": [
{
"codigoProducto": "90001",
"cantidad": 2,
"precio": 300.00,
"importeBruto": 600.00,
"descuento": 0,
"total": 600.00,
"descripcion": "Alicate Metal 1",
"bienServicio": "B",
"unidadMedida": ["Unidad", "UNI"]
},
{
"codigoProducto": "90002",
"cantidad": 1,
"precio": 2300.00,
"importeBruto": 2300.00,
"descuento": 0,
"total": 2300.00,
"descripcion": "Alicate Metal 2",
"bienServicio": "B",
"unidadMedida": ["Unidad", "UNI"]
}
]
}
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{"estId":99999,"tipoDocumento":"FACT","correosDestinatarios":"cliente@empresa.com","documento":{"codigoCliente":"10001","datosCliente":{"nit":"7434391","nombre":"ANA SANCHEZ","direccionCliente":{"direccion":"CIUDAD","municipio":"Guatemala","departamento":"Guatemala","pais":"GT","codigoPostal":"01001"}},"fechaEmision":"2021-01-01T12:00:00-06:00","moneda":"GTQ","valorTotal":2900.00,"aplicaIva":"Si","tipoVenta":"Local","detalle":[{"codigoProducto":"90001","cantidad":2,"precio":300.00,"importeBruto":600.00,"descuento":0,"total":600.00,"descripcion":"Alicate Metal 1","bienServicio":"B","unidadMedida":["Unidad","UNI"]},{"codigoProducto":"90002","cantidad":1,"precio":2300.00,"importeBruto":2300.00,"descuento":0,"total":2300.00,"descripcion":"Alicate Metal 2","bienServicio":"B","unidadMedida":["Unidad","UNI"]}]}}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v1/fel/certify-dte-json/test")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"tipoDocumento":"FACT","correosDestinatarios":"cliente@empresa.com","documento":{"codigoCliente":"10001","datosCliente":{"nit":"7434391","nombre":"ANA SANCHEZ","direccionCliente": {"direccion":"CIUDAD", "municipio":"Guatemala", "departamento":"Guatemala", "pais":"GT", "codigoPostal":"01001"}}, "fechaEmision":"2021-01-01T12:00:00-06:00","moneda":"GTQ","valorTotal":2900,"aplicaIva":"Si","tipoVenta":"Local","detalle":[{"codigoProducto":"90001","cantidad":2,"precio":300,"importeBruto":600,"descuento":0,"total":600,"descripcion":"Alicate Metal 1","bienServicio":"B","unidadMedida":["Unidad","UNI"]},{"codigoProducto":"90002","cantidad":1,"precio":2300,"importeBruto":2300,"descuento":0,"total":2300,"descripcion":"Alicate Metal 2","bienServicio":"B","unidadMedida":["Unidad","UNI"]}]}});
var config = {
method: 'post',
url: 'https://api.mynube.com/v1/fel/certify-dte-json/test',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v1/fel/certify-dte-json/test");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{"estId":99999,"tipoDocumento":"FACT","correosDestinatarios":"cliente@empresa.com","documento":{"codigoCliente":"10001","datosCliente":{"nit":"7434391","nombre":"ANA SANCHEZ","direccionCliente":{"direccion":"CIUDAD","municipio":"Guatemala","departamento":"Guatemala","pais":"GT","codigoPostal":"01001"}},"fechaEmision":"2021-01-01T12:00:00-06:00","moneda":"GTQ","valorTotal":2900.00,"aplicaIva":"Si","tipoVenta":"Local","detalle":[{"codigoProducto":"90001","cantidad":2,"precio":300.00,"importeBruto":600.00,"descuento":0,"total":600.00,"descripcion":"Alicate Metal 1","bienServicio":"B","unidadMedida":["Unidad","UNI"]},{"codigoProducto":"90002","cantidad":1,"precio":2300.00,"importeBruto":2300.00,"descuento":0,"total":2300.00,"descripcion":"Alicate Metal 2","bienServicio":"B","unidadMedida":["Unidad","UNI"]}]}}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v1/fel/certify-dte-json/test',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"tipoDocumento": "FACT",
"correosDestinatarios": "cliente@empresa.com",
"documento": {
"codigoCliente": "10001",
"datosCliente": {
"nit": "7434391",
"nombre": "ANA SANCHEZ",
"direccionCliente": {
"direccion": "CIUDAD",
"municipio": "Guatemala",
"departamento": "Guatemala",
"pais": "GT",
"codigoPostal": "01001"
}
},
"fechaEmision": "2021-01-01T12:00:00-06:00",
"moneda": "GTQ",
"valorTotal": 2900.00,
"aplicaIva": "Si",
"tipoVenta": "Local",
"detalle": [
{
"codigoProducto": "90001",
"cantidad": 2,
"precio": 300.00,
"importeBruto": 600.00,
"descuento": 0,
"total": 600.00,
"descripcion": "Alicate Metal 1",
"bienServicio": "B",
"unidadMedida": ["Unidad", "UNI"]
},
{
"codigoProducto": "90002",
"cantidad": 1,
"precio": 2300.00,
"importeBruto": 2300.00,
"descuento": 0,
"total": 2300.00,
"descripcion": "Alicate Metal 2",
"bienServicio": "B",
"unidadMedida": ["Unidad", "UNI"]
}
]
}
}
',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"numeroFactura": "A1B2C3D4-123456789",
"serie": "A1B2C3D4",
"folio": 123456789,
"fechaEmision": "2021-01-01T23:59:59",
"fechaCertificado": "2021-01-01T23:59:59.999-06:00",
"uuidTransaccion": "275E2947-05C0-4CA8-BEC7-ADA67F1D7419",
"uuidCertificado": "A1B2C3D4-3643-49B4-A294-16930801F9BE",
"xmlCertificado": "<XML>",
"message": "XML Certificado correctamente."
}
}
Solicitud HTTP
URL de Producción:
POST https://api.mynube.com/v1/fel/certify-dte-json/
URL de Pruebas:
POST https://api.mynube.com/v1/fel/certify-dte-json/test
Parámetros del Body
En esta API se utilizan múltiples niveles de nodos en el JSON. Asegúrese de incluir los campos en el nodo correcto.
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
tipoDocumento | String | Tipo de DTE |
nitCertificador | String | NIT del Certificador a usar. Certificadores soportados: MegaPrint (50510231), Corposistemas (108151654) |
correosDestinatarios | String | Correos a los cuales se enviará una copia del PDF de la factura. Valores separados por punto y coma (;) |
documento | Nodo | Nodo Documento (ver referencia) |
Nodo: Documento
En este nodo se incluye toda la información relacionada con el documento a emitir. Este nodo puede tener otros nodos dentro.
Nombre | Tipo | Descripción |
---|---|---|
codigoCliente | String | Código del cliente de su ERP (código alterno en mynube). Puede ser el NIT del cliente en su defecto |
datosCliente | Nodo | Nodo Datos Cliente (ver referencia) |
fechaEmision | Fecha (String) | Formato ISO. Fecha de emisión del documento |
valorTotal | Float | Valor Total del documento |
moneda | String | Moneda en formato ISO 4217 |
aplicaIva | String | Valores posibles: "Si" o "No" |
escenarioIva | Integer | Enviar únicamente si aplicaIva = "No". Número de escenario para la exención del IVA de acuerdo a la tabla de la SAT (1 a 18) |
tipoVenta | String | Valores posibles: "Local" o "Export" |
tipoPago | String | Opcional. Valores posibles: "Contado" o "Crédito". Si no se envía se utilizará el asignado al cliente (por default "Contado"). |
tasaCambio | Float | Opcional. Tasa de Cambio utilizada para control interno. No afecta en FEL |
idDocumentoErp | String | Número de documento. En caso de ser un segundo intento de certificación, el valor debe ser idéntico al de la primera solicitud. |
detalle | Array | Array compuesto de Nodos Detalle (ver referencia) |
Nodo: Documento > Datos Cliente
En este nodo se deben incluir los datos del cliente en el caso de que el código de cliente enviado no exista en mynube para ejecutar su creación.
Si el cliente ya existe en mynube pero los datos enviados son distintos a los registrados, se actualizará el cliente con los datos nuevos enviados.
Si el cliente ya existe en mynube y no se desea actualizar ningún dato, no es necesario incluir este nodo en el JSON.
Nombre | Tipo | Descripción |
---|---|---|
nombre | String | Nombre del cliente |
nit | String | NIT del cliente |
numeroDocumento | String | Opcional. DPI del cliente. Se usará para certificar si el NIT es 'CF' |
correo | String | Opcional. Correo electrónico del cliente |
nombreConsignatario | String | Nombre del consignatario. Solo es necesario si es una exportación |
direccionConsignatario | String | Dirección del consignatario. Solo es necesario si es una exportación |
direccionCliente | Nodo | Nodo Dirección Cliente (ver referencia) |
Nodo: Documento > Datos Cliente > Dirección Cliente
En este nodo se deben incluir los datos de la dirección del cliente para que sean incluidos en el XML en el caso de que el cliente en mynube no contenga datos de dirección.
Nombre | Tipo | Descripción |
---|---|---|
direccion | String | Dirección del cliente |
municipio | String | Opcional. Ciudad del cliente |
departamento | String | Opcional. Estado/Provincia del cliente |
pais | String | Opcional. País en formato ISO |
codigoPostal | String | Opcional. Código Postal |
Nodo: Documento > Detalle
Este es el formato que debe utilizarse para cada línea del detalle del DTE. Se utiliza un objeto por línea y se almacenan todos en un Array.
Se debe crear uno de estos objetos por cada línea y almacenarlos en un Array de esta manera: [{...}, {...}, {...}]
.
Nombre | Tipo | Descripción |
---|---|---|
codigoProducto | String | Código de producto de su ERP (código alterno en mynube) |
cantidad | Float | Cantidad. Puede enviarse sin decimales |
precio | Float | Precio unitario sin comas. Puede enviarse sin decimales |
importeBruto | Float | Cantidad * Precio |
descuento | Float | Descuento de línea |
total | Float | Importe Bruto menos Descuento |
observaciones | String | Opcional. Observaciones para control interno |
El sistema buscará el producto en mynube en base al Código. Si el producto no existe en mynube la API devolverá un error.
Si desea que el producto sea creado en mynube, debe incluir los siguientes campos en el objeto:
Nombre | Tipo | Descripción |
---|---|---|
descripcion | String | Descripción del producto/servicio |
bienServicio | String | "B" para Bien o "S" para Servicio |
unidadMedida | Array | El array debe contener 2 strings. Primero nombre, luego siglas. Puede enviar este campo como un String en vez de un Array y se utilizará el valor tanto para el nombre como para las siglas |
Campos Extra
Es posible incluir campos extra en cada línea de detalle para que se incluyan en el PDF generado por mynube. Estos campos no se incluyen en el DTE y son únicamente para referencia interna. La presentación de los campos en el PDF dependerán de la configuración del establecimiento.
Para incluir estos campos extra, se debe incluir un nodo camposExtra
dentro del objeto que contiene los datos de la línea de detalle con los siguientes campos:
Nombre | Tipo | Descripción |
---|---|---|
campo1 | String | Opcional. Valor opcional #1 |
campo2 | String | Opcional. Valor opcional #2 |
campo3 | String | Opcional. Valor opcional #3 |
campo4 | String | Opcional. Valor opcional #4 |
campo5 | String | Opcional. Valor opcional #5 |
JSON de referencia:
{
"documento": {
"detalle": [
{
<cantidad, precio, total, etc.>,
"camposExtra": {
"campo1": "Texto",
"campo2": "Dato",
"campo3": "Ejemplo"
}
}
]
}
}
Exportaciones
Si se trata de una exportación, debe incluir los siguientes campos en el nodo documento
:
Nombre | Tipo | Descripción |
---|---|---|
paisExportacion | String | País de exportación. Formato ISO |
incotermExportacion | String | INCOTERM de exportación |
nombreConsignatario | String | Opcional. Dato relacionado al receptor. Es obligatorio si el receptor/cliente no existe o no contiene este campo. |
direccionConsignatario | String | Opcional. Dato relacionado al receptor. Es obligatorio si el receptor/cliente no existe o no contiene este campo. |
Facturas Cambiarias
Si se trata de una factura cambiaria, debe incluir los siguientes campos en el nodo documento
:
Nombre | Tipo | Descripción |
---|---|---|
fechaVencimiento | Fecha (String) | Formato YYYY-MM-DD. Fecha de vencimiento del documento |
Facturas Especiales
Si se trata de una factura especial, debe incluir los siguientes campos en el nodo documento
:
Nombre | Tipo | Descripción |
---|---|---|
retencionIsr | Float | Retención ISR |
retencionIva | Float | Retención IVA |
ventaExterior | Boolean | Opcional. Si es true se marcará el cliente como extranjero |
Con el fin de mantener consistencia, es posible reemplazar los siguientes campos con otros nombres:
Nombre Original | Nuevo Nuevo |
---|---|
documento.codigoCliente | documento.codigoProveedor |
documento.datosCliente | documento.datosProveedor |
documento.datosCliente.nit | documento.datosProveedor.numeroDocumento |
documentos.datosCliente.direccionCliente | documento.datosProveedor.direccionProveedor |
Estos cambios son opcionales y puede utilizar los nombres que desee para este tipo de documento. Aún asi, es recomendable realizar el cambio para evitar confusiones al manipular los datos.
Notas de Crédito/Debito/Abono
Si se trata de una nota de crédito/débito/abono, debe incluir los siguientes campos en el nodo documento
:
Nombre | Tipo | Descripción |
---|---|---|
fechaEmisionDocumentoOrigen | Fecha (String) | Formato YYYY-MM-DD |
motivoAjuste | String | Motivo de ajuste |
numeroAutorizacion | String | UUID del documento relacionado |
Adendas
Es posible incluir información adicional que no este relacionada a FEL en el DTE.
A continuación se presentan los distintos tipos de Adendas que pueden enviarse.
Resumen y Detalle
Estos tipos de adendas van asociados al DTE.
Para implementar adendas se debe incluir un nodo llamado adendas
en el nodo documento
. Una adenda individual se representa por un Array relleno de datos. El DTE puede incluir una adenda de resumen y múltiples adendas de detalle.
La adenda de resumen se incluye como una propiedad llamada resumen
conteniendo el Array de la adenda.
Las adendas de detalle se incluyen como una propiedad llamada detalle
, ésta será un Array que va a contener uno o más Arrays que serán las adendas de detalle.
JSON de referencia:
{
"documento": {
"adendas": {
"resumen": [
"2034 Plan 12GB",
500.50,
20,
5
],
"detalle": [
[
"5555555001",
"2018-09-19T15:58:00",
"Celular",
"001"
],
[
"5555555002",
"2018-09-19T15:58:00",
"Celular",
"001"
]
]
}
}
}
Ítems
Este tipo de adenda va asociado directamente a un ítem del detalle.
Para utilizar este tipo de adenda debe incluir un parámetro llamado adenda
en el nodo del ítem del detalle.
JSON de referencia:
{
"documento": {
"detalle": [
{
"descripcion": "Alicate amarillo",
"bienServicio": "B",
"unidadMedida": "UNI",
"cantidad": 5,
"precio": 100,
"importeBruto": 500,
"descuento": 0,
"total": 500,
"adenda": [
"Anexo 1 Linea 1",
"Anexo 2 Linea 1"
]
}
]
}
}
Walmart
Las adendas requeridas por Walmart también pueden implementarse.
Para incluirla se debe enviar una propiedad llamada walmart
dentro del nodo adendas
, esta propiedad debe contener un nodo con los siguientes valores:
Nombre |
---|
numeroOrden |
fechaOrden |
numeroVendedor |
enviarGln |
numeroRecepcion |
Campos Extra
Es posible incluir campos extra para que se incluyan en el PDF generado por mynube. Estos campos no se incluyen en el DTE y son únicamente para referencia interna. La presentación de los campos en el PDF dependerán de la configuración del establecimiento.
Para incluir estos campos extra, se debe incluir un nodo camposExtra
dentro del nodo documento
con los siguientes campos:
Nombre | Tipo | Descripción |
---|---|---|
campo1 | String | Opcional. Valor opcional #1 |
campo2 | String | Opcional. Valor opcional #2 |
campo3 | String | Opcional. Valor opcional #3 |
campo4 | String | Opcional. Valor opcional #4 |
campo5 | String | Opcional. Valor opcional #5 |
JSON de referencia:
{
"documento": {
"camposExtra": {
"campo1": "Texto",
"campo2": "Dato",
"campo3": "Ejemplo"
}
}
}
Ejemplos
Debido a que el JSON para este método puede llegar a ser ligeramente complejo, hemos incluido una diversidad de ejemplos a continuación:
- Local. En Quetzales. Con IVA. Crea cliente y producto.
- Local. En Quetzales. Con IVA. Crea cliente.
- Local. En Quetzales. Con IVA. Crea producto.
- Local. En Quetzales. Con IVA. Con campos ERP.
- Local. En Quetzales. Con IVA.
- Local. En Quetzales. Con IVA. Con descuento.
- Local. En Quetzales. Con IVA. Envía correo.
- Local. En Quetzales. Sin IVA.
- Local. En Quetzales. Sin IVA. Con descuento.
- Local. En Dólares. Con IVA.
- Local. En Dólares. Sin IVA.
- Local. En Dólares. Con IVA. Con descuento.
- Local. En Dólares. Sin IVA. Con descuento.
- Exportación. En Dólares. Crea cliente.
- Exportación. En Dólares.
- Recibo de donación
Anular un documento
Este método anula un documento electrónico DTE que ya ha sido certificado y autorizado por la Agencia Virtual de la SAT, y lo registra como tal en el sistema mynube.
curl --location --request POST 'https://api.mynube.com/v1/fel/nullify-dte-json/test' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": "99999",
"nitCertificador": "9999999",
"tipoDocumento": "FACT",
"fechaEmisionDocumentoAnular": "2021-01-01T12:00:00",
"fechaHoraAnulacion": "2021-01-02T12:00:00",
"nitReceptor": "CF",
"motivoAnulacion": "Fecha incorrecta",
"uuidDocumento": "787346B0-830F-412E-BBE6-970808043667"
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"estId\": \"99999\", \"nitCertificador\": \"9999999\", \"tipoDocumento\": \"FACT\", \"fechaEmisionDocumentoAnular\": \"2021-01-01T12:00:00\", \"fechaHoraAnulacion\": \"2021-01-02T12:00:00\", \"nitReceptor\": \"CF\", \"motivoAnulacion\": \"Fecha incorrecta\", \"uuidDocumento\": \"787346B0-830F-412E-BBE6-970808043667\"}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v1/fel/nullify-dte-json/test")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":"99999","nitCertificador":"9999999","tipoDocumento":"FACT","fechaEmisionDocumentoAnular":"2021-01-01T12:00:00","fechaHoraAnulacion":"2021-01-02T12:00:00","nitReceptor":"CF","motivoAnulacion":"Fecha incorrecta","uuidDocumento":"787346B0-830F-412E-BBE6-970808043667"});
var config = {
method: 'post',
url: 'https://api.mynube.com/v1/fel/nullify-dte-json/test',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v1/fel/nullify-dte-json/test");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n\t\"estId\": \"99999\",\r\n \"nitCertificador\": \"9999999\",\r\n\t\"tipoDocumento\": \"FACT\",\r\n \"fechaEmisionDocumentoAnular\": \"2021-01-01T12:00:00\",\r\n \"fechaHoraAnulacion\": \"2021-01-02T12:00:00\",\r\n \"nitReceptor\": \"CF\",\r\n \"motivoAnulacion\": \"Fecha incorrecta\",\r\n \"uuidDocumento\": \"787346B0-830F-412E-BBE6-970808043667\"\r\n}\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v1/fel/nullify-dte-json/test',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": "99999",
"nitCertificador": "9999999",
"tipoDocumento": "FACT",
"fechaEmisionDocumentoAnular": "2021-01-01T12:00:00",
"fechaHoraAnulacion": "2021-01-02T12:00:00",
"nitReceptor": "CF",
"motivoAnulacion": "Fecha incorrecta",
"uuidDocumento": "787346B0-830F-412E-BBE6-970808043667"
}
',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"numeroFactura": "A1B2C3D4-123456789",
"serie": "A1B2C3D4",
"folio": 123456789,
"fechaEmision": "2021-01-02T12:00:00.000-06:00",
"fechaCertificado": "2021-01-02T23:59:59.999-06:00",
"uuidTransaccion": "275E2947-05C0-4CA8-BEC7-ADA67F1D7419",
"uuidCertificado": "A1B2C3D4-3643-49B4-A294-16930801F9BE",
"xmlCertificado": "<XML>",
"message": "Documento anulado correctamente."
}
}
Solicitud HTTP
URL de Producción:
POST https://api.mynube.com/v1/fel/nullify-dte-json/
URL de Pruebas:
POST https://api.mynube.com/v1/fel/nullify-dte-json/test
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
nitCertificador | String | NIT del Certificador a utilizar |
uuidDocumento | UUID | UUID del Documento que se va a anular |
tipoDocumento | String | Tipo de DTE |
fechaEmisionDocumentoAnular | Fecha (String) | Formato ISO. Fecha de emisión del DTE original |
fechaHoraAnulacion | Fecha (String) | Formato ISO. Fecha y hora en la que se efectuará la anulación |
nitReceptor | String | NIT Receptor del DTE original |
motivoAnulacion | String | Motivo de anulación |
Obtener el PDF de un DTE
Este método permite obtener el PDF de un documento electrónico en formato Base64. Este PDF utiliza el diseño creado por mynube.
curl --location --request POST 'https://api.mynube.com/v1/fel/get-invoice-pdf/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"uuid": "787346B0-830F-412E-BBE6-970808043667"
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n\t\"estId\": 99999,\n\t\"uuid\": \"787346B0-830F-412E-BBE6-970808043667\"\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v1/fel/get-invoice-pdf/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"uuid":"787346B0-830F-412E-BBE6-970808043667"});
var config = {
method: 'post',
url: 'https://api.mynube.com/v1/fel/get-invoice-pdf/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v1/fel/get-invoice-pdf/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\n\t\"estId\": 99999,\n\t\"uuid\": \"787346B0-830F-412E-BBE6-970808043667\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v1/fel/get-invoice-pdf/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"uuid": "787346B0-830F-412E-BBE6-970808043667"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"pdf": "<base64>",
"message": "PDF descargado y convertido correctamente."
}
}
Solicitud HTTP
URL:
POST https://api.mynube.com/v1/fel/get-invoice-pdf/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
uuid | String | UUID de Certificado del Documento. También puede enviarse el número de la factura (Ejemplo: 57CE59D5-1956584457 ) en su lugar |
Consultar los datos FEL de un cliente
Este método permite consultar los datos de un cliente utilizando el servicio de consulta de la SAT.
curl --location --request POST 'https://api.mynube.com/v1/fel/get-customer-data/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"nit": "100457509"
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999,\r\n \"nit\": \"100457509\"\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v1/fel/get-customer-data/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"nit":"100457509"});
var config = {
method: 'post',
url: 'https://api.mynube.com/v1/fel/get-customer-data/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v1/fel/get-customer-data/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999,\r\n \"nit\": \"100457509\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v1/fel/get-customer-data/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"nit": "100457509"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"nombreCliente": "CONSUMIDOR FINAL",
"direccionCliente": "CIUDAD DE GUATEMALA",
"message": "Datos del cliente consultados correctamente."
}
}
Solicitud HTTP
URL: POST https://api.mynube.com/v1/fel/get-customer-data/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
nit | String | NIT del cliente a consultar |
dpi | String | Opcional. DPI del cliente a consultar. Se usará para la consulta si el NIT no viene o es 'CF' |
Ventas
Consultar los datos de una factura
Este método permite consultar los datos y el detalle de una factura en específico en base al número interno, número temporal o número FEL (UUID).
curl --location --request POST 'https://api.mynube.com/v2/fac/get-invoice-data/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"numero": "A1B2C3D4-123456789"
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999,\r\n \"numero\": \"A1B2C3D4-123456789\"\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/fac/get-invoice-data/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"numero":"A1B2C3D4-123456789"});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/fac/get-invoice-data/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/fac/get-invoice-data/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999,\r\n \"numero\": \"A1B2C3D4-123456789\"\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/fac/get-invoice-data/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"numero": "A1B2C3D4-123456789"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"factura": {
"numeroInterno": "FEL-1234",
"estado": "Pagada",
"tipoDePago": "Contado",
"fechaHoraEmision": "2021-01-01T12:00:00-06:00",
"fechaHoraCertificacion": "2021-01-01T12:00:02-06:00",
"numeroDTE": 374429611,
"numeroAutorizacion": "C3D6C245-A21F-4C83-B4A7-58EB0F2A9781",
"serie": "C3D6C245",
"moneda": "GTQ",
"cliente": {
"nombre": "Consumidor Final",
"nit": "CF",
"codigo": "100001"
},
"total": 200,
"iva": 24,
"detalle": [
{
"descripcion": "Tela",
"codigo": "10001",
"cantidad": 10,
"precio": 20,
"total": 200
}
]
},
"message": "Factura consultada exitosamente."
}
}
Solicitud HTTP
URL:
POST https://api.mynube.com/v2/fac/get-invoice-data/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
numero | String | Número interno, número temporal o número FEL (UUID) de la factura |
Consultar los datos de todas las facturas
Este método permite consultar los datos y el detalle de todas las facturas del establecimiento. Debido al volumen de datos manejado, se utiliza un sistema de paginación.
curl --location --request POST 'https://api.mynube.com/v2/fac/get-invoices/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"numeroPagina": 1,
"tamanioPagina": 25
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999,\r\n \"numeroPagina\": 1,\r\n \"tamanioPagina\": 25\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/fac/get-invoices/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"numeroPagina":1,"tamanioPagina":25});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/fac/get-invoices/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/fac/get-invoices/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999,\r\n \"numeroPagina\": 1,\r\n \"tamanioPagina\": 25\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/fac/get-invoices/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"numeroPagina": 1,
"tamanioPagina": 25
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"facturas": [
{
"cfaId": 12345678,
"numeroInterno": "FEL-1234",
"estado": "Pagada",
"fechaHoraEmision": "2021-01-01T12:00:00-06:00"
}
],
"message": "Facturas consultadas exitosamente."
}
}
Solicitud HTTP
URL:
POST https://api.mynube.com/v2/fac/get-invoices/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
numeroPagina | Integer | Opcional. Número de página que se va a consultar. Por default es 1 |
tamanioPagina | Integer | Opcional. Cantidad de facturas por página que se van a consultar. Por default es 25 |
CRM
Consultar los datos de todos los clientes
Este método permite consultar los datos de todos los clientes del establecimiento. En este método el uso de la paginación es opcional.
curl --location --request POST 'https://api.mynube.com/v2/crm/get-clients/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/crm/get-clients/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/crm/get-clients/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/crm/get-clients/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/crm/get-clients/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"clientes": [
{
"razon": "Abril Rojas",
"nombre": "Abril Rojas",
"direccion": "6 Avenida Zona 1",
"codigo": "100001",
"estatus": "Activo"
}
],
"message": "Clientes consultados exitosamente."
}
}
Solicitud HTTP
URL: POST https://api.mynube.com/v2/crm/get-clients/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
numeroPagina | Integer | Opcional. Número de página que se va a consultar. Por default es 1 |
tamanioPagina | Integer | Opcional. Cantidad de clientes por página que se van a consultar. Por default es infinito |
Crear un cliente
Este método permite crear un nuevo cliente.
curl --location --request POST 'https://api.mynube.com/v2/crm/new-client/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"nit": "CF",
"nombre": "Monica Perez",
"direccion": "Ciudad de Guatemala"
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999,\r\n \"nit\": \"CF\",\r\n \"nombre\": \"Monica Perez\",\r\n \"direccion\": \"Ciudad de Guatemala\"\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/crm/new-client/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({
"estId": 99999,
"nit": "CF",
"nombre": "Monica Perez",
"direccion": "Ciudad de Guatemala"
});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/crm/new-client/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/crm/new-client/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
var body = @"{
" + "\n" +
@" ""estId"": 99999,
" + "\n" +
@" ""nit"": ""CF"",
" + "\n" +
@" ""nombre"": ""Monica Perez"",
" + "\n" +
@" ""direccion"": ""Ciudad de Guatemala""
" + "\n" +
@"}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/crm/new-client/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"nit": "CF",
"nombre": "Monica Perez",
"direccion": "Ciudad de Guatemala"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"message": "Cliente creado exitosamente."
}
}
Solicitud HTTP
URL: POST https://api.mynube.com/v2/crm/new-client/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
nit | String | NIT del cliente |
nombre | String | Nombre del cliente |
direccion | String | Direccion del cliente |
codigoAlterno | String | Opcional. Código de ERP/Control Interno |
razon | String | Opcional. Razón comercial |
direccionFacturacion | String | Opcional. Dirección de facturación del cliente |
correo | String | Opcional. Correo electrónico del cliente |
correosDestinatarios | String | Opcional. Correos electrónicos para el envío de la factura FEL |
pais | String | Opcional. País del cliente en formato ISO de 3 letras |
tipoPago | String | Opcional. Tipo de pago |
diasCredito | Integer | Opcional. Días de Crédito |
limiteCredito | Float | Opcional. Límite de Crédito |
formaPago | String | Opcional. Forma de Pago |
diasCobro | String | Opcional. Días de Cobro |
Inventario
Consultar la lista de productos
Este método permite consultar todos los productos de un establecimiento en formato JSON. En este método el uso de la paginación es opcional.
curl --location --request POST 'https://api.mynube.com/v2/inv/get-products' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/inv/get-products")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/inv/get-products',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/inv/get-products");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/inv/get-products',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"productos": [
{
"codigo": "10001",
"descripcion": "Martillo",
"codigoAlterno": "750121",
"tipo": "Producto",
"unidadMedidaCompra": "Uni",
"moneda": "GTQ",
"precio": 100
},
{...}, {...}, {...}
],
"message": "Productos consultados exitosamente."
}
}
Solicitud HTTP
URL:
POST https://api.mynube.com/v2/inv/get-products/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
tipoInventario | String | Opcional. Tipo de inventario al cual consultar. Si no se envía se usará "PT" por default |
numeroPagina | Integer | Opcional. Número de página que se va a consultar. Por default es 1 |
tamanioPagina | Integer | Opcional. Cantidad de productos por página que se van a consultar. Por default es infinito |
Consultar las imagenes de todos los productos
Este método permite obtener las imágenes de todos los productos en un JSON. Las imágenes pueden ser consultadas en formato Base64 o en una URL para descargar. Debido al volumen de datos manejado, si se utiliza el sistema de Base64, se utiliza un sistema de paginación.
curl --location --request POST 'https://api.mynube.com/v2/inv/get-products-images' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999\r\n}");
Request request = new Request.Builder()
.url("https://api.mynube.com/v2/inv/get-products-images")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999});
var config = {
method: 'post',
url: 'https://api.mynube.com/v2/inv/get-products-images',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.mynube.com/v2/inv/get-products-images");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.mynube.com/v2/inv/get-products-images',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"productos": [
{
"codigo": "10001",
"descripcion": "Martillo",
"imagen": "<base64 o url>"
},
{...}, {...}, {...}
],
"message": "X productos consultados exitosamente."
}
}
Solicitud HTTP
URL:
POST https://api.mynube.com/v2/inv/get-products-images/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
formatoUrl | Boolean | Si es 'true', se utilizará el sistema de URLs de descarga. |
tipoInventario | String | Opcional. Tipo de inventario al cual consultar. Si no se envía se usará "PT" por default |
numeroPagina | Integer | Opcional. Número de página que se va a consultar. Por default es 1 |
tamanioPagina | Integer | Opcional. Cantidad de productos por página que se van a consultar. Por default es 25. El máximo es 50 para Base64 y 4,000 para sistema de URLs. |
Planilla
Carga de Actividades
Este método permite cargar las actividades provenientes de un establecimiento, al sistema de Planillas mynube. Las actividades se cargarán con un proceso de fondo. Es necesario proveer un correo para recibir las notificaciones relacionadas a la carga de actividades, ya sea para confirmar su éxito o detallar los errores.
curl --location --request POST 'https://api.planilla.mynube.com/dev/load-saf-activities/' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: Llave' \
--data-raw '{
"estId": 99999,
"emailResultado": "cliente@empresa.com",
"actividades": [
{
...
},
{
...
}
]
}'
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\r\n \"estId\": 99999,\r\n \"emailResultado\": "cliente@empresa.com",\r\n \"actividades\": [ { ... }, { ... } ]\r\n}");
Request request = new Request.Builder()
.url("https://api.planilla.mynube.com/dev/load-saf-activities/")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("X-Api-Key", "Llave")
.build();
Response response = client.newCall(request).execute();
var axios = require('axios');
var data = JSON.stringify({"estId":99999,"emailResultado":"cliente@empresa.com","actividades":[{ ... }, { ... }]});
var config = {
method: 'post',
url: 'https://api.planilla.mynube.com/dev/load-saf-activities/',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': 'Llave'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
var client = new RestClient("https://api.planilla.mynube.com/dev/load-saf-activities/");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("X-Api-Key", "Llave");
request.AddParameter("application/json", "{\r\n \"estId\": 99999,\r\n \"emailResultado\": "cliente@empresa.com",\r\n \"actividades\": [ { ... }, { ... } ]\r\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.planilla.mynube.com/dev/load-saf-activities/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"estId": 99999,
"emailResultado": "cliente@empresa.com",
"actividades": [{ ... }, { ... }]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'X-Api-Key: Llave'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
La API responderá con un JSON con esta forma:
{
"status": "ok",
"body": {
"message": "Se ha iniciado el proceso de carga exitosamente."
}
}
Solicitud HTTP
URL de Pruebas:
POST https://api.planilla.mynube.com/dev/load-saf-activities/
Parámetros del Body
Nombre | Tipo | Descripción |
---|---|---|
estId | String | ID del establecimiento asignado |
emailResultado | String | Correo para recibir resultado de la carga |
actividades | Array | Array compuesto Nodo Actividades (ver referencia) |
Nodo: Actividades
En este nodo se incluyen todas las actividades nuevas, y las existentes que hayan sufrido un cambio de información.
Nombre | Tipo | Descripción |
---|---|---|
tskId | Integer | Task ID (SAF) |
nombreActividad | String | Código/Nombre de la actividad |
nombreUnidadNegocio | String | Nombre de la unidad de negocio |
nombreLote | String | Nombre del lote |
ssnId | Int | SSN ID (SAF) |
fechaInicio | Fecha (String) | Formato ISO. Fecha de Inicio de la actividad |
fechaFinal | Fecha (String) | Formato ISO. Fecha de Final de la actividad |
operadores | Array (String) | Lista de códigos de empleado relacionados a la actividad |
horas | Array (Integer) | Lista de horas trabajadas por los empleados relacionados. Cada valor debe ir en la misma posición que su empleado relacionado en el Array. |
materiales | Array | Array compuesto de Nodos Materiales (ver referencia) |
gfmId | Integer | Opcional. GFM ID (SAF) de la unidad de negocio |
fldId | Integer | Opcional. FLD ID (SAF) del lote |
subOperationType | String | Código/Nombre de la actividad |
campania | Integer | Año de la campaña |
cultivo | Integer | ID del cultivo |
subcultivo | String | Nombre del subcultivo |
Nodo: Actividades > Materiales
En este nodo se debe incluir la lista de materiales que se consumieron en la actividad. Provocará un movimiento en el inventario acumulado por fecha.
Nombre | Tipo | Descripción |
---|---|---|
nombreMaterial | String | Código/Nombre del material |
cantidad | Integer | Cantidad utilizada |
unidadMedida | String | Unidad de medida utilizada |