openapi: 3.0.3
info:
  title: CrewAI AMP API
  description: >
    REST API para interagir com suas crews implantadas no CrewAI AMP.


    ## Introdução


    1. **Encontre a URL da sua crew**: Obtenha sua URL única no painel do CrewAI
    AMP

    2. **Copie os exemplos**: Use os exemplos de cada endpoint como modelo

    3. **Substitua os placeholders**: Atualize URLs e tokens com seus valores
    reais

    4. **Teste com suas ferramentas**: Use cURL, Postman ou seu cliente
    preferido


    ## Autenticação


    Todas as requisições exigem um token bearer. Existem dois tipos:


    - **Bearer Token**: Token em nível de organização para operações completas

    - **User Bearer Token**: Token com escopo de usuário com permissões
    limitadas


    Você encontra os tokens na aba Status da sua crew no painel do CrewAI AMP.


    ## Documentação de Referência


    Este documento fornece exemplos completos para cada endpoint:


    - **Formatos de requisição** com parâmetros obrigatórios e opcionais

    - **Exemplos de resposta** para sucesso e erro

    - **Amostras de código** em várias linguagens

    - **Padrões de autenticação** com uso correto de Bearer token


    Copie os exemplos e personalize com sua URL e tokens reais.


    ## Fluxo


    1. **Descubra os inputs** usando `GET /inputs`

    2. **Inicie a execução** usando `POST /kickoff`

    3. **Monitore o progresso** usando `GET /status/{kickoff_id}`
  version: 1.0.0
  contact:
    name: CrewAI Suporte
    email: support@crewai.com
    url: https://crewai.com
servers:
  - url: https://your-actual-crew-name.crewai.com
    description: Substitua pela URL real da sua crew no painel do CrewAI AMP
security:
  - BearerAuth: []
