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

# Verify Login Code

> Confere o código e cria a sessão.
<Note>Mande o `access_token` em `Authorization: Bearer` nas rotas que exigem sessão. Um cookie `_cc_acct` também é emitido, para o caso de o seu front ser servido no domínio da própria loja e conviver com páginas do storefront da CentralCart. Só as tentativas erradas contam para o limite: quem acerta de primeira não gasta tentativa. Depois de 5 erros o código é invalidado e é preciso pedir outro.</Note>



## OpenAPI

````yaml /openapi/storefront-auth.yaml post /webstore/auth/verify
openapi: 3.1.0
info:
  title: CentralCart Storefront API (Autenticação)
  version: 1.0.0
  description: >-
    Login do comprador na loja. Dois caminhos, o mesmo token no fim: código de
    seis dígitos por e-mail.
servers:
  - url: https://api.centralcart.io/v1
    description: Produção
security: []
paths:
  /webstore/auth/verify:
    post:
      tags:
        - Autenticacao
      summary: Verify Login Code
      description: >-
        Confere o código e cria a sessão.

        <Note>Mande o `access_token` em `Authorization: Bearer` nas rotas que
        exigem sessão. Um cookie `_cc_acct` também é emitido, para o caso de o
        seu front ser servido no domínio da própria loja e conviver com páginas
        do storefront da CentralCart. Só as tentativas erradas contam para o
        limite: quem acerta de primeira não gasta tentativa. Depois de 5 erros o
        código é invalidado e é preciso pedir outro.</Note>
      operationId: verifyWebstoreLoginCode
      parameters:
        - $ref: '#/components/parameters/StoreDomain'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - email
                - code
              properties:
                email:
                  type: string
                  format: email
                code:
                  type: string
                  description: Código de seis dígitos recebido por e-mail.
            example:
              email: comprador@example.com
              code: '123456'
      responses:
        '200':
          $ref: '#/components/responses/Session'
        '400':
          description: Código inválido ou expirado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                errors:
                  - message: Código inválido.
        '429':
          $ref: '#/components/responses/RateLimited'
      security: []
components:
  parameters:
    StoreDomain:
      name: x-store-domain
      in: header
      required: true
      description: 'Domínio da sua loja (ex: sualoja.centralcart.ai)'
      schema:
        type: string
  responses:
    Session:
      description: Sessão criada
      content:
        application/json:
          schema:
            type: object
            properties:
              access_token:
                type: string
                description: 'Token da sessão. Envie em `Authorization: Bearer`.'
              token_type:
                type: string
                enum:
                  - Bearer
              expires_in:
                type: number
                description: Validade do token em segundos.
              customer:
                $ref: '#/components/schemas/Customer'
          example:
            access_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
            token_type: Bearer
            expires_in: 2592000
            customer:
              email: comprador@example.com
              name: João
              avatar: null
              discord_id: null
              stats:
                orders_count: 5
                approved_orders_count: 4
                total_spent: 189.6
                first_order_at: '2024-01-10T12:04:55.000-03:00'
                last_order_at: '2024-03-03T23:43:12.000-03:00'
    RateLimited:
      description: Limite de requisições atingido
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            errors:
              - message: Resource rate limit reached.
                code: RATE_LIMIT_REACHED
  schemas:
    Error:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
              code:
                type: string
              ref:
                type: string
    Customer:
      type: object
      properties:
        email:
          type: string
        name:
          type: string
          description: Primeiro nome, tirado do último pedido do comprador na loja.
        avatar:
          type: string
          nullable: true
          description: >-
            Preenchido quando o comprador entrou pelo Discord no storefront da
            loja.
        discord_id:
          type: string
          nullable: true
          description: Preenchido apenas quando a sessão veio do Discord.
        stats:
          type: object
          description: Totais do comprador nesta loja.
          properties:
            orders_count:
              type: number
              description: >-
                Pedidos em qualquer status, o mesmo conjunto de `GET
                /webstore/account/order`.
            approved_orders_count:
              type: number
              description: >-
                Apenas os pedidos aprovados, ou seja as compras que o cliente
                concluiu.
            total_spent:
              type: number
              description: >-
                Quanto o cliente pagou no total, somando apenas os pedidos
                aprovados.
            first_order_at:
              type: string
              nullable: true
              description: >-
                Data da primeira compra aprovada. `null` para quem ainda não
                comprou.
            last_order_at:
              type: string
              nullable: true
              description: Data da última compra aprovada.

````