Pular para o conteúdo
Decoding Chat API

GIFs

Um GIF é um item de mídia animada do provedor ativo da instância. Os resultados incluem URLs do provedor e URLs do Media Proxy.

Toda rota requer credencial de sessão. Um token de bot e uma credencial bearer OAuth2 são ambos recusados com 403 ACCESS_DENIED. Salvar meme por URL salva um resultado na coleção própria da conta.

klipy é o único nome de provedor que uma implantação vincula. Obter descoberta de instância o publica como o objeto provedor de GIF. Uma instância que não vinculou nenhuma chave de provedor recusa toda rota desta página com 403 FEATURE_TEMPORARILY_DISABLED. gif_enabled na disponibilidade de serviço indica se essa chave está vinculada, exceto quando um operador definiu o flag manualmente. Um cliente que lê gif_enabled como true pode ainda receber o 403.

Uma falha do provedor, uma requisição além do prazo e um payload de provedor ilegível retornam todos 503 SERVICE_UNAVAILABLE. O prazo é de 12 segundos em toda parte, exceto em Registrar um compartilhamento de GIF, que usa 3 segundos. Um operador pode alterar ambos.

Toda rota aceita um locale opcional extraído do registro de locales suportados, na query string nas rotas GET e no corpo de Registrar um compartilhamento de GIF. O padrão é en-US. Uma tag fora do registro falha com 400 INVALID_FORM_BODY.

O Decoding Chat também deriva um país de dois dígitos do endereço da requisição por geolocalização, e usa US quando a geolocalização não resolve nenhum. Nenhuma rota aceita o país como parâmetro, portanto um cliente não pode substituí-lo. Obter sugestões de busca de GIF é a única rota que o ignora.

Toda resposta sob /gifs, /tenor e /klipy tem estes cabeçalhos, incluindo respostas de erro e respostas a um caminho não reivindicado por nenhuma rota. Os valores repetem o objeto provedor de GIF, portanto um cliente acompanha uma mudança de provedor sem refazer a busca em /.well-known/fluxer.

CampoTipoDescrição
X-Fluxer-GIF-Provider1stringO nome de máquina do provedor ativo, que é klipy em toda implantação hoje
X-Fluxer-GIF-Provider-Display-Name1stringO nome do provedor que um cliente exibe
X-Fluxer-GIF-Provider-Attribution-Required1stringO literal true ou false, indicando se um cliente mostra a marca de atribuição do provedor

1 Todos estão ausentes juntos enquanto a instância não vinculou nenhuma chave de provedor, que é a mesma condição que responde 403 FEATURE_TEMPORARILY_DISABLED

O Decoding Chat armazena resultados em cache, portanto um resultado pode atrasar em relação ao provedor. Repetir uma requisição não força uma atualização.

Um objeto GIF é um item de mídia pertencente ao provedor ativo. Toda URL nele resolve bytes que o provedor hospeda.

CampoTipoDescrição
id1stringO identificador estável do GIF no provedor
slug1stringO slug canônico usado para compartilhar o GIF ou resolvê-lo novamente
providerstringO nome do provedor que produziu o GIF (1-32 caracteres)
titlestringO título que o provedor dá ao GIF
urlstringA URL da página do provedor para o GIF
src2stringA URL de mídia direta do formato escolhido pelo servidor
proxy_src2stringA URL do Media Proxy desse mesmo formato
width2integerA largura do formato escolhido em pixels
height2integerA altura do formato escolhido em pixels
media3map[string, formato de mídia GIF object]Os formatos com chave por nome de formato de mídia GIF
placeholder?4?stringO placeholder thumbhash compacto renderizado enquanto o GIF carrega

1 O provedor ativo escreve o mesmo slug em ambos, então id é o valor que Registrar um compartilhamento de GIF aceita

2 Copiado da entrada webm de media quando o provedor retornou uma, e da primeira entrada retornada caso contrário

3 Vazio quando nenhum formato retornado pelo provedor pôde ser proxiado. Nenhuma chave é garantida, então um cliente verifica os nomes de formato que prefere em ordem e usa o primeiro presente

4 O provedor ativo não emite nenhum, então o campo está ausente de todo GIF que estas rotas retornam. Resolver URLs de GIF é a operação que produz um

Um GIF não tem snowflake nem timestamp de criação. id é o identificador próprio do provedor, então não ordena por tempo, e nenhuma outra rota do Decoding Chat o resolve.

