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

# Gerar Token

> Obtém um token de acesso OAuth 2.0 usando o fluxo Client Credentials.

## Como autenticar

Siga os passos abaixo para obter e usar o token de acesso OAuth 2.0:

<Steps>
  <Step title="Obter credenciais de cliente">
    Você precisa ter credenciais de cliente válidas (`client_id` e `client_secret`) fornecidas pela Husky.

    Entre em contato com o [suporte](mailto:suporte@gohusky.net) para obter suas credenciais se ainda não as possui.
  </Step>

  <Step title="Fazer requisição POST para obter o token">
    Faça uma requisição POST para este endpoint. Ler Parâmetros esperados mais abaixo.
  </Step>

  <Step title="Receber o token de acesso">
    A resposta retornará um objeto JSON com o token de acesso. O token tem validade de **7 dias (604800 segundos)**.

    <Warning>
      A duração da validade pode ser alterada a qualquer momento, é preciso que sua integração esteja preparada para renovar token em caso de retorno como não autorizado.
    </Warning>
  </Step>

  <Step title="Usar o token nas requisições">
    O token retornado deve ser usado no header `Authorization` de todas as requisições subsequentes:

    ```
    Authorization: Bearer {access_token}
    ```

    Todos os endpoints protegidos requerem este token no header.
  </Step>

  <Step title="Renovar o token quando expirar">
    Quando o token expirar, você precisará obter um novo token usando este mesmo endpoint.

    <Warning>
      Se você receber um erro `401 Unauthorized`, verifique se o token não expirou e obtenha um novo token.
    </Warning>
  </Step>
</Steps>


## OpenAPI

````yaml POST /oauth/token
openapi: 3.1.0
info:
  title: API Módulo Logístico
  description: >
    API para integração com o módulo logístico do OpenDelivery.


    Esta API utiliza autenticação OAuth 2.0 com o fluxo Client Credentials para
    obter tokens de acesso.

    Todos os endpoints protegidos requerem o token de acesso no header
    Authorization.
  version: 1.2.0
  contact:
    name: Suporte OpenDelivery
servers:
  - url: https://opendelivery.gohusky.net/logistic
    description: Servidor de produção
  - url: https://sandbox.opendelivery.gohusky.net/logistic
    description: Servidor Homologação
security: []
tags:
  - name: Autenticação
    description: Endpoints relacionados à autenticação e obtenção de tokens de acesso
  - name: Entregas
    description: Endpoints relacionados à gestão de entregas e pedidos logísticos
paths:
  /oauth/token:
    post:
      tags:
        - Autenticação
      summary: Obter token de acesso
      description: Obtém um token de acesso OAuth 2.0 usando o fluxo Client Credentials.
      operationId: getAccessToken
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              required:
                - grant_type
                - client_id
                - client_secret
              properties:
                grant_type:
                  type: string
                  enum:
                    - client_credentials
                  description: >-
                    Tipo de concessão OAuth. Deve ser sempre
                    "client_credentials"
                  example: client_credentials
                client_id:
                  type: string
                  description: Identificador único do cliente
                  example: 123e4567-e89b-12d3-a456-426614174000
                client_secret:
                  type: string
                  format: password
                  description: Segredo do cliente
                  example: sua-chave-secreta-aqui
            encoding:
              client_id:
                style: form
              client_secret:
                style: form
              grant_type:
                style: form
      responses:
        '200':
          description: Token de acesso obtido com sucesso
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessTokenResponse'
              examples:
                success:
                  summary: Resposta de sucesso
                  value:
                    access_token: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...
                    token_type: Bearer
                    expires_in: 604800
        '401':
          description: Credenciais inválidas ou não autorizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_credentials:
                  summary: Credenciais inválidas
                  value:
                    title: Não autorizado
                    status: 401
        '500':
          description: Erro interno do servidor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                server_error:
                  summary: Erro do servidor
                  value:
                    title: Serviço indisponível
                    status: 500
components:
  schemas:
    AccessTokenResponse:
      type: object
      required:
        - access_token
        - token_type
        - expires_in
      properties:
        access_token:
          type: string
          description: >-
            Token de acesso OAuth 2.0 que deve ser usado para autenticar
            requisições subsequentes
          example: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiIxIiwianRpIjoi...
        token_type:
          type: string
          description: Tipo do token, sempre "Bearer"
          enum:
            - Bearer
          example: Bearer
        expires_in:
          type: integer
          description: Tempo de expiração do token em segundos (7 dias = 604800 segundos)
          example: 604800
    ErrorResponse:
      type: object
      required:
        - title
        - status
      properties:
        title:
          type: string
          description: Mensagem de erro descritiva
          example: Não autorizado
        status:
          type: integer
          description: Código de status HTTP
          example: 401

````