{
  "openapi": "3.1.0",
  "info": {
    "title": "ALMA PARTNERS — Astrologia da Nova Era: API pública",
    "version": "1.0.0",
    "description": "Consulta pública, gratuita e sem cadastro de regras e ofertas do Mapa da Alma. Não fornece operações financeiras, dados pessoais, cadastro automatizado ou funções administrativas.",
    "contact": {
      "name": "Equipe ALMA PARTNERS",
      "url": "https://alma.astrologianovaera.com.br/contact/"
    }
  },
  "servers": [
    {
      "url": "https://alma.astrologianovaera.com.br",
      "description": "Domínio oficial de produção"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Programa público",
      "description": "Informações comerciais públicas, sem dados de Partners ou clientes."
    }
  ],
  "externalDocs": {
    "description": "Documentação e exemplos de consulta",
    "url": "https://alma.astrologianovaera.com.br/developers/"
  },
  "paths": {
    "/api/v1/program": {
      "get": {
        "operationId": "getAlmaPartnersProgram",
        "summary": "Consultar o programa ALMA PARTNERS",
        "description": "Retorna identidade, ofertas, preços e comissões públicas do Mapa da Alma, by Astrologia da Nova Era. Apenas leitura, sem autenticação; não consulta vendas ou clientes e não cria inscrições. O filtro opcional offer seleciona uma versão.",
        "tags": [
          "Programa público"
        ],
        "security": [],
        "parameters": [
          {
            "name": "offer",
            "in": "query",
            "required": false,
            "description": "Filtra uma versão do mapa. Omita para consultar as duas ofertas. Aceita apenas uma ocorrência.",
            "schema": {
              "type": "string",
              "enum": [
                "mapa",
                "mapa-audio"
              ]
            },
            "example": "mapa-audio"
          }
        ],
        "responses": {
          "200": {
            "description": "Informações comerciais públicas atuais. Valores monetários em centavos de BRL.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Program"
                },
                "example": {
                  "name": "ALMA PARTNERS",
                  "endorsement": "by Astrologia da Nova Era",
                  "description": "Rede de criadoras parceiras do Mapa da Alma, com inscrição sujeita à aprovação da equipe.",
                  "currency": "BRL",
                  "commission_percent": 40,
                  "offers": [
                    {
                      "id": "mapa",
                      "name": "Mapa da Alma",
                      "price_cents": 9800,
                      "commission_cents": 3920
                    },
                    {
                      "id": "mapa-audio",
                      "name": "Mapa da Alma com áudio",
                      "price_cents": 16500,
                      "commission_cents": 6600
                    }
                  ],
                  "approval_required": true,
                  "disclaimer": "Comissões de referência antes de eventuais descontos, estornos ou impostos pessoais. Não há garantia de renda. As regras da participação e dos repasses ficam no painel.",
                  "updated_at": "2026-09-16",
                  "links": {
                    "website": "https://alma.astrologianovaera.com.br/",
                    "product": "https://mapadalma.astrologianovaera.com.br/",
                    "apply": "https://alma.astrologianovaera.com.br/painel/",
                    "faq": "https://alma.astrologianovaera.com.br/perguntas-frequentes/",
                    "privacy": "https://alma.astrologianovaera.com.br/privacidade/",
                    "contact": "https://alma.astrologianovaera.com.br/contact/",
                    "docs": "https://alma.astrologianovaera.com.br/developers/"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro não suportado, repetido ou oferta inválida.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Método não permitido. Use GET ou HEAD.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado. Consulte os caminhos documentados.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      },
      "head": {
        "operationId": "getAlmaPartnersProgramHeaders",
        "summary": "Consultar disponibilidade e cabeçalhos do programa",
        "description": "Mesmos status e cabeçalhos de GET, sem corpo. O filtro offer usa as mesmas regras da operação GET.",
        "tags": [
          "Programa público"
        ],
        "security": [],
        "parameters": [
          {
            "name": "offer",
            "in": "query",
            "required": false,
            "description": "Filtra uma versão do mapa. Omita para consultar as duas ofertas. Aceita apenas uma ocorrência.",
            "schema": {
              "type": "string",
              "enum": [
                "mapa",
                "mapa-audio"
              ]
            },
            "example": "mapa-audio"
          }
        ],
        "responses": {
          "200": {
            "description": "Recurso público disponível; resposta sem corpo."
          },
          "400": {
            "description": "Consulta contém parâmetros não suportados; resposta sem corpo."
          },
          "405": {
            "description": "Método não permitido; resposta sem corpo."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Program": {
        "type": "object",
        "description": "Programa e ofertas públicas ALMA PARTNERS.",
        "required": [
          "name",
          "endorsement",
          "description",
          "currency",
          "commission_percent",
          "offers",
          "approval_required",
          "disclaimer",
          "updated_at",
          "links"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome oficial do programa."
          },
          "endorsement": {
            "type": "string",
            "description": "Marca responsável pela parceria."
          },
          "description": {
            "type": "string",
            "description": "Descrição do programa."
          },
          "currency": {
            "type": "string",
            "const": "BRL",
            "description": "Moeda dos preços e comissões."
          },
          "commission_percent": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100,
            "description": "Percentual de comissão inicial das ofertas."
          },
          "offers": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Oferta pública e comissão de referência, com valores inteiros em centavos de BRL.",
              "required": [
                "id",
                "name",
                "price_cents",
                "commission_cents"
              ],
              "additionalProperties": false,
              "properties": {
                "id": {
                  "type": "string",
                  "enum": [
                    "mapa",
                    "mapa-audio"
                  ],
                  "description": "Identificador da versão do produto."
                },
                "name": {
                  "type": "string",
                  "description": "Nome da oferta."
                },
                "price_cents": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Preço integral em centavos de real."
                },
                "commission_cents": {
                  "type": "integer",
                  "minimum": 0,
                  "description": "Comissão de referência em centavos, à taxa informada."
                }
              }
            },
            "minItems": 1,
            "maxItems": 2,
            "description": "Versões do Mapa da Alma disponíveis para indicação."
          },
          "approval_required": {
            "type": "boolean",
            "description": "A divulgação requer aprovação da equipe."
          },
          "disclaimer": {
            "type": "string",
            "description": "Limites da comissão de referência e dos cenários de ganhos."
          },
          "updated_at": {
            "type": "string",
            "format": "date",
            "description": "Data da última revisão comercial."
          },
          "links": {
            "type": "object",
            "description": "Destinos oficiais para continuidade da consulta.",
            "required": [
              "website",
              "product",
              "apply",
              "faq",
              "privacy",
              "contact",
              "docs"
            ],
            "additionalProperties": false,
            "properties": {
              "website": {
                "type": "string",
                "format": "uri",
                "description": "Apresentação pública."
              },
              "product": {
                "type": "string",
                "format": "uri",
                "description": "Experiência do Mapa da Alma."
              },
              "apply": {
                "type": "string",
                "format": "uri",
                "description": "Cadastro e painel autenticado."
              },
              "faq": {
                "type": "string",
                "format": "uri",
                "description": "Regras e perguntas frequentes."
              },
              "privacy": {
                "type": "string",
                "format": "uri",
                "description": "Privacidade."
              },
              "contact": {
                "type": "string",
                "format": "uri",
                "description": "Atendimento oficial."
              },
              "docs": {
                "type": "string",
                "format": "uri",
                "description": "Documentação HTTP."
              }
            }
          }
        },
        "additionalProperties": false
      },
      "Problem": {
        "type": "object",
        "description": "Erro estruturado conforme RFC 9457; extensões code, resolution e docs orientam a recuperação.",
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "instance",
          "code",
          "resolution",
          "docs"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "Identificador do tipo de erro (RFC 9457)."
          },
          "title": {
            "type": "string",
            "description": "Resumo legível do erro."
          },
          "status": {
            "type": "integer",
            "minimum": 400,
            "maximum": 599,
            "description": "Código HTTP desta resposta."
          },
          "detail": {
            "type": "string",
            "description": "Explicação específica da falha."
          },
          "instance": {
            "type": "string",
            "format": "uri-reference",
            "description": "Caminho solicitado, sem parâmetros pessoais."
          },
          "code": {
            "type": "string",
            "description": "Código estável para tratamento por agentes."
          },
          "resolution": {
            "type": "string",
            "description": "Como corrigir a requisição."
          },
          "docs": {
            "type": "string",
            "format": "uri",
            "description": "Documentação oficial com exemplos."
          }
        },
        "additionalProperties": false
      }
    }
  }
}
