> ## Documentation Index
> Fetch the complete documentation index at: https://docs.safest.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Criar Transação de Artista Protegido

> Cria uma transação de Artista Protegido no Jackson e aciona o fluxo interno de emissão.

O canal envia apenas os dados de negócio:
- segurado
- evento
- endereço
- pagamento




## OpenAPI

````yaml /openapi/jackson.yaml post /seguros/artista-protegido/create
openapi: 3.0.0
info:
  title: Safest API
  description: >
    API para integração de vendas de seguros.


    ## Como usar esta documentação


    1. **Provisionamento**: um administrador cria ou ativa um `api_client` para
    o canal

    2. **Autenticação**: o canal obtém `access_token` e `refresh_token` com
    `client_id` e `client_secret`

    3. **Venda**: o canal registra a venda pelo endpoint genérico de integração
    ou por um endpoint específico

    4. **Consulta**: quando aplicável, o canal consulta status da venda ou do
    seguro emitido


    ## Quickstart de Integração


    1. Crie o cliente de API no endpoint administrativo

    2. Guarde o `client_secret` retornado, ele não é exibido novamente

    3. Gere um token em `/seguros/auth/token`

    4. Registre vendas em `/private/integration/sale`

    5. Use integrações específicas, como Clubfix, apenas quando o produto exigir
    esse fluxo dedicado


    ## Informações sobre Tokens


    - O **access_token** expira em **30 minutos**

    - Use o **refresh_token** para obter um novo access_token sem precisar das
    credenciais

    - O **refresh_token** expira em **7 dias**
  version: '1.0'
  contact:
    email: suporte@safest.com.br
servers:
  - url: https://beta-jackson.safest.com.br/api
    description: Beta Server
  - url: https://safest.triader.com.br/api
    description: Production Server
security: []
tags:
  - name: Auth
    description: |
      Endpoints para autenticação OAuth 2.0 Client Credentials.

      Use estas rotas para obter e renovar seu token de acesso.
  - name: Administração de Clientes
    description: >
      Endpoints administrativos para provisionar, listar, ativar, desativar e
      revogar credenciais de canais integrados.


      Estes endpoints são usados pelo time interno para onboarding de parceiros
      antes do uso da integração de vendas.
  - name: Integração de Vendas
    description: >
      Endpoint genérico para registrar vendas enviadas pelos canais de venda
      integrados.


      Este fluxo é o modelo principal do novo integrador Jackson:

      - autentica o canal via `client_id` e `client_secret`

      - identifica produto e plano pelo ID interno ou código de integração

      - registra a transação com idempotência por `externalSaleId`

      - calcula comissão do canal e líquido Jackson automaticamente
  - name: Ingresso Protegido
    description: >
      Seguro que protege o valor do ingresso em caso de imprevistos que impeçam
      a presença no evento.


      **Importante:** Este endpoint registra vendas já realizadas. O pagamento é
      feito externamente pelo parceiro.
  - name: Seguro Celular
    description: >
      Seguro com proteção completa para celular contra danos acidentais, roubo,
      furto e outros imprevistos.


      Integração com sistema Clubfix para processamento de pagamentos.
  - name: Artista Protegido
    description: >
      Fluxo de venda do produto Artista Protegido.


      O canal envia apenas os dados da transação e o Jackson orquestra a emissão
      internamente.
  - name: Seguro Lua de Mel
    description: >
      Seguro que protege sua viagem de lua de mel contra imprevistos, garantindo
      tranquilidade e cobertura.
