Uma API aberta e gratuita, criada com a finalidade de auxiliar a comunidade de desenvolvedores de jogos a implementar sistemas de score e leaderboards de forma simples e rápida. Além da API, possuímos um sistema de controle de scores, o Score Hub, onde você pode cadastrar seus jogos, registrar scores e acompanhar o desempenho dos jogadores.
Referência completa para os endpoints do ecossistema ScoreHub.
Authorization: Bearer [SEU_TOKEN].X-Api-Key e X-Api-Secret./api/loginAutentica um estúdio/desenvolvedor.
fetch('https://apiscore.dfilitto.com.br/api/login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ email: 'dev@email.com', senha: '123' })
}).then(res => res.json()).then(console.log);/api/player-loginAutentica um jogador.
fetch('https://apiscore.dfilitto.com.br/api/player-login', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ email: 'jogador@email.com', senha: '123' })
}).then(res => res.json()).then(console.log);/api/password-requestSolicita um link de redefinição de senha.
fetch('https://apiscore.dfilitto.com.br/api/password-request', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ email: 'usuario@email.com', tipo_conta: 'estudio' }) // ou 'jogador'
}).then(res => res.json()).then(console.log);/api/password-resetRedefine a senha usando um token válido.
fetch('https://apiscore.dfilitto.com.br/api/password-reset', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({ token: 'token_recebido_no_email', senha: 'nova_senha_forte' })
}).then(res => res.json()).then(console.log);/api/estudiosRegistra um novo estúdio ou desenvolvedor.
const devData = {
tipo_conta: "independente",
nome_fantasia: "Meu Estúdio",
email: "contato@meuestudio.com",
senha: "senhaSuperForte123"
};
fetch('https://apiscore.dfilitto.com.br/api/estudios', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(devData)
}).then(res => res.json()).then(console.log);/api/estudios/{id}Requer Token de EstúdioBusca os dados do perfil de um estúdio.
const estudioId = 1;
const token = 'seu_token_jwt_de_estudio';
fetch(`https://apiscore.dfilitto.com.br/api/estudios/${estudioId}`, {
headers: { 'Authorization': `Bearer ${token}` }
}).then(res => res.json()).then(console.log);/api/estudios/{id}Requer Token de EstúdioAtualiza os dados do perfil de um estúdio.
const estudioId = 1; // Substitua pelo ID do estúdio a ser atualizado
const token = 'seu_token_jwt_de_estudio_aqui';
// Os dados que você deseja atualizar. Você não precisa enviar todos,
// apenas os que foram alterados.
const dadosAtualizados = {
"nome_fantasia": "Meu Estúdio (Renomeado)",
"website": "https://meunovosite.com",
"telefone_comercial": "18987654321"
};
const url = `https://apiscore.dfilitto.com.br/api/estudios/${estudioId}`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(dadosAtualizados)
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta da Atualização:', data); // Ex: { message: "Perfil atualizado." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/estudios/{id}/passwordRequer Token de EstúdioAltera a senha de um estúdio.
const estudioId = 1; // Substitua pelo ID do estúdio logado
const token = 'seu_token_jwt_de_estudio_aqui';
// O corpo da requisição precisa conter a senha atual e a nova
const passwordData = {
"senha_atual": "senha_antiga_123",
"nova_senha": "minha_nova_senha_super_forte"
};
const url = `https://apiscore.dfilitto.com.br/api/estudios/${estudioId}/password`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(passwordData)
})
.then(response => {
// Uma resposta não-OK (como 401) pode significar 'senha atual incorreta'
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Senha alterada com sucesso." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/estudios/{id}Requer Token de EstúdioDesativa a conta de um estúdio (soft delete).
const estudioId = 1; // Substitua pelo ID do estúdio a ser desativado
const token = 'seu_token_jwt_de_estudio_aqui';
const url = `https://apiscore.dfilitto.com.br/api/estudios/${estudioId}`;
fetch(url, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`
// Note que requisições DELETE geralmente não precisam de 'Content-Type' nem 'body'.
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Conta desativada." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadoresRegistra um novo jogador.
// Os dados para o novo jogador.
// 'username', 'email' e 'senha' são obrigatórios.
const playerData = {
"username": "novo_heroi_123",
"email": "jogador.novo@email.com",
"senha": "senha_do_jogador_123",
"bio": "Apenas um jogador em busca de recordes!",
"facebook": "https://facebook.com/novoheroi",
"instagram": "novo_heroi"
};
const url = 'https://apiscore.dfilitto.com.br/api/jogadores';
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(playerData)
})
.then(response => {
if (!response.ok) {
// Trata erros como email/username duplicado (status 409)
throw new Error('Falha no requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Jogador Registrado:', data); // Exibe o objeto completo do jogador criado
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/destaquesRetorna o "Hall da Fama" dos jogadores.
const url = 'https://apiscore.dfilitto.com.br/api/jogadores/destaques';
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Hall da Fama:', data);
// Exemplo de retorno:
// [
// { "username": "jogador_pro", "total_trofeus": "3" },
// { "username": "aventureiro", "total_trofeus": "1" }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}Busca o perfil público de um jogador.
// Substitua pelo ID do jogador que você quer buscar
const jogadorId = 1;
// Usamos template literals (crases ``) para inserir o ID na URL
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}`;
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Perfil do Jogador:', data);
// Exemplo de retorno:
// {
// "id": "1",
// "username": "jogador_pro",
// "bio": "Apenas um jogador...",
// "facebook": "https://facebook.com/jogadorpro",
// "instagram": "jogadorpro"
// }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}/scoresRequer Token de JogadorBusca todos os scores do jogador logado.
// Substitua pelo ID e pelo token do jogador que fez o login
const jogadorId = 1;
const token = 'seu_token_jwt_de_JOGADOR_aqui';
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}/scores`;
fetch(url, {
method: 'GET',
headers: {
// Esta rota é protegida, então enviamos o token de autorização do jogador
'Authorization': `Bearer ${token}`
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Scores do Jogador:', data);
// Exemplo de retorno:
// [
// {
// "nome_jogo": "Celeste",
// "foto": "https://.../celeste-cover.jpg",
// "pontuacao": "125000",
// "data_registro": "2025-07-30 19:30:00"
// },
// {
// "nome_jogo": "Hollow Knight",
// "foto": "https://.../hollow-knight-cover.jpg",
// "pontuacao": "4200",
// "data_registro": "2025-07-29 15:10:00"
// }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}/trofeusRequer Token de JogadorLista os jogos onde o jogador logado está em 1º lugar.
// Substitua pelo ID e pelo token do jogador LOGADO
const jogadorId = 1;
const token = 'seu_token_jwt_de_JOGADOR_aqui';
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}/trofeus`;
fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Troféus do Jogador:', data);
// Exemplo de retorno:
// [
// {
// "id": "3",
// "nome": "Stardew Valley",
// "foto": "url_da_foto.png",
// "pontuacao": "530210"
// },
// {
// "id": "1",
// "nome": "Celeste",
// "foto": "url_da_foto_2.png",
// "pontuacao": "213000"
// }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}Requer Token de JogadorAtualiza o perfil de um jogador.
// Substitua pelo ID e pelo token do jogador LOGADO
const jogadorId = 1;
const token = 'seu_token_jwt_de_JOGADOR_aqui';
// Os novos dados do perfil a serem atualizados.
// Você pode enviar apenas os campos que deseja alterar.
const profileData = {
"bio": "Gamer competitivo e streamer nas horas vagas.",
"facebook": "https://facebook.com/meu.novo.perfil",
"instagram": "MeuUserGamer"
};
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(profileData)
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Perfil do jogador atualizado com sucesso." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}/passwordRequer Token de JogadorAltera a senha de um jogador.
// Substitua pelo ID e pelo token do jogador LOGADO
const jogadorId = 1;
const token = 'seu_token_jwt_de_JOGADOR_aqui';
// O corpo da requisição precisa conter a senha atual e a nova
const passwordData = {
"senha_atual": "senha_antiga_do_jogador",
"nova_senha": "nova_senha_secreta_456"
};
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}/password`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(passwordData)
})
.then(response => {
if (!response.ok) {
// Um erro 401 aqui pode significar que a senha atual está incorreta
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Senha do jogador alterada com sucesso." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogadores/{id}Requer Token de JogadorDesativa a conta de um jogador (soft delete).
// Substitua pelo ID e pelo token do jogador LOGADO
const jogadorId = 1;
const token = 'seu_token_jwt_de_JOGADOR_aqui';
const url = `https://apiscore.dfilitto.com.br/api/jogadores/${jogadorId}`;
fetch(url, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`
// Requisições DELETE geralmente não enviam corpo (body)
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Conta de jogador desativada." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogosRequer Token de EstúdioLista todos os jogos do estúdio logado.
// O token JWT do estúdio/desenvolvedor LOGADO
const token = 'seu_token_jwt_de_ESTUDIO_aqui';
const url = 'https://apiscore.dfilitto.com.br/api/jogos';
fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Lista de Jogos:', data);
// Exemplo de retorno:
// [
// {
// "id": "1",
// "nome": "Celeste",
// "foto": "https://...",
// "linkitchio": null,
// "linkios": null,
// "linkgoogleplay": null,
// "linkoutros": "https://www.celestegame.com/",
// "api_key": "a1b2c3d4..."
// },
// {
// "id": "2",
// "nome": "Hollow Knight",
// "foto": "https://...",
// // ... outros campos
// "api_key": "e5f6g7h8..."
// }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogos/destaquesRetorna os jogos com mais scores registrados.
const url = 'https://apiscore.dfilitto.com.br/api/jogos/destaques';
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Jogos em Destaque:', data);
// Exemplo de retorno:
// [
// {
// "id": "1",
// "nome": "Celeste",
// "foto": "https://...",
// "linkoutros": "https://www.celestegame.com/",
// "total_scores": "3"
// },
// {
// "id": "2",
// "nome": "Hollow Knight",
// "foto": "https://...",
// "linkoutros": "https://www.hollowknight.com/",
// "total_scores": "2"
// }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogos/{id}/scoresRetorna o ranking público (leaderboard) para um jogo.
// Substitua pelo ID do jogo cujo ranking você quer ver
const jogoId = 1;
const url = `https://apiscore.dfilitto.com.br/api/jogos/${jogoId}/scores`;
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Ranking do Jogo:', data);
// Exemplo de retorno:
// [
// {
// "username": "jogador_pro",
// "pontuacao": 50000,
// "data_registro": "2025-07-30 20:15:00"
// },
// {
// "username": "aventureiro",
// "pontuacao": 15000,
// "data_registro": "2025-07-30 19:45:00"
// }
// ]
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogosRequer Token de EstúdioCadastra um novo jogo.
// O token JWT do estúdio/desenvolvedor LOGADO
const token = 'seu_token_jwt_de_ESTUDIO_aqui';
// Os dados do novo jogo a ser criado
const gameData = {
"nome": "A Lenda do Herói Perdido",
"foto": "https://exemplo.com/capa_do_jogo.png",
"linkoutros": "https://meujogo.com"
};
const url = 'https://apiscore.dfilitto.com.br/api/jogos';
fetch(url, {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(gameData)
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Jogo Criado:', data);
// Exemplo de retorno:
// {
// "id": "7",
// "nome": "A Lenda do Herói Perdido",
// "foto": "https://exemplo.com/capa_do_jogo.png",
// "linkoutros": "https://meujogo.com",
// "api_key": "ch4v3_n0v4_g3r4d4...",
// "api_secret": "s3gr3d0_n0v0_g3r4d0..."
// }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogos/{id}Requer Token de EstúdioAtualiza um jogo existente.
// O token JWT do estúdio/desenvolvedor LOGADO
const token = 'seu_token_jwt_de_ESTUDIO_aqui';
// O ID do jogo que você deseja atualizar
const jogoId = 1;
// Os dados a serem atualizados. Você só precisa enviar os campos que mudaram.
const gameUpdateData = {
"nome": "A Lenda do Herói Perdido - Edição Definitiva",
"foto": "https://exemplo.com/nova_capa.png",
"linkoutros": "https://meujogo.com/edicao-definitiva"
};
const url = `https://apiscore.dfilitto.com.br/api/jogos/${jogoId}`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(gameUpdateData)
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta da Atualização:', data);
// Exemplo de retorno:
// { "message": "Jogo atualizado." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogos/{id}/regenerate-secretRequer Token de EstúdioGera uma nova API Secret para um jogo.
// O token JWT do estúdio/desenvolvedor LOGADO
const token = 'seu_token_jwt_de_ESTUDIO_aqui';
// O ID do jogo para o qual você quer gerar um novo segredo
const jogoId = 1;
const url = `https://apiscore.dfilitto.com.br/api/jogos/${jogoId}/regenerate-secret`;
fetch(url, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`
}
// Note que não há 'body' nesta requisição
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data);
// Exemplo de retorno:
// {
// "message": "Nova chave secreta gerada com sucesso.",
// "api_secret": "a_nova_chave_secreta_gerada_aqui"
// }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/jogos/{id}Requer Token de EstúdioApaga um jogo existente (hard delete).
// O token JWT do estúdio/desenvolvedor LOGADO
const token = 'seu_token_jwt_de_ESTUDIO_aqui';
// O ID do jogo que você deseja apagar
const jogoId = 1;
const url = `https://apiscore.dfilitto.com.br/api/jogos/${jogoId}`;
fetch(url, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(response => {
if (!response.ok) {
throw new Error('Falha na requisição: ' + response.statusText);
}
return response.json();
})
.then(data => {
console.log('Resposta:', data); // Ex: { message: "Jogo apagado." }
})
.catch(error => {
console.error('Ocorreu um erro:', error);
});
/api/scoresRequer Api-Key de JogoSubmete um novo score para um jogo.
const url = 'https://apiscore.dfilitto.com.br/api/scores';
const apiKey = 'sua_api_key_aqui';
const apiSecret = 'seu_api_secret_aqui';
const scoreData = {
username: 'nome_do_jogador',
pontuacao: 50000
};
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': apiKey,
'X-Api-Secret': apiSecret
},
body: JSON.stringify(scoreData)
}).then(res => res.json()).then(console.log);