Récupérer la facture d’un mois
Renvoie les détails de facturation pour le mois sélectionné.
https://api2.transloadit.com/ bill/ {billYearMonth}Récupère les données de facturation pour le mois demandé.
Vérifiez que la réponse contient ok === "BILL_FOUND" avant d’utiliser ses champs de facturation. Une facture absente
ou un échec de recherche renvoie error: "BILL_NOT_FOUND" avec un statut HTTP 200. Le statut HTTP seul
ne permet donc pas de déterminer qu’une facture a été trouvée.
Le paramètre de chemin billYearMonth est au format YYYY-MM. Par exemple, pour récupérer votre facture de mars
2019, utilisez 2019-03.
Exemple de requête
Définissez BILL_YEAR_MONTH sur la valeur de votre ressource sans l’encoder en pourcentage.
Les Workspaces résiliés ne peuvent pas créer de nouveaux jetons porteurs. Ce point de terminaison reste accessible avec une Auth Key active existante : utilisez la procédure de facturation avec signature au lieu de la configuration du jeton ci-dessous. La clé doit accorder les portées requises par ce point de terminaison.
Exécutez cette requête dans un shell côté serveur avec curl et un jeton porteur approprié dans TRANSLOADIT_TOKEN. Si vous avez besoin d’un jeton, développez la section de configuration ci-dessous.
Besoin d’un jeton porteur ?
Dans un shell de confiance côté serveur disposant de curl et de jq, définissez TRANSLOADIT_KEY et TRANSLOADIT_SECRET sur votre Auth Key et votre Auth Secret. Gardez secrets ces deux éléments d’authentification ainsi que le jeton obtenu ; n’exécutez jamais cette configuration dans du code de navigateur.
Créez d’abord un jeton avec les portées requises par ce point de terminaison. Votre Auth Key doit déjà accorder ces portées.
if ! TOKEN_RESPONSE="$(curl --fail-with-body -sS \
--request POST \
--url 'https://api2.transloadit.com/token' \
--user "${TRANSLOADIT_KEY:?Set TRANSLOADIT_KEY}:${TRANSLOADIT_SECRET:?Set TRANSLOADIT_SECRET}" \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'aud=api2' \
--data-urlencode 'scope=billing:read')"; then
printf '%s\n' "$TOKEN_RESPONSE" >&2
exit 1
fi
TRANSLOADIT_TOKEN="$(printf '%s' "$TOKEN_RESPONSE" |
jq -er '.access_token | strings | select(length > 0)')" || exit 1
Gardez ce shell ouvert et exécutez la requête ci-dessous. Réutilisez le jeton tant qu’il reste valide.
curl --fail-with-body -sS --request GET --get \
--url "https://api2.transloadit.com/bill/${BILL_YEAR_MONTH:?Set BILL_YEAR_MONTH}" \
--header "Authorization: Bearer ${TRANSLOADIT_TOKEN:?Set TRANSLOADIT_TOKEN}" \
--data-urlencode 'params={}'
Authentification
Ce point de terminaison accepte des params signés ou un jeton porteur. Consultez la section Authentification pour les instructions de configuration.
Portée requise pour l’Auth Key ou le jeton porteur : billing:read.
Les requêtes signées nécessitent à la fois une signature et un horodatage params.auth.expires situé dans le futur. Les jetons porteurs ne nécessitent ni l’un ni l’autre.
Paramètres de chemin
billYearMonth(segment de chemin), obligatoire. motif :^[0-9]{4}-(?:0[1-9]|1[0-2])$
Paramètres de requête
params(Chaîne JSON). Un objet encodé en JSON dont les clés prises en charge sont répertoriées ci-dessous.signature(chaîne de caractères). Obligatoire pour les requêtes signées. Omettez ce champ lorsque vous utilisez un jeton porteur.
Clés prises en charge dans le champ signé params
Les champs d’authentification de cette liste s’appliquent aux requêtes signées. Avec un jeton porteur, vous pouvez omettre params.auth et le champ distinct signature. Comparez les paramètres de requête spécifiques à l’authentification ci-dessous.
Schéma JSON complet
params: Seuls les champs répertoriés pour cet objet sont acceptés.
| Champ | Type et description |
|---|---|
params.obligatoire pour les requêtes signées ; facultatif avec un jeton porteur | Contient la clé API Transloadit et les métadonnées de Signature Authentication pour une requête de facturation.
|
params.obligatoire | stringHorodatage d’expiration au format ISO 8601 situé dans le futur. Obligatoire lorsqu’une requête est signée ou nécessite Signature Authentication ; les requêtes authentifiées par jeton porteur peuvent l’omettre. |
params.obligatoire | stringClé API Transloadit utilisée pour authentifier les requêtes |
params. | string | integerValeur unique et aléatoire incluse dans les paramètres de la requête signée pour rendre chaque signature unique et empêcher la réutilisation accidentelle d’une signature. |
Paramètres de requête par méthode d’authentification
Avec des paramètres signés
Incluez votre Auth Key dans params.auth.key. Lors de la signature de la requête, incluez un horodatage futur dans params.auth.expires et envoyez la signature dans le champ distinct signature. Les définitions des champs ci-dessous utilisent des chemins à l’intérieur de params.
Schéma JSON complet
params: Seuls les champs répertoriés pour cet objet sont acceptés.
Utilise les définitions des champs ci-dessus : params.auth, params.nonce
Avec un jeton porteur
Envoyez le jeton porteur dans l’en-tête Authorization. Vous pouvez omettre params.auth et le champ distinct signature. Les autres paramètres obligatoires restent requis. Les définitions des champs ci-dessous utilisent des chemins à l’intérieur de params.
Schéma JSON complet
params: Seuls les champs répertoriés pour cet objet sont acceptés.
Utilise les définitions des champs ci-dessus : params.nonce
| Champ | Type et description |
|---|---|
params. | Contient la clé API Transloadit et les métadonnées de Signature Authentication pour une requête de facturation.
|
params. | stringHorodatage d’expiration au format ISO 8601 situé dans le futur. Obligatoire lorsqu’une requête est signée ou nécessite Signature Authentication ; les requêtes authentifiées par jeton porteur peuvent l’omettre. |
params. | stringClé API Transloadit utilisée pour authentifier les requêtes |
Accès à la facturation après résiliation
Les Workspaces résiliés ne peuvent pas créer de nouveaux jetons porteurs. Pour récupérer leurs factures, utilisez une requête signée avec une Auth Key existante et active et son Auth Secret au lieu de la configuration de jeton ci-dessus. La clé doit toujours accorder la portée indiquée pour ce point de terminaison.
Le SDK Node.js signe directement les requêtes de facturation ; il n’appelle pas /token. Dans un projet
Node.js côté serveur de confiance, installez-le avec yarn add @transloadit/node. Définissez TRANSLOADIT_KEY,
TRANSLOADIT_SECRET et BILL_YEAR_MONTH (par exemple, 2026-08) dans l’environnement.
Conservez le secret sur votre backend.
Cet exemple avec le SDK utilise sha384, la valeur par défaut pour les clés API nouvellement créées. Si votre clé utilise
un autre algorithme de signature, suivez plutôt les instructions de Signature Authentication
avec cet algorithme configuré.
Enregistrez le code suivant dans bill.mjs et exécutez node bill.mjs :
import { Transloadit } from '@transloadit/node'
const { TRANSLOADIT_KEY, TRANSLOADIT_SECRET, BILL_YEAR_MONTH } = process.env
if (!TRANSLOADIT_KEY || !TRANSLOADIT_SECRET || !BILL_YEAR_MONTH) {
throw new Error('Set TRANSLOADIT_KEY, TRANSLOADIT_SECRET, and BILL_YEAR_MONTH')
}
const transloadit = new Transloadit({
authKey: TRANSLOADIT_KEY,
authSecret: TRANSLOADIT_SECRET,
})
const bill = await transloadit.getBill(BILL_YEAR_MONTH)
if (bill.ok !== 'BILL_FOUND') throw new Error('No bill was returned')
console.log(JSON.stringify(bill, null, 2))
Réponse
Voici un exemple de corps de réponse :
{
"additional_gb": 0,
"additional_gb_fee": 0,
"address_1": "Jimbostreet 19",
"address_2": "",
"bill_limit": 0,
"city": "Berlin",
"company": "Jimbo Jones GmbH",
"country": "Germany",
"created": "2014-07-01T06:58:32.000Z",
"credit": 0,
"email": "testuser@example.org",
"invoice_id": "0d04b65924da41d4b68c80f776d196d5",
"is_prorated": false,
"month": "2014-06",
"ok": "BILL_FOUND",
"plan": {
"gb_included": 35,
"gb_limit": null,
"has_lifetime_limit": false,
"id": "3599821193a1f77baafb98e5f8fb17a6",
"price_per_gb": 2.85,
"price_per_month": 99
},
"reverse_charge_vat": false,
"reward_discount": 1.98,
"reward_discount_percent": 2,
"robots": {
"/assemblies": {
"factor": 0,
"freeGb": 0,
"gb": 0,
"gbFactorApplied": 0,
"rawGb": 0
},
"/s3/store": {
"factor": 10,
"freeGb": 0.57,
"gb": 0.6,
"gbFactorApplied": 1.17,
"rawGb": 11.75
},
"/video/encode": {
"factor": 1,
"freeGb": 0,
"gb": 21.05,
"gbFactorApplied": 21.05,
"rawGb": 21.05
},
"/video/thumbs": {
"factor": 10,
"freeGb": 0,
"gb": 0.34,
"gbFactorApplied": 0.34,
"rawGb": 3.42
}
},
"signup_discount": 0,
"signup_discount_percent": 0,
"state": null,
"sub_total": 99,
"to": "Test User",
"total": 115.45,
"used_gb": 21.99,
"vat": 18.43,
"vat_id": "",
"vat_rate": 0.19,
"zip": "10117"
}Succès 2xx
Corps de la réponse JSON. application/json text/plain; charset=utf-8
Schéma du corps de la réponse
Schéma JSON complet
N’importe lequel des schémas suivants peut s’appliquer :
Variante 1
La réponse contient uniquement les champs répertoriés pour cet objet.
| Champ | Type et description |
|---|---|
additional_gb | number (minimum : 0) |
additional_gb_fee | number |
address_1 | null | string |
address_2 | null | string |
bill_limit | number |
city | null | string |
company | null | string |
country | null | string |
country_id | null | string |
coupon_discount | number | string | null
|
coupon_discount_percent | number | string | null
|
createdobligatoire | string | null (longueur minimale : 1) |
creditobligatoire | number | string | null
|
currency | null | string |
email | null | string |
final_sub_total | number |
invoice_idobligatoire | null |
is_proratedobligatoire | boolean |
monthobligatoire | stringMotif de validation (expression régulière)^[0-9]{4}-(?:0[1-9]|1[0-2])$ |
okobligatoire | string (toujours : "BILL_FOUND") |
planobligatoire |
|
plan.obligatoire | number | string
|
plan.obligatoire | number | string | null
|
plan.obligatoire | boolean | 0 | 1 | "0" | "1" | nullN’importe lequel des schémas suivants peut s’appliquer : boolean | 0 | 1 | "0" | "1"boolean | 0 | 1 | "0" | "1"null |
plan.obligatoire | null | string |
plan.obligatoire | number | string
|
plan.obligatoire | number | string
|
po_number | null | string |
reverse_charge_vat | boolean |
reward_discount | number | string | null
|
reward_discount_percent | number | string | null
|
robotsobligatoire | objectSchéma de la propriété supplémentaireobject (propriétés requises : gb)Des détails supplémentaires sur le schéma sont disponibles dans le schéma JSON complet. |
signup_discount | number | string | null
|
signup_discount_percent | number | string | null
|
state | null | string |
sub_totalobligatoire | number |
tiers | n’importe quelle valeur |
to | null | string |
to_contact_email_address | null | string |
totalobligatoire | number |
used_gb | number (minimum : 0) |
vat | number |
vat_id | null | string |
vat_rate | number |
zip | null | string |
Variante 2
La réponse contient uniquement les champs répertoriés pour cet objet.
| Champ | Type et description |
|---|---|
additional_gb | number (minimum : 0) |
additional_gb_fee | number |
address_1 | null | string |
address_2 | null | string |
bill_limit | number |
city | null | string |
company | null | string |
country | null | string |
country_id | null | string |
coupon_discount | number | string | null
|
coupon_discount_percent | number | string | null
|
createdobligatoire | string | null (longueur minimale : 1) |
creditobligatoire | number | string | null
|
currency | null | string |
custom_expenses | n’importe quelle valeur |
email | null | string |
final_sub_total | number |
invoice_idobligatoire | string | number |
is_proratedobligatoire | boolean |
monthobligatoire | stringMotif de validation (expression régulière)^[0-9]{4}-(?:0[1-9]|1[0-2])$ |
okobligatoire | string (toujours : "BILL_FOUND") |
planobligatoire |
|
plan.obligatoire | number | string
|
plan.obligatoire | number | string | null
|
plan.obligatoire | boolean | 0 | 1 | "0" | "1" | nullN’importe lequel des schémas suivants peut s’appliquer : boolean | 0 | 1 | "0" | "1"boolean | 0 | 1 | "0" | "1"null |
plan.obligatoire | null | string |
plan.obligatoire | number | string
|
plan.obligatoire | number | string
|
po_number | null | string |
reverse_charge_vat | boolean |
reward_discount | number | string | null
|
reward_discount_percent | number | string | null
|
robotsobligatoire | string | number | boolean | null | Array<n’importe quelle valeur> | objectN’importe lequel des schémas suivants peut s’appliquer : stringnumberbooleannullArray<n’importe quelle valeur>Array<n’importe quelle valeur>Schéma d’un élément de tableaun’importe quelle valeurobjectobjectSchéma de la propriété supplémentairen’importe quelle valeur |
signup_discount | number | string | null
|
signup_discount_percent | number | string | null
|
state | null | string |
sub_totalobligatoire | number |
tiers | n’importe quelle valeur |
to | null | string |
to_contact_email_address | null | string |
totalobligatoire | number |
used_gb | number (minimum : 0) |
vat | number |
vat_id | null | string |
vat_rate | number |
zip | null | string |
Réponse d’erreur
Corps de la réponse JSON. application/json text/plain; charset=utf-8
Schéma du corps de la réponse
Schéma JSON complet
La réponse peut contenir des champs supplémentaires.
| Champ | Type et description |
|---|---|
assembly_id | string |
error | string (longueur minimale : 1) |
http_code | number | string
|
message | stringExplication de l’erreur destinée à être lue par un humain. Sa formulation peut varier ; utilisez le code |
reason | null | string | number | boolean | Array<n’importe quelle valeur> | objectN’importe lequel des schémas suivants peut s’appliquer : nullstringnumberbooleanArray<n’importe quelle valeur>Array<n’importe quelle valeur>Schéma d’un élément de tableaun’importe quelle valeurobjectobjectSchéma de la propriété supplémentairen’importe quelle valeur |
HTTP 400
Corps de la réponse JSON. application/json text/plain; charset=utf-8
Schéma du corps de la réponse
Schéma JSON complet
Erreurs nommées et format général des erreurs
error: "SIGNATURE_REUSE_DETECTED"
La requête a été refusée pour des raisons de sécurité. Si vous pensez qu’il s’agit d’une erreur, veuillez contacter l’assistance.
La réponse peut contenir des champs supplémentaires.
Format général des erreurs
La valeur de invoice_id est null pour le mois en cours.