Send the CFDI (XML + PDF) by email to the receptor
curl --request POST \
--url https://api.example.com/invoices/{uuid}/email \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to": "cliente@example.com"
}
'import requests
url = "https://api.example.com/invoices/{uuid}/email"
payload = { "to": "cliente@example.com" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({to: 'cliente@example.com'})
};
fetch('https://api.example.com/invoices/{uuid}/email', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/invoices/{uuid}/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => 'cliente@example.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/invoices/{uuid}/email"
payload := strings.NewReader("{\n \"to\": \"cliente@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/invoices/{uuid}/email")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"cliente@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/invoices/{uuid}/email")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"cliente@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"invoiceId": "<string>",
"sentTo": "cliente@example.com",
"status": "sent",
"createdAt": "2023-11-07T05:31:56Z",
"sentBy": {}
}invoices
Send the CFDI (XML + PDF) by email to the receptor
Authenticate with either a Supabase session (member of the invoice’s organization) or an API key belonging to that same organization. to is optional — if omitted, the recipient is resolved from the Customer registered for the invoice’s RFC receptor (if it has an email on file). Retries automatically against the email provider before failing.
POST
/
invoices
/
{uuid}
/
email
Send the CFDI (XML + PDF) by email to the receptor
curl --request POST \
--url https://api.example.com/invoices/{uuid}/email \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"to": "cliente@example.com"
}
'import requests
url = "https://api.example.com/invoices/{uuid}/email"
payload = { "to": "cliente@example.com" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({to: 'cliente@example.com'})
};
fetch('https://api.example.com/invoices/{uuid}/email', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/invoices/{uuid}/email",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'to' => 'cliente@example.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/invoices/{uuid}/email"
payload := strings.NewReader("{\n \"to\": \"cliente@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.example.com/invoices/{uuid}/email")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"to\": \"cliente@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/invoices/{uuid}/email")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"to\": \"cliente@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"invoiceId": "<string>",
"sentTo": "cliente@example.com",
"status": "sent",
"createdAt": "2023-11-07T05:31:56Z",
"sentBy": {}
}Authorizations
apiKeybearer
API Key for authentication (format: sk_...)
Path Parameters
Body
application/json
Correo del receptor al que se enviará el CFDI. Si se omite, se usa el correo del Customer registrado con el RFC receptor de la factura (si existe). Si no hay un Customer con correo registrado y tampoco se envía este campo, la solicitud falla con 400.
Example:
"cliente@example.com"