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

# Ativar produção

> Passa o Prestador para **produção**: as Notas criadas daqui em diante geram NFS-e com valor fiscal e
consomem a Cota. As Notas já criadas mantêm o Ambiente que tinham.

Exige Certificado ativo e não vencido. O convênio do município com o Padrão Nacional é conferido na emissão:
sem convênio, a Nota vira `falhou` (impedimento).



## OpenAPI

````yaml /openapi.json post /v1/prestadores/{prestador_id}/ativar-producao
openapi: 3.1.0
info:
  title: NotasX API
  description: >

    API de emissão de **NFS-e pelo Padrão Nacional** (Sefin Nacional + ADN).
    Você cadastra os Prestadores,

    envia o Certificado A1 de cada um e cria Notas; o NotasX monta a DPS,
    assina, envia à Sefin e devolve a

    NFS-e por consulta (e, em breve, por Webhook).


    ## Fluxo

    1. **Chave de API**: crie no painel ou em `POST /v1/chaves-api`. O valor
    (`nx_...`) aparece uma única vez.

    2. **Prestador**: `POST /v1/prestadores` com CNPJ, município (IBGE) e regime
    do Simples.

    3. **Certificado**: `POST /v1/prestadores/{id}/certificado` com o `.pfx` e a
    senha. O CNPJ do Certificado
       tem de ser o do Prestador.
    4. **Nota**: `POST /v1/notas` com o header `Idempotency-Key`. Resposta `202`
    com a Nota `pendente`.

    5. **Resultado**: consulte `GET /v1/notas/{id}` até sair de
    `pendente`/`processando`. Com `emitida`, a NFS-e
       existe: `chave_acesso` (50 dígitos), `numero_nfse` e o XML em `GET /v1/notas/{id}/xml`.

    ## Autenticação

    `Authorization: Bearer <credencial>`, com uma **Chave de API** (`nx_...`,
    para integrações) ou o **JWT de

    sessão** do painel. As duas agem como a mesma Conta, sobre todos os
    Prestadores vinculados a ela.


    ## Status da Nota

    | Status | Significado |

    |---|---|

    | `pendente` | Criada e na fila. |

    | `processando` | O worker está montando, assinando ou enviando a DPS. |

    | `emitida` | A Sefin autorizou: existe NFS-e e chave de acesso. Final. |

    | `rejeitada` | **Rejeição**: a Sefin recusou a DPS (`resultado_codigo` traz
    o código, ex. `E0123`). Final; corrija e crie outra Nota. |

    | `falhou` | **Falha**: sem resposta depois das tentativas, ou impedimento
    (Certificado ausente ou vencido, município não conveniado, número de DPS já
    usado fora do NotasX). Final. |


    Uma Nota tem uma única DPS e no máximo uma NFS-e. Novas tentativas reenviam
    a mesma DPS, nunca emitem outra.


    ## Idempotência

    `POST /v1/notas` exige `Idempotency-Key` (até 255 caracteres; use um UUID ou
    o id do pedido no seu sistema).

    Repetir o pedido com a mesma chave devolve **a mesma Nota** e não cria outra
    emissão, mesmo que o corpo mude.

    A chave é única por Conta e não expira.


    ## Ambientes

    Todo Prestador começa em **homologação** (produção restrita, sem valor
    fiscal). `POST

    /v1/prestadores/{id}/ativar-producao` passa a emitir em **produção**. Cada
    Nota guarda o Ambiente do momento

    em que foi criada.


    ## Erros

    Todo erro tem o mesmo corpo: `{"erro": {"codigo": "...", "mensagem":
    "..."}}`. Trate pelo `codigo`, que é

    estável; a `mensagem` é para humanos e pode mudar. Recursos de Prestadores
    sem vínculo com a sua Conta

    respondem `404`, como se não existissem.


    ## Limites

    - **Requisições**: por Conta, por minuto. Ao estourar, `429
    limite_de_requisicoes` com `Retry-After`.

    - **Cota**: NFS-e emitidas em produção por mês. Notas de produção ainda
    pendentes contam contra o limite.
      Esgotada, `429 cota_esgotada` com `Retry-After` até o início do próximo mês (horário de Brasília).
      Homologação não consome Cota. Consulte em `GET /v1/cota`.
  version: 0.1.2
servers:
  - url: https://notasx-api.fly.dev
    description: Produção da API (Prestadores em homologação ou produção)
security: []
tags:
  - name: Notas
    description: Criar e acompanhar Notas até virarem NFS-e (ou Rejeição/Falha).
  - name: Prestadores
    description: 'Quem emite: CNPJ, município, regime, Certificado A1 e Ambiente.'
  - name: Chaves de API
    description: Credenciais das integrações. O valor só aparece na criação.
  - name: Conta
    description: 'Configuração e uso da Conta: Webhook e Cota.'
