{"openapi":"3.0.3","info":{"title":"API Graus","description":"Este aplicativo permite ao produtor familiar, ao técnico extensionista e ao produtor orgânico preparar a calda na dose certa, registrar cada aplicação e conferir o total de cobre no ano, para a certificadora. Prova de conceito gerada no Embrapa I/O Forge: as contas e os dados vêm do levantamento do projeto e ainda não servem ao público final.\n\nToda chamada a `/v1` pede uma chave de API, no cabeçalho `Authorization: Bearer <chave>` ou `X-API-Key: <chave>`. Cada chave tem um limite de chamadas por minuto e uma cota mensal; as respostas trazem os cabeçalhos `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-Quota-Limit` e `X-Quota-Remaining`.","version":"0.26.11-alpha.1"},"servers":[{"url":"https://test-graus-api.alpha.agro.rocks","description":"Estágio alpha"}],"tags":[{"name":"Cálculos","description":"As contas do projeto: envie as entradas e receba o resultado."},{"name":"Catálogos","description":"Dados de referência do projeto, prontos para consulta."},{"name":"Serviço","description":"Situação do serviço."}],"security":[{"BearerKey":[]},{"HeaderKey":[]}],"paths":{"/v1/formulas":{"get":{"tags":["Cálculos"],"operationId":"list_formulas","summary":"Lista as contas que a API faz","responses":{"200":{"description":"Contas disponíveis, com as entradas de cada uma","content":{"application/json":{"schema":{"type":"object","properties":{"formulas":{"type":"array","items":{"$ref":"#/components/schemas/Formula"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/bordalesa_dose":{"post":{"tags":["Cálculos"],"operationId":"calculate_bordalesa_dose","summary":"Dose de bordalesa por volume","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume do pulverizador (L)","example":20}}},"example":{"volume_l":20}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"bordalesa_dose"},"name":{"type":"string","example":"Dose de bordalesa por volume"},"result":{"type":"number","description":"Resultado da conta (g)","example":200},"unit":{"type":"string","description":"Unidade do resultado","example":"g"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume do pulverizador (L)","example":20}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/bordalesa_cobre_g":{"post":{"tags":["Cálculos"],"operationId":"calculate_bordalesa_cobre_g","summary":"Sulfato de cobre da bordalesa","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20},"concentracao_pct":{"type":"number","description":"concentração em %","example":1}}},"example":{"volume_l":20,"concentracao_pct":1}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"bordalesa_cobre_g"},"name":{"type":"string","example":"Sulfato de cobre da bordalesa"},"result":{"type":"number","description":"Resultado da conta (g)","example":200},"unit":{"type":"string","description":"Unidade do resultado","example":"g"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20},"concentracao_pct":{"type":"number","description":"concentração em %","example":1}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/bordalesa_estoque_l":{"post":{"tags":["Cálculos"],"operationId":"calculate_bordalesa_estoque_l","summary":"Solução estoque da bordalesa","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":10},"concentracao_pct":{"type":"number","description":"concentração em %","example":2}}},"example":{"volume_l":10,"concentracao_pct":2}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"bordalesa_estoque_l"},"name":{"type":"string","example":"Solução estoque da bordalesa"},"result":{"type":"number","description":"Resultado da conta (L)","example":2},"unit":{"type":"string","description":"Unidade do resultado","example":"L"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":10},"concentracao_pct":{"type":"number","description":"concentração em %","example":2}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/bordalesa_cal_hidratada_g":{"post":{"tags":["Cálculos"],"operationId":"calculate_bordalesa_cal_hidratada_g","summary":"Cal hidratada da bordalesa","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":10},"concentracao_pct":{"type":"number","description":"concentração em %","example":1}}},"example":{"volume_l":10,"concentracao_pct":1}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"bordalesa_cal_hidratada_g"},"name":{"type":"string","example":"Cal hidratada da bordalesa"},"result":{"type":"number","description":"Resultado da conta (g)","example":180},"unit":{"type":"string","description":"Unidade do resultado","example":"g"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l","concentracao_pct"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":10},"concentracao_pct":{"type":"number","description":"concentração em %","example":1}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/vicosa_cobre_g":{"post":{"tags":["Cálculos"],"operationId":"calculate_vicosa_cobre_g","summary":"Sulfato de cobre da calda Viçosa","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20}}},"example":{"volume_l":20}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"vicosa_cobre_g"},"name":{"type":"string","example":"Sulfato de cobre da calda Viçosa"},"result":{"type":"number","description":"Resultado da conta (g)","example":75},"unit":{"type":"string","description":"Unidade do resultado","example":"g"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/formulas/cal_correcao_acidez_g":{"post":{"tags":["Cálculos"],"operationId":"calculate_cal_correcao_acidez_g","summary":"Cal para corrigir a calda ácida","description":"Fonte: Equipe do projeto","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20}}},"example":{"volume_l":20}}}},"responses":{"200":{"description":"Resultado da conta","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","result","unit","inputs"],"properties":{"code_name":{"type":"string","example":"cal_correcao_acidez_g"},"name":{"type":"string","example":"Cal para corrigir a calda ácida"},"result":{"type":"number","description":"Resultado da conta (g)","example":40},"unit":{"type":"string","description":"Unidade do resultado","example":"g"},"inputs":{"type":"object","additionalProperties":false,"required":["volume_l"],"properties":{"volume_l":{"type":"number","description":"volume da calda (L)","example":20}},"description":"As entradas usadas na conta"}}}}}},"400":{"description":"O corpo da chamada não é um JSON válido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Entrada ausente, com tipo errado ou com a qual a conta não fecha (divisão por zero, por exemplo)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/catalogs":{"get":{"tags":["Catálogos"],"operationId":"list_catalogs","summary":"Lista os catálogos de dados de referência","responses":{"200":{"description":"Catálogos disponíveis","content":{"application/json":{"schema":{"type":"object","properties":{"catalogs":{"type":"array","items":{"type":"object","required":["code_name","name"],"properties":{"code_name":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/catalogs/sulfocalcic_dilution_table":{"get":{"tags":["Catálogos"],"operationId":"list_sulfocalcic_dilution_table","summary":"Tabela de Diluição da Sulfocálcica","description":"A tabela de diluição da calda sulfocálcica: a partir do °Bé medido e do °Bé desejado, dá os litros de água por litro de calda. O app usa para calcular a diluição correta.\n\nFonte: Schwengber, Schiedeck e Gonçalves, 2007 (tabela 17-33 °Bé); Motta, 2016 (tabela 17-33 °Bé)","parameters":[{"name":"q","in":"query","description":"Texto a procurar em qualquer coluna (sem diferenciar maiúsculas nem acentos)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Quantas linhas devolver","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"offset","in":"query","description":"Quantas linhas pular","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Linhas do catálogo","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","columns","total","offset","limit","rows"],"properties":{"code_name":{"type":"string","example":"sulfocalcic_dilution_table"},"name":{"type":"string","example":"Tabela de Diluição da Sulfocálcica"},"description":{"type":"string"},"source":{"type":"string"},"example":{"type":"boolean","description":"true quando as linhas são exemplos a validar"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"total":{"type":"integer","description":"Linhas que atendem à busca"},"offset":{"type":"integer"},"limit":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"be_medido":{"description":"°Bé medido","nullable":true},"be_desejado":{"description":"°Bé desejado","nullable":true},"litros_de_agua_por_litro_de_calda":{"description":"Litros de água por litro de calda","nullable":true}}}}}},"example":{"code_name":"sulfocalcic_dilution_table","name":"Tabela de Diluição da Sulfocálcica","description":"A tabela de diluição da calda sulfocálcica: a partir do °Bé medido e do °Bé desejado, dá os litros de água por litro de calda. O app usa para calcular a diluição correta.","source":"Schwengber, Schiedeck e Gonçalves, 2007 (tabela 17-33 °Bé); Motta, 2016 (tabela 17-33 °Bé)","example":false,"columns":[{"key":"be_medido","label":"°Bé medido"},{"key":"be_desejado","label":"°Bé desejado"},{"key":"litros_de_agua_por_litro_de_calda","label":"Litros de água por litro de calda"}],"total":16,"offset":0,"limit":100,"rows":[{"be_medido":"30","be_desejado":"2,0","litros_de_agua_por_litro_de_calda":"17,7"},{"be_medido":"30","be_desejado":"0,8","litros_de_agua_por_litro_de_calda":"46"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Parâmetro de consulta inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/catalogs/crop_dose_table":{"get":{"tags":["Catálogos"],"operationId":"list_crop_dose_table","summary":"Doses por Cultura","description":"As doses recomendadas de cada calda para cada cultura, com a concentração e a época de aplicação, para o app sugerir a dose certa quando a pessoa escolhe a cultura.\n\nFonte: Schwengber, Schiedeck e Gonçalves, 2007 (Quadro 2 e Quadro 4); Pereira e Pinheiro, 2012","parameters":[{"name":"q","in":"query","description":"Texto a procurar em qualquer coluna (sem diferenciar maiúsculas nem acentos)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Quantas linhas devolver","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"offset","in":"query","description":"Quantas linhas pular","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Linhas do catálogo","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","columns","total","offset","limit","rows"],"properties":{"code_name":{"type":"string","example":"crop_dose_table"},"name":{"type":"string","example":"Doses por Cultura"},"description":{"type":"string"},"source":{"type":"string"},"example":{"type":"boolean","description":"true quando as linhas são exemplos a validar"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"total":{"type":"integer","description":"Linhas que atendem à busca"},"offset":{"type":"integer"},"limit":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"cultura":{"description":"Cultura","nullable":true},"calda":{"description":"Calda","nullable":true},"concentracao":{"description":"Concentração","nullable":true},"epoca_de_aplicacao":{"description":"Época de aplicação","nullable":true}}}}}},"example":{"code_name":"crop_dose_table","name":"Doses por Cultura","description":"As doses recomendadas de cada calda para cada cultura, com a concentração e a época de aplicação, para o app sugerir a dose certa quando a pessoa escolhe a cultura.","source":"Schwengber, Schiedeck e Gonçalves, 2007 (Quadro 2 e Quadro 4); Pereira e Pinheiro, 2012","example":false,"columns":[{"key":"cultura","label":"Cultura"},{"key":"calda","label":"Calda"},{"key":"concentracao","label":"Concentração"},{"key":"epoca_de_aplicacao","label":"Época de aplicação"}],"total":14,"offset":0,"limit":100,"rows":[{"cultura":"Tomate","calda":"Bordalesa","concentracao":"0,5-1,0%","epoca_de_aplicacao":"Tratamento de verão"},{"cultura":"Café","calda":"Bordalesa","concentracao":"1,0-1,5%","epoca_de_aplicacao":"Tratamento de verão"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Parâmetro de consulta inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/catalogs/spray_rules":{"get":{"tags":["Catálogos"],"operationId":"list_spray_rules","summary":"Regras de Uso das Caldas","description":"As regras de uso das caldas: validade, intervalos entre aplicações, condições climáticas, EPI e limitações por cultura, para o app avisar a pessoa antes de registrar.\n\nFonte: Motta, 2016; Schwengber, Schiedeck e Gonçalves, 2007; Motta, 2024","parameters":[{"name":"q","in":"query","description":"Texto a procurar em qualquer coluna (sem diferenciar maiúsculas nem acentos)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Quantas linhas devolver","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"offset","in":"query","description":"Quantas linhas pular","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Linhas do catálogo","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","columns","total","offset","limit","rows"],"properties":{"code_name":{"type":"string","example":"spray_rules"},"name":{"type":"string","example":"Regras de Uso das Caldas"},"description":{"type":"string"},"source":{"type":"string"},"example":{"type":"boolean","description":"true quando as linhas são exemplos a validar"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"total":{"type":"integer","description":"Linhas que atendem à busca"},"offset":{"type":"integer"},"limit":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"calda":{"description":"Calda","nullable":true},"regra":{"description":"Regra","nullable":true},"detalhe":{"description":"Detalhe","nullable":true},"fonte":{"description":"Fonte","nullable":true}}}}}},"example":{"code_name":"spray_rules","name":"Regras de Uso das Caldas","description":"As regras de uso das caldas: validade, intervalos entre aplicações, condições climáticas, EPI e limitações por cultura, para o app avisar a pessoa antes de registrar.","source":"Motta, 2016; Schwengber, Schiedeck e Gonçalves, 2007; Motta, 2024","example":false,"columns":[{"key":"calda","label":"Calda"},{"key":"regra","label":"Regra"},{"key":"detalhe","label":"Detalhe"},{"key":"fonte","label":"Fonte"}],"total":16,"offset":0,"limit":100,"rows":[{"calda":"Bordalesa","regra":"Validade","detalhe":"Até 3 dias (2016) ou 24 horas (2007)","fonte":"Motta, 2016; Schwengber, 2007"},{"calda":"Bordalesa","regra":"pH ideal","detalhe":"8 a 9","fonte":"Motta, 2016"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Parâmetro de consulta inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/v1/catalogs/spray_recipe":{"get":{"tags":["Catálogos"],"operationId":"list_spray_recipe","summary":"Receitas de Caldas","description":"As receitas das três caldas (bordalesa, sulfocálcica e Viçosa) com os ingredientes e as doses, para o app calcular a dose de cada insumo a partir do volume do pulverizador.\n\nFonte: Motta, 2016 (bordalesa e sulfocálcica); UFV via Schwengber, Schiedeck e Gonçalves, 2007 (Viçosa); Motta, 2024 (sem ureia)","parameters":[{"name":"q","in":"query","description":"Texto a procurar em qualquer coluna (sem diferenciar maiúsculas nem acentos)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Quantas linhas devolver","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"offset","in":"query","description":"Quantas linhas pular","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Linhas do catálogo","content":{"application/json":{"schema":{"type":"object","required":["code_name","name","columns","total","offset","limit","rows"],"properties":{"code_name":{"type":"string","example":"spray_recipe"},"name":{"type":"string","example":"Receitas de Caldas"},"description":{"type":"string"},"source":{"type":"string"},"example":{"type":"boolean","description":"true quando as linhas são exemplos a validar"},"columns":{"type":"array","items":{"$ref":"#/components/schemas/Column"}},"total":{"type":"integer","description":"Linhas que atendem à busca"},"offset":{"type":"integer"},"limit":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"calda":{"description":"Calda","nullable":true},"ingrediente":{"description":"Ingrediente","nullable":true},"dose_por_10_l_g":{"description":"Dose por 10 L (g)","nullable":true},"observacao":{"description":"Observação","nullable":true}}}}}},"example":{"code_name":"spray_recipe","name":"Receitas de Caldas","description":"As receitas das três caldas (bordalesa, sulfocálcica e Viçosa) com os ingredientes e as doses, para o app calcular a dose de cada insumo a partir do volume do pulverizador.","source":"Motta, 2016 (bordalesa e sulfocálcica); UFV via Schwengber, Schiedeck e Gonçalves, 2007 (Viçosa); Motta, 2024 (sem ureia)","example":false,"columns":[{"key":"calda","label":"Calda"},{"key":"ingrediente","label":"Ingrediente"},{"key":"dose_por_10_l_g","label":"Dose por 10 L (g)"},{"key":"observacao","label":"Observação"}],"total":10,"offset":0,"limit":100,"rows":[{"calda":"Bordalesa (uso direto)","ingrediente":"Sulfato de cobre","dose_por_10_l_g":"100","observacao":"para 10 L a 1%"},{"calda":"Bordalesa (uso direto)","ingrediente":"Cal virgem","dose_por_10_l_g":"100","observacao":"para 10 L a 1%"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"description":"Parâmetro de consulta inválido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/health":{"get":{"tags":["Serviço"],"operationId":"health","summary":"Saúde do serviço","security":[],"responses":{"200":{"description":"O serviço está no ar","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"version":{"type":"string"},"stage":{"type":"string"},"formulas":{"type":"integer"},"catalogs":{"type":"integer"},"database":{"type":"string","enum":["ok","unreachable"]}}}}}}}}}},"components":{"securitySchemes":{"BearerKey":{"type":"http","scheme":"bearer","description":"Chave de API no cabeçalho Authorization"},"HeaderKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Chave de API no cabeçalho X-API-Key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","example":"INVALID_INPUT"},"message":{"type":"string"},"fields":{"type":"array","description":"Nas entradas inválidas, o problema de cada campo","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}},"Column":{"type":"object","required":["key","label"],"properties":{"key":{"type":"string","description":"Chave da coluna nos objetos de `rows`"},"label":{"type":"string","description":"Nome da coluna"}}},"Formula":{"type":"object","required":["code_name","name","variables"],"properties":{"code_name":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"result_unit":{"type":"string"},"source":{"type":"string"},"variables":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"unit":{"type":"string"},"list":{"type":"boolean","description":"true quando a entrada é uma lista de números"}}}}}}},"responses":{"Unauthorized":{"description":"Chave de API ausente, inválida, expirada ou revogada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Limite de chamadas por minuto ou cota mensal da chave atingidos","headers":{"Retry-After":{"description":"Segundos até a próxima chamada aceita (no limite por minuto)","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unavailable":{"description":"O serviço não conseguiu conferir a chave agora; tente de novo em instantes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}