{"name":"samehand","description":"Reescreve textos curtos e compara as palavras removidas e adicionadas. O perfil atual usa exemplos de um único autor. Confira reescrita_disponivel em /api/health antes de enviar.","build":"3201de6c","base_url":"https://samehand.app","docs":{"llms":"https://samehand.app/llms.txt","llms_full":"https://samehand.app/llms-full.txt","openapi":"https://samehand.app/openapi.json","mcp":"https://samehand.app/mcp","pricing":"https://samehand.app/api/pricing","billing":"https://samehand.app/api/billing","human_ui":"https://samehand.app/","data_indexes":[{"id":"cep","produto":"https://pontofato.com","caminho":"/enderecos","title":"CEPs e endereços","description":"Encontre endereços por lugar, com coordenadas e referência de 2022. Não certifica CEP vigente. Cada página HTML abre o app do produto com os dados públicos já renderizados.","hierarchy":"UF → município → bairro/localidade → rua → endereços","url":"https://pontofato.com/enderecos/","formats":{"html":"https://pontofato.com/enderecos/","json":"https://api.pontofato.com/enderecos/index.json","md":"https://api.pontofato.com/enderecos/index.md","okf":"https://api.pontofato.com/enderecos/index.okf.md"},"llms":"https://api.pontofato.com/enderecos/llms.txt","openapi":"https://api.pontofato.com/enderecos/openapi.json","mcp":"https://api.pontofato.com/enderecos/mcp","okf":"https://api.pontofato.com/enderecos/okf/index.md","access":"public-read-only","pagination":{"max_items":20,"next":"links.proximo"},"updates":"manual"},{"id":"editais","produto":"https://editalmd.com","caminho":"/licitacoes","title":"Editais e compras públicas","description":"Encontre compras públicas por lugar e período. Consulte documentos e opções de leitura no EditalMD. Cada página HTML abre o app do produto com os dados públicos já renderizados.","hierarchy":"Modalidade → UF → ano → mês → dia → município → compras","url":"https://editalmd.com/licitacoes/","formats":{"html":"https://editalmd.com/licitacoes/","json":"https://api.editalmd.com/licitacoes/index.json","md":"https://api.editalmd.com/licitacoes/index.md","okf":"https://api.editalmd.com/licitacoes/index.okf.md"},"llms":"https://api.editalmd.com/licitacoes/llms.txt","openapi":"https://api.editalmd.com/licitacoes/openapi.json","mcp":"https://api.editalmd.com/licitacoes/mcp","okf":"https://api.editalmd.com/licitacoes/okf/index.md","access":"public-read-only","pagination":{"max_items":20,"next":"links.proximo"},"updates":"manual"}]},"conventions":{"format":"JSON em `/api/*`.","cors":"`Access-Control-Allow-Origin: *` nas rotas de agente.","x402":"Reescrita além da franquia: HTTP 402 + X-PAYMENT, ou crédito pré-pago.","parity":"Mexeu na UI/API → apidocs + MCP no mesmo PR."},"auth":{"none":"Público.","token":"Token de operador `METRICS_TOKEN` em `Authorization: Bearer` (métricas).","credito":"Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo.","session":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},"endpoints":[{"method":"GET","path":"/api/auth/bootstrap","auth":"none","grupo":"Account","summary":"Prepare the browser for global sign-in.","desc":"Sets a host-only HttpOnly browser cookie. CSRF is bound to the current session. No CORS.","retorno":{"csrf":{"tipo":"string","desc":"X-CSRF-Token"},"context":{"tipo":"string","desc":"Opaque view context, also in X-MM-Context; not a credential / contexto opaco da vista, não é credencial."}},"erros":{"400":"invalid_request","403":"invalid_origin / invalid_csrf","503":"auth_unavailable: a sessão anterior é preservada / the previous session is preserved"},"returns":"{ csrf, context }","url":"https://samehand.app/api/auth/bootstrap","auth_detail":"Público."},{"method":"GET","path":"/api/account/profile","auth":"session","grupo":"Account","exemplo":"await fetch(\"$ORIGIN/api/account/profile\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","summary":"Read your global profile.","desc":"Reads current preferences from the account. Edit them on your account page; products never own a separate profile.","retorno":{"_texto":"{profile:{name,locale,timeZone,theme,revision}}"},"erros":{"401":"invalid_session","503":"auth_unavailable"},"returns":"{profile:{name,locale,timeZone,theme,revision}}","url":"https://samehand.app/api/account/profile","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"GET","path":"/api/account/avatar","auth":"session","grupo":"Account","exemplo":"await fetch(\"$ORIGIN/api/account/avatar\", {credentials: \"same-origin\"}).then(r => {if (!r.ok) throw new Error(\"HTTP \" + r.status); return r.blob();});","exemploLinguagem":"js","summary":"Read your global profile photo.","desc":"Private WebP, up to 64 KiB, no cache. Change it on your account. No user ID or object URL accepted.","retorno":{"_texto":"image/webp; Cache-Control: no-store"},"erros":{"401":"invalid_session","404":"not_found: no photo / sem foto","503":"auth_unavailable"},"returns":"image/webp; Cache-Control: no-store","url":"https://samehand.app/api/account/avatar","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"GET","path":"/api/me","auth":"session","grupo":"Account","exemplo":"await fetch(\"$ORIGIN/api/me\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","summary":"Read the current global account in this product.","desc":"The product SDK also returns profile and administration. administration is {href} for the configured platform owner, otherwise null. The server derives this field from the authenticated account.","retorno":{"_texto":"{user:{identityId,sessionId,productId,audience,authTime,methods,mfaState}}"},"erros":{"401":"invalid_session","503":"auth_unavailable"},"returns":"{user:{identityId,sessionId,productId,audience,authTime,methods,mfaState}}","url":"https://samehand.app/api/me","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"POST","path":"/api/auth/logout","auth":"session","grupo":"Account","exemplo":"// Execute no console da página do produto / Run in the product page console.\n(async () => {\n  const origin = \"$ORIGIN\";\n  const {csrf} = await fetch(origin + \"/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(origin + \"/api/auth/logout\", {\n    method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({})\n  });\n  if (!r.ok) throw new Error(\"Auth HTTP \" + r.status);\n  return r.json();\n})();","exemploLinguagem":"js","summary":"Revoke this product session.","desc":"Bootstrap/CSRF must belong to this browser and session. Other product sessions remain active.","retorno":{"ok":{"tipo":"bool","desc":"true"}},"erros":{"400":"invalid_request","403":"invalid_origin / invalid_csrf","503":"auth_unavailable: a sessão anterior é preservada / the previous session is preserved"},"returns":"{ ok }","url":"https://samehand.app/api/auth/logout","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"GET","path":"/api/account/keys","auth":"session","grupo":"Account","summary":"List your API keys in this product.","desc":"Never returns the key itself: name, last 4 characters, organization, creation, last use (hourly) and whether it still works.","retorno":{"keys":{"tipo":"object[]","desc":"`id`, `name`, `organizationId`, `last4`, `createdAt`, `lastUsedAt`, `revokedAt`, `active` (false when revoked or stopped by a password change / ending all sessions)."}},"erros":{"401":"invalid_session","503":"auth_unavailable"},"exemplo":"await fetch(\"$ORIGIN/api/account/keys\", {credentials: \"same-origin\"}).then(r => r.json());","exemploLinguagem":"js","returns":"{ keys }","url":"https://samehand.app/api/account/keys","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"POST","path":"/api/account/keys/create","auth":"session","grupo":"Account","summary":"Create an API key for agents and scripts.","desc":"Needs a sign-in in the last 5 minutes; an organization key also needs a second factor in the session and the owner/admin role with this product enabled. At most 10 live keys per account and product. The key (`secret`) is returned ONCE.","corpo":{"name":{"tipo":"string","obrigatorio":true,"desc":"Up to 60 characters."},"organizationId":{"tipo":"string","nulo":true,"obrigatorio":true,"desc":"`null` for an account key."}},"body":{"name":"agent","organizationId":null},"retorno":{"key":{"tipo":"object","desc":"`id`, `name`, `organizationId`, `last4`, `createdAt`."},"secret":{"tipo":"string","desc":"`mmk_…`, shown once."}},"erros":{"400":"invalid_key_name / invalid_organization","401":"invalid_session / reauth_required","403":"invalid_origin / invalid_csrf / organization_forbidden / organization_mfa_required","409":"key_limit_reached","503":"auth_unavailable"},"exemplo":"(async () => {\n  const {csrf} = await fetch(\"$ORIGIN/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(\"$ORIGIN/api/account/keys/create\", {method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({name: \"agent\", organizationId: null})});\n  return r.json();\n})();","exemploLinguagem":"js","returns":"{ key, secret }","url":"https://samehand.app/api/account/keys/create","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"POST","path":"/api/account/keys/revoke","auth":"session","grupo":"Account","summary":"Revoke one of your API keys.","desc":"Stops the key at once. Repeating is harmless.","corpo":{"id":{"tipo":"string","obrigatorio":true,"desc":"The key `id`."}},"body":{"id":"…"},"retorno":{"ok":{"tipo":"bool","desc":"true"}},"erros":{"400":"invalid_key_id","401":"invalid_session","403":"invalid_origin / invalid_csrf","404":"key_not_found","503":"auth_unavailable"},"exemplo":"(async () => {\n  const {csrf} = await fetch(\"$ORIGIN/api/auth/bootstrap\").then(r => r.json());\n  const r = await fetch(\"$ORIGIN/api/account/keys/revoke\", {method: \"POST\", credentials: \"same-origin\",\n    headers: {\"Content-Type\": \"application/json\", \"X-CSRF-Token\": csrf},\n    body: JSON.stringify({id: \"…\"})});\n  return r.json();\n})();","exemploLinguagem":"js","returns":"{ ok }","url":"https://samehand.app/api/account/keys/revoke","auth_detail":"Global session in the product's HttpOnly cookie; writes require exact Origin and X-CSRF-Token."},{"method":"GET","path":"/agent.json","auth":"none","summary":"Agent card: identity, operator, documentation, the MCP endpoint and the tools it serves. Same document as `/.well-known/agent-card.json`.","grupo":"Discovery","retorno":{"_texto":"`application/json`: `name`, `provider`, `protocol` (`mcp`), `interfaces[]` and `skills[]`."},"exemplo":"curl -s $ORIGIN/agent.json","returns":"`application/json`: `name`, `provider`, `protocol` (`mcp`), `interfaces[]` and `skills[]`.","url":"https://samehand.app/agent.json","auth_detail":"Público."},{"method":"GET","path":"/okf/:arquivo","auth":"none","summary":"OKF bundle (Open Knowledge Format v0.1): markdown with frontmatter so an agent reads the whole product without parsing HTML.","grupo":"Discovery","params":{"arquivo":{"desc":"`index.md`, `sobre.md`, `api.md` or `faq.md`.","exemplo":"index.md"}},"retorno":{"_texto":"`text/markdown`. Start at `/okf/index.md`, which lists the bundle."},"erros":{"404":"File outside the bundle."},"exemplo":"curl -s $ORIGIN/okf/index.md","returns":"`text/markdown`. Start at `/okf/index.md`, which lists the bundle.","url":"https://samehand.app/okf/:arquivo","auth_detail":"Público."},{"method":"GET","path":"/.well-known/:arquivo","auth":"none","summary":"Machine discovery before the home page: `api-catalog` (RFC 9727, a linkset with the API and the MCP), `security.txt` (RFC 9116), `x402` (payment manifest: network, wallet and the routes that charge) and `mcp-registry-auth` (the official MCP registry key).","grupo":"Discovery","params":{"arquivo":{"desc":"`api-catalog`, `security.txt`, `x402`, `mcp-registry-auth` or `apis.json`.","exemplo":"api-catalog"}},"retorno":{"_texto":"`application/linkset+json` for the api-catalog; `application/json` for x402 and apis.json; `text/plain` for the other two."},"erros":{"404":"Name outside the five published."},"exemplo":"curl -s $ORIGIN/.well-known/api-catalog","returns":"`application/linkset+json` for the api-catalog; `application/json` for x402 and apis.json; `text/plain` for the other two.","url":"https://samehand.app/.well-known/:arquivo","auth_detail":"Público."},{"method":"GET","path":"/apis.json","auth":"none","summary":"APIs.json (apisjson.org, 0.19): the index APIs.io harvests — the API, the MCP, OpenAPI, guide and OKF bundle in one file. Also at `/.well-known/apis.json`.","grupo":"Discovery","retorno":{"_texto":"`application/json` in the APIs.json 0.19 format: `apis[]` with `baseURL`, `humanURL` and `properties[]`."},"exemplo":"curl -s $ORIGIN/apis.json","returns":"`application/json` in the APIs.json 0.19 format: `apis[]` with `baseURL`, `humanURL` and `properties[]`.","url":"https://samehand.app/apis.json","auth_detail":"Público."},{"method":"GET","path":"/api/","auth":"none","summary":"Índice auto-descrito: cada rota, o que cobra e como plugar o 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."},"endpoints":{"tipo":"object[]","desc":"Catálogo de endpoints."},"mcp_tools":{"tipo":"string[]","desc":"Tools do MCP."}},"returns":"{ name, description, build, base_url, docs, endpoints, mcp_tools }","url":"https://samehand.app/api/","auth_detail":"Público."},{"method":"GET","path":"/api/health","auth":"none","grupo":"Descoberta","summary":"Saúde do processo, número de exemplos e disponibilidade da configuração de reescrita.","retorno":"Saude","exemplo":"curl -s $ORIGIN/api/health","returns":"{ ok, build, exemplos, modelo, reescrita_disponivel, protocolo }","url":"https://samehand.app/api/health","auth_detail":"Público."},{"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://samehand.app/mcp","auth_detail":"Público."},{"method":"GET","path":"/api/estilo","auth":"none","summary":"Estatísticas do perfil de escrita atual, com o tamanho das amostras de um único autor.","grupo":"Voz","retorno":"StyleCard","exemplo":"curl -s $ORIGIN/api/estilo","returns":"{ geradoEm, desde, medidas{resposta,post} }","url":"https://samehand.app/api/estilo","auth_detail":"Público."},{"method":"POST","path":"/api/rewrite","auth":"credito","summary":"Reescreve um texto curto com o perfil atual. Compara as palavras removidas e adicionadas.","grupo":"Voz","preco":"$PRECO_REESCRITA_USD por reescrita além da franquia diária (por conta; sem conta, por rede)","corpo":{"texto":{"tipo":"string","desc":"Rascunho ou ideia a reescrever. Até 4000 caracteres.","req":true,"exemplo":"Please review this draft."},"contexto":{"tipo":"string","desc":"Informações de referência. Até 4000 caracteres. O modelo não busca links."},"registro":{"tipo":"string","desc":"`resposta` (padrão) ou `post`."},"instrucoes":{"tipo":"string","desc":"Regras do autor sobre a própria voz, uma por linha."},"estilos":{"tipo":"object[]","desc":"Até 5 `{id, nome, prompt}`. Cada estilo é uma variante — e uma chamada ao modelo."}},"retorno":"Reescrita","erros":{"400":"`texto_vazio` ou `json_invalido`.","402":"Franquia do dia esgotada: pague com x402 ou crédito pré-pago.","413":"`texto_longo` — o teto é 4000 caracteres.","502":"`falha_upstream` — o provedor do modelo não respondeu.","503":"`sem_credencial` — reescrita sem modelo configurado. Não cobra nem chama o provedor."},"exemplo":"curl -s -XPOST $ORIGIN/api/rewrite -H 'content-type: application/json' -d '{\"texto\":\"This is not just a flaw, it is a breach of trust.\",\"registro\":\"post\"}'","returns":"{ registro, entrada, aviso, variantes[{estilo,texto,passou,achados,palavras,tirado,palavrasAMenos,diff}], falhas[{estilo,motivo}], uso, cota }","url":"https://samehand.app/api/rewrite","auth_detail":"Token de crédito em `Authorization: Bearer cred_…` (ou header `X-Credito`). Não é conta: é portador de saldo."},{"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":"number","desc":"Pacote: 0.1, 1, 5, 10 ou 25 dólares.","obrigatorio":true,"enum":[0.1,1,5,10,25]}},"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 (0.1, 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://samehand.app/api/credito","auth_detail":"Público."},{"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","query":{"movimentos":{"tipo":"string","desc":"`1`: consulta só o histórico paginado, sem saldo."},"de":{"tipo":"string","desc":"Início inclusivo em UTC ISO 8601 com milissegundos. Padrão: 1970-01-01T00:00:00.000Z."},"ate":{"tipo":"string","desc":"Fim exclusivo em UTC ISO 8601 com milissegundos. Padrão: agora. Conserve o valor entre páginas."},"antes":{"tipo":"string","desc":"Cursor `proximo` da página anterior. Só com movimentos=1."},"limite":{"tipo":"int","desc":"1 a 50 movimentos por página; padrão 20. Só com movimentos=1."}},"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."},"proximo":{"tipo":"string|null","desc":"Só com movimentos=1: cursor da próxima página ou null; movimentos inclui id, em, valor_usd, saldo_usd, motivo, produto e recurso."}},"erros":{"400":"Período, limite ou cursor inválido.","401":"Sem token ou token desconhecido."},"exemplo":"curl -s $ORIGIN/api/credito -H 'Authorization: Bearer cred_…'","returns":"{ saldo_micros, saldo_usd, criado_em, movimentos, proximo }","url":"https://samehand.app/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/credito/pix","auth":"none","summary":"Crédito por Pix: a chave, o câmbio fixo, os pacotes em reais e o que o comprovante aceita.","grupo":"Crédito","retorno":{"chave":{"tipo":"string","desc":"A chave Pix que recebe o pagamento."},"brl_por_usd":{"tipo":"number","desc":"Câmbio fixo usado nos pacotes."},"pacotes":{"tipo":"object[]","desc":"Os pacotes (3, 5, 10 ou 25 dólares), cada um com `brl_centavos` e `copia_e_cola` (o Pix copia e cola do valor, o mesmo texto do QR: o app do banco já vem com o valor)."},"comprovante":{"tipo":"object","desc":"Tipos aceitos (foto ou PDF) e o tamanho máximo, em bytes."},"liberacao":{"tipo":"string","desc":"`manual`: o dono confere o Pix e libera."}},"exemplo":"curl -s $ORIGIN/api/credito/pix","returns":"{ chave, brl_por_usd, pacotes, comprovante, liberacao }","url":"https://samehand.app/api/credito/pix","auth_detail":"Público."},{"method":"POST","path":"/api/credito/pix","auth":"none","summary":"Pede crédito pago por Pix: multipart com `usd`, `comprovante` (foto ou PDF até 2 MB) e `email`; o resto é opcional.","desc":"O código de crédito sai na resposta e passa a valer quando o dono confere o Pix e libera (manual, em geral no mesmo dia). O `email` é obrigatório: é por ele que o dono fala com a pessoa. Opcionais: `nome`, `pagina` (a página de onde pediu, até 2.000 caracteres) e o que a pessoa comprava quando recebeu o 402 — `recurso` (até 2.000), `descricao` (até 300) e `preco_usd` (decimal, ex. `0.50`); e `navegador_id` (UUID que liga os pedidos do mesmo navegador). Tudo o que chega fica registrado no pedido — o comprovante inclusive —, com a conta logada (conferida pelo cookie da sessão), a rede e o navegador de quem pediu.","grupo":"Crédito","retorno":{"id":{"tipo":"string","desc":"Id do pedido, para acompanhar."},"estado":{"tipo":"string","desc":"`pendente` até a decisão."},"credito":{"tipo":"string","desc":"O token `cred_…`, mostrado UMA vez; vale depois da liberação."},"estado_em":{"tipo":"string","desc":"Onde acompanhar o pedido."}},"erros":{"400":"Pacote fora da lista (3, 5, 10 ou 25), sem comprovante ou sem e-mail válido.","413":"Comprovante acima de 2 MB.","415":"Comprovante que não é foto (JPEG, PNG, WebP) nem PDF.","429":"A rede já mandou os pedidos do dia.","502":"O e-mail ao dono não saiu: o pedido fica registrado como `falhou`; mande de novo.","503":"Fila de conferência cheia, ou Pix indisponível neste app."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/pix -F usd=5 -F email=voce@empresa.com.br -F comprovante=@pix.pdf","returns":"{ id, estado, credito, estado_em }","url":"https://samehand.app/api/credito/pix","auth_detail":"Público."},{"method":"GET","path":"/api/credito/pix/:id","auth":"none","summary":"Estado de um pedido de crédito por Pix: `pendente`, `liberado`, `recusado` ou `falhou`.","grupo":"Crédito","params":{"id":{"desc":"Id do pedido (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"estado":{"tipo":"string","desc":"`pendente`, `liberado`, `recusado` ou `falhou` (o e-mail ao dono não saiu; mande de novo)."},"usd":{"tipo":"int","desc":"O pacote pedido."},"decidido_em":{"tipo":"string","desc":"Quando o dono decidiu, ou `null`."}},"erros":{"404":"Pedido desconhecido."},"exemplo":"curl -s $ORIGIN/api/credito/pix/0123456789abcdef0123456789abcdef","returns":"{ estado, usd, decidido_em }","url":"https://samehand.app/api/credito/pix/:id","auth_detail":"Público."},{"method":"POST","path":"/api/credito/asaas/:id/cancelar","auth":"none","grupo":"Crédito","summary":"Cancela uma cobrança pendente ao fechar o pagamento.","desc":"Exige o bilhete `cancelamento` devolvido na criação. Uma cobrança antiga de crédito aceita seu token em `credito`. Só atua no produto e ambiente de origem. Não estorna pagamentos nem remove o histórico. 202 indica cancelamento em andamento; a vigia retoma falhas externas.","params":{"id":{"desc":"Id da cobrança (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"id":{"tipo":"string","desc":"Id da cobrança."},"estado":{"tipo":"string","desc":"`cancelando`, `vencido` ou o estado final já confirmado."}},"erros":{"404":"Cobrança ou bilhete inválido, produto ou ambiente diferente."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/asaas/0123456789abcdef0123456789abcdef/cancelar -H 'content-type: application/json' -d '{\"cancelamento\":\"<bilhete>\"}'","returns":"{ id, estado }","url":"https://samehand.app/api/credito/asaas/:id/cancelar","auth_detail":"Público."},{"method":"GET","path":"/api/credito/asaas","auth":"none","summary":"Pix automático: se está disponível neste app, os pacotes em reais e o saldo que o produto vende.","grupo":"Crédito","retorno":{"disponivel":{"tipo":"boolean","desc":"`false` quando o app não tem o Asaas configurado (use o Pix com comprovante)."},"pacotes":{"tipo":"object[]","desc":"Os pacotes de crédito (3, 5, 10 ou 25 dólares), com `brl_centavos`."},"exatos":{"tipo":"object[]","desc":"Preços declarados pelo app, com `usd` e `brl_centavos`. Só aparecem a partir de R$ 5,00 e até R$ 10.000."},"saldo":{"tipo":"object","desc":"Quando o produto vende saldo em reais: a faixa e se a conta logada pode comprar."},"precisa_documento":{"tipo":"boolean","desc":"Se o CPF ou CNPJ de quem paga ainda é pedido."}},"exemplo":"curl -s $ORIGIN/api/credito/asaas","returns":"{ disponivel, pacotes, exatos, saldo, precisa_documento }","url":"https://samehand.app/api/credito/asaas","auth_detail":"Público."},{"method":"POST","path":"/api/credito/asaas","auth":"none","summary":"Gera um Pix dinâmico: JSON com `oferta` (`pacote` com `usd`, ou `saldo` com `centavos`) e o pagador.","desc":"O pagamento libera sozinho o que se comprou: o pacote vira o token `cred_…` que já vem na resposta; o saldo cai na organização da conta logada. Na primeira compra vão `documento` (CPF ou CNPJ, que segue para o gateway e não fica guardado aqui) e `nome`; `email`, `pagina` e `navegador_id` são opcionais e ficam registrados. Com `forma: \"cartao_boleto\"`, a cobrança é livre: a resposta traz `pagamento_em`, a página do gateway onde se paga com cartão, boleto ou Pix (vence em três dias). Com `forma: \"cartao\"` e o `cartao` (`titular`, `numero`, `mes`, `ano`, `cvv`, `documento`, `email`, `cep`, `numero_endereco`, `telefone`), a cobrança é paga no cartão no mesmo pedido: 200 com `estado: \"pago\"`, 202 com `conferir` enquanto o emissor analisa, 422 quando o cartão é recusado; o cartão não fica guardado. O `usd` deve ser um valor de `pacotes` ou `exatos` do GET. O servidor define os centavos e recusa valores não declarados.","grupo":"Crédito","retorno":{"id":{"tipo":"string","desc":"Id da cobrança, para acompanhar."},"credito":{"tipo":"string","desc":"No pacote: o token `cred_…`, mostrado UMA vez; vale quando o pagamento cair."},"forma":{"tipo":"string","desc":"`pix` (o padrão), `cartao` ou `cartao_boleto`."},"pix":{"tipo":"object","desc":"`copia_e_cola`, `imagem` (QR em PNG, data URI) e `expira_em`; só na forma `pix`."},"pagamento_em":{"tipo":"string","desc":"Na forma `cartao_boleto`: a página de pagamento do gateway."},"estado":{"tipo":"string","desc":"Na forma `cartao`: `pago`, ou `pendente` com `conferir`."},"estado_em":{"tipo":"string","desc":"Onde acompanhar o pagamento."},"cancelamento":{"tipo":"string","desc":"Bilhete para cancelar a cobrança pendente de Pix ou boleto."}},"erros":{"400":"Crédito fora de `pacotes` e `exatos`, valor fora da faixa, CPF/CNPJ, nome ou e-mail inválido, dado do cartão inválido (`cartao_dados`, com o `campo`), ou o gateway recusou o pagador (`pagador_recusado`, com a razão em `detalhe`).","422":"Cartão recusado (`cartao_recusado`, com o `campo` quando o gateway diz qual); troque em `POST /api/credito/asaas/:id/cartao`.","429":"Limite de 3 tentativas por minuto ou 10 por dia, por conta ou rede, ou limite do cartão.","502":"O gateway não gerou o Pix; tente de novo.","503":"Pix automático indisponível neste app, o gateway ocupado (`asaas_ocupado`, espere `retry_after_s`), ou cobranças demais de quem não entrou esperando pagamento."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/asaas -H 'content-type: application/json' -d '{\"oferta\":\"pacote\",\"usd\":5,\"documento\":\"000.000.000-00\",\"nome\":\"Ana\"}'","returns":"{ id, credito, forma, pix, pagamento_em, estado, estado_em, cancelamento }","url":"https://samehand.app/api/credito/asaas","auth_detail":"Público."},{"method":"GET","path":"/api/credito/asaas/:id","auth":"none","summary":"Estado de uma cobrança Pix automática: `pendente`, `pago`, `vencido`, `estornado` ou `falhou`.","grupo":"Crédito","params":{"id":{"desc":"Id da cobrança (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"estado":{"tipo":"string","desc":"`pago` libera o token do pacote ou o saldo; o Pix pago depois do vencimento vale."},"pago_em":{"tipo":"string","desc":"Quando o pagamento foi confirmado, ou `null`."}},"erros":{"404":"Cobrança desconhecida."},"exemplo":"curl -s $ORIGIN/api/credito/asaas/0123456789abcdef0123456789abcdef","returns":"{ estado, pago_em }","url":"https://samehand.app/api/credito/asaas/:id","auth_detail":"Público."},{"method":"POST","path":"/api/credito/asaas/:id/cartao","auth":"none","summary":"Paga com outro cartão a cobrança de cartão cujo cartão foi recusado: a mesma cobrança, sem cobrar duas vezes.","desc":"JSON com o `cartao` (os mesmos campos do `POST /api/credito/asaas`) e, sem conta, o `navegador_id` que criou a cobrança. Só a cobrança de cartão que espera pagamento, de quem a criou, e até cinco tentativas por cobrança.","grupo":"Crédito","params":{"id":{"desc":"Id da cobrança (32 hex).","exemplo":"0123456789abcdef0123456789abcdef"}},"retorno":{"estado":{"tipo":"string","desc":"`pago`, ou `pendente` com `conferir` enquanto o emissor analisa."},"estado_em":{"tipo":"string","desc":"Onde acompanhar o pagamento."}},"erros":{"400":"Dado do cartão inválido (`cartao_dados`, com o `campo`).","404":"Cobrança desconhecida, de outra pessoa ou que não é de cartão.","409":"A cobrança já venceu ou foi encerrada; comece o pagamento de novo.","422":"Cartão recusado (`cartao_recusado`).","429":"Passou das tentativas de cartão desta cobrança ou do dia."},"exemplo":"curl -s -XPOST $ORIGIN/api/credito/asaas/0123456789abcdef0123456789abcdef/cartao -H 'content-type: application/json' -d '{\"cartao\":{…}}'","returns":"{ estado, estado_em }","url":"https://samehand.app/api/credito/asaas/:id/cartao","auth_detail":"Público."},{"method":"GET","path":"/api/credito/asaas/saude","auth":"none","summary":"A saúde do Pix e das assinaturas ativas deste app: falhas com motivo, para o painel.","grupo":"Crédito","retorno":{"ativo":{"tipo":"boolean","desc":"`false` quando o Asaas e as assinaturas estão desligados."},"tarefas":{"tipo":"object[]","desc":"Cada problema: `id`, `falhando` e `motivo`. Inclui Pix e, quando ativas, recuperação, fila e orçamento das assinaturas. Não consulta o provedor."}},"exemplo":"curl -s $ORIGIN/api/credito/asaas/saude","returns":"{ ativo, tarefas }","url":"https://samehand.app/api/credito/asaas/saude","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine","auth":"none","grupo":"Public stats","summary":"The product's public numbers: traffic, agents, usage and reliability, no money.","desc":"Projection published hourly by the house collector, rounded to two significant digits; `null` is a missing measurement, never zero. 15-minute cache with ETag (`If-None-Match` → 304). There is no way to send numbers through this route: publishing belongs to the collector, with its own token.","retorno":{"v":{"tipo":"int","desc":"Contract version (1)."},"produto":{"tipo":"string","desc":"Product id."},"publicado":{"tipo":"bool","desc":"`false` before the collector's first publication; then only these five keys come."},"atualizado_em":{"tipo":"string","desc":"When the collector published (ISO 8601).","nulo":true},"stale":{"tipo":"bool","desc":"`true` when the projection is older than 26 h."},"nome":{"tipo":"string","desc":"Product name.","opcional":true},"desde":{"tipo":"string","desc":"First day the series covers.","nulo":true,"opcional":true},"fuso":{"tipo":"string","desc":"Time zone of the days (`UTC`).","opcional":true},"hoje":{"tipo":"object","desc":"Today: pages by class (human, AI, bot), API calls by class, machine-surface reads and product usage.","opcional":true},"dias":{"tipo":"object[]","desc":"Up to 31 days, oldest first: `dia`, `paginas`, `api`, `api_ia`, `maquina`, `visitantes`, `uso`.","opcional":true},"janelas":{"tipo":"object","desc":"7- and 30-day sums (`d7`, `d30`).","opcional":true},"visitantes":{"tipo":"object","desc":"Unique visitors at the edge over 7 days.","opcional":true},"pessoas":{"tipo":"object","desc":"GA4 when available: users, sessions, countries, devices and who arrived from AI.","nulo":true,"opcional":true},"agentes":{"tipo":"object","desc":"The AI agents and bots that read the most, 7 days.","opcional":true},"superficies":{"tipo":"object","desc":"Reads of OKF, llms, well-known, OpenAPI and MCP over 7 days.","opcional":true},"mcp":{"tipo":"object","desc":"MCP calls over 7 days.","opcional":true},"uso":{"tipo":"object","desc":"Real product usage per resource: label, today, 7 and 30 days.","opcional":true},"contas":{"tipo":"object","desc":"Users and guests.","nulo":true,"opcional":true},"confiabilidade":{"tipo":"object","desc":"Share of requests without 5xx over 7 days, and the live build.","opcional":true},"catalogo":{"tipo":"object","desc":"Size of the catalog, when the product has one.","nulo":true,"opcional":true},"apoio":{"tipo":"object","desc":"Impressions and clicks per sponsor, when any.","opcional":true}},"exemplo":"curl -s $ORIGIN/api/vitrine","returns":"{ v, produto, publicado, atualizado_em, stale, nome?, desde?, fuso?, hoje?, dias?, janelas?, visitantes?, pessoas?, agentes?, superficies?, mcp?, uso?, contas?, confiabilidade?, catalogo?, apoio? }","url":"https://samehand.app/api/vitrine","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/operador","auth":"none","grupo":"Public stats","summary":"The product's full document on the operator panel — operator token only.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — the operator class.","obrigatorio":true}},"retorno":{"produto":{"tipo":"string","desc":"Product id."},"atualizado_em":{"tipo":"string","desc":"When the collector published.","nulo":true},"operador":{"tipo":"object","desc":"The collector's full document, with what the public projection leaves out.","nulo":true}},"erros":{"401":"No token, wrong token or a token of another class.","503":"Worker without `METRICS_TOKEN` or without the control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/operador -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"{ produto, atualizado_em, operador }","url":"https://samehand.app/api/vitrine/operador","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/painel","auth":"none","grupo":"Public stats","summary":"The whole house panel, in the shape the gm reads — operator token only.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — the operator class.","obrigatorio":true}},"retorno":{"apps":{"tipo":"object[]","desc":"One operator document per product, ordered by id."},"updated":{"tipo":"string","desc":"When the collector closed the round.","opcional":true},"totals":{"tipo":"object","desc":"House totals.","opcional":true}},"erros":{"401":"No token, wrong token or a token of another class.","503":"Worker without `METRICS_TOKEN` or without the control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/painel -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"{ apps, updated?, totals? }","url":"https://samehand.app/api/vitrine/painel","auth_detail":"Público."},{"method":"GET","path":"/api/vitrine/cursores","auth":"none","grupo":"Public stats","summary":"The resolved-error cursor per product (`borda`, `cli`) — operator token only.","headers":{"Authorization":{"tipo":"string","desc":"`Bearer <METRICS_TOKEN>` — the operator class.","obrigatorio":true}},"retorno":{"_texto":"JSON: `{ [product]: { borda?: ISO, cli?: ISO } }`; empty is `{}`."},"erros":{"401":"No token, wrong token or a token of another class.","503":"Worker without `METRICS_TOKEN` or without the control plane."},"exemplo":"curl -s $ORIGIN/api/vitrine/cursores -H \"Authorization: Bearer $METRICS_TOKEN\"","returns":"JSON: `{ [product]: { borda?: ISO, cli?: ISO } }`; empty is `{}`.","url":"https://samehand.app/api/vitrine/cursores","auth_detail":"Público."},{"method":"GET","path":"/api/partners","auth":"none","grupo":"Partnership","summary":"Partnership, sponsorship and advertising: the product's placements with a suggested price, the public numbers next to them and how to propose.","desc":"Information on request, no activation: placements from the house catalogue priced in USD per 30 days (90 and 365 days discounted), sponsors in effect, an excerpt of `/api/vitrine`, the house wallet (USDC on Base) and the contact path — bank deposit, PIX or invoice are arranged in the reply. Cached for 1 hour.","retorno":{"status":{"tipo":"string","desc":"`sob_consulta`: information and proposal, no activation and no charge."},"produto":{"tipo":"string","desc":"Product name."},"idioma":{"tipo":"string","desc":"Language of the texts (the product's)."},"titulo":{"tipo":"string","desc":"Title of the offer."},"descricao":{"tipo":"string","desc":"One sentence about the offer."},"publico":{"tipo":"string","desc":"Who uses the product — the audience a sponsor reaches."},"modalidades":{"tipo":"object[]","desc":"`{ id, nome }`: patrocinio, parceria, anuncio."},"placements":{"tipo":"object[]","desc":"The product's placements: `id`, `nome`, `onde`, `formato`, `exclusivo`, `medicao`, `price_usd_30d` (suggested; `null` is on request), `exposure[{ dias, price_usd }]` for 30, 90 and 365 days, `disponivel`."},"house_bundle":{"tipo":"object","desc":"The house bundle: footer and agent mention across the ten products, discounted."},"parcerias":{"tipo":"string[]","desc":"Partnership ideas the product is open to discuss."},"current_sponsors":{"tipo":"object[]","desc":"Sponsors in effect: `id`, `nome`, `url`, `frase`, `espacos`, `ate`."},"stats":{"tipo":"object","desc":"Excerpt of the public numbers (`hoje`, `janelas`, `agentes`, `confiabilidade`) and the `link` to `/api/vitrine`; `publicado: false` before the first publication."},"payment":{"tipo":"object","desc":"How to pay: `rede`, `chain_id`, `ativo`, `pay_to`, `eip681` (the house wallet, when declared), `alternativas` and the `nota` — bank deposit, PIX or invoice in the reply."},"contact":{"tipo":"object","desc":"`email`, `form_url`, `api_url` (`POST /api/contact`, free: one message every 10 s per network), `campos` (required), `campos_proposta` (the optional proposal fields, each with its accepted values), `message_template`, `instructions`."},"politica":{"tipo":"object","desc":"Placement label, refused sectors, prepayment, deadlines."},"_links":{"tipo":"object","desc":"`self`, `stats`, `page` (`null` until the page exists), `contact`, `casa` (the same path on the ten products)."}},"exemplo":"curl -s $ORIGIN/api/partners","returns":"{ status, produto, idioma, titulo, descricao, publico, modalidades, placements, house_bundle, parcerias, current_sponsors, stats, payment, contact, politica, _links }","url":"https://samehand.app/api/partners","auth_detail":"Público."},{"method":"POST","path":"/api/contact","auth":"none","summary":"Write to the people behind the product — free, for people and agents alike.","grupo":"Contact","desc":"One route for a question and for a sponsorship, partnership or ad proposal (`tipo`, with the placements of `GET /api/partners`). No captcha, no account, no payment. One message every 10 seconds per network: one that arrives sooner waits its turn and then goes out — no error. The message reaches the team by e-mail, with `email` as the reply address.","corpo":{"name":{"tipo":"string","desc":"What to call the person writing.","obrigatorio":true},"email":{"tipo":"string","desc":"Where to reply.","obrigatorio":true},"message":{"tipo":"string","desc":"What you want to say.","obrigatorio":true},"tipo":{"tipo":"string","desc":"Proposal: `patrocinio`, `parceria` or `anuncio`. Turns on the fields below."},"empresa":{"tipo":"string","desc":"Who is proposing, when it is a company."},"site":{"tipo":"string","desc":"Website of who is proposing."},"orcamento":{"tipo":"string","desc":"`ate_100`, `100_500`, `500_2000`, `2000_mais` or `a_combinar`."},"espaco":{"tipo":"string[]","desc":"Placement ids from `GET /api/partners`, up to 6."},"duracao":{"tipo":"string","desc":"Exposure in days: `30`, `90` or `365`."},"pagamento":{"tipo":"string","desc":"`usdc`, `deposito` or `a_combinar`."}},"body":{"name":"Agent","email":"agent@example.com","message":"hello from an agent"},"retorno":{"ok":{"tipo":"bool","desc":"Always `true` when the message was accepted."}},"erros":{"400":"Validation: `code` names the field.","503":"Contact is not configured on this server."},"exemplo":"curl -s -XPOST $ORIGIN/api/contact -H 'content-type: application/json' -d '{\"name\":\"Agent\",\"email\":\"agent@example.com\",\"message\":\"hello from an agent\"}'","returns":"{ ok }","url":"https://samehand.app/api/contact","auth_detail":"Público."},{"method":"GET","path":"/api/metrics","auth":"token","summary":"Uso e receita do produto, para o painel da casa. Financeiro exige token.","grupo":"Operação","retorno":{"_texto":"`{app, produto, uso, payments?}`."},"erros":{"401":"Token errado.","503":"`METRICS_TOKEN` não configurado no Worker — o financeiro não sai sem ele."},"exemplo":"curl -s $ORIGIN/api/metrics -H \"authorization: Bearer $METRICS_TOKEN\"","returns":"`{app, produto, uso, payments?}`.","url":"https://samehand.app/api/metrics","auth_detail":"Token de operador `METRICS_TOKEN` em `Authorization: Bearer` (métricas)."},{"method":"GET","path":"/api/pricing","auth":"none","grupo":"Descoberta","summary":"Preços vigentes e franquias gratuitas.","retorno":{"product":{"tipo":"string","desc":"Product name."},"quota":{"tipo":"PaymentQuota","desc":"Public allowances and current list prices; not personal usage."},"pricing":{"tipo":"string","desc":"Absolute URL of the current price list."},"billing":{"tipo":"string","desc":"Absolute URL of payment discovery or the existing billing summary."},"api_index":{"tipo":"string","desc":"Absolute URL of the API catalog."}},"erros":{"405":"Use GET ou HEAD."},"exemplo":"curl -s $ORIGIN/api/pricing","returns":"{ product, quota{free,paid,how_to_pay,live,free_now?,charged_now?,trial?}, pricing, billing, api_index }","url":"https://samehand.app/api/pricing","auth_detail":"Público."},{"method":"GET","path":"/api/billing","auth":"none","grupo":"Descoberta","summary":"Descoberta pública de pagamento e crédito pré-pago.","retorno":{"product":{"tipo":"string","desc":"Product name."},"quota":{"tipo":"PaymentQuota","desc":"Public allowances and current list prices; not personal usage."},"pricing":{"tipo":"string","desc":"Absolute URL of the current price list."},"billing":{"tipo":"string","desc":"Absolute URL of payment discovery or the existing billing summary."},"api_index":{"tipo":"string","desc":"Absolute URL of the API catalog."},"payment":{"tipo":"PaymentX402","desc":"Public x402 configuration; pay_to=null means not configured."},"credit":{"tipo":"PaymentCredit","desc":"Prepaid credit entry point. Never contains a balance or token."}},"erros":{"405":"Use GET ou HEAD."},"exemplo":"curl -s $ORIGIN/api/billing","returns":"{ product, quota{free,paid,how_to_pay,live,free_now?,charged_now?,trial?}, pricing, billing, api_index, payment{provider,mode,network,chain_id,pay_to,homolog,dev,dev_gate,alternavel,gratis?,cobrados?,facilitator,asset,asset_address,faucet,wallets}, credit{url,header} }","url":"https://samehand.app/api/billing","auth_detail":"Público."}],"quota":{"free":[{"o_que":"índice, saúde, estilo medido, llms.txt, OpenAPI e MCP","limite":"sem cota","janela":null},{"o_que":"reescrita","limite":"5 por dia, por conta (sem conta, por rede)","janela":null}],"paid":[{"o_que":"reescrita, além da franquia do dia","price_usd":0.02}],"how_to_pay":"Rota paga → **402** com `accepts[]` (x402) e `credito` (pré-pago, `POST /api/credito?usd=10`, vale em todos os produtos). Pague e repita com `X-PAYMENT`, ou mande `Authorization: Bearer cred_…`.","live":"https://samehand.app/api/"},"mcp":{"endpoint":"https://samehand.app/mcp","transport":"streamable-http","tools":5},"mcp_tools":["api_index","voice_card","rewrite_in_voice","pricing","billing"],"quickstart":["curl -s https://samehand.app/api/health","curl -s https://samehand.app/api/estilo","curl -s -XPOST https://samehand.app/api/rewrite -H 'content-type: application/json' -d '{\"texto\":\"This is not just a flaw, it is a breach of trust.\",\"registro\":\"post\"}'"]}