paths:
  /v1/prestadores/{prestador_id}/ativar-producao:
    post:
      tags:
        - Prestadores
      summary: Ativar produção
      description: >-
        Passa o Prestador para **produção**: as Notas criadas daqui em diante
        geram NFS-e com valor fiscal e

        consomem a Cota. As Notas já criadas mantêm o Ambiente que tinham.


        Exige Certificado ativo e não vencido. O convênio do município com o
        Padrão Nacional é conferido na emissão:

        sem convênio, a Nota vira `falhou` (impedimento).
      operationId: ativar_producao_v1_prestadores__prestador_id__ativar_producao_post
      parameters:
        - name: prestador_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            description: Id do Prestador, devolvido no cadastro.
            title: Prestador Id
          description: Id do Prestador, devolvido no cadastro.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Prestador'
        '401':
          description: >-
            Sem credencial, ou Chave de API inválida/revogada, ou JWT de sessão
            expirado.
          headers:
            WWW-Authenticate:
              description: Sempre `Bearer`.
              schema:
                type: string
          content:
            application/json:
              examples:
                nao_autenticado:
                  summary: nao_autenticado
                  value:
                    erro:
                      codigo: nao_autenticado
                      mensagem: Credencial ausente, inválida ou revogada.
              schema:
                $ref: '#/components/schemas/ErroResposta'
        '404':
          description: >-
            Recurso inexistente ou de um Prestador sem vínculo com a sua Conta
            (a resposta é a mesma, de propósito).
          content:
            application/json:
              examples:
                nao_encontrado:
                  summary: nao_encontrado
                  value:
                    erro:
                      codigo: nao_encontrado
                      mensagem: Prestador não encontrado.
              schema:
                $ref: '#/components/schemas/ErroResposta'
        '422':
          description: >-
            Corpo, parâmetro ou regra de negócio inválidos.
            `requisicao_invalida` lista os campos com problema.
          content:
            application/json:
              examples:
                requisicao_invalida:
                  summary: requisicao_invalida
                  value:
                    erro:
                      codigo: requisicao_invalida
                      mensagem: 'corpo.cnpj: String should match pattern ''^\d{14}$'''
                sem_certificado_valido:
                  summary: sem_certificado_valido
                  value:
                    erro:
                      codigo: sem_certificado_valido
                      mensagem: Envie um Certificado válido antes de ativar a produção.
              schema:
                $ref: '#/components/schemas/ErroResposta'
        '429':
          description: >-
            Limite de requisições por minuto ou Cota mensal esgotada. Respeite o
            header `Retry-After`.
          headers:
            Retry-After:
              description: Segundos até poder tentar de novo.
              schema:
                type: integer
          content:
            application/json:
              examples:
                limite_de_requisicoes:
                  summary: limite_de_requisicoes
                  value:
                    erro:
                      codigo: limite_de_requisicoes
                      mensagem: Muitas requisições; tente de novo em instantes.
              schema:
                $ref: '#/components/schemas/ErroResposta'
      security:
        - Chave de API: []
components:
  schemas:
    Prestador:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Id do Prestador no NotasX.
        cnpj:
          type: string
          title: Cnpj
          description: CNPJ, só dígitos.
        razao_social:
          anyOf:
            - type: string
            - type: 'null'
          title: Razao Social
          description: Razão social informada no cadastro.
        codigo_municipio:
          anyOf:
            - type: string
            - type: 'null'
          title: Codigo Municipio
          description: Código IBGE do município.
        inscricao_municipal:
          anyOf:
            - type: string
            - type: 'null'
          title: Inscricao Municipal
          description: Inscrição municipal, se informada.
        op_simp_nac:
          anyOf:
            - type: integer
            - type: 'null'
          title: Op Simp Nac
          description: '`1` não optante, `2` MEI, `3` ME/EPP do Simples Nacional.'
        ambiente:
          type: string
          enum:
            - homologacao
            - producao
          title: Ambiente
          description: >-
            Ambiente das próximas Notas. Começa em `homologacao`; muda com
            `ativar-producao`.
        ativo:
          type: boolean
          title: Ativo
          description: '`true` quando há Certificado ativo do próprio CNPJ.'
        certificado_valido_ate:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Certificado Valido Ate
          description: Validade do Certificado ativo; `null` sem Certificado.
      type: object
      required:
        - id
        - cnpj
        - razao_social
        - codigo_municipio
        - inscricao_municipal
        - op_simp_nac
        - ambiente
        - ativo
        - certificado_valido_ate
      title: Prestador
      examples:
        - ambiente: homologacao
          ativo: true
          certificado_valido_ate: '2027-04-28T12:00:00Z'
          cnpj: '12345678000195'
          codigo_municipio: '2408102'
          id: 3891f091-65d6-4a88-ac60-72dbe3e98319
          inscricao_municipal: '1234567'
          op_simp_nac: 3
          razao_social: Exemplo Serviços LTDA
    ErroResposta:
      properties:
        erro:
          $ref: '#/components/schemas/Erro'
      type: object
      required:
        - erro
      title: ErroResposta
      description: Corpo de toda resposta de erro (4xx e 5xx).
      examples:
        - erro:
            codigo: nao_encontrado
            mensagem: Nota não encontrada.
    Erro:
      properties:
        codigo:
          type: string
          title: Codigo
          description: Código estável, em snake_case, para tratar o erro no seu código.
          examples:
            - nao_encontrado
        mensagem:
          type: string
          title: Mensagem
          description: >-
            Explicação em português para humanos. Pode mudar; não compare com
            ela.
          examples:
            - Nota não encontrada.
      type: object
      required:
        - codigo
        - mensagem
      title: Erro
  securitySchemes:
    Chave de API:
      type: http
      description: >-
        `Authorization: Bearer nx_...` com uma Chave de API, ou o JWT de sessão
        do painel (Supabase Auth). As duas credenciais representam a mesma
        Conta.
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.