Aller au contenu

Démarrer avec l'API

L’API TAYO.pro permet à votre propre logiciel de lire vos projets, interventions, devis, factures et rappels de paiement. Dans sa version actuelle, elle ne fait que lire : aucun endpoint ne crée ni n’envoie de document. La liste exacte est dans la référence.

Elle est faite pour être appelée par un serveur, jamais depuis un navigateur : une clé d’API dans un paquet JavaScript est une clé publiée.

L’API est une option payante, en plus d’un abonnement au plan PLUS. Sans elle, tous les appels authentifiés répondent 403 addon_required.

Les clés se créent depuis Paramètres → API, sur l’application web uniquement, après avoir accepté les conditions d’utilisation de l’API.

Chaque entreprise dispose de deux clés, et c’est le préfixe qui décide de tout :

Clé Ce qu’elle fait
tay_live_… La clé de production : accède à vos données réelles.
tay_test_… La clé de test : rejoue tout le parcours d’une requête, puis renvoie une réponse d’exemple sans rien toucher.

Le mode n’apparaît donc ni dans l’URL, ni dans le corps, ni dans un en-tête — uniquement dans la clé que vous présentez.

La clé se présente dans l’en-tête Authorization, et nulle part ailleurs — une clé passée en paramètre de requête est refusée avec un 401, même si elle est valide.

Fenêtre de terminal
curl https://app.tayo.pro/api/v1/me \
-H "Authorization: Bearer tay_test_votre_cle"
{ "companyId": "…", "mode": "test" }

GET /me vous dit à quelle entreprise et à quel mode la clé correspond : c’est le premier appel à faire pour vérifier une clé. GET /ping, lui, ne demande aucune clé : il dit seulement si l’API répond.

L’URL de base est https://app.tayo.pro/api/v1.

Une requête présentée avec une clé tay_test_… traverse exactement la même chaîne qu’une requête réelle : authentification, comptage des quotas, et la même validation du corps et des paramètres. Puis elle s’arrête net avant la logique métier.

Concrètement, en mode test :

  • rien n’est écrit, rien n’est supprimé ;
  • aucun e-mail, aucun PDF, aucun appel à Tayo n’est déclenché ;
  • la réponse respecte le schéma de la réponse de production ;
  • les identifiants sont stables d’un appel à l’autre — prj_test_1 restera prj_test_1 — pour que vos tests puissent s’appuyer dessus.

C’est ce qui rend la mise en production sans surprise : vous avez déjà vu la forme exacte de chaque réponse.

Un intégrateur sérieux doit pouvoir tester ses branches d’erreur. L’en-tête Tay-Test-Scenario choisit la réponse que le mode test doit renvoyer :

Scénario Ce que vous obtenez
success Le cas nominal. C’est le défaut.
not_found La ressource demandée n’existe pas.
validation_error Le corps est refusé, avec le détail par champ.
send_failed L’envoi au client a échoué.
quota_exceeded Votre quota mensuel est épuisé.

Chaque endpoint accepte un sous-ensemble de ces valeurs — send_failed n’a aucun sens sur une lecture. Aujourd’hui, une liste accepte success et quota_exceeded, la lecture d’une ressource ajoute not_found. Une valeur hors de cet ensemble répond 400.

Remplacez la clé. C’est tout.

Les URL, les corps de requête, les schémas de réponse et les codes d’erreur sont identiques dans les deux modes — c’est l’objet même du mode test.

Toute requête qui échoue renvoie la même enveloppe :

{
"error": {
"code": "invalid_argument",
"message": "The request failed validation.",
"details": [
{ "field": "amount", "code": "invalid_type", "message": "Expected number" }
]
}
}

details n’est présent que sur une erreur de validation.

Statut code Quand
400 invalid_argument La requête n’a pas passé la validation.
400 failed_precondition L’opération est impossible dans l’état actuel.
401 unauthenticated Clé absente, révoquée, ou mal présentée.
403 permission_denied Cette clé n’a pas le droit de faire cela.
403 addon_required L’option API n’est pas active sur l’entreprise.
404 not_found La ressource n’existe pas.
409 already_exists La ressource existe déjà.
409 delivery_in_flight La livraison est déjà en attente d’une nouvelle tentative.
409 endpoint_deleted Le point de terminaison de cette livraison n’existe plus.
409 endpoint_disabled Le point de terminaison de cette livraison est désactivé.
409 retry_limit_reached La livraison a atteint sa limite de relances manuelles.
429 rate_limited Trop de requêtes par minute — ralentissez et réessayez. Voir Limites d’usage.
429 quota_exceeded Le quota mensuel et sa tolérance de dépassement sont consommés. Voir Limites d’usage.
500 internal Une erreur de notre côté.
503 unavailable Service temporairement indisponible.

Les messages sont en anglais uniquement, et le resteront : un programme lit le code, et traduire la prose ne ferait que compliquer la recherche de ce qu’il cherche vraiment.

Si une réponse s’écarte de ce que la référence décrit, c’est une anomalie et sa correction est comprise dans l’option : voir Assistance API.