CFDI Electronic Invoice

What Is CFDI and Its Relation to Invoices?

The CFDI (Comprobante Fiscal Digital por Internet) is a type of electronic invoice required in Mexico that complies with the tax standards set by the SAT (Tax Administration Service). An invoice becomes a CFDI through a certification process, ensuring its legal and fiscal validity.



⚠️

IMPORTANT

To follow the steps below, it is essential to have the corresponding Authorization Token. For more information, please refer to the following documentation page: Authorization Token

Download CFDI

This endpoint allows downloading a CFDI for a specific invoice.

💻

Visit our API Reference to test this endpoint.

Endpoint

  • GET https://ecartpay.com/api/invoices/cfdi/download/:id
  • GET https://sandbox.ecartpay.com/api/invoices/cfdi/download/:id (Sandbox only)

Headers

  • Authorization: {token}
  • Referer: Base URL (e.g., {baseUrl}).

Path Variables

  • id: Unique identifier of the invoice (e.g., 658b47f407f38aeb09e22173).

Examples

Request

curl --location 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173' \
--header 'Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g' \
--header 'Referer: https://sandbox.ecartpay.com' \
--header 'Cookie: lang=en'
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g")
  req.Header.Add("Referer", "https://sandbox.ecartpay.com")
  req.Header.Add("Cookie", "lang=en")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
GET /api/invoices/cfdi/download/658b47f407f38aeb09e22173 HTTP/1.1
Host: sandbox.ecartpay.com
Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g
Referer: https://sandbox.ecartpay.com
Cookie: lang=en
// OkHttp

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173")
  .method("GET", body)
  .addHeader("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g")
  .addHeader("Referer", "https://sandbox.ecartpay.com")
  .addHeader("Cookie", "lang=en")
  .build();
Response response = client.newCall(request).execute();

// -------------------------------------------------------------

// Unirest

Unirest.setTimeouts(0, 0);
HttpResponse<String> response = Unirest.get("https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173")
  .header("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g")
  .header("Referer", "https://sandbox.ecartpay.com")
  .header("Cookie", "lang=en")
  .asString();
// Fetch

const myHeaders = new Headers();
myHeaders.append("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g");
myHeaders.append("Referer", "https://sandbox.ecartpay.com");
myHeaders.append("Cookie", "lang=en");

const requestOptions = {
  method: "GET",
  headers: myHeaders,
  redirect: "follow"
};

fetch("https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173", requestOptions)
  .then((response) => response.text())
  .then((result) => console.log(result))
  .catch((error) => console.error(error));

// -------------------------------------------------------------

// jQuery

var settings = {
  "url": "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173",
  "method": "GET",
  "timeout": 0,
  "headers": {
    "Authorization": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g",
    "Referer": "https://sandbox.ecartpay.com",
    "Cookie": "lang=en"
  },
};

$.ajax(settings).done(function (response) {
  console.log(response);
});

// -------------------------------------------------------------

// XHR

// WARNING: For GET requests, body is set to null by browsers.

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function() {
  if(this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173");
xhr.setRequestHeader("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g");
xhr.setRequestHeader("Referer", "https://sandbox.ecartpay.com");
// WARNING: Cookies will be stripped away by the browser before sending the request.
xhr.setRequestHeader("Cookie", "lang=en");

xhr.send();
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
  curl_easy_setopt(curl, CURLOPT_URL, "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  headers = curl_slist_append(headers, "Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g");
  headers = curl_slist_append(headers, "Referer: https://sandbox.ecartpay.com");
  headers = curl_slist_append(headers, "Cookie: lang=en");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  res = curl_easy_perform(curl);
  curl_slist_free_all(headers);
}
curl_easy_cleanup(curl);
// Axios

const axios = require('axios');

let config = {
  method: 'get',
  maxBodyLength: Infinity,
  url: 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173',
  headers: { 
    'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g', 
    'Referer': 'https://sandbox.ecartpay.com', 
    'Cookie': 'lang=en'
  }
};

axios.request(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

// -------------------------------------------------------------

// Native

var https = require('follow-redirects').https;
var fs = require('fs');

var options = {
  'method': 'GET',
  'hostname': 'sandbox.ecartpay.com',
  'path': '/api/invoices/cfdi/download/658b47f407f38aeb09e22173',
  'headers': {
    'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
    'Referer': 'https://sandbox.ecartpay.com',
    'Cookie': 'lang=en'
  },
  'maxRedirects': 20
};

var req = https.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });

  res.on("error", function (error) {
    console.error(error);
  });
});

req.end();

// -------------------------------------------------------------

// Request

