{"openapi":"3.1.0","info":{"title":"EasyPlaceholder","version":"1.0.0","summary":"Avatares por semente e placeholders em SVG, personalizáveis pela query string.","description":"Avatar por semente e placeholder, em SVG. Sem chave e sem cadastro.\n\n**Estabilidade**: a saída de uma URL existente nunca muda. Um visual novo entra como um valor novo de `style`, nunca como mudança de um antigo.\n\n**Só SVG**: não há PNG na API (sem fontes embutidas não dá para rasterizar texto de forma confiável no servidor); o laboratório converte para PNG no navegador.\n\n**Limites**: pedidos por IP por minuto e por hora (cabeçalhos `RateLimit-*`; `429` com `Retry-After`), semente e texto cortados em tamanhos fixos, endereço de até 4096 caracteres.\n\n**Valor inválido**: sem `strict`, é ignorado (o cabeçalho `X-Ignorados` lista os nomes); com `strict=1`, a resposta é `400` em JSON com a lista.","license":{"name":"Uso livre"}},"servers":[{"url":"https://rodrigoborges.dev"}],"tags":[{"name":"Imagens"}],"paths":{"/avatar/{seed}.svg":{"get":{"summary":"Avatar pela semente no caminho","description":"O mesmo texto gera sempre o mesmo avatar. Para texto com caracteres que atrapalham o caminho, use `GET /avatar?seed=`.","tags":["Imagens"],"parameters":[{"name":"seed","in":"path","required":true,"description":"A semente (até 200 caracteres; use %2F para a barra).","schema":{"type":"string"}},{"$ref":"#/components/parameters/avatar_style"},{"$ref":"#/components/parameters/avatar_text"},{"$ref":"#/components/parameters/avatar_initials"},{"$ref":"#/components/parameters/avatar_bg"},{"$ref":"#/components/parameters/avatar_bg2"},{"$ref":"#/components/parameters/avatar_angle"},{"$ref":"#/components/parameters/avatar_color"},{"$ref":"#/components/parameters/avatar_font"},{"$ref":"#/components/parameters/avatar_weight"},{"$ref":"#/components/parameters/avatar_italic"},{"$ref":"#/components/parameters/avatar_fontsize"},{"$ref":"#/components/parameters/avatar_case"},{"$ref":"#/components/parameters/avatar_spacing"},{"$ref":"#/components/parameters/avatar_shape"},{"$ref":"#/components/parameters/avatar_radius"},{"$ref":"#/components/parameters/avatar_border"},{"$ref":"#/components/parameters/avatar_bordercolor"},{"$ref":"#/components/parameters/avatar_pattern"},{"$ref":"#/components/parameters/avatar_patterncolor"},{"$ref":"#/components/parameters/avatar_size"},{"$ref":"#/components/parameters/avatar_title"},{"$ref":"#/components/parameters/avatar_download"},{"$ref":"#/components/parameters/avatar_strict"}],"responses":{"200":{"description":"A imagem, em SVG.","headers":{"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}},"X-Ignorados":{"description":"Nomes dos parâmetros ignorados (desconhecidos, de outro tipo de imagem ou com valor inválido). Não vem quando nada foi ignorado.","schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string","examples":["public, max-age=86400, stale-while-revalidate=604800"]}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"304":{"description":"Não mudou (pedido condicional com If-None-Match)."},"400":{"description":"Tamanho impossível (placeholder de 8 a 4096 pixels), semente ausente ou, com strict=1, qualquer problema com os parâmetros. Pedido recusado. Sem strict, o corpo é um SVG pequeno que explica o motivo (a <img> mostra a mensagem); com strict=1 ou Accept: application/json, é JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"414":{"description":"Endereço longo demais (mais de 4096 caracteres).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"429":{"description":"Limite de pedidos por IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}},"headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}}}}}}},"/avatar":{"get":{"summary":"Avatar pela semente na query","description":"A mesma imagem de `/avatar/{seed}.svg`, com a semente no parâmetro `seed`. Sem parâmetro nenhum, leva ao laboratório.","tags":["Imagens"],"parameters":[{"$ref":"#/components/parameters/avatar_seed"},{"$ref":"#/components/parameters/avatar_style"},{"$ref":"#/components/parameters/avatar_text"},{"$ref":"#/components/parameters/avatar_initials"},{"$ref":"#/components/parameters/avatar_bg"},{"$ref":"#/components/parameters/avatar_bg2"},{"$ref":"#/components/parameters/avatar_angle"},{"$ref":"#/components/parameters/avatar_color"},{"$ref":"#/components/parameters/avatar_font"},{"$ref":"#/components/parameters/avatar_weight"},{"$ref":"#/components/parameters/avatar_italic"},{"$ref":"#/components/parameters/avatar_fontsize"},{"$ref":"#/components/parameters/avatar_case"},{"$ref":"#/components/parameters/avatar_spacing"},{"$ref":"#/components/parameters/avatar_shape"},{"$ref":"#/components/parameters/avatar_radius"},{"$ref":"#/components/parameters/avatar_border"},{"$ref":"#/components/parameters/avatar_bordercolor"},{"$ref":"#/components/parameters/avatar_pattern"},{"$ref":"#/components/parameters/avatar_patterncolor"},{"$ref":"#/components/parameters/avatar_size"},{"$ref":"#/components/parameters/avatar_title"},{"$ref":"#/components/parameters/avatar_download"},{"$ref":"#/components/parameters/avatar_strict"}],"responses":{"200":{"description":"A imagem, em SVG.","headers":{"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}},"X-Ignorados":{"description":"Nomes dos parâmetros ignorados (desconhecidos, de outro tipo de imagem ou com valor inválido). Não vem quando nada foi ignorado.","schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string","examples":["public, max-age=86400, stale-while-revalidate=604800"]}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"304":{"description":"Não mudou (pedido condicional com If-None-Match)."},"400":{"description":"Tamanho impossível (placeholder de 8 a 4096 pixels), semente ausente ou, com strict=1, qualquer problema com os parâmetros. Pedido recusado. Sem strict, o corpo é um SVG pequeno que explica o motivo (a <img> mostra a mensagem); com strict=1 ou Accept: application/json, é JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"414":{"description":"Endereço longo demais (mais de 4096 caracteres).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"429":{"description":"Limite de pedidos por IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}},"headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}}}}}}},"/placeholder/{width}x{height}.svg":{"get":{"summary":"Placeholder pelas dimensões no caminho","description":"Largura e altura de 8 a 4096 pixels. `/placeholder/{lado}.svg` faz um quadrado.","tags":["Imagens"],"parameters":[{"name":"width","in":"path","required":true,"description":"Largura em pixels.","schema":{"type":"integer","minimum":8,"maximum":4096}},{"name":"height","in":"path","required":true,"description":"Altura em pixels.","schema":{"type":"integer","minimum":8,"maximum":4096}},{"$ref":"#/components/parameters/placeholder_text"},{"$ref":"#/components/parameters/placeholder_bg"},{"$ref":"#/components/parameters/placeholder_bg2"},{"$ref":"#/components/parameters/placeholder_angle"},{"$ref":"#/components/parameters/placeholder_color"},{"$ref":"#/components/parameters/placeholder_font"},{"$ref":"#/components/parameters/placeholder_weight"},{"$ref":"#/components/parameters/placeholder_italic"},{"$ref":"#/components/parameters/placeholder_fontsize"},{"$ref":"#/components/parameters/placeholder_case"},{"$ref":"#/components/parameters/placeholder_spacing"},{"$ref":"#/components/parameters/placeholder_shape"},{"$ref":"#/components/parameters/placeholder_radius"},{"$ref":"#/components/parameters/placeholder_border"},{"$ref":"#/components/parameters/placeholder_bordercolor"},{"$ref":"#/components/parameters/placeholder_pattern"},{"$ref":"#/components/parameters/placeholder_patterncolor"},{"$ref":"#/components/parameters/placeholder_cross"},{"$ref":"#/components/parameters/placeholder_title"},{"$ref":"#/components/parameters/placeholder_download"},{"$ref":"#/components/parameters/placeholder_strict"}],"responses":{"200":{"description":"A imagem, em SVG.","headers":{"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}},"X-Ignorados":{"description":"Nomes dos parâmetros ignorados (desconhecidos, de outro tipo de imagem ou com valor inválido). Não vem quando nada foi ignorado.","schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string","examples":["public, max-age=86400, stale-while-revalidate=604800"]}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"304":{"description":"Não mudou (pedido condicional com If-None-Match)."},"400":{"description":"Tamanho impossível (placeholder de 8 a 4096 pixels), semente ausente ou, com strict=1, qualquer problema com os parâmetros. Pedido recusado. Sem strict, o corpo é um SVG pequeno que explica o motivo (a <img> mostra a mensagem); com strict=1 ou Accept: application/json, é JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"414":{"description":"Endereço longo demais (mais de 4096 caracteres).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"429":{"description":"Limite de pedidos por IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}},"headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}}}}}}},"/placeholder":{"get":{"summary":"Placeholder pelas dimensões na query","description":"A mesma imagem de `/placeholder/{width}x{height}.svg`. Só `width` ou só `height` faz um quadrado; nenhum dos dois, com outros parâmetros, faz 600 por 400. Sem parâmetro nenhum, leva ao laboratório.","tags":["Imagens"],"parameters":[{"$ref":"#/components/parameters/placeholder_width"},{"$ref":"#/components/parameters/placeholder_height"},{"$ref":"#/components/parameters/placeholder_text"},{"$ref":"#/components/parameters/placeholder_bg"},{"$ref":"#/components/parameters/placeholder_bg2"},{"$ref":"#/components/parameters/placeholder_angle"},{"$ref":"#/components/parameters/placeholder_color"},{"$ref":"#/components/parameters/placeholder_font"},{"$ref":"#/components/parameters/placeholder_weight"},{"$ref":"#/components/parameters/placeholder_italic"},{"$ref":"#/components/parameters/placeholder_fontsize"},{"$ref":"#/components/parameters/placeholder_case"},{"$ref":"#/components/parameters/placeholder_spacing"},{"$ref":"#/components/parameters/placeholder_shape"},{"$ref":"#/components/parameters/placeholder_radius"},{"$ref":"#/components/parameters/placeholder_border"},{"$ref":"#/components/parameters/placeholder_bordercolor"},{"$ref":"#/components/parameters/placeholder_pattern"},{"$ref":"#/components/parameters/placeholder_patterncolor"},{"$ref":"#/components/parameters/placeholder_cross"},{"$ref":"#/components/parameters/placeholder_title"},{"$ref":"#/components/parameters/placeholder_download"},{"$ref":"#/components/parameters/placeholder_strict"}],"responses":{"200":{"description":"A imagem, em SVG.","headers":{"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}},"X-Ignorados":{"description":"Nomes dos parâmetros ignorados (desconhecidos, de outro tipo de imagem ou com valor inválido). Não vem quando nada foi ignorado.","schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Cache-Control":{"schema":{"type":"string","examples":["public, max-age=86400, stale-while-revalidate=604800"]}}},"content":{"image/svg+xml":{"schema":{"type":"string"}}}},"304":{"description":"Não mudou (pedido condicional com If-None-Match)."},"400":{"description":"Tamanho impossível (placeholder de 8 a 4096 pixels), semente ausente ou, com strict=1, qualquer problema com os parâmetros. Pedido recusado. Sem strict, o corpo é um SVG pequeno que explica o motivo (a <img> mostra a mensagem); com strict=1 ou Accept: application/json, é JSON.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"414":{"description":"Endereço longo demais (mais de 4096 caracteres).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}}},"429":{"description":"Limite de pedidos por IP.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}},"image/svg+xml":{"schema":{"type":"string"}}},"headers":{"Retry-After":{"description":"Segundos até poder tentar de novo.","schema":{"type":"integer"}},"RateLimit-Limit":{"description":"Pedidos permitidos na janela que está valendo.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Pedidos que ainda cabem na janela.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Segundos até a janela esvaziar, no pior caso.","schema":{"type":"integer"}}}}}}}},"components":{"parameters":{"avatar_seed":{"name":"seed","in":"query","required":true,"description":"O texto que dá origem ao avatar: o mesmo texto gera sempre o mesmo avatar. Pode ser um nome, um e-mail, um id (até 200 caracteres). No caminho: /avatar/<texto>.svg.","schema":{"type":"string","maxLength":200}},"avatar_style":{"name":"style","in":"query","required":false,"description":"Jeito do desenho. iniciais: as letras do nome; identicon: grade simétrica; formas: composição abstrata; rosto: uma carinha. Todos saem da semente. Padrão: iniciais.","schema":{"type":"string","enum":["iniciais","initials","identicon","formas","shapes","bauhaus","rosto","face"]}},"avatar_text":{"name":"text","in":"query","required":false,"description":"Texto mostrado no estilo iniciais, no lugar das iniciais da semente (até 8 caracteres). Padrão: iniciais da semente · dimensões.","schema":{"type":"string","maxLength":8}},"avatar_initials":{"name":"initials","in":"query","required":false,"description":"Quantas iniciais mostrar (1 a 3). Com uma palavra só, usa as primeiras letras dela. Padrão: 2.","schema":{"type":"integer","minimum":1,"maximum":3,"default":2}},"avatar_bg":{"name":"bg","in":"query","required":false,"description":"Hex de 3, 4, 6 ou 8 dígitos (com ou sem #), um nome (blue, azul...) ou transparent. O 8º par é a transparência. Padrão: sorteada pela semente · #cbd5e1.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"avatar_bg2":{"name":"bg2","in":"query","required":false,"description":"Com ela, o fundo vira um degradê de bg para bg2. Padrão: nenhuma.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"avatar_angle":{"name":"angle","in":"query","required":false,"description":"Direção do degradê em graus: 0 sobe, 90 vai para a direita, 180 desce. Padrão: 135.","schema":{"type":"integer","minimum":0,"maximum":360,"default":135}},"avatar_color":{"name":"color","in":"query","required":false,"description":"Cor do texto (nos outros estilos, a do desenho: grade, forma principal ou traços do rosto). Sem ela, vai de branco ou azul-noite, o que der mais contraste com o fundo. Padrão: automática.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"avatar_font":{"name":"font","in":"query","required":false,"description":"sans, serif, mono, rounded, cursive, system ou o nome de uma fonte. Dentro de uma <img> só vale a fonte instalada no aparelho de quem vê; as outras caem na família sem serifa. Padrão: sans.","schema":{"type":"string","maxLength":40,"examples":["sans","serif","mono","rounded","cursive","system","Comic Sans MS"]}},"avatar_weight":{"name":"weight","in":"query","required":false,"description":"De 100 a 900, em centenas (ou normal e bold). Padrão: 700 (avatar) · 600 (placeholder).","schema":{"type":"string","enum":["100","200","300","400","500","600","700","800","900","normal","bold"]}},"avatar_italic":{"name":"italic","in":"query","required":false,"description":"1 liga o itálico. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"avatar_fontsize":{"name":"fontsize","in":"query","required":false,"description":"Tamanho da letra em % do lado (no placeholder, do lado menor). Sem ele, o texto se ajusta sozinho. Padrão: automático.","schema":{"type":"integer","minimum":5,"maximum":100}},"avatar_case":{"name":"case","in":"query","required":false,"description":"upper, lower ou none. Padrão: upper nas iniciais · none no texto informado e no placeholder.","schema":{"type":"string","enum":["upper","lower","none"]}},"avatar_spacing":{"name":"spacing","in":"query","required":false,"description":"Espaçamento entre letras em % do tamanho da letra (de -10 a 50). Padrão: 0.","schema":{"type":"integer","minimum":-10,"maximum":50,"default":0}},"avatar_shape":{"name":"shape","in":"query","required":false,"description":"circle, square, rounded ou squircle (quadrado \"gordinho\"). No placeholder, circle vira elipse. Padrão: circle (avatar) · square (placeholder).","schema":{"type":"string","enum":["circle","square","rounded","squircle"]}},"avatar_radius":{"name":"radius","in":"query","required":false,"description":"Raio dos cantos, em % do lado menor (0 a 50). Só vale com shape=rounded; se você o informar sem shape, a forma passa a ser rounded. Padrão: 22.","schema":{"type":"integer","minimum":0,"maximum":50,"default":22}},"avatar_border":{"name":"border","in":"query","required":false,"description":"Espessura da borda, por dentro da forma, em % do lado menor (0 a 20). Padrão: 0.","schema":{"type":"integer","minimum":0,"maximum":20,"default":0}},"avatar_bordercolor":{"name":"bordercolor","in":"query","required":false,"description":"Cor da borda. Sem ela, usa a cor do texto. Padrão: a cor do texto.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"avatar_pattern":{"name":"pattern","in":"query","required":false,"description":"Padrão desenhado sobre o fundo: none, dots, stripes, grid ou waves. Padrão: none.","schema":{"type":"string","enum":["none","dots","stripes","grid","waves"]}},"avatar_patterncolor":{"name":"patterncolor","in":"query","required":false,"description":"Cor do padrão. Sem transparência no valor (8º par), ele fica com 30% de opacidade. Padrão: clara no fundo escuro, escura no claro.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"avatar_size":{"name":"size","in":"query","required":false,"description":"Largura e altura em pixels (16 a 2048). O desenho é vetorial: o tamanho só define o tamanho natural da imagem. Padrão: 128.","schema":{"type":"integer","minimum":16,"maximum":2048,"default":128}},"avatar_title":{"name":"title","in":"query","required":false,"description":"Põe um <title> e role=\"img\" no SVG, para leitores de tela quando o SVG é usado direto na página. Padrão: nenhum.","schema":{"type":"string","maxLength":120}},"avatar_download":{"name":"download","in":"query","required":false,"description":"1 faz o navegador baixar o arquivo em vez de mostrar. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"avatar_strict":{"name":"strict","in":"query","required":false,"description":"1 troca o \"ignorar valor inválido\" por um erro 400 em JSON com a lista do que está errado (nome, motivo e valor recebido): para serviços que querem saber quando erraram. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"placeholder_width":{"name":"width","in":"query","required":false,"description":"Largura em pixels, de 8 a 4096. No caminho: /placeholder/<largura>x<altura>.svg (um número só faz um quadrado). Padrão: 600 (ou a altura, se só ela vier).","schema":{"type":"integer","minimum":8,"maximum":4096,"default":600}},"placeholder_height":{"name":"height","in":"query","required":false,"description":"Altura em pixels, de 8 a 4096. Padrão: 400 (ou a largura, se só ela vier).","schema":{"type":"integer","minimum":8,"maximum":4096,"default":400}},"placeholder_text":{"name":"text","in":"query","required":false,"description":"Texto da imagem. Padrão: as dimensões, como \"600 × 400\". Quebre linhas com %0A (até 4). Padrão: iniciais da semente · dimensões.","schema":{"type":"string","maxLength":120}},"placeholder_bg":{"name":"bg","in":"query","required":false,"description":"Hex de 3, 4, 6 ou 8 dígitos (com ou sem #), um nome (blue, azul...) ou transparent. O 8º par é a transparência. Padrão: sorteada pela semente · #cbd5e1.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"placeholder_bg2":{"name":"bg2","in":"query","required":false,"description":"Com ela, o fundo vira um degradê de bg para bg2. Padrão: nenhuma.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"placeholder_angle":{"name":"angle","in":"query","required":false,"description":"Direção do degradê em graus: 0 sobe, 90 vai para a direita, 180 desce. Padrão: 135.","schema":{"type":"integer","minimum":0,"maximum":360,"default":135}},"placeholder_color":{"name":"color","in":"query","required":false,"description":"Cor do texto (nos outros estilos, a do desenho: grade, forma principal ou traços do rosto). Sem ela, vai de branco ou azul-noite, o que der mais contraste com o fundo. Padrão: automática.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"placeholder_font":{"name":"font","in":"query","required":false,"description":"sans, serif, mono, rounded, cursive, system ou o nome de uma fonte. Dentro de uma <img> só vale a fonte instalada no aparelho de quem vê; as outras caem na família sem serifa. Padrão: sans.","schema":{"type":"string","maxLength":40,"examples":["sans","serif","mono","rounded","cursive","system","Comic Sans MS"]}},"placeholder_weight":{"name":"weight","in":"query","required":false,"description":"De 100 a 900, em centenas (ou normal e bold). Padrão: 700 (avatar) · 600 (placeholder).","schema":{"type":"string","enum":["100","200","300","400","500","600","700","800","900","normal","bold"]}},"placeholder_italic":{"name":"italic","in":"query","required":false,"description":"1 liga o itálico. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"placeholder_fontsize":{"name":"fontsize","in":"query","required":false,"description":"Tamanho da letra em % do lado (no placeholder, do lado menor). Sem ele, o texto se ajusta sozinho. Padrão: automático.","schema":{"type":"integer","minimum":5,"maximum":100}},"placeholder_case":{"name":"case","in":"query","required":false,"description":"upper, lower ou none. Padrão: upper nas iniciais · none no texto informado e no placeholder.","schema":{"type":"string","enum":["upper","lower","none"]}},"placeholder_spacing":{"name":"spacing","in":"query","required":false,"description":"Espaçamento entre letras em % do tamanho da letra (de -10 a 50). Padrão: 0.","schema":{"type":"integer","minimum":-10,"maximum":50,"default":0}},"placeholder_shape":{"name":"shape","in":"query","required":false,"description":"circle, square, rounded ou squircle (quadrado \"gordinho\"). No placeholder, circle vira elipse. Padrão: circle (avatar) · square (placeholder).","schema":{"type":"string","enum":["circle","square","rounded","squircle"]}},"placeholder_radius":{"name":"radius","in":"query","required":false,"description":"Raio dos cantos, em % do lado menor (0 a 50). Só vale com shape=rounded; se você o informar sem shape, a forma passa a ser rounded. Padrão: 22.","schema":{"type":"integer","minimum":0,"maximum":50,"default":22}},"placeholder_border":{"name":"border","in":"query","required":false,"description":"Espessura da borda, por dentro da forma, em % do lado menor (0 a 20). Padrão: 0.","schema":{"type":"integer","minimum":0,"maximum":20,"default":0}},"placeholder_bordercolor":{"name":"bordercolor","in":"query","required":false,"description":"Cor da borda. Sem ela, usa a cor do texto. Padrão: a cor do texto.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"placeholder_pattern":{"name":"pattern","in":"query","required":false,"description":"Padrão desenhado sobre o fundo: none, dots, stripes, grid ou waves. Padrão: none.","schema":{"type":"string","enum":["none","dots","stripes","grid","waves"]}},"placeholder_patterncolor":{"name":"patterncolor","in":"query","required":false,"description":"Cor do padrão. Sem transparência no valor (8º par), ele fica com 30% de opacidade. Padrão: clara no fundo escuro, escura no claro.","schema":{"type":"string","pattern":"^#?([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$|^[a-zA-Z]+$","examples":["ff8800","blue","transparent","ff880080"]}},"placeholder_cross":{"name":"cross","in":"query","required":false,"description":"1 desenha as duas diagonais do retângulo, como nos placeholders clássicos. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"placeholder_title":{"name":"title","in":"query","required":false,"description":"Põe um <title> e role=\"img\" no SVG, para leitores de tela quando o SVG é usado direto na página. Padrão: nenhum.","schema":{"type":"string","maxLength":120}},"placeholder_download":{"name":"download","in":"query","required":false,"description":"1 faz o navegador baixar o arquivo em vez de mostrar. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}},"placeholder_strict":{"name":"strict","in":"query","required":false,"description":"1 troca o \"ignorar valor inválido\" por um erro 400 em JSON com a lista do que está errado (nome, motivo e valor recebido): para serviços que querem saber quando erraram. Padrão: não.","schema":{"type":"string","enum":["1","0","true","false","sim","nao","on","off"]}}},"schemas":{"Problem":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"Mensagem em português."},"code":{"type":"string","enum":["invalid_param","invalid_size","missing_param","rate_limited","uri_too_long"],"description":"Código estável."},"problems":{"type":"array","items":{"type":"object","required":["param","code","message"],"properties":{"param":{"type":"string"},"code":{"type":"string","enum":["unknown_param","wrong_kind","invalid_value","out_of_range","too_long","ignored_param"]},"message":{"type":"string"},"received":{"type":"string","description":"O valor recebido (até 40 caracteres)."}}}},"retryAfter":{"type":"integer","description":"Só no 429: segundos até poder tentar de novo."}}}}}}