{
"id": "goat-plays-banjo-4",
"slug": "goat-plays-banjo-4",
"provider": "klipy",
"title": "Goat Plays Banjo",
"url": "https://klipy.com/gifs/goat-plays-banjo-4",
"src": "https://static.example.com/goat-plays-banjo.webm",
"proxy_src": "https://media.example.com/external/9f21c0/goat-plays-banjo.webm",
"width": 220,
"height": 229,
"media": {
"webm": {
"src": "https://static.example.com/goat-plays-banjo.webm",
"proxy_src": "https://media.example.com/external/9f21c0/goat-plays-banjo.webm",
"width": 220,
"height": 229
},
"tinygif": {
"src": "https://static.example.com/goat-plays-banjo-tiny.gif",
"proxy_src": "https://media.example.com/external/4ad117/goat-plays-banjo-tiny.gif",
"width": 137,
"height": 90
}
}
}

Um objeto de categoria GIF combina um termo de busca de categoria com um GIF de prévia para aquele termo.

CampoTipoDescrição
namestringO termo de busca que a categoria representa, traduzido para o locale solicitado
src1stringA URL de mídia direta do GIF de prévia
proxy_src1stringA URL do Media Proxy do GIF de prévia
gif?GIF objectO GIF de prévia, ou null quando a busca de prévia não retornou nada

1 Copiado do mesmo campo de gif, e string vazia quando gif é null

Para abrir a categoria, um cliente envia name como o q de Buscar GIFs.

Os prefixos com nome de fornecedor servem os mesmos handlers que /gifs. Cada um responde exatamente como seu sucessor e tem os mesmos cabeçalhos do provedor.

MétodoCaminho obsoletoSucessor
GET/v1/tenor/searchBuscar GIFs
GET/v1/tenor/featuredObter GIFs em destaque
GET/v1/tenor/trending-gifsObter GIFs em tendência
GET/v1/tenor/suggestObter sugestões de busca de GIF
POST/v1/tenor/register-shareRegistrar um compartilhamento de GIF
GET/v1/klipy/searchBuscar GIFs
GET/v1/klipy/featuredObter GIFs em destaque
GET/v1/klipy/trending-gifsObter GIFs em tendência
GET/v1/klipy/suggestObter sugestões de busca de GIF
POST/v1/klipy/register-shareRegistrar um compartilhamento de GIF

Uma resposta de um caminho obsoleto tem estes cabeçalhos adicionais.

CampoTipoDescrição
DeprecationstringO valor literal true
LinkstringO valor literal </gifs>; rel="successor-version"
Warning1stringUm aviso 299 nomeando o prefixo sucessor

1 O valor exato é 299 - "Use /gifs/* instead - these vendor-specific paths are deprecated and will be removed."

O nome do fornecedor no caminho não seleciona nada. Uma requisição a /v1/tenor/search chega ao mesmo provedor ativo que /v1/gifs/search, e o campo provider de todo GIF que retorna nomeia esse provedor.

GET/v1/gifs/search

Pesquisa o provedor ativo por GIFs correspondendo a uma consulta. Retorna no máximo 50 objetos GIF na ordem que o provedor retornou.

CampoTipoDescrição
qstringO termo de busca (1-256 caracteres)
locale?stringUm locale suportado, padrão en-US

O Decoding Chat não faz stemming, expansão nem correção ortográfica do termo. Um termo que não corresponde a nada retorna 200 com um array vazio.

StatusCorpoCondição
200array[GIF object]Resultados foram retornados, possivelmente como array vazio
400resposta de erroq ausente, vazio ou com mais de 256 caracteres, ou locale fora do registro, cada um retornando INVALID_FORM_BODY
403resposta de erroO chamador é um bot ou apresenta credencial bearer e retorna ACCESS_DENIED
403resposta de erroA conta tem ação obrigatória pendente e retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroA instância não vinculou nenhuma chave de provedor e retorna FEATURE_TEMPORARILY_DISABLED
503resposta de erroO provedor falhou, a requisição superou o prazo ou o serviço gifs respondeu com payload ilegível, cada um retornando SERVICE_UNAVAILABLE

40 requisições por 10 segundos para cada usuário autenticado, no bucket gif:search.

GET/v1/gifs/featured

Retorna os GIFs em destaque do provedor e os termos de categoria oferecidos junto a eles.

CampoTipoDescrição
locale?stringUm locale suportado, padrão en-US
CampoTipoDescrição
gifs1array[GIF object]Os GIFs em destaque para o locale e país resolvidos
categories2array[categoria GIF object]Os termos de categoria oferecidos para o locale resolvido

1 No máximo uma entrada. Obter GIFs em tendência é a rota que retorna uma listagem completa

2 No máximo 50 entradas, deduplicadas por termo de busca e mantidas na ordem que o provedor retornou

O Decoding Chat resolve a lista de categorias contra o país US para toda requisição, qualquer que seja o país produzido por geolocalização, portanto dois chamadores em países diferentes recebem as mesmas categories e gifs diferentes. Uma categoria cuja prévia não retornou nada ainda é listada, com gif null e ambas as URLs vazias.

