PingHostDocs
InícioDocumentação

Bem-vindo à PingHost

Hospedamos bots do Discord e APIs HTTP (Node.js e Python) 24/7. Envie o código pelo /up e pronto — URL fixa e HTTPS automáticos incluídos.

# Hospedagem de APIs

A PingHost hospeda qualquer tipo de API HTTP (Node.js e Python):

O que é o api.pinghost.2bd.net? É o domínio público da PingHost — o endereço único por onde todas as APIs hospedadas ficam acessíveis. Cada aplicação ganha o próprio caminho: https://api.pinghost.2bd.net/<sua-app>/. HTTPS automático e URL que nunca muda.

#Visão geral

Sua API fica pública no domínio da PingHost. O caminho da requisição:

Internet → https://api.pinghost.2bd.net/<sua-app>/rota → monitor PingHost → túnel interno → sua aplicação

Quem consome só precisa da URL pública:

#Como funciona

Ao enviar seu projeto pelo /up, a PingHost detecta automaticamente se o código é uma API e configura tudo:

  • Envio — envie o nome da aplicação e o .zip pelo /up.
  • Detecção automática — se o arquivo principal abre um servidor HTTP (Express, Fastify, Flask, FastAPI…), é API.
  • Porta automática — a PingHost define e injeta uma PORT fixa. Sem conflito de portas.
  • Túnel privado — a app conecta à infraestrutura por um túnel seguro.
  • URL pública — em até ~2 minutos, sua API está no ar em https://api.pinghost.2bd.net/<app>/.
  • Cadeia da sua URL

    Internet → api.pinghost.2bd.net → SSL → monitor → túnel → sua API

    #Começando

  • Prepare o projeto — crie um arquivo principal com um servidor HTTP (veja os exemplos abaixo).
  • Empacote em .zip — compacte os arquivos. Não inclua node_modules — as dependências são instaladas automaticamente.
  • Use o /up — rode o comando, envie o nome da aplicação e o .zip.
  • Aguarde — o deploy leva de 1 a 2 minutos.
  • Pegue sua URL — ela aparece em Minhas Aplicações (/applications) quando a API sobe.
  • Teste — abra https://api.pinghost.2bd.net/<app>/health no navegador ou com curl.
  • Sem token? APIs não pedem token do Discord — ele só é solicitado quando o código parece um bot.

    #Limites por plano

    Cada plano inclui uma cota de bots e uma cota de APIs. As APIs começam a partir do plano LITE:

    PlanovCPUBotsAPIs
    FREE0,2510
    STARTER150
    LITE1,573
    PRO2105
    PREMIUM32010
    ULTRA44020

    Como as vagas são contadas: cada aplicação ocupa 1 vaga de bot; se for uma API, 1 vaga de bot + 1 vaga de API. Bot + API juntos consomem as duas.

    Bônus de bots: donos com bônus (via /add) ganham vagas extras de bots.

    #Exemplos de código

    Qualquer aplicação que abra um servidor HTTP vira API. Os exemplos abaixo funcionam direto — compacte e suba pelo /up.

    Node.js — Express

    Estrutura mínima do .zip:

    minha-api.zip
    minha-api/
    ├── server.js
    └── package.json

    server.js

    server.js
    const express = require('express');
    const app = express();
    app.use(express.json());
    
    app.get('/', (req, res) => res.json({ ok: true, name: 'Minha API' }));
    app.get('/health', (req, res) => res.json({ status: 'online' }));
    app.post('/echo', (req, res) => res.json(req.body));
    
    const port = process.env.PORT || 3000;
    app.listen(port, () => console.log(`API na porta ${port}`));

    package.json (as dependências são instaladas automaticamente)

    package.json
    {
      "name": "minha-api",
      "main": "server.js",
      "dependencies": { "express": "^4.19.2" }
    }

    Python — FastAPI

    main.py

    main.py
    from fastapi import FastAPI
    
    app = FastAPI(title='Minha API')
    
    @app.get('/')
    def root():
        return {'ok': True}
    
    @app.get('/health')
    def health():
        return {'status': 'online'}

    requirements.txt

    requirements.txt
    fastapi
    uvicorn

    Python — Flask

    app.py

    app.py
    import os
    from flask import Flask, jsonify
    
    app = Flask(__name__)
    
    @app.route('/')
    def root():
        return jsonify(ok=True)
    
    @app.route('/health')
    def health():
        return jsonify(status='online')
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 3000)))

    Sempre use process.env.PORT (ou os.environ['PORT']) — a PingHost injeta a porta correta automaticamente.

    #Variáveis de ambiente

    Inclua um .env no zip com suas variáveis (chaves de serviços, URLs de banco…). Elas são preservadas e injetadas na aplicação.

    VariávelQuem defineDescrição
    PORTPingHostPorta onde sua API deve escutar — injetada automaticamente
    TOKEN, DISCORD_TOKENPingHostToken do bot (só quando o projeto é um bot)
    MONGO_URL, SUPABASE_URLVocêCredenciais próprias do seu .env — são mantidas

    O token do Discord (quando necessário) é mesclado ao seu .env — nada que você já configurou é sobrescrito.

    #Bot + API juntos (híbrido)

    Bot do Discord e API no mesmo projeto? Funciona:

    bot roda normal  +  https://api.pinghost.2bd.net/<app>/

    Vagas: um híbrido ocupa 1 vaga de bot + 1 vaga de API. Ex.: PRO (10 bots / 5 APIs) → 9 bots e 4 APIs livres.

    Detecção inteligente: bots que usam .listen() só para webhook (sem framework web) não contam como API — evita falsos positivos.

    #URL fixa pública

    Toda API hospedada recebe uma URL no formato:

    https://api.pinghost.2bd.net/<id-do-dono>_<nome-da-app>/caminho

    Exemplo real:

    https://api.pinghost.2bd.net/123456789012345678_minha_api/health

    #Como usar sua API

    Consumir é simples: sua URL fixa é a base e cada rota do código vira um caminho. Todos os métodos HTTP funcionam; corpo e headers são repassados para a sua aplicação.

    Montando a URL de um endpoint

    Se sua URL fixa é https://api.pinghost.2bd.net/123456789012345678_minha_api/ e o código tem a rota /health:

    https://api.pinghost.2bd.net/123456789012345678_minha_api/health

    Regras simples:

    Testando com curl

    O jeito mais rápido de verificar se a API responde:

    terminal
    # GET simples (health check)
    curl https://api.pinghost.2bd.net/123456789012345678_minha_api/health
    
    # POST com JSON (envie dados para sua API)
    curl -X POST https://api.pinghost.2bd.net/123456789012345678_minha_api/usuarios \
      -H 'Content-Type: application/json' \
      -d '{"nome": "PingHost", "plano": "PRO"}'
    
    # Com header de autenticação (se sua API exigir)
    curl https://api.pinghost.2bd.net/123456789012345678_minha_api/dados \
      -H 'Authorization: Bearer sua-chave-aqui'

    Consumindo de um bot Discord (Node.js)

    Use fetch (nativo do Node 18+) ou axios:

    exemplo.js
    // fetch nativo (Node 18+)
    const resp = await fetch('https://api.pinghost.2bd.net/123456789012345678_minha_api/health');
    const data = await resp.json();
    console.log(data); // { status: 'online' }
    
    // POST com JSON
    const criado = await fetch('https://api.pinghost.2bd.net/123456789012345678_minha_api/usuarios', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ nome: 'PingHost' }),
    });
    const resultado = await criado.json();
    console.log(resultado);
    
    // Com autenticação
    const privado = await fetch('https://api.pinghost.2bd.net/123456789012345678_minha_api/dados', {
      headers: { Authorization: 'Bearer sua-chave-aqui' },
    });
    console.log(await privado.json());

    Consumindo de Python

    exemplo.py
    import requests
    
    # GET simples
    resp = requests.get('https://api.pinghost.2bd.net/123456789012345678_minha_api/health')
    print(resp.json())  # {'status': 'online'}
    
    # POST com JSON
    resp = requests.post(
        'https://api.pinghost.2bd.net/123456789012345678_minha_api/usuarios',
        json={'nome': 'PingHost'},
    )
    print(resp.json())
    
    # Com autenticação
    resp = requests.get(
        'https://api.pinghost.2bd.net/123456789012345678_minha_api/dados',
        headers={'Authorization': 'Bearer sua-chave-aqui'},
    )
    print(resp.json())

    Limites e códigos de resposta

    CódigoSignificadoO que fazer
    200 / 201SucessoSua API respondeu normalmente
    400URL inválidaConfira o formato do endereço (slug com letras, números, _ e -)
    404API não encontrada ou rota inexistenteAguarde ~2 min se a app acabou de subir; ou confira a rota no seu código
    429Limite de requisições da API atingidoCada API tem 600 requisições/minuto (compartilhadas entre todos os clientes). Aguarde e tente de novo
    502Falha ao acessar a APIVerifique se a app está online (logs em Minhas Aplicações)

    Limite por API: 600 requisições/minuto por aplicação (compartilhado entre os clientes dela). Uso normal fica longe disso; para APIs muito populares, fale sobre um plano maior.

    Corpo e headers: o proxy repassa Content-Type e Authorization — autenticação e JSON funcionam sem configuração. Payload acima de 2 MB é rejeitado; timeout de 30s por requisição.

    #Solução de problemas

    A URL retorna "API não encontrada ou ainda sem URL pública"

    Minha API não foi reconhecida como API

    O sistema só detecta API quando o arquivo principal abre um servidor HTTP:

    A app cai ou reinicia sozinha (502 / erro de código)

    #Perguntas frequentes

    Respostas rápidas para as dúvidas mais comuns.

    Respostas rápidas para as dúvidas mais comuns. Clique em uma pergunta para ver a resposta.

    Preciso pagar para ter uma URL fixa?

    Não. A URL fixa com HTTPS já está incluída em todos os planos com APIs (LITE ou superior). Sem custo extra.

    A URL muda quando a aplicação reinicia?

    Não. A URL é permanente: reinícios, atualizações e até quedas não mudam o endereço. Seu público usa sempre o mesmo link.

    Posso hospedar um bot do Discord com API no mesmo projeto?

    Sim. É só enviar o projeto com o token e a URL pública. Ele consome 1 vaga de bot + 1 vaga de API no seu plano.

    Quais linguagens são suportadas?

    Node.js (Express, Fastify, Koa, NestJS…) e Python (FastAPI, Flask, Django…). Se a sua API roda em uma dessas, ela roda na PingHost.

    Posso usar meu próprio banco de dados?

    Pode. Coloque as credenciais (ex.: MONGO_URL, SUPABASE_URL) no arquivo .env dentro do zip — elas são preservadas e usadas pela sua aplicação.

    E se eu quiser mais APIs do que o plano permite?

    Você pode excluir aplicações que não usa mais ou fazer upgrade do plano. Cada plano tem uma cota de APIs — veja a tabela acima.

    O que acontece se meu código tiver um erro?

    A aplicação reinicia em loop e os logs mostram o erro com a linha exata. Corrija o código, recompacte e envie o novo .zip pela opção Atualizar.

    PingHost · Documentação · ← Voltar ao site · Suporte