FitExerciseDB

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.

CampoTipoPresençaNotas
idstringSempreQuatro dígitos como "0001". Identificador estável.
namestringSempreO nome do exercício, no idioma da resposta.
bodyPartstringSempreUma de 10 regiões amplas, com inicial maiúscula, por exemplo Waist.
targetstringSempreUm de 19 músculos específicos, por exemplo Abs.
equipmentstringSempreUm de 34 valores literais, por exemplo "Body Weight".
categorystringPode ser nullRótulo livre como strength.
difficultystringPode ser nullPor exemplo beginner.
mechanicstringPode ser nullPor exemplo isolation.
forcestringPode ser nullPor exemplo push.
metnumberPode ser nullEquivalente metabólico do movimento, por exemplo 3.5.
caloriesPerMinutenumberPode ser nullkcal por minuto armazenadas para um peso corporal típico.
averageCaloriesPerMinutenumberPode ser nullMesmo valor que caloriesPerMinute.
averageCaloriesPerHournumberPode ser nullcaloriesPerMinute multiplicado por 60 e arredondado.
secondaryMusclesstring[]Pode ser nullMúsculos de apoio, no idioma da resposta.
instructionsstring[]Pode ser nullPassos ordenados, no idioma da resposta.
languagestringOpcionalCó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 = 14

A 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.