Campos da resposta da API FitExerciseDB
2026-10-02 · 6 min
Um objeto de exercício do FitExerciseDB tem 16 campos. Cinco estão sempre presentes (id, name, bodyPart, target e equipment) e os outros onze podem ser null ou faltar, então o cliente deve tratá-los como opcionais. As listas envolvem os exercícios em data e pagination, uma chamada a um único exercício acrescenta um objeto _links, e o parâmetro lang altera os textos mas nunca os números. Esta página é a referência campo a campo do JSON no estilo ExerciseDB que GET /v1/exercises devolve.
In short
- 16 campos por exercício: id, name, bodyPart, target e equipment são obrigatórios, todo o resto pode ser null.
- id é uma string de quatro dígitos como "0001". Mantenha como string para preservar os zeros.
- caloriesPerMinute e averageCaloriesPerMinute são o mesmo número armazenado; averageCaloriesPerHour é esse número vezes 60, arredondado. Para um usuário real, chame o endpoint de calorias com um peso.
- As listas devolvem { data, pagination }. Calcule você mesmo o número de páginas a partir de total e pageSize.
- Só a resposta de um exercício individual traz _links. O parâmetro lang traduz os textos e não mexe em números nem em valores enumerados.
Que campos tem um objeto de exercício?
Todo exercício, numa lista ou sozinho, tem os mesmos 16 campos. Os cinco obrigatórios descrevem o que é o movimento e qual músculo ele trabalha. Os demais acrescentam detalhes de treino e de calorias.
| Campo | Tipo | Presença | Notas |
|---|---|---|---|
id | string | Sempre | Quatro dígitos como "0001". Identificador estável. |
name | string | Sempre | O nome do exercício, no idioma da resposta. |
bodyPart | string | Sempre | Uma de 10 regiões amplas, com inicial maiúscula, por exemplo Waist. |
target | string | Sempre | Um de 19 músculos específicos, por exemplo Abs. |
equipment | string | Sempre | Um de 34 valores literais, por exemplo "Body Weight". |
category | string | Pode ser null | Rótulo livre como strength. |
difficulty | string | Pode ser null | Por exemplo beginner. |
mechanic | string | Pode ser null | Por exemplo isolation. |
force | string | Pode ser null | Por exemplo push. |
met | number | Pode ser null | Equivalente metabólico do movimento, por exemplo 3.5. |
caloriesPerMinute | number | Pode ser null | kcal por minuto armazenadas para um peso corporal típico. |
averageCaloriesPerMinute | number | Pode ser null | Mesmo valor que caloriesPerMinute. |
averageCaloriesPerHour | number | Pode ser null | caloriesPerMinute multiplicado por 60 e arredondado. |
secondaryMuscles | string[] | Pode ser null | Músculos de apoio, no idioma da resposta. |
instructions | string[] | Pode ser null | Passos ordenados, no idioma da resposta. |
language | string | Opcional | Código do idioma em que a resposta foi gerada. |
As strings exatas de bodyPart, target e equipment vêm dos endpoints de taxonomia, descritos na documentação da API.
Quais campos podem ser null e como o cliente deve tratá-los?
Só id, name, bodyPart, target e equipment são garantidos. Modele os outros onze como opcionais e anuláveis e decida campo a campo o que um valor vazio significa na sua tela. Um tipo TypeScript fiel à API fica assim:
type Exercise = {
id: string; // "0001", keep it a string
name: string;
bodyPart: string;
target: string;
equipment: string;
category?: string | null;
difficulty?: string | null;
mechanic?: string | null;
force?: string | null;
met?: number | null;
caloriesPerMinute?: number | null;
averageCaloriesPerMinute?: number | null;
averageCaloriesPerHour?: number | null;
secondaryMuscles?: string[] | null;
instructions?: string[] | null;
language?: "en" | "fr" | "es" | "pt" | "zh" | "ja";
};No conjunto de dados atual, os 1324 exercícios têm os 16 campos preenchidos, mas o esquema permite nulos, então não dependa disso.
Duas regras evitam a maioria dos bugs. Primeiro, oculte a seção de passos quando instructions for null, em vez de mostrar uma lista vazia. Segundo, verifique met antes de chamar o endpoint de calorias: um exercício sem valor MET devolve um erro 422, não um número.
Como os campos de calorias se relacionam com o endpoint de calorias?
caloriesPerMinute é um valor armazenado para um peso corporal típico, feito para exibição rápida numa lista. averageCaloriesPerMinute o repete com um nome mais amigável, e averageCaloriesPerHour é esse valor vezes 60, arredondado (4,3 kcal por minuto viram 258 por hora). Nenhum deles sabe quem é o seu usuário.
Para uma estimativa pessoal, passe o peso e a duração para GET /v1/exercises/{id}/calories?bodyweightKg=80&minutes=30, que multiplica o MET do exercício pelo peso e pelo tempo. O cálculo e suas ressalvas estão no guia de calorias MET. Os valores MET vêm do Compendium of Physical Activities, então todo resultado é uma estimativa.
O que envolve uma lista e o que um exercício individual acrescenta?
Listas e busca compartilham o mesmo envelope: um array em data e um objeto pagination com page, pageSize e total. O tamanho de página padrão é 50 e o máximo é 100, então os 1.324 exercícios exigem 14 requisições no tamanho máximo. Alguns exemplos da nossa documentação mostram também um campo totalPages; calcule você mesmo para que o código funcione nos dois casos:
{
"data": [ { "id": "0001", "name": "3/4 Sit-up", "bodyPart": "Waist", "target": "Abs", "equipment": "Body Weight" } ],
"pagination": { "page": 1, "pageSize": 50, "total": 1324 }
}const pages = Math.ceil(total / pageSize); // 1324 / 100 = 14A chamada a um único exercício, GET /v1/exercises/{id}, devolve os mesmos 16 campos mais um objeto _links no estilo HAL. O link de calorias é um modelo: o cliente preenche os dois parâmetros em vez de montar a URL na mão. As listas não trazem _links.
"_links": {
"self": { "href": "/v1/exercises/0001" },
"related": { "href": "/v1/exercises/0001/related" },
"calories": { "href": "/v1/exercises/0001/calories{?bodyweightKg,minutes}", "templated": true },
"marketplacePreview": { "href": "/marketplace/preview/0001.gif" }
}O que o parâmetro lang muda?
Adicionar ?lang=fr (ou es, pt, zh, ja) traduz name, bodyPart, target, equipment, secondaryMuscles e instructions, e define language com o código pedido. Ele não mexe em id, nos campos numéricos nem nos quatro rótulos category, difficulty, mechanic e force, que continuam como estão. Assim você guarda os números em cache uma vez e busca de novo apenas os textos por idioma.
Como o idioma é escolhido, e por que os termos de busca devem ficar em inglês, é o tema do guia de busca e idiomas. Para experimentar, navegue pelo banco de exercícios ou leia a documentação. A resposta não tem campo de imagem: veja como comprar e incorporar os GIFs do ExerciseDB e GIF ou vídeo nas APIs de exercícios.
FAQ
- O id do exercício é um número ou uma string?
- Uma string. Os IDs têm quatro dígitos com zeros à esquerda, como "0001" ou "5201" (os números não são consecutivos). Armazene e envie como string: converter para número elimina os zeros e quebra as consultas.
- bodyPart e target vêm em minúsculas?
- Não. Os valores têm inicial maiúscula, por exemplo Waist, Abs e Body Weight. Os filtros comparam essas strings exatas, então copie-as dos endpoints de taxonomia em vez de digitá-las.
- caloriesPerMinute depende do peso do usuário?
- Não. É um valor armazenado para um peso corporal típico. Para um número que reflita o seu usuário, chame o endpoint de calorias com bodyweightKg e minutes.
- Por que o número de páginas não aparece na resposta?
- O objeto pagination garante page, pageSize e total. Calcule o número de páginas com Math.ceil(total / pageSize) em vez de depender de um campo extra.