Customer registration and validation
Registering your customers in Facturapi allows you to validate their tax information and store it for future invoices.
This step is optional, as it is not necessary to have previously registered your customer in order to create invoices. However, we recommend doing it whenever possible.
Once your customer is registered, you can save the id
of the created object and use it to
invoice the same recipient without having to send all their tax information again.
When creating an invoice, you can include the recipient's information in 2 different ways:
- In the
customer
field, by sending an object with the customer's tax information. - In the
customer
field, by sending theid
of a previously registered customer.
Both options are valid, and we recommend using the one that best suits your use case.
How to register a customer
In Facturapi, the process of registering the tax information of national and foreign customers is not very different from each other, but it is worth analyzing them separately, as it is different from what the SAT indicates in its technical standard.
National customers (Mexico)
The following example shows how to register a national customer, that is, a customer (person or company) with a Mexican tax ID (RFC).
To learn about other data you can include, refer to the Create Customer API reference.
- Node.js
- C#
- PHP
- cURL
import Facturapi from 'facturapi'
const facturapi = new Facturapi('sk_test_API_KEY');
const customer = await facturapi.customers.create({
legal_name: 'Dunder Mifflin', // Person's name or business legal name
tax_id: 'ABC101010111', // RFC
tax_system: '601', // Fiscal regime
email: 'email@example.com', // Email for sending (optional).
address: {
zip: '85900', // Postal code
}
});
var facturapi = new FacturapiClient("sk_test_API_KEY");
var customer = await facturapi.Customer.CreateAsync(new Dictionary<string, object>
{
["legal_name"] = "Dunder Mifflin", // Person's name or business legal name
["tax_id"] = "ABC101010111", // RFC
["tax_system"] = "601", // Fiscal regime
["email"] = "email@example.com", // Email for sending (optional).
["address"] = new Dictionary<string, object>
{
["zip"] = "85900", // Postal code
}
});
$facturapi = new FacturapiClient("sk_test_API_KEY");
$customer = $facturapi->Customers->create([
"legal_name" => "Dunder Mifflin", // Person's name or business legal name
"tax_id" => "ABC101010111", // RFC
"tax_system" => "601", // Fiscal regime
"email" => "walterwhite@gmail.com", // Email for sending (optional).
"address" => [
"zip" => "85900", // Postal code
]
]);
curl https://www.facturapi.io/v2/customers \
-H "Authorization: Bearer sk_test_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"legal_name": "Dunder Mifflin", // Person's name or business legal name
"email": "email@example.com", // Email for sending (optional).
"tax_id": "ABC101010111", // RFC
"tax_system": "601", // Fiscal regime
"address": {
"zip": "85900" // Postal code
}
}'
Respuesta: Customer object
{
"id": "590ce6c56d04f840aa8438af",
"created_at": "2017-05-05T20:55:33.468Z",
"organization": "622a33e6f0175a00e01a8e80",
"livemode": false,
"legal_name": "Dunder Mifflin",
"tax_id": "ABC101010111",
"tax_system": "601",
"email": "email@example.com",
"phone": 6474010101,
"address": {
"street": null,
"exterior": null,
"interior": null,
"neighborhood": null,
"city": "Huatabampo",
"municipality": "Huatabampo",
"zip": 86500,
"state": "Sonora",
"country": "MEX"
}
}
Foreign customers
To register a foreign customer, it is necessary to specify the country of
origin by sending the ISO country code
of the origin country using the country
field.
You don't need to use the generic RFC for foreigners from SAT. We will
take care of it for you wherever necessary, as long as you send a value
other than "MEX"
for the country
field.
To learn about other data you can include, refer to the Create Customer API reference.
- Node.js
- C#
- PHP
- cURL
import Facturapi from 'facturapi'
const facturapi = new Facturapi('sk_test_API_KEY');
const customer = await facturapi.customers.create({
legal_name: 'Vättenfall, A.B.', // Person's name or business legal name
tax_id: '198912171234', // Tax identification number (optional)
email: 'email@example.com', // Email for sending (optional).
address: {
country: "SWE", // ISO country code.
zip: "17123", // Postal code
city: "Stockholm" // City (optional).
}
});
var facturapi = new FacturapiClient("sk_test_API_KEY");
var customer = await facturapi.Customer.CreateAsync(new Dictionary<string, object>
{
["legal_name"] = "Vättenfall, A.B.", // Person's name or business legal name
["tax_id"] = "198912171234", // Tax identification number (optional)
["email"] = "email@example.com", // Email for sending (optional).
["address"] = new Dictionary<string, object>
{
["country"] = "SWE", // ISO country code.
["zip"] = "17123", // Postal code
["city"] = "Stockholm" // City (optional).
}
});
$facturapi = new FacturapiClient("sk_test_API_KEY");
$customer = $facturapi->Customers->create([
"legal_name" => "Vättenfall, A.B.", // Person's name or business legal name
"tax_id" => "198912171234", // Tax identification number (optional)
"email" => "email@example.com", // Email for sending (optional).
"address" => [
"country" => "SWE", // ISO country code.
"zip" => "17123", // Postal code
"city" => "Stockholm" // City (optional).
]
]);
curl https://www.facturapi.io/v1/customers \
-H "Authorization: Bearer sk_test_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"legal_name": "Vättenfall, A.B.", // Person's name or business legal name
"tax_id": "198912171234", // Tax identification number (optional)
"email": "email@example.com", // Email for sending (optional).
"address": {
"country": "SWE", // ISO country code.
"zip": "17123", // Postal code
"city": "Stockholm" // City (optional).
}
}'
Respuesta: Customer object
{
"id": "62714bc2d1bfa410df1d98eb",
"created_at": "2022-05-03T15:35:30.034Z",
"organization": "622a33e6f0175a00e01a8e80",
"livemode": false,
"legal_name": "Vättenfall, A.B.",
"tax_id": "198912171234",
"email": "email@example.com",
"address": {
"country": "SWE",
"zip": "17123",
"city": "Stockholm"
},
}
Create customer with edit link
Depending on your workflow, you can create a customer by providing only the email address and the parameter createEditLink: true
. This generates a link that you can send to the customer so they can complete their own tax information.
- Node.js
- C#
- PHP
- cURL
const customer = await facturapi.customers.create({
email: "customer@example.com"
}, {
createEditLink: true
});
var customer = await facturapi.Customer.CreateAsync(new Dictionary<string, object>
{
["email"] = "customer@example.com"
}, new Dictionary<string, object>
{
["createEditLink"] = true
});
$customer = $facturapi->Customers->create([
"email" => "customer@example.com"
], [
"createEditLink" => true
]);
curl https://www.facturapi.io/v2/customers \
-H "Authorization: Bearer sk_test_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "customer@example.com"
}' \
-G --data-urlencode 'createEditLink=true'
The response object will include the edit_link
field, which is the link you can send to the customer by email:
{
"id": "62714bc2d1bfa410df1d98eb",
"email": "customer@example.com",
"edit_link": "https://auto.facturapi.io/tax-info/abcd1234"
}
You can send this link to the customer using your own email system, so they can complete their tax information directly in Facturapi.
- Node.js
- C#
- PHP
- cURL
await facturapi.customers.sendEditLinkByEmail("62714bc2d1bfa410df1d98eb", {
email: "customer@example.com" // Optional, if not included the customer's email will be used
});
await facturapi.Customer.SendEditLinkByEmailAsync("62714bc2d1bfa410df1d98eb", new Dictionary<string, object>
{
["email"] = "customer@example.com" // Optional, if not included the customer's email will be used
});
$facturapi->Customers->sendEditLinkByEmail("62714bc2d1bfa410df1d98eb", [
"email" => "customer@example.com" // Optional, if not included the customer's email will be used
]);
curl -X POST https://www.facturapi.io/v2/customers/62714bc2d1bfa410df1d98eb/email-edit-link \
-H "Authorization: Bearer sk_test_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "customer@example.com" // Optional, if not included the customer's email will be used
}'