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

# Histórico de envios

> Os 20 últimos envios do projeto, com o resultado da instalação e as versões guardadas.

Cada `.zip` enviado (pelo painel, pela [CLI](/cli) ou pela API) aparece aqui e fica guardado como **versão**: `isRestorable` diz se ainda dá para baixar e voltar para ele. O plano define quantas ficam (`versionLimit`), por até 30 dias (`retentionDays`). `apiKeyName` diz qual chave enviou (`null` quando foi pelo painel). Guia completo em [Versões e voltar atrás](/hosting/versions).

## Erros comuns

| Código                                             | HTTP | O que fazer                                              |
| -------------------------------------------------- | ---- | -------------------------------------------------------- |
| [`not_found`](/errors#param-not-found)             | 404  | Confira o ID do projeto.                                 |
| [`invalid_api_key`](/errors#param-invalid-api-key) | 401  | Confira o cabeçalho `Authorization` ou crie outra chave. |

Todos os códigos, com o formato do erro, em [Códigos de erro](/errors).


## OpenAPI

````yaml GET /projects/{id}/deployments
openapi: 3.1.0
info:
  title: API da Cube Hosting
  version: 1.0.0
  description: >-
    Hospede bots de Discord, sites e APIs em Node.js e Python: envie o .zip,
    inicie, pare, reinicie, leia logs e métricas, cuide das variáveis de
    ambiente, faça e baixe backups, volte para uma versão anterior e veja o uso
    do plano. Para agentes de IA, o servidor MCP da conta (`POST
    https://app.cubehosting.com.br/api/mcp`, JSON-RPC, com a mesma chave) está
    em https://docs.cubehosting.com.br/account-mcp.
  contact:
    name: Cube Hosting
    url: https://discord.gg/pv6D9tUsDV
servers:
  - url: https://app.cubehosting.com.br/api
security:
  - bearerAuth: []
tags:
  - name: Projetos
  - name: Controle
  - name: Logs e métricas
  - name: Variáveis de ambiente
  - name: Backups
  - name: Versões dos envios
  - name: Avisos
  - name: Conta
paths:
  /projects/{id}/deployments:
    get:
      tags:
        - Versões dos envios
      summary: Histórico de envios
      description: >-
        Os 20 últimos envios do projeto, do mais novo, com o resultado da
        instalação: cada `.zip` enviado (pelo painel, pela CLI ou pela API),
        cada Aplicar mudanças, troca de versão da linguagem, backup restaurado e
        volta para uma versão. Cada `.zip` fica guardado como **versão** para
        baixar ou voltar para ele (`isRestorable`): o plano define quantas ficam
        (`versionLimit`), por até 30 dias.
      operationId: listDeployments
      parameters:
        - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: O histórico e as regras do plano.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeploymentList'
              example:
                deployments:
                  - id: 3f2b8c1e-6a4d-4e7b-9c2a-1d5e8f0a7b36
                    source: code_upload
                    fileName: bot.zip
                    sizeBytes: 48230
                    apiKeyName: GitHub Actions
                    hasReinstalledDependencies: false
                    result: ok
                    isRestorable: true
                    restoredFrom: null
                    startedAt: '2026-09-28T12:00:00.000Z'
                    finishedAt: '2026-09-28T12:00:14.000Z'
                versionLimit: 3
                retentionDays: 30
        '401':
          description: Chave ausente, inválida ou revogada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                invalid_api_key:
                  summary: invalid_api_key
                  value:
                    status: error
                    code: invalid_api_key
                    message: >-
                      Chave de API inválida ou revogada. Confira o cabeçalho
                      "Authorization: Bearer <chave>" ou crie outra em Chaves de
                      API no painel.
        '404':
          description: O projeto não existe ou não é da sua conta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                not_found:
                  summary: not_found
                  value:
                    status: error
                    code: not_found
                    message: Projeto não encontrado.
        '429':
          description: Limite de pedidos. Traz o cabeçalho `Retry-After`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                rate_limit_exceeded:
                  summary: rate_limit_exceeded
                  value:
                    status: error
                    code: rate_limit_exceeded
                    message: >-
                      A sua conta passou do limite da API do plano Free: 10
                      pedidos por minuto. Espere 42 s e tente de novo.
                too_many_attempts:
                  summary: too_many_attempts
                  value:
                    status: error
                    code: too_many_attempts
                    message: Muitas tentativas. Tente de novo em 15 minutos.
      x-codeSamples:
        - lang: bash
          label: curl
          source: >-
            curl
            https://app.cubehosting.com.br/api/projects/$PROJECT_ID/deployments
            \
              -H "Authorization: Bearer $CUBE_API_KEY"
        - lang: javascript
          label: Node.js
          source: >-
            const API = 'https://app.cubehosting.com.br/api';

            const headers = { Authorization: `Bearer
            ${process.env.CUBE_API_KEY}` };


            const res = await
            fetch(`${API}/projects/${process.env.PROJECT_ID}/deployments`, {
            headers });

            const { deployments } = await res.json();

            const versions = deployments.filter((d) => d.isRestorable);

            console.log(versions.map((d) => `${d.id} ${d.fileName}
            ${d.startedAt}`));
        - lang: python
          label: Python
          source: >-
            import os

            import requests


            API = "https://app.cubehosting.com.br/api"

            headers = {"Authorization": f"Bearer {os.environ['CUBE_API_KEY']}"}


            r =
            requests.get(f"{API}/projects/{os.environ['PROJECT_ID']}/deployments",
            headers=headers, timeout=30)

            r.raise_for_status()

            for d in r.json()["deployments"]:
                print(d["id"], d["source"], d["result"], d["isRestorable"])
components:
  parameters:
    ProjectId:
      name: id
      in: path
      required: true
      description: >-
        O ID do projeto (26 caracteres). Aparece no painel, no topo do projeto,
        e em `GET /projects`.
      schema:
        type: string
        pattern: ^[0-9A-HJKMNP-TV-Z]{26}$
        example: 01J8Z3W6N0Q4Y7V2K5T9D1H3XA
  schemas:
    DeploymentList:
      type: object
      required:
        - deployments
        - versionLimit
        - retentionDays
      properties:
        deployments:
          type: array
          items:
            $ref: '#/components/schemas/Deployment'
          description: Os 20 últimos, do mais novo para o mais antigo.
        versionLimit:
          type: integer
          description: >-
            Quantas versões (`.zip` enviados) o plano guarda por projeto: Free 2
            (a de agora e a anterior), Block 3, Stack 5, Tower 7, Fortress 10,
            Monolith 14.
        retentionDays:
          type: integer
          description: Por quantos dias no máximo uma versão fica guardada.
    Error:
      type: object
      required:
        - status
        - code
        - message
      properties:
        status:
          type: string
          const: error
        code:
          type: string
          description: Código fixo em inglês. Veja [Códigos de erro](/errors).
        message:
          type: string
          description: Texto em português para mostrar a uma pessoa.
      additionalProperties: true
    Deployment:
      type: object
      description: >-
        Um envio: um `.zip`, um push ou um Implantar agora do [deploy pelo
        GitHub](/github), um Aplicar mudanças, uma troca de versão da linguagem,
        um backup restaurado ou uma volta para uma versão.
      required:
        - id
        - source
        - fileName
        - commit
        - sizeBytes
        - apiKeyName
        - hasReinstalledDependencies
        - result
        - isRestorable
        - restoredFrom
        - startedAt
        - finishedAt
      properties:
        id:
          type: string
          format: uuid
        source:
          type: string
          enum:
            - initial_upload
            - code_upload
            - file_editor
            - version_change
            - backup_restore
            - rollback
            - github_push
            - github_manual
          description: >-
            `initial_upload` (o `.zip` que criou o projeto, ou o primeiro commit
            dele pelo GitHub), `code_upload` (um `.zip` novo), `file_editor`
            (Aplicar mudanças no painel), `version_change` (troca da versão da
            linguagem), `backup_restore` (backup restaurado), `rollback` (volta
            para uma versão), `github_push` (um push na branch escolhida) e
            `github_manual` (o Implantar agora do painel).
        fileName:
          type:
            - string
            - 'null'
          description: O nome do `.zip`, quando houver.
        commit:
          oneOf:
            - type: object
              required:
                - sha
                - message
                - author
              properties:
                sha:
                  type: string
                  description: O commit inteiro (40 caracteres).
                message:
                  type: string
                  description: A mensagem do commit (até 500 caracteres).
                author:
                  type:
                    - string
                    - 'null'
                  description: Quem fez o commit.
            - type: 'null'
          description: >-
            No [deploy pelo GitHub](/github): o commit que foi ao ar (ou que
            parou antes). `null` nos outros envios.
        sizeBytes:
          type:
            - integer
            - 'null'
          description: >-
            O tamanho do `.zip` guardado, em bytes. `null` quando não é um
            `.zip` enviado.
        apiKeyName:
          type:
            - string
            - 'null'
          description: O nome da chave de API que enviou. `null` quando foi pelo painel.
        hasReinstalledDependencies:
          type: boolean
          description: >-
            `true` quando as dependências foram instaladas de novo; `false`
            quando o manifesto não mudou.
        result:
          type:
            - string
            - 'null'
          description: >-
            `null` enquanto instala, `ok` quando terminou bem, ou o código do
            erro do projeto (`install_failed`, `start_failed`…). No deploy pelo
            GitHub, o envio que parou antes da instalação vem já fechado com o
            motivo (`repository_too_large`, `repository_not_found`,
            `unsafe_zip`, `github_unavailable`, `project_busy`…) e nada mudou no
            projeto.
        isRestorable:
          type: boolean
          description: >-
            `true` quando o `.zip` ainda está guardado: dá para baixar e voltar
            para ele.
        restoredFrom:
          oneOf:
            - type: object
              required:
                - id
                - startedAt
              properties:
                id:
                  type: string
                  format: uuid
                startedAt:
                  type: string
                  format: date-time
            - type: 'null'
          description: 'Numa volta (`rollback`): a versão para a qual o projeto voltou.'
        startedAt:
          type: string
          format: date-time
        finishedAt:
          type:
            - string
            - 'null'
          format: date-time
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Chave de API da Cube (`cube_…`), criada no painel em **Chaves de API**.
        Mande como `Authorization: Bearer cube_…`.

````