{
  "name": "EditalMD",
  "description": "Edital do PNCP em markdown autodescrito, para agente. Busca é grátis; documento publicado há 30+ dias é amostra grátis; documento recente é pago por requisição.",
  "build": "7645df9c",
  "base_url": "https://editalmd.com",
  "docs": {
    "llms": "https://editalmd.com/llms.txt",
    "llms_full": "https://editalmd.com/llms-full.txt",
    "openapi": "https://editalmd.com/openapi.json",
    "mcp": "https://editalmd.com/mcp",
    "human_ui": "https://editalmd.com/"
  },
  "conventions": {
    "format": "JSON em `/api/*`; o documento sai em `text/markdown`.",
    "cors": "`Access-Control-Allow-Origin: *` nas rotas de agente.",
    "x402": "Documento recente: HTTP 402 + `X-PAYMENT`. Sem cadastro.",
    "prova": "Toda entrega gera recibo com o SHA-256 do que saiu (`/api/recibo/{id}`).",
    "parity": "Mexeu na UI/API → apidocs + skill + MCP no mesmo PR."
  },
  "auth": {
    "none": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago.",
    "credito": "Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo."
  },
  "regime": "Busca e ficha são grátis. Documento de compra publicada há 30+ dias é amostra grátis; publicação mais recente custa $0.01 por requisição (x402, sem cadastro). Documento inexistente ou sem texto disponível não é cobrado.",
  "gratis_acima_de_dias": 30,
  "pago": {
    "GET /api/documento/{id}/markdown (recente)": "$0.01"
  },
  "pagamento": {
    "por_requisicao": "x402 (HTTP 402 + X-PAYMENT), sem cadastro",
    "credito_pre_pago": {
      "recarregar": "https://editalmd.com/api/credito",
      "pacotes_usd": [
        1,
        5,
        10,
        25
      ],
      "usar": "Authorization: Bearer cred_…",
      "vale_em": "todos os produtos da casa"
    }
  },
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/",
      "auth": "none",
      "summary": "Índice auto-descrito: rotas, regime de cobrança, preço e MCP.",
      "grupo": "Descoberta",
      "retorno": {
        "name": {
          "tipo": "string",
          "desc": "Nome do produto."
        },
        "description": {
          "tipo": "string",
          "desc": "O que o produto faz."
        },
        "build": {
          "tipo": "string",
          "desc": "Commit publicado."
        },
        "base_url": {
          "tipo": "string",
          "desc": "Origem em que esta API está servindo."
        },
        "docs": {
          "tipo": "object",
          "desc": "Links para llms.txt, OpenAPI, MCP e a UI."
        },
        "regime": {
          "tipo": "string",
          "desc": "A regra de cobrança por recência, em uma frase."
        },
        "gratis_acima_de_dias": {
          "tipo": "int",
          "desc": "Idade de publicação a partir da qual o documento é amostra grátis."
        },
        "pago": {
          "tipo": "object",
          "desc": "Rota paga e o preço por requisição."
        },
        "endpoints": {
          "tipo": "object[]",
          "desc": "Catálogo de endpoints."
        },
        "mcp_tools": {
          "tipo": "string[]",
          "desc": "Tools do MCP."
        },
        "cota": {
          "tipo": "object",
          "desc": "O que é grátis, o que é pago e como pagar."
        }
      },
      "exemplo": "curl -s $ORIGIN/api/",
      "returns": "{ name, description, build, base_url, docs, regime, gratis_acima_de_dias, pago, endpoints, mcp_tools, cota }",
      "url": "https://editalmd.com/api/",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/api/health",
      "auth": "none",
      "summary": "Saúde da origem e tamanho do acervo.",
      "grupo": "Descoberta",
      "retorno": "Saude",
      "erros": {
        "503": "Origem indisponível."
      },
      "exemplo": "curl -s $ORIGIN/api/health",
      "returns": "{ ok, acervo{compras,documentos_lidos}, preco_markdown_usd, gratis_acima_de_dias }",
      "url": "https://editalmd.com/api/health",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "POST",
      "path": "/mcp",
      "auth": "none",
      "summary": "MCP Streamable HTTP — as tools deste catálogo, despachadas neste mesmo Worker.",
      "grupo": "Descoberta",
      "retorno": {
        "_texto": "JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call`)."
      },
      "exemplo": "curl -s -XPOST $ORIGIN/mcp -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}'",
      "returns": "JSON-RPC 2.0 (`initialize`, `tools/list`, `tools/call`).",
      "url": "https://editalmd.com/mcp",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/okf/:arquivo",
      "auth": "none",
      "summary": "Bundle OKF (Open Knowledge Format v0.1): markdown com frontmatter para o agente ler o produto inteiro sem parsear HTML.",
      "grupo": "Descoberta",
      "params": {
        "arquivo": {
          "desc": "`index.md`, `sobre.md`, `api.md`, `faq.md` ou `acervo.md`.",
          "exemplo": "index.md"
        }
      },
      "retorno": {
        "_texto": "`text/markdown`. Comece por `/okf/index.md`, que lista o bundle."
      },
      "erros": {
        "404": "Arquivo fora do bundle."
      },
      "exemplo": "curl -s $ORIGIN/okf/index.md",
      "returns": "`text/markdown`. Comece por `/okf/index.md`, que lista o bundle.",
      "url": "https://editalmd.com/okf/:arquivo",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/feed.xml",
      "auth": "none",
      "summary": "RSS 2.0 das compras publicadas mais recentemente no acervo.",
      "grupo": "Descoberta",
      "retorno": {
        "_texto": "`application/rss+xml`."
      },
      "exemplo": "curl -s $ORIGIN/feed.xml",
      "returns": "`application/rss+xml`.",
      "url": "https://editalmd.com/feed.xml",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/feed.json",
      "auth": "none",
      "summary": "JSON Feed 1.1 das compras publicadas mais recentemente — o mesmo stream do RSS.",
      "grupo": "Descoberta",
      "retorno": {
        "_texto": "`application/feed+json`."
      },
      "exemplo": "curl -s $ORIGIN/feed.json",
      "returns": "`application/feed+json`.",
      "url": "https://editalmd.com/feed.json",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/api/busca",
      "auth": "none",
      "summary": "Busca compras do PNCP por termo. Sempre grátis — é a descoberta.",
      "grupo": "Acervo",
      "query": {
        "q": {
          "tipo": "string",
          "desc": "Termo de busca; mínimo 3 letras.",
          "obrigatorio": true
        },
        "uf": {
          "tipo": "string",
          "desc": "Filtra por sigla de UF."
        },
        "limite": {
          "tipo": "int",
          "desc": "1 a 50 (padrão 20)."
        }
      },
      "retorno": "Busca",
      "erros": {
        "400": "Termo com menos de 3 letras.",
        "502": "Origem indisponível."
      },
      "exemplo": "curl -s '$ORIGIN/api/busca?q=uniforme%20escolar&uf=GO'",
      "returns": "{ itens[{id,pncp,objeto,uf,modalidade,situacao,orgao,unidade,valor_estimado,publicado_em,informacao_complementar,processo,markdown_url,compra_url}], preco_markdown_usd, gratis_acima_de_dias, pago }",
      "url": "https://editalmd.com/api/busca",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/api/compra/:id",
      "auth": "none",
      "summary": "Ficha da compra, documentos com texto extraído e o regime de cobrança de cada um.",
      "grupo": "Acervo",
      "params": {
        "id": {
          "desc": "Identificador da compra, vindo da busca.",
          "exemplo": "42"
        }
      },
      "retorno": "FichaCompra",
      "erros": {
        "404": "Compra não encontrada.",
        "502": "Origem indisponível."
      },
      "exemplo": "curl -s $ORIGIN/api/compra/42",
      "returns": "{ compra{id,pncp,objeto,uf,modalidade,situacao,orgao,unidade,valor_estimado,publicado_em,informacao_complementar,processo,markdown_url,compra_url}, documentos[{id,titulo,tipo,caracteres,paginas,motor,formato,sha256,extraido_em,gratuito,preco_usd,markdown_url,disponivel}], regime{gratuito,motivo,idade_dias} }",
      "url": "https://editalmd.com/api/compra/:id",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/api/documento/:id/markdown",
      "auth": "none",
      "params": {
        "id": {
          "desc": "Identificador do documento, vindo da ficha da compra.",
          "exemplo": "123"
        }
      },
      "summary": "Documento em markdown com front-matter de procedência e hash. Grátis se a compra tem 30+ dias; pago se é recente.",
      "grupo": "Acervo",
      "retorno": {
        "_texto": "`text/markdown`. Headers: `x-editalmd-regime`, `x-editalmd-recibo`, `x-editalmd-sha256`."
      },
      "erros": {
        "402": "Documento recente sem pagamento — o corpo traz `accepts[]` do x402 e o caminho da recarga de crédito.",
        "404": "Documento não encontrado (não cobra).",
        "409": "Documento ainda não baixado para o acervo: não há o que extrair (não cobra).",
        "502": "Pago e sem entrega: o corpo traz o número do recibo."
      },
      "exemplo": "curl -s $ORIGIN/api/documento/123/markdown",
      "returns": "`text/markdown`. Headers: `x-editalmd-regime`, `x-editalmd-recibo`, `x-editalmd-sha256`.",
      "url": "https://editalmd.com/api/documento/:id/markdown",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "POST",
      "path": "/api/credito",
      "auth": "none",
      "summary": "Recarrega crédito pré-pago: paga uma vez com x402 e recebe o token que desconta em qualquer API da casa.",
      "grupo": "Crédito",
      "query": {
        "usd": {
          "tipo": "int",
          "desc": "Pacote: 1, 5, 10 ou 25 dólares.",
          "obrigatorio": true
        }
      },
      "retorno": {
        "token": {
          "tipo": "string",
          "desc": "Token portador do saldo (`cred_…`). Mostrado UMA vez — não há como recuperá-lo."
        },
        "saldo_usd": {
          "tipo": "string",
          "desc": "Saldo creditado."
        },
        "guarde": {
          "tipo": "string",
          "desc": "Aviso de que o token é o portador do crédito."
        },
        "usar": {
          "tipo": "string",
          "desc": "Como apresentar o token nas rotas pagas."
        },
        "saldo_em": {
          "tipo": "string",
          "desc": "Onde consultar saldo e extrato."
        }
      },
      "erros": {
        "400": "Pacote fora da lista (1, 5, 10 ou 25).",
        "402": "Sem pagamento — o corpo traz `accepts[]` do x402."
      },
      "exemplo": "curl -s -XPOST '$ORIGIN/api/credito?usd=10'",
      "returns": "{ token, saldo_usd, guarde, usar, saldo_em }",
      "url": "https://editalmd.com/api/credito",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    },
    {
      "method": "GET",
      "path": "/api/credito",
      "auth": "credito",
      "summary": "Saldo e extrato do crédito — as últimas movimentações, sem devolver o token.",
      "grupo": "Crédito",
      "retorno": {
        "saldo_micros": {
          "tipo": "int",
          "desc": "Saldo em micro-dólares (1e-6 USD)."
        },
        "saldo_usd": {
          "tipo": "string",
          "desc": "Saldo formatado."
        },
        "criado_em": {
          "tipo": "string",
          "desc": "Quando o crédito foi aberto."
        },
        "movimentos": {
          "tipo": "object[]",
          "desc": "Entradas e saídas recentes, com produto e recurso."
        }
      },
      "erros": {
        "401": "Sem token ou token desconhecido."
      },
      "exemplo": "curl -s $ORIGIN/api/credito -H 'Authorization: Bearer cred_…'",
      "returns": "{ saldo_micros, saldo_usd, criado_em, movimentos }",
      "url": "https://editalmd.com/api/credito",
      "auth_detail": "Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo."
    },
    {
      "method": "GET",
      "path": "/api/recibo/:id",
      "auth": "none",
      "summary": "Recibo de uma entrega — a prova de o que saiu, quanto custou e com qual hash.",
      "grupo": "Prova",
      "params": {
        "id": {
          "desc": "Identificador do recibo (32 hex), do header `x-editalmd-recibo`.",
          "exemplo": "0c8f2b…"
        }
      },
      "retorno": {
        "recibo": {
          "tipo": "Recibo",
          "desc": "O recibo."
        }
      },
      "erros": {
        "404": "Recibo não encontrado."
      },
      "exemplo": "curl -s $ORIGIN/api/recibo/0c8f…",
      "returns": "{ recibo{id,recurso,documento_id,preco_usd,modo,sha256_entregue,bytes,criado_em} }",
      "url": "https://editalmd.com/api/recibo/:id",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402) ou desconta de crédito pré-pago."
    }
  ],
  "mcp_tools": [
    "api_index",
    "health",
    "buscar_licitacao",
    "compra",
    "edital_markdown",
    "credito_saldo",
    "credito_recarregar",
    "recibo"
  ],
  "cota": {
    "free": [
      {
        "o_que": "busca e ficha da compra",
        "limite": "sem cota",
        "janela": null
      },
      {
        "o_que": "markdown de compra publicada há 30+ dias",
        "limite": "sem cota",
        "janela": null
      }
    ],
    "paid": [
      {
        "o_que": "markdown de compra recente",
        "price_usd": 0.01
      }
    ],
    "how_to_pay": "Documento recente → **402** com `accepts[]`. Pague e repita com `X-PAYMENT`.",
    "live": "https://editalmd.com/api/"
  }
}