var request = require('request');
var options = {
  'method': 'GET',
  'url': 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173',
  'headers': {
    'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
    'Referer': 'https://sandbox.ecartpay.com',
    'Cookie': 'lang=en'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

// -------------------------------------------------------------

// Unirest

var unirest = require('unirest');
var req = unirest('GET', 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173')
  .headers({
    'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
    'Referer': 'https://sandbox.ecartpay.com',
    'Cookie': 'lang=en'
  })
  .end(function (res) { 
    if (res.error) throw new Error(res.error); 
    console.log(res.raw_body);
  });
#import <Foundation/Foundation.h>

dispatch_semaphore_t sema = dispatch_semaphore_create(0);

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173"]
  cachePolicy:NSURLRequestUseProtocolCachePolicy
  timeoutInterval:10.0];
NSDictionary *headers = @{
  @"Authorization": @"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g",
  @"Referer": @"https://sandbox.ecartpay.com",
  @"Cookie": @"lang=en"
};

[request setAllHTTPHeaderFields:headers];

[request setHTTPMethod:@"GET"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
  if (error) {
    NSLog(@"%@", error);
    dispatch_semaphore_signal(sema);
  } else {
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
    NSError *parseError = nil;
    NSDictionary *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
    NSLog(@"%@",responseDictionary);
    dispatch_semaphore_signal(sema);
  }
}];
[dataTask resume];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
open Lwt
open Cohttp
open Cohttp_lwt_unix

let reqBody = 
  let uri = Uri.of_string "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173" in
  let headers = Header.init ()
    |> fun h -> Header.add h "Authorization" "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g"
    |> fun h -> Header.add h "Referer" "https://sandbox.ecartpay.com"
    |> fun h -> Header.add h "Cookie" "lang=en"
  in
  Client.call ~headers `GET uri >>= fun (_resp, body) ->
  body |> Cohttp_lwt.Body.to_string >|= fun body -> body

let () =
  let respBody = Lwt_main.run reqBody in
  print_endline (respBody)
// cURL

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173',
  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(
    'Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
    'Referer: https://sandbox.ecartpay.com',
    'Cookie: lang=en'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

// -------------------------------------------------------------

// Guzzle

<?php
$client = new Client();
$headers = [
  'Authorization' => 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer' => 'https://sandbox.ecartpay.com',
  'Cookie' => 'lang=en'
];
$request = new Request('GET', 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173', $headers);
$res = $client->sendAsync($request)->wait();
echo $res->getBody();

// -------------------------------------------------------------

// HTTP_Request2

<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer' => 'https://sandbox.ecartpay.com',
  'Cookie' => 'lang=en'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}

// -------------------------------------------------------------

// pecl_http

<?php
$client = new http\Client;
$request = new http\Client\Request;
$request->setRequestUrl('https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173');
$request->setRequestMethod('GET');
$request->setOptions(array());
$request->setHeaders(array(
  'Authorization' => 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer' => 'https://sandbox.ecartpay.com',
  'Cookie' => 'lang=en'
));
$client->enqueue($request)->send();
$response = $client->getResponse();
echo $response->getBody();
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g")
$headers.Add("Referer", "https://sandbox.ecartpay.com")
$headers.Add("Cookie", "lang=en")

$response = Invoke-RestMethod 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173' -Method 'GET' -Headers $headers
$response | ConvertTo-Json
# http.client

import http.client

conn = http.client.HTTPSConnection("sandbox.ecartpay.com")
payload = ''
headers = {
  'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer': 'https://sandbox.ecartpay.com',
  'Cookie': 'lang=en'
}
conn.request("GET", "/api/invoices/cfdi/download/658b47f407f38aeb09e22173", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

// -------------------------------------------------------------

# Requests

import requests

url = "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173"

payload = {}
headers = {
  'Authorization': 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer': 'https://sandbox.ecartpay.com',
  'Cookie': 'lang=en'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
# httr

library(httr)

headers = c(
  'Authorization' = 'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g',
  'Referer' = 'https://sandbox.ecartpay.com',
  'Cookie' = 'lang=en'
)

res <- VERB("GET", url = "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173", add_headers(headers))

cat(content(res, 'text'))

// -------------------------------------------------------------

# RCurl

library(RCurl)
headers = c(
  "Authorization" = "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g",
  "Referer" = "https://sandbox.ecartpay.com",
  "Cookie" = "lang=en"
)
res <- getURL("https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173", .opts=list(httpheader = headers, followlocation = TRUE))
cat(res)
require "uri"
require "net/http"

url = URI("https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g"
request["Referer"] = "https://sandbox.ecartpay.com"
request["Cookie"] = "lang=en"

response = https.request(request)
puts response.read_body
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::builder()
        .build()?;

    let mut headers = reqwest::header::HeaderMap::new();
    headers.insert("Authorization", "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g".parse()?);
    headers.insert("Referer", "https://sandbox.ecartpay.com".parse()?);
    headers.insert("Cookie", "lang=en".parse()?);

    let request = client.request(reqwest::Method::GET, "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173")
        .headers(headers);

    let response = request.send().await?;
    let body = response.text().await?;

    println!("{}", body);

    Ok(())
}
# Httpie

http --follow --timeout 3600 GET 'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173' \
 Authorization:'eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g' \
 Referer:'https://sandbox.ecartpay.com' \
 Cookie:'lang=en'
 
// -------------------------------------------------------------

# wget

wget --no-check-certificate --quiet \
  --method GET \
  --timeout=0 \
  --header 'Authorization: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g' \
  --header 'Referer: https://sandbox.ecartpay.com' \
  --header 'Cookie: lang=en' \
   'https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173'
var request = URLRequest(url: URL(string: "https://sandbox.ecartpay.com/api/invoices/cfdi/download/658b47f407f38aeb09e22173")!,timeoutInterval: Double.infinity)
request.addValue("eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjY3MmE4NTAzNzFiZTBlY2Y1NTRkMDUxNiIsImFjY291bnRfaWQiOiI2NzJhODUwMzcxYmUwZWNmNTU0ZDA1MGMiLCJpYXQiOjE3Mzg3NzM1NTUsImV4cCI6MTczODc3NzE1NX0.oksy5FrkEvpJ21yCS5rgE2nEDhb_1xWNbG4q66bjGdjN6dnCwmVEueybWHuQBfqIcASwpCmP0cB0BYVYT63y3g", forHTTPHeaderField: "Authorization")
request.addValue("https://sandbox.ecartpay.com", forHTTPHeaderField: "Referer")
request.addValue("lang=en", forHTTPHeaderField: "Cookie")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()

Response

The response body contains the CFDI in XML or PDF format, depending on the request. Headers may include details of the downloaded file.