NAV
shell java javascript csharp php

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:

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