paths:
  /seguros/artista-protegido/create:
    post:
      tags:
        - Artista Protegido
      summary: Criar Transação de Artista Protegido
      description: >
        Cria uma transação de Artista Protegido no Jackson e aciona o fluxo
        interno de emissão.


        O canal envia apenas os dados de negócio:

        - segurado

        - evento

        - endereço

        - pagamento
      operationId: createArtistaProtegido
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - productId
                - channelLink
                - nameOrRazao
                - cpfOrCnpj
                - email
                - phone
                - birthDate
                - eventName
                - venueName
                - eventDescription
                - assemblyStartDate
                - eventStartDate
                - eventEndDate
                - disassemblyEndDate
                - standArea
                - lossLimit
                - premiumNet
                - premiumTaxes
                - payment
                - address
              properties:
                productId:
                  type: integer
                  description: ID do produto no cadastro interno Safest
                  example: 123
                channelLink:
                  type: string
                  description: Identificador do canal de venda
                  example: partner-link-artista
                nameOrRazao:
                  type: string
                  description: Nome completo ou razão social
                  example: Artista Exemplo LTDA
                cpfOrCnpj:
                  type: string
                  description: CPF/CNPJ (somente números)
                  example: '12345678900'
                artisticName:
                  type: string
                  description: Nome artístico (opcional)
                  example: DJ Exemplo
                email:
                  type: string
                  format: email
                  example: contato@artista.com
                phone:
                  type: string
                  example: '11999999999'
                birthDate:
                  type: string
                  format: date
                  description: Data de nascimento do segurado (YYYY-MM-DD)
                  example: '1990-01-01'
                musicalGenre:
                  type: string
                  description: Categoria/gênero do artista (opcional)
                  example: Eletrônico
                eventName:
                  type: string
                  description: Nome do evento
                  example: Show Teste Artista Protegido
                venueName:
                  type: string
                  description: Nome do local do evento
                  example: Casa de Eventos Exemplo
                standName:
                  type: string
                  description: Nome do stand (opcional)
                  example: Stand Principal
                eventDescription:
                  type: string
                  description: Descrição detalhada das atividades
                  example: Prestacao de servicos para evento teste no ambiente homolog.
                assemblyStartDate:
                  type: string
                  format: date
                  description: Data de início da montagem (YYYY-MM-DD)
                  example: '2026-04-09'
                eventStartDate:
                  type: string
                  format: date
                  description: Data de início do evento (YYYY-MM-DD)
                  example: '2026-04-10'
                eventEndDate:
                  type: string
                  format: date
                  description: Data de fim do evento (YYYY-MM-DD)
                  example: '2026-04-11'
                disassemblyEndDate:
                  type: string
                  format: date
                  description: Data de fim da desmontagem (YYYY-MM-DD)
                  example: '2026-04-12'
                standArea:
                  type: integer
                  description: Metragem do stand (inteiro)
                  example: 120
                lossLimit:
                  type: number
                  format: float
                  description: Limite máximo de indenização
                  example: 100000
                premiumNet:
                  type: number
                  format: float
                  description: Prêmio líquido
                  example: 100
                premiumTaxes:
                  type: number
                  format: float
                  description: Impostos (IOF)
                  example: 10
                payment:
                  type: object
                  description: Dados de pagamento da transação
                  required:
                    - modeCode
                    - totalInstallmentNumber
                  properties:
                    modeCode:
                      type: string
                      description: Modo de pagamento (1=boleto, 2=cartão de crédito)
                      example: '2'
                    totalInstallmentNumber:
                      type: integer
                      description: Quantidade de parcelas
                      example: 1
                    firstInstallmentDate:
                      type: string
                      format: date
                      description: Data da primeira parcela (YYYY-MM-DD)
                      example: '2026-04-09'
                    creditCard:
                      type: object
                      description: Obrigatório quando `modeCode = "2"`
                      properties:
                        flag:
                          type: string
                          example: Visa
                        number:
                          type: string
                          example: '4111111111111111'
                        cvv:
                          type: string
                          example: '123'
                        expiryMonth:
                          type: string
                          example: '12'
                        expiryYear:
                          type: string
                          example: '31'
                        holder:
                          type: object
                          description: >-
                            Opcional. Se omitido, o backend usa os dados do
                            segurado.
                          properties:
                            name:
                              type: string
                              example: Artista Exemplo LTDA
                            type:
                              type: string
                              example: '1'
                            document:
                              type: string
                              example: '12345678909'
                            email:
                              type: string
                              format: email
                              example: contato@artista.com
                            mobile:
                              type: string
                              example: '11999999999'
                            dateOfBirth:
                              type: string
                              format: date
                              example: '1990-01-01'
                            address:
                              type: object
                              properties:
                                street:
                                  type: string
                                  example: Rua Exemplo
                                number:
                                  type: string
                                  example: '100'
                                complement:
                                  type: string
                                  example: Sala 1
                                district:
                                  type: string
                                  example: Centro
                                city:
                                  type: string
                                  example: Sao Paulo
                                state:
                                  type: string
                                  example: SP
                                postcode:
                                  type: string
                                  example: '01001000'
                saleDate:
                  type: string
                  format: date
                  description: Data da venda (opcional, não pode ser futura)
                  example: '2026-03-26'
                address:
                  type: object
                  required:
                    - street
                    - number
                    - district
                    - city
                    - state
                    - postcode
                    - ibgeCode
                  properties:
                    street:
                      type: string
                      example: Rua Exemplo
                    number:
                      type: string
                      example: '100'
                    complement:
                      type: string
                      example: Sala 1
                    district:
                      type: string
                      example: Centro
                    city:
                      type: string
                      example: Sao Paulo
                    state:
                      type: string
                      example: SP
                    postcode:
                      type: string
                      example: '01001000'
                    ibgeCode:
                      type: string
                      example: '3550308'
                plan:
                  type: object
                  description: Plano (opcional)
                  properties:
                    id:
                      type: integer
                      example: 1
                insurance:
                  type: array
                  description: Coberturas/seguros adicionais (opcional)
                  items:
                    type: object
                    properties:
                      id:
                        type: integer
                        example: 2
                additionalInsured:
                  type: array
                  description: Segurados adicionais (opcional)
                  items:
                    type: object
                    required:
                      - name
                      - cpfOrCnpj
                      - birthDate
                    properties:
                      name:
                        type: string
                        example: Artista Convidado
                      cpfOrCnpj:
                        type: string
                        example: '98765432100'
                      birthDate:
                        type: string
                        format: date
                        example: '1992-08-15'
                      email:
                        type: string
                        format: email
                        example: convidado@artista.com
                      phone:
                        type: string
                        example: '11988887777'
      responses:
        '200':
          description: Transação criada com sucesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  response:
                    type: object
                    properties:
                      message:
                        type: string
                        example: Artista Protegido transaction created successfully
                      data:
                        type: object
                        properties:
                          transaction_id:
                            type: integer
                            example: 12345
                          ticket:
                            type: string
                            description: Ticket retornado para consulta de status
                            example: '10174120237800003204'
                          payment_url:
                            type: string
                            nullable: true
                          insurance_data:
                            type: object
        '400':
          description: Erro de validação ou falha ao criar a transação
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: false
                  response:
                    type: string
                    example: 'Unable to create transaction: ...'
        '401':
          description: Não autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
      security:
        - bearerAuth: []
components:
  schemas:
    UnauthorizedError:
      type: object
      properties:
        success:
          type: boolean
          example: false
        response:
          type: string
          example: Token not found.
        status_code:
          type: string
          example: '401'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: |
        Token JWT obtido através do endpoint /seguros/auth/token.

        Exemplo: Authorization: Bearer {seu_token}

````