StatusCorpoCondição
200corpo da respostaGIFs em destaque e categorias foram retornados
400resposta de errolocale fora do registro e a requisição retorna INVALID_FORM_BODY
403resposta de erroO chamador é um bot ou apresenta credencial bearer e retorna ACCESS_DENIED
403resposta de erroA conta tem ação obrigatória pendente e retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroA instância não vinculou nenhuma chave de provedor e retorna FEATURE_TEMPORARILY_DISABLED
503resposta de erroO provedor falhou, a requisição superou o prazo ou o serviço gifs respondeu com payload ilegível, cada um retornando SERVICE_UNAVAILABLE

O Decoding Chat busca ambas as metades em uma operação. Uma falha em gifs ou categories falha a requisição inteira e não retorna corpo parcial.

40 requisições por 10 segundos para cada usuário autenticado, no bucket gif:featured.

GET/v1/gifs/trending

Retorna no máximo 50 objetos GIF em tendência para o locale e país resolvidos.

CampoTipoDescrição
locale?stringUm locale suportado, padrão en-US
StatusCorpoCondição
200array[GIF object]GIFs em tendência foram retornados, possivelmente como array vazio
400resposta de errolocale fora do registro e a requisição retorna INVALID_FORM_BODY
403resposta de erroO chamador é um bot ou apresenta credencial bearer e retorna ACCESS_DENIED
403resposta de erroA conta tem ação obrigatória pendente e retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroA instância não vinculou nenhuma chave de provedor e retorna FEATURE_TEMPORARILY_DISABLED
503resposta de erroO provedor falhou, a requisição superou o prazo ou o serviço gifs respondeu com payload ilegível, cada um retornando SERVICE_UNAVAILABLE

O GIF em destaque não é garantido de corresponder ao primeiro resultado em tendência.

40 requisições por 10 segundos para cada usuário autenticado, no bucket gif:trending.

GET/v1/gifs/suggest

Retorna sugestões de termos de busca para uma consulta parcial, como array de strings.

CampoTipoDescrição
qstringO termo de busca parcial (1-256 caracteres)
locale?stringUm locale suportado, padrão en-US

As sugestões dependem do locale e da consulta, não do endereço da requisição.

StatusCorpoCondição
200array[string]Sugestões foram retornadas, possivelmente como array vazio
400resposta de erroq ausente, vazio ou com mais de 256 caracteres, ou locale fora do registro, cada um retornando INVALID_FORM_BODY
403resposta de erroO chamador é um bot ou apresenta credencial bearer e retorna ACCESS_DENIED
403resposta de erroA conta tem ação obrigatória pendente e retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroA instância não vinculou nenhuma chave de provedor e retorna FEATURE_TEMPORARILY_DISABLED
503resposta de erroO provedor falhou, a requisição superou o prazo ou o serviço gifs respondeu com payload ilegível, cada um retornando SERVICE_UNAVAILABLE

Cada sugestão é um termo que um cliente envia de volta como o q de Buscar GIFs.

40 requisições por 10 segundos para cada usuário autenticado, no bucket gif:suggest.

POST/v1/gifs/register-share

Informa ao provedor ativo que o chamador está compartilhando um de seus GIFs, e retorna 204 com corpo vazio.

CampoTipoDescrição
id1stringO id do objeto GIF compartilhado (1-300 caracteres)
q?2?stringO termo de busca que produziu o GIF (0-256 caracteres)
locale?stringUm locale suportado, padrão en-US

1 O provedor o lê como slug ou token de slug-id. O Decoding Chat não o verifica contra um GIF que retornou, portanto um identificador que o provedor não reconhece falha no provedor

2 Um valor omitido ou null é enviado ao provedor como string vazia

O prazo nesta rota é de 3 segundos.

StatusCorpoCondição
204vazioO provedor aceitou o registro
400resposta de erroid ausente, vazio ou com mais de 300 caracteres, q com mais de 256 caracteres ou locale fora do registro, cada um retornando INVALID_FORM_BODY
403resposta de erroO chamador é um bot ou apresenta credencial bearer e retorna ACCESS_DENIED
403resposta de erroA conta tem ação obrigatória pendente e retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroA instância não vinculou nenhuma chave de provedor e retorna FEATURE_TEMPORARILY_DISABLED
503resposta de erroO provedor rejeitou o registro, o serviço gifs não respondeu dentro do prazo ou respondeu com algo diferente de um reconhecimento, cada um retornando SERVICE_UNAVAILABLE

O registro chega ao provedor e não muda nenhum estado do Decoding Chat, portanto não emite Dispatch pelo Gateway e não adiciona o GIF aos memes da conta.

Cada requisição registra um compartilhamento separado, incluindo requisições repetidas para o mesmo id.

60 requisições por 10 segundos para cada usuário autenticado, no bucket gif:register_share.