EditalMD Dono API

The Dono API from EditalMD — 3 operation(s) for dono.

Operations 4

POST /api/dono Cria o token de dono que abre alertas e vigias, e o segredo que assina os… #
GET /api/dono O estado do dono: e-mail confirmado, franquia e o segredo que assina os webhooks #
POST /api/dono/segredo Rotaciona o segredo do webhook. #
POST /api/dono/confirmar-email Confirma o e-mail de destino dos alertas com o código de 6 dígitos recebido #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/editalmd-dono-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

editalmd-dono-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 2d690e87
  title: Editalmd Dono API
servers:
- url: https://editalmd.com
tags:
- name: Dono
paths:
  /api/dono:
    post:
      operationId: post_api_dono
      summary: Cria o token de dono que abre alertas e vigias, e o segredo que assina os…
      description: 'Teto por rede e por dia (`TETO_DONOS_REDE_DIA`), para a franquia grátis não virar infinita. O token é mostrado uma única vez e não tem recuperação; o `webhook_segredo` pode ser relido em `GET /api/dono`. Todo POST do webhook leva `webhook-id`, `webhook-timestamp` (segundos Unix) e `webhook-signature: v1,`: HMAC-SHA256 de `id.timestamp.corpo` com a chave do seu `whsec_…` (o base64 depois do prefixo). É o padrão Standard Webhooks — qualquer biblioteca dele confere; rejeite timestamp fora de 5 minutos. Depois de `POST /api/dono/segredo`, o anterior ainda assina por 24 h (duas partes `v1,` no cabeçalho).

        Devolve: { token, aviso, webhook_segredo, webhook_assinatura, franquia }'
      responses:
        '200':
          description: '{ token, aviso, webhook_segredo, webhook_assinatura, franquia }'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dono'
        '429':
          description: A rede já criou o teto de donos do dia.
        '503':
          description: Banco indisponível.
      tags:
      - Dono
    get:
      operationId: get_api_dono
      summary: 'O estado do dono: e-mail confirmado, franquia e o segredo que assina os webhooks'
      description: 'Todo POST do webhook leva `webhook-id`, `webhook-timestamp` (segundos Unix) e `webhook-signature: v1,`: HMAC-SHA256 de `id.timestamp.corpo` com a chave do seu `whsec_…` (o base64 depois do prefixo). É o padrão Standard Webhooks — qualquer biblioteca dele confere; rejeite timestamp fora de 5 minutos. Depois de `POST /api/dono/segredo`, o anterior ainda assina por 24 h (duas partes `v1,` no cabeçalho).

        Devolve: { email_confirmado, email_confirmado_em, webhook_segredo, assinatura, franquia }'
      responses:
        '200':
          description: '{ email_confirmado, email_confirmado_em, webhook_segredo, assinatura, franquia }'
          content:
            application/json:
              schema:
                type: object
                properties:
                  email_confirmado:
                    type: boolean
                    description: Se há e-mail confirmado para os alertas por e-mail.
                  email_confirmado_em:
                    type: string
                    description: Instante da confirmação em ISO 8601; nulo sem e-mail.
                    nullable: true
                  webhook_segredo:
                    type: string
                    description: '`whsec_…` — a chave que assina cada POST de webhook.'
                  assinatura:
                    type: string
                    description: Como conferir a assinatura, em uma linha.
                  franquia:
                    type: object
                    description: '`alertas_gratis` e `vigias_gratis` incluídos.'
                required:
                - email_confirmado
                - email_confirmado_em
                - webhook_segredo
                - assinatura
                - franquia
        '401':
          description: Sem token de dono, ou token desconhecido.
      tags:
      - Dono
  /api/dono/segredo:
    post:
      operationId: post_api_dono_segredo
      summary: Rotaciona o segredo do webhook.
      description: 'Durante as 24 h o cabeçalho `webhook-signature` traz duas partes `v1,…`: uma com o novo, outra com o anterior. Basta o receptor aceitar qualquer uma que bata.

        Devolve: { webhook_segredo, anterior_valido_ate }'
      responses:
        '200':
          description: '{ webhook_segredo, anterior_valido_ate }'
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhook_segredo:
                    type: string
                    description: O novo `whsec_…`.
                  anterior_valido_ate:
                    type: string
                    description: Até quando o segredo anterior ainda assina (ISO 8601).
                required:
                - webhook_segredo
                - anterior_valido_ate
        '401':
          description: Sem token de dono, ou token desconhecido.
      tags:
      - Dono
  /api/dono/confirmar-email:
    post:
      operationId: post_api_dono_confirmar_email
      summary: Confirma o e-mail de destino dos alertas com o código de 6 dígitos recebido
      description: 'Devolve: { ok, email_confirmado_em }'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                codigo:
                  type: string
                  description: Os 6 dígitos que chegaram no e-mail; vale 30 minutos.
              required:
              - codigo
            example:
              codigo: '123456'
      responses:
        '200':
          description: '{ ok, email_confirmado_em }'
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    description: '`true` quando o e-mail passou a valer.'
                  email_confirmado_em:
                    type: string
                    description: Instante da confirmação em ISO 8601.
                required:
                - ok
                - email_confirmado_em
        '400':
          description: Código inválido, expirado ou sem confirmação pendente.
        '401':
          description: Sem token de dono, ou token desconhecido.
        '429':
          description: 'Cinco tentativas erradas: peça outro código.'
      tags:
      - Dono
components:
  schemas:
    Dono:
      type: object
      properties:
        token:
          type: string
          description: '`edm_…` — guarde; não é mostrado de novo nem recuperável.'
        aviso:
          type: string
          description: Lembrete de guardar o token e como usá-lo.
        webhook_segredo:
          type: string
          description: '`whsec_…` — assina todo POST de webhook (Standard Webhooks). Releia em `GET /api/dono`; rotacione em `POST /api/dono/segredo`.'
        webhook_assinatura:
          type: string
          description: Como conferir a assinatura, em uma linha.
        franquia:
          type: object
          description: '`alertas_gratis` e `vigias_gratis` incluídos.'
      required:
      - token
      - aviso
      - webhook_segredo
      - webhook_assinatura
      - franquia
      description: O token de dono, mostrado uma única vez, o segredo que assina os webhooks e a franquia.