Recuperar la factura de un mes
Devuelve los detalles de facturación del mes seleccionado.
https://api2.transloadit.com/ bill/ {billYearMonth}Obtiene los datos de facturación del mes solicitado.
Comprueba que la respuesta tenga ok === "BILL_FOUND" antes de usar sus campos de facturación. Si no existe
la factura o falla la consulta, se devuelve error: "BILL_NOT_FOUND" con HTTP 200, por lo que el estado HTTP por sí solo
no demuestra que se haya encontrado una factura.
El parámetro de ruta billYearMonth tiene el formato YYYY-MM. Por ejemplo, para obtener tu factura de marzo
de 2019 usarías 2019-03.
Ejemplo de solicitud
Asigna a BILL_YEAR_MONTH el valor de tu recurso sin aplicarle codificación porcentual.
Los Workspaces cancelados no pueden crear nuevos tokens Bearer. Este endpoint sigue estando disponible con una Auth Key activa existente: usa la guía de facturación firmada en lugar de la configuración del token que se muestra a continuación. La clave debe conceder los ámbitos requeridos por este endpoint.
Ejecuta esta solicitud en una shell del lado del servidor con curl y un token Bearer adecuado en TRANSLOADIT_TOKEN. Si necesitas un token, despliega la configuración que aparece a continuación.
¿Necesitas un token Bearer?
En una shell de confianza del lado del servidor con curl y jq, asigna a TRANSLOADIT_KEY y TRANSLOADIT_SECRET los valores de tu Auth Key y tu Auth Secret. Mantén en secreto ambas credenciales y el token resultante; nunca ejecutes esta configuración en código del navegador.
Primero, crea un token con los ámbitos requeridos por este endpoint. Tu Auth Key ya debe conceder esos ámbitos.
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
Mantén esta shell abierta y ejecuta la solicitud que aparece a continuación. Reutiliza el token mientras siga siendo válido.
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={}'
Autenticación
Este endpoint acepta params firmados o un token Bearer. Consulta Autenticación para ver las instrucciones de configuración.
Ámbito requerido para el Auth Key o el token de portador: billing:read.
Las solicitudes firmadas requieren tanto una signature como una marca de tiempo futura en params.auth.expires. Los tokens Bearer no requieren ninguno de estos dos elementos.
Parámetros de ruta
billYearMonth(segmento de ruta), obligatorio. patrón:^[0-9]{4}-(?:0[1-9]|1[0-2])$
Parámetros de consulta
params(cadena JSON). Un objeto codificado en JSON cuyas claves compatibles se enumeran a continuación.signature(cadena). Obligatorio para las solicitudes firmadas. Omite este campo cuando uses un token Bearer.
Claves admitidas en el campo firmado params
Los campos de autenticación de esta lista se aplican a las solicitudes firmadas. Con un token Bearer puedes omitir params.auth y el campo separado signature. Compara a continuación los parámetros de solicitud de cada método de autenticación.
JSON Schema completo
params: Solo se aceptan los campos enumerados para este objeto.
| Campo | Tipo y descripción |
|---|---|
params.obligatorio para las solicitudes firmadas; opcional con un token Bearer | Contiene la clave de API de Transloadit y los metadatos de Signature Authentication para una solicitud de Billing.
|
params.obligatorio | stringMarca de tiempo de vencimiento ISO 8601 en el futuro. Es obligatoria cuando una solicitud está firmada o requiere autenticación mediante firma; las solicitudes autenticadas con Bearer pueden omitirla. |
params.obligatorio | stringClave de API de Transloadit utilizada para autenticar solicitudes |
params. | string | integerValor aleatorio y único incluido en los parámetros de las solicitudes firmadas para que cada firma sea única y evitar su reutilización accidental. |
Parámetros de solicitud según el método de autenticación
Con parámetros firmados
Incluye tu Auth Key como params.auth.key. Al firmar la solicitud, incluye una marca de tiempo futura en params.auth.expires y envía la Signature en el campo separado signature. Las definiciones de los campos que aparecen a continuación usan rutas dentro de params.
JSON Schema completo
params: Solo se aceptan los campos enumerados para este objeto.
Utiliza las definiciones de campos indicadas arriba: params.auth, params.nonce
Con un token Bearer
Envía el token Bearer en el encabezado Authorization. Puedes omitir params.auth y el campo independiente signature. Los demás parámetros obligatorios siguen siendo necesarios. Las definiciones de los campos que aparecen a continuación usan rutas dentro de params.
JSON Schema completo
params: Solo se aceptan los campos enumerados para este objeto.
Utiliza las definiciones de campos indicadas arriba: params.nonce
| Campo | Tipo y descripción |
|---|---|
params. | Contiene la clave de API de Transloadit y los metadatos de Signature Authentication para una solicitud de Billing.
|
params. | stringMarca de tiempo de vencimiento ISO 8601 en el futuro. Es obligatoria cuando una solicitud está firmada o requiere autenticación mediante firma; las solicitudes autenticadas con Bearer pueden omitirla. |
params. | stringClave de API de Transloadit utilizada para autenticar solicitudes |
Acceso a la facturación tras la cancelación
Los Workspaces cancelados no pueden crear nuevos tokens Bearer. Para recuperar sus facturas, usa una solicitud firmada con una Auth Key existente y activa y su Auth Secret en lugar de la configuración del token anterior. La clave debe seguir concediendo el ámbito indicado para este endpoint.
El SDK de Node.js firma las solicitudes de facturación directamente; no llama a /token. En un proyecto de Node.js de confianza
del lado del servidor, instálalo con yarn add @transloadit/node. Define TRANSLOADIT_KEY,
TRANSLOADIT_SECRET y BILL_YEAR_MONTH (por ejemplo, 2026-08) en el entorno.
Mantén el secreto en tu backend.
Este ejemplo del SDK usa sha384, el valor predeterminado para las claves de API recién creadas. Si tu clave usa
otro algoritmo de firma, sigue Signature Authentication
con ese algoritmo configurado en su lugar.
Guarda lo siguiente como bill.mjs y ejecuta 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))
Respuesta
Este es un ejemplo del cuerpo de la respuesta:
{
"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"
}éxito 2xx
Cuerpo de respuesta JSON. application/json text/plain; charset=utf-8
Esquema del cuerpo de la respuesta
JSON Schema completo
Puede aplicarse cualquiera de los esquemas siguientes:
Variante 1
La respuesta contiene únicamente los campos listados para este objeto.
| Campo | Tipo y descripción |
|---|---|
additional_gb | number (mínimo: 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
|
createdobligatorio | string | null (longitud mínima: 1) |
creditobligatorio | number | string | null
|
currency | null | string |
email | null | string |
final_sub_total | number |
invoice_idobligatorio | null |
is_proratedobligatorio | boolean |
monthobligatorio | stringPatrón de validación (expresión regular)^[0-9]{4}-(?:0[1-9]|1[0-2])$ |
okobligatorio | string (siempre: "BILL_FOUND") |
planobligatorio |
|
plan.obligatorio | number | string
|
plan.obligatorio | number | string | null
|
plan.obligatorio | boolean | 0 | 1 | "0" | "1" | nullPuede aplicarse cualquiera de los esquemas siguientes: boolean | 0 | 1 | "0" | "1"boolean | 0 | 1 | "0" | "1"null |
plan.obligatorio | null | string |
plan.obligatorio | number | string
|
plan.obligatorio | number | string
|
po_number | null | string |
reverse_charge_vat | boolean |
reward_discount | number | string | null
|
reward_discount_percent | number | string | null
|
robotsobligatorio | objectEsquema de propiedades adicionalesobject (propiedades obligatorias: gb)Los detalles adicionales del esquema están disponibles en el JSON Schema completo. |
signup_discount | number | string | null
|
signup_discount_percent | number | string | null
|
state | null | string |
sub_totalobligatorio | number |
tiers | cualquier valor |
to | null | string |
to_contact_email_address | null | string |
totalobligatorio | number |
used_gb | number (mínimo: 0) |
vat | number |
vat_id | null | string |
vat_rate | number |
zip | null | string |
Variante 2
La respuesta contiene únicamente los campos listados para este objeto.
| Campo | Tipo y descripción |
|---|---|
additional_gb | number (mínimo: 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
|
createdobligatorio | string | null (longitud mínima: 1) |
creditobligatorio | number | string | null
|
currency | null | string |
custom_expenses | cualquier valor |
email | null | string |
final_sub_total | number |
invoice_idobligatorio | string | number |
is_proratedobligatorio | boolean |
monthobligatorio | stringPatrón de validación (expresión regular)^[0-9]{4}-(?:0[1-9]|1[0-2])$ |
okobligatorio | string (siempre: "BILL_FOUND") |
planobligatorio |
|
plan.obligatorio | number | string
|
plan.obligatorio | number | string | null
|
plan.obligatorio | boolean | 0 | 1 | "0" | "1" | nullPuede aplicarse cualquiera de los esquemas siguientes: boolean | 0 | 1 | "0" | "1"boolean | 0 | 1 | "0" | "1"null |
plan.obligatorio | null | string |
plan.obligatorio | number | string
|
plan.obligatorio | number | string
|
po_number | null | string |
reverse_charge_vat | boolean |
reward_discount | number | string | null
|
reward_discount_percent | number | string | null
|
robotsobligatorio | string | number | boolean | null | Array<cualquier valor> | objectPuede aplicarse cualquiera de los esquemas siguientes: stringnumberbooleannullArray<cualquier valor>Array<cualquier valor>Esquema de los elementos del arraycualquier valorobjectobjectEsquema de propiedades adicionalescualquier valor |
signup_discount | number | string | null
|
signup_discount_percent | number | string | null
|
state | null | string |
sub_totalobligatorio | number |
tiers | cualquier valor |
to | null | string |
to_contact_email_address | null | string |
totalobligatorio | number |
used_gb | number (mínimo: 0) |
vat | number |
vat_id | null | string |
vat_rate | number |
zip | null | string |
Respuesta de error
Cuerpo de respuesta JSON. application/json text/plain; charset=utf-8
Esquema del cuerpo de la respuesta
JSON Schema completo
La respuesta puede contener campos adicionales.
| Campo | Tipo y descripción |
|---|---|
assembly_id | string |
error | string (longitud mínima: 1) |
http_code | number | string
|
message | stringExplicación del error legible por humanos. Su redacción puede variar; usa el código |
reason | null | string | number | boolean | Array<cualquier valor> | objectPuede aplicarse cualquiera de los esquemas siguientes: nullstringnumberbooleanArray<cualquier valor>Array<cualquier valor>Esquema de los elementos del arraycualquier valorobjectobjectEsquema de propiedades adicionalescualquier valor |
HTTP 400
Cuerpo de respuesta JSON. application/json text/plain; charset=utf-8
Esquema del cuerpo de la respuesta
JSON Schema completo
Errores con nombre y el formato general de error
error: "SIGNATURE_REUSE_DETECTED"
La solicitud fue denegada por motivos de seguridad. Si crees que esto es un error, ponte en contacto con soporte.
La respuesta puede contener campos adicionales.
Formato general de error
El valor de invoice_id es null para el mes actual.