Autenticación
El API usa el flujo client credentials de OAuth2: con tus credenciales de cliente obtienes un token de acceso, y ese token viaja en cada petición.
Solicita tu client_id y tu client_secret al equipo de Taxo. Trata el secreto como
una contraseña: guárdalo en tu gestor de configuración y nunca lo publiques en el
cliente.
Obtener un token
Envía tus credenciales en el cuerpo, con grant_type igual a client_credentials.
Para obtener un token de sandbox agrega la cabecera F-Sandbox-Mode: true.
curl https://invoice.taxo.ws/mx/partners/v1/auth/token \
-H "Content-Type: application/json" \
-H "F-Sandbox-Mode: true" \
-d '{
"grant_type": "client_credentials",
"client_id": "<client-id>",
"client_secret": "<client-secret>"
}'
import requests
respuesta = requests.post(
'https://invoice.taxo.ws/mx/partners/v1/auth/token',
headers={'F-Sandbox-Mode': 'true'},
json={
'grant_type': 'client_credentials',
'client_id': '<client-id>',
'client_secret': '<client-secret>'})
token = respuesta.json()['access_token']
La respuesta trae el token y su vigencia en segundos:
{
"token_type": "Bearer",
"expires_in": 31535999,
"access_token": "<token>"
}
El token dura lo que indique expires_in: guárdalo y reutilízalo en lugar de
pedir uno nuevo en cada petición.
Usar el token
Envía el token en la cabecera Authorization de cada petición:
Authorization: Bearer <token>
curl https://invoice.taxo.ws/mx/partners/v1/products \
-H "Authorization: Bearer <token>" \
-H "F-Sandbox-Mode: true"
import requests
respuesta = requests.get(
'https://invoice.taxo.ws/mx/partners/v1/products',
headers={
'Authorization': f'Bearer {token}',
'F-Sandbox-Mode': 'true'})
Errores de autenticación
| Código | Significado |
|---|---|
401 | Al pedir el token: las credenciales no son válidas. En el resto: falta el token, expiró o no es válido. |
Al pedir el token, el error sigue la forma de OAuth2:
{
"error": "<código del error>",
"error_description": "<descripción del error>"
}
En el resto de operaciones sigue la forma descrita en Errores.