{
  "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": "ef14428a",
  "base_url": "https://www.editalmd.com",
  "docs": {
    "llms": "https://www.editalmd.com/llms.txt",
    "llms_full": "https://www.editalmd.com/llms-full.txt",
    "openapi": "https://www.editalmd.com/openapi.json",
    "mcp": "https://www.editalmd.com/mcp",
    "human_ui": "https://www.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)."
  },
  "endpoints": [
    {
      "method": "GET",
      "path": "/api/",
      "auth": "none",
      "summary": "Índice auto-descrito: rotas, regime de cobrança, preço e MCP.",
      "grupo": "Descoberta",
      "retorno": {
        "produto": {
          "tipo": "string",
          "desc": "Nome do produto."
        },
        "gratis": {
          "tipo": "string[]",
          "desc": "Rotas que não cobram."
        },
        "pago": {
          "tipo": "object",
          "desc": "Rota paga e o preço por requisição."
        },
        "regime": {
          "tipo": "string",
          "desc": "A regra de recência, em uma frase."
        },
        "pagamento": {
          "tipo": "string",
          "desc": "Como pagar (x402, sem cadastro)."
        },
        "mcp": {
          "tipo": "string",
          "desc": "URL do MCP."
        }
      },
      "exemplo": "curl -s $ORIGIN/api/",
      "returns": "{ produto, gratis, pago, regime, pagamento, mcp }",
      "url": "https://www.editalmd.com/api/",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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://www.editalmd.com/api/health",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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://www.editalmd.com/mcp",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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://www.editalmd.com/api/busca",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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://www.editalmd.com/api/compra/:id",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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.",
        "404": "Documento não encontrado (não cobra).",
        "409": "Texto ainda não está neste acervo (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://www.editalmd.com/api/documento/:id/markdown",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    },
    {
      "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://www.editalmd.com/api/recibo/:id",
      "auth_detail": "Público. Agente não se cadastra: quando a rota cobra, cobra por requisição (x402)."
    }
  ],
  "mcp_tools": [
    "api_index",
    "health",
    "buscar_licitacao",
    "compra",
    "edital_markdown",
    "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://www.editalmd.com/api/"
  }
}