paths:
  /inputs:
    get:
      summary: Obter Inputs Requeridos
      description: >
        **📋 Exemplo de Referência** - *Mostra o formato da requisição. Para
        testar com sua crew real, copie o cURL e substitua URL + token.*


        Retorna a lista de parâmetros de entrada que sua crew espera.
      operationId: getRequiredInputs
      responses:
        '200':
          description: Inputs requeridos obtidos com sucesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  inputs:
                    type: array
                    items:
                      type: string
                    description: Nomes dos parâmetros de entrada
                    example:
                      - budget
                      - interests
                      - duration
                      - age
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/ServerError'
  /kickoff:
    post:
      summary: Iniciar Execução da Crew
      description: >
        **📋 Exemplo de Referência** - *Mostra o formato da requisição. Para
        testar com sua crew real, copie o cURL e substitua URL + token.*


        Inicia uma nova execução da crew com os inputs fornecidos e retorna um
        kickoff ID.
      operationId: startCrewExecution
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - inputs
              properties:
                inputs:
                  type: object
                  additionalProperties:
                    type: string
                  example:
                    budget: 1000 USD
                    interests: games, tech, ai, relaxing hikes, amazing food
                    duration: 7 days
                    age: '35'
      responses:
        '200':
          description: Execução iniciada com sucesso
          content:
            application/json:
              schema:
                type: object
                properties:
                  kickoff_id:
                    type: string
                    format: uuid
                    example: abcd1234-5678-90ef-ghij-klmnopqrstuv
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '500':
          $ref: '#/components/responses/ServerError'
  /status/{kickoff_id}:
    get:
      summary: Obter Status da Execução
      description: >
        **📋 Exemplo de Referência** - *Mostra o formato da requisição. Para
        testar com sua crew real, copie o cURL e substitua URL + token.*


        Retorna o status atual e os resultados de uma execução usando o kickoff
        ID.
      operationId: getExecutionStatus
      parameters:
        - name: kickoff_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Status recuperado com sucesso
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ExecutionRunning'
                  - $ref: '#/components/schemas/ExecutionCompleted'
                  - $ref: '#/components/schemas/ExecutionError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          description: Kickoff ID não encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          $ref: '#/components/responses/ServerError'
  /resume:
    post:
      summary: Resume Crew Execution with Human Feedback
      description: >
        **📋 Reference Example Only** - *This shows the request format. To test
        with your actual crew, copy the cURL example and replace the URL + token
        with your real values.*


        Resume a paused crew execution with human feedback for Human-in-the-Loop
        (HITL) workflows.

        When a task with `human_input=True` completes, the crew execution pauses
        and waits for human feedback.


        **IMPORTANT**: You must provide the same webhook URLs (`taskWebhookUrl`,
        `stepWebhookUrl`, `crewWebhookUrl`)

        that were used in the original kickoff call. Webhook configurations are
        NOT automatically carried over -

        they must be explicitly provided in the resume request to continue
        receiving notifications.
      operationId: resumeCrewExecution
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - execution_id
                - task_id
                - human_feedback
                - is_approve
              properties:
                execution_id:
                  type: string
                  format: uuid
                  description: The unique identifier for the crew execution (from kickoff)
                  example: abcd1234-5678-90ef-ghij-klmnopqrstuv
                task_id:
                  type: string
                  description: The ID of the task that requires human feedback
                  example: research_task
                human_feedback:
                  type: string
                  description: >-
                    Your feedback on the task output. This will be incorporated
                    as additional context for subsequent task executions.
                  example: >-
                    Great research! Please add more details about recent
                    developments in the field.
                is_approve:
                  type: boolean
                  description: >-
                    Whether you approve the task output: true = positive
                    feedback (continue), false = negative feedback (retry task)
                  example: true
                taskWebhookUrl:
                  type: string
                  format: uri
                  description: >-
                    Callback URL executed after each task completion. MUST be
                    provided to continue receiving task notifications.
                  example: https://your-server.com/webhooks/task
                stepWebhookUrl:
                  type: string
                  format: uri
                  description: >-
                    Callback URL executed after each agent thought/action. MUST
                    be provided to continue receiving step notifications.
                  example: https://your-server.com/webhooks/step
                crewWebhookUrl:
                  type: string
                  format: uri
                  description: >-
                    Callback URL executed when the crew execution completes.
                    MUST be provided to receive completion notification.
                  example: https://your-server.com/webhooks/crew
            examples:
              approve_and_continue:
                summary: Approve task and continue execution
                value:
                  execution_id: abcd1234-5678-90ef-ghij-klmnopqrstuv
                  task_id: research_task
                  human_feedback: Excellent research! Proceed to the next task.
                  is_approve: true
                  taskWebhookUrl: https://api.example.com/webhooks/task
                  stepWebhookUrl: https://api.example.com/webhooks/step
                  crewWebhookUrl: https://api.example.com/webhooks/crew
              request_revision:
                summary: Request task revision with feedback
                value:
                  execution_id: abcd1234-5678-90ef-ghij-klmnopqrstuv
                  task_id: analysis_task
                  human_feedback: Please include more quantitative data and cite your sources.
                  is_approve: false
                  taskWebhookUrl: https://api.example.com/webhooks/task
                  crewWebhookUrl: https://api.example.com/webhooks/crew
      responses:
        '200':
          description: Execution resumed successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - resumed
                      - retrying
                      - completed
                    description: Status of the resumed execution
                    example: resumed
                  message:
                    type: string
                    description: Human-readable message about the resume operation
                    example: Execution resumed successfully
              examples:
                resumed:
                  summary: Execution resumed with positive feedback
                  value:
                    status: resumed
                    message: Execution resumed successfully
                retrying:
                  summary: Task will be retried with negative feedback
                  value:
                    status: retrying
                    message: Task will be retried with your feedback
        '400':
          description: Invalid request body or execution not in pending state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Invalid Request
                message: Execution is not in pending human input state
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          description: Execution ID or Task ID not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Not Found
                message: Execution ID not found
        '500':
          $ref: '#/components/responses/ServerError'
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: |
        **📋 Referência** - *Os tokens mostrados são apenas exemplos.*
        Use seus tokens reais do painel do CrewAI AMP.
  schemas:
    ExecutionRunning:
      type: object
      properties:
        status:
          type: string
          enum:
            - running
        current_task:
          type: string
        progress:
          type: object
          properties:
            completed_tasks:
              type: integer
            total_tasks:
              type: integer
    ExecutionCompleted:
      type: object
      properties:
        status:
          type: string
          enum:
            - completed
        result:
          type: object
          properties:
            output:
              type: string
            tasks:
              type: array
              items:
                $ref: '#/components/schemas/TaskResult'
        execution_time:
          type: number
    ExecutionError:
      type: object
      properties:
        status:
          type: string
          enum:
            - error
        error:
          type: string
        execution_time:
          type: number
    TaskResult:
      type: object
      properties:
        task_id:
          type: string
        output:
          type: string
        agent:
          type: string
        execution_time:
          type: number
    Error:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
    ValidationError:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        details:
          type: object
          properties:
            missing_inputs:
              type: array
              items:
                type: string
  responses:
    UnauthorizedError:
      description: Autenticação falhou
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFoundError:
      description: Recurso não encontrado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ServerError:
      description: Erro interno do servidor
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
