Cómo funciona
Todas las llamadas a la API requieren el headerAuthorization con tus credenciales codificadas en Base64:
Authorization: Basic base64(usuario:contraseña)
Credenciales por ambiente
| Ambiente | Web | URL API |
|---|---|---|
| Sandbox | dev.facturama.mx | https://apisandbox.facturama.mx |
| Producción | app.facturama.mx | https://api.facturama.mx |
Las cuentas de sandbox y producción son independientes. No puedes usar las credenciales de una en la otra.
Ejemplos de autenticación
curl --location 'https://apisandbox.facturama.mx/Client' \
--header 'Authorization: Basic dHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ=='
import requests
import base64
usuario = "tu_usuario"
password = "tu_contraseña"
credentials = base64.b64encode(f"{usuario}:{password}".encode()).decode()
headers = {
"Authorization": f"Basic {credentials}",
"Content-Type": "application/json"
}
response = requests.get(
"https://apisandbox.facturama.mx/client",
headers=headers
)
print(response.json())
<?php
$usuario = "tu_usuario";
$password = "tu_contraseña";
$credentials = base64_encode("$usuario:$password");
$ch = curl_init("https://apisandbox.facturama.mx/clients");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Basic $credentials",
"Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo $response;
const axios = require('axios');
const usuario = 'tu_usuario';
const password = 'tu_contraseña';
const credentials = Buffer.from(`${usuario}:${password}`).toString('base64');
axios.get('https://apisandbox.facturama.mx/clients', {
headers: {
Authorization: `Basic ${credentials}`,
'Content-Type': 'application/json'
}
}).then(res => console.log(res.data));
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args)
throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(
"https://apisandbox.facturama.mx/Client"
))
.header(
"Authorization",
"Basic dHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ=="
)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println("Status: " + response.statusCode());
System.out.println(response.body());
}
}
require 'net/http'
require 'uri'
url = URI.parse(
'https://apisandbox.facturama.mx/Client'
)
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url.request_uri)
request['Authorization'] =
'Basic dHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ=='
response = http.request(request)
puts "Status: #{response.code}"
puts response.body
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add(
"Authorization",
"Basic dHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ=="
);
var response = await client.GetAsync(
"https://apisandbox.facturama.mx/Client"
);
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Status: {(int)response.StatusCode}");
Console.WriteLine(content);
}
}
Cómo generar el Base64
Si necesitas calcular manualmente el token lo puedes hacer desde una terminar:echo -n "usuario:contraseña" | base64
# Resultado: ddHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ==
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("usuario:contraseña"))
# Resultado: ddHVfdXN1YXJpbzp0dV9jb250cmFzZcOxYQ==
Guarda tus credenciales en variables de entorno — nunca las hardcodees en el código fuente.
Errores de autenticación
| Código | Descripción |
|---|---|
401 Unauthorized | Credenciales incorrectas o ausentes |