Descargar XML GET

Devuelve el XML del comprobante emitido en application/xml. identificacion es el RUC del emisor habilitado en tu API Key y claveAcceso la clave de 49 digitos del comprobante.

GET /v1/contribuyentes/{identificacion}/comprobantes/{claveAcceso}/xml

Contenido provisional#

Si el SRI aun no entrega el XML autorizado, la respuesta es 200 con un XML de marcacion:

  • el documento incluye el comentario PROVISIONAL,
  • la cabecera X-Contenido vale provisional.

Ese contenido no es el XML firmado por el SRI. En los SDK, el indicador provisional queda en true.

curl -s -D - "https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml" \
  -H "X-Api-Key: $ECUAFACT_API_KEY" \
  -o comprobante.xml
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("X-Api-Key", apiKey);

using HttpResponseMessage respuesta = await http.GetAsync(
    "https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml");
byte[] xml = await respuesta.Content.ReadAsByteArrayAsync();
bool provisional = respuesta.Headers.TryGetValues("X-Contenido", out var valores)
    && valores.Contains("provisional");
await File.WriteAllBytesAsync("comprobante.xml", xml);
import os, requests

r = requests.get(
    "https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml",
    headers={"X-Api-Key": os.environ["ECUAFACT_API_KEY"]},
    timeout=60)
print(r.headers.get("X-Contenido"))
open("comprobante.xml", "wb").write(r.content)
const res = await fetch(
  "https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml",
  { headers: { "X-Api-Key": process.env.ECUAFACT_API_KEY } });
console.log(res.headers.get("X-Contenido"));
const bytes = Buffer.from(await res.arrayBuffer());
await require("node:fs/promises").writeFile("comprobante.xml", bytes);
<?php
$ch = curl_init("https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_HTTPHEADER => ["X-Api-Key: " . getenv("ECUAFACT_API_KEY")],
]);
$raw = curl_exec($ch);
$tamano = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);
file_put_contents("comprobante.xml", substr($raw, $tamano));
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;

HttpClient cliente = HttpClient.newHttpClient();
HttpRequest peticion = HttpRequest.newBuilder()
    .uri(URI.create("https://staging-api.mynexusapi.com/v1/contribuyentes/0123456789001/comprobantes/0101202601170123456789012201234567890123456789012/xml"))
    .header("X-Api-Key", System.getenv("ECUAFACT_API_KEY"))
    .GET()
    .build();
HttpResponse<byte[]> respuesta = cliente.send(peticion, HttpResponse.BodyHandlers.ofByteArray());
String marca = respuesta.headers().firstValue("X-Contenido").orElse("");
Files.write(Path.of("comprobante.xml"), respuesta.body());
using Ecuafact.Sdk.Contracts;

// client: cliente EcuafactClient - ver SDK .NET
ArchivoComprobante xml = await client.DescargarXmlAsync(identificacion, claveAcceso);
if (xml.Provisional)
{
    Console.WriteLine("XML provisional");
}
await File.WriteAllBytesAsync("comprobante.xml", xml.Contenido);
# client: cliente EcuafactClient - ver SDK Python
archivo = client.descargar_xml(identificacion, clave_acceso)
print(archivo.provisional)
open("comprobante.xml", "wb").write(archivo.contenido)
import { writeFile } from "node:fs/promises";

// client: cliente EcuafactClient - ver SDK Node.js
const archivo = await client.descargarXml(identificacion, claveAcceso);
console.log(archivo.provisional);
await writeFile("comprobante.xml", archivo.contenido);
<?php
// $client: cliente EcuafactClient - ver SDK PHP
$archivo = $client->descargarXml($identificacion, $claveAcceso);
file_put_contents("comprobante.xml", $archivo->contenido);
import com.ecuafact.sdk.contracts.ArchivoComprobante;
import java.nio.file.Files;
import java.nio.file.Path;

// client: cliente EcuafactClient - ver SDK Java
ArchivoComprobante archivo = client.descargarXml(identificacion, claveAcceso);
Files.write(Path.of("comprobante.xml"), archivo.contenido());

Respuesta#

200 con el archivo en application/xml y Content-Disposition: attachment.

Estados de este endpoint#

Estado codigo Cuando
200 - XML (provisional o autorizado)
400 301 La clave de acceso no es valida
401 101 API Key invalida
403 103 El contribuyente no esta habilitado en tu API Key
404 502 El comprobante no existe
429 104 Limite de solicitudes excedido

Siguientes pasos#

No se pudo completar la operacion. Recargar ✕