openapi: 3.0.3
info:
  title: CrewAI AMP API
  description: |
    REST API for interacting with your deployed CrewAI crews on CrewAI AMP.

    ## Getting Started

    1. **Find your crew URL**: Get your unique crew URL from the CrewAI AMP dashboard
    2. **Copy examples**: Use the code examples from each endpoint page as templates
    3. **Replace placeholders**: Update URLs and tokens with your actual values
    4. **Test with your tools**: Use cURL, Postman, or your preferred API client

    ## Authentication

    All API requests require a bearer token for authentication. There are two types of tokens:

    - **Bearer Token**: Organization-level token for full crew operations
    - **User Bearer Token**: User-scoped token for individual access with limited permissions

    You can find your bearer tokens in the Status tab of your crew's detail page in the CrewAI AMP dashboard.

    ## Reference Documentation

    This documentation provides comprehensive examples for each endpoint:

    - **Request formats** with all required and optional parameters
    - **Response examples** for success and error scenarios
    - **Code samples** in multiple programming languages
    - **Authentication patterns** with proper Bearer token usage

    Copy the examples and customize them with your actual crew URL and authentication tokens.

    ## Workflow

    1. **Discover inputs** using `GET /inputs`
    2. **Start execution** using `POST /kickoff`
    3. **Monitor progress** using `GET /status/{kickoff_id}`
  version: 1.0.0
  contact:
    name: CrewAI Support
    email: support@crewai.com
    url: https://crewai.com
servers:
  - url: https://your-actual-crew-name.crewai.com
    description: Replace with your actual deployed crew URL from the CrewAI AMP dashboard
  - url: https://my-travel-crew.crewai.com
    description: Example travel planning crew (replace with your URL)
  - url: https://content-creation-crew.crewai.com
    description: Example content creation crew (replace with your URL)
  - url: https://research-assistant-crew.crewai.com
    description: Example research assistant crew (replace with your URL)
security:
  - BearerAuth: []
paths:
  /inputs:
    get:
      summary: Get Required Inputs
      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.*

        Retrieves the list of all required input parameters that your crew expects for execution.
        Use this endpoint to discover what inputs you need to provide when starting a crew execution.
      operationId: getRequiredInputs
      responses:
        "200":
          description: Successfully retrieved required inputs
          content:
            application/json:
              schema:
                type: object
                properties:
                  inputs:
                    type: array
                    items:
                      type: string
                    description: Array of required input parameter names
                    example: ["budget", "interests", "duration", "age"]
              examples:
                travel_crew:
                  summary: Travel planning crew inputs
                  value:
                    inputs: ["budget", "interests", "duration", "age"]
                outreach_crew:
                  summary: Outreach crew inputs
                  value:
                    inputs:
                      [
                        "name",
                        "title",
                        "company",
                        "industry",
                        "our_product",
                        "linkedin_url",
                      ]
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          $ref: "#/components/responses/NotFoundError"
        "500":
          $ref: "#/components/responses/ServerError"

  /kickoff:
    post:
      summary: Start Crew Execution
      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.*

        Initiates a new crew execution with the provided inputs. Returns a kickoff ID that can be used
        to track the execution progress and retrieve results.

        Crew executions can take anywhere from seconds to minutes depending on their complexity.
        Consider using webhooks for real-time notifications or implement polling with the status endpoint.
      operationId: startCrewExecution
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - inputs
              properties:
                inputs:
                  type: object
                  description: Key-value pairs of all required inputs for your crew
                  additionalProperties:
                    type: string
                  example:
                    budget: "1000 USD"
                    interests: "games, tech, ai, relaxing hikes, amazing food"
                    duration: "7 days"
                    age: "35"
                meta:
                  type: object
                  description: Additional metadata to pass to the crew
                  additionalProperties: true
                  example:
                    requestId: "user-request-12345"
                    source: "mobile-app"
                taskWebhookUrl:
                  type: string
                  format: uri
                  description: Callback URL executed after each task completion
                  example: "https://your-server.com/webhooks/task"
                stepWebhookUrl:
                  type: string
                  format: uri
                  description: Callback URL executed after each agent thought/action
                  example: "https://your-server.com/webhooks/step"
                crewWebhookUrl:
                  type: string
                  format: uri
                  description: Callback URL executed when the crew execution completes
                  example: "https://your-server.com/webhooks/crew"
            examples:
              travel_planning:
                summary: Travel planning crew
                value:
                  inputs:
                    budget: "1000 USD"
                    interests: "games, tech, ai, relaxing hikes, amazing food"
                    duration: "7 days"
                    age: "35"
                  meta:
                    requestId: "travel-req-123"
                    source: "web-app"
              outreach_campaign:
                summary: Outreach crew with webhooks
                value:
                  inputs:
                    name: "John Smith"
                    title: "CTO"
                    company: "TechCorp"
                    industry: "Software"
                    our_product: "AI Development Platform"
                    linkedin_url: "https://linkedin.com/in/johnsmith"
                  taskWebhookUrl: "https://api.example.com/webhooks/task"
                  crewWebhookUrl: "https://api.example.com/webhooks/crew"
      responses:
        "200":
          description: Crew execution started successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  kickoff_id:
                    type: string
                    format: uuid
                    description: Unique identifier for tracking this execution
                    example: "abcd1234-5678-90ef-ghij-klmnopqrstuv"
        "400":
          description: Invalid request body or missing required inputs
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "422":
          description: Validation error - ensure all required inputs are provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ValidationError"
        "500":
          $ref: "#/components/responses/ServerError"

  /status/{kickoff_id}:
    get:
      summary: Get Execution Status
      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.*

        Retrieves the current status and results of a crew execution using its kickoff ID.

        The response structure varies depending on the execution state:
        - **running**: Execution in progress with current task info
        - **completed**: Execution finished with full results
        - **error**: Execution failed with error details
      operationId: getExecutionStatus
      parameters:
        - name: kickoff_id
          in: path
          required: true
          description: The kickoff ID returned from the /kickoff endpoint
          schema:
            type: string
            format: uuid
            example: "abcd1234-5678-90ef-ghij-klmnopqrstuv"
      responses:
        "200":
          description: Successfully retrieved execution status
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/ExecutionRunning"
                  - $ref: "#/components/schemas/ExecutionCompleted"
                  - $ref: "#/components/schemas/ExecutionError"
              examples:
                running:
                  summary: Execution in progress
                  value:
                    status: "running"
                    current_task: "research_task"
                    progress:
                      completed_tasks: 1
                      total_tasks: 3
                completed:
                  summary: Execution completed successfully
                  value:
                    status: "completed"
                    result:
                      output: "Comprehensive travel itinerary for 7 days in Japan focusing on tech culture..."
                      tasks:
                        - task_id: "research_task"
                          output: "Research findings on tech destinations in Japan..."
                          agent: "Travel Researcher"
                          execution_time: 45.2
                        - task_id: "planning_task"
                          output: "7-day detailed itinerary with activities and recommendations..."
                          agent: "Trip Planner"
                          execution_time: 62.8
                    execution_time: 108.5
                error:
                  summary: Execution failed
                  value:
                    status: "error"
                    error: "Task execution failed: Invalid API key for external service"
                    execution_time: 23.1
        "401":
          $ref: "#/components/responses/UnauthorizedError"
        "404":
          description: Kickoff ID not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              example:
                error: "Execution not found"
                message: "No execution found with ID: abcd1234-5678-90ef-ghij-klmnopqrstuv"
        "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: |
        **📋 Reference Documentation** - *The tokens shown in examples are placeholders for reference only.*

        Use your actual Bearer Token or User Bearer Token from the CrewAI AMP dashboard for real API calls.

        **Bearer Token**: Organization-level access for full crew operations
        **User Bearer Token**: User-scoped access with limited permissions

  schemas:
    ExecutionRunning:
      type: object
      properties:
        status:
          type: string
          enum: ["running"]
          example: "running"
        current_task:
          type: string
          description: Name of the currently executing task
          example: "research_task"
        progress:
          type: object
          properties:
            completed_tasks:
              type: integer
              description: Number of completed tasks
              example: 1
            total_tasks:
              type: integer
              description: Total number of tasks in the crew
              example: 3

    ExecutionCompleted:
      type: object
      properties:
        status:
          type: string
          enum: ["completed"]
          example: "completed"
        result:
          type: object
          properties:
            output:
              type: string
              description: Final output from the crew execution
              example: "Comprehensive travel itinerary..."
            tasks:
              type: array
              items:
                $ref: "#/components/schemas/TaskResult"
        execution_time:
          type: number
          description: Total execution time in seconds
          example: 108.5

    ExecutionError:
      type: object
      properties:
        status:
          type: string
          enum: ["error"]
          example: "error"
        error:
          type: string
          description: Error message describing what went wrong
          example: "Task execution failed: Invalid API key"
        execution_time:
          type: number
          description: Time until error occurred in seconds
          example: 23.1

    TaskResult:
      type: object
      properties:
        task_id:
          type: string
          description: Unique identifier for the task
          example: "research_task"
        output:
          type: string
          description: Output generated by this task
          example: "Research findings..."
        agent:
          type: string
          description: Name of the agent that executed this task
          example: "Travel Researcher"
        execution_time:
          type: number
          description: Time taken to execute this task in seconds
          example: 45.2

    Error:
      type: object
      properties:
        error:
          type: string
          description: Error type or title
          example: "Authentication Error"
        message:
          type: string
          description: Detailed error message
          example: "Invalid bearer token provided"

    ValidationError:
      type: object
      properties:
        error:
          type: string
          example: "Validation Error"
        message:
          type: string
          example: "Missing required inputs"
        details:
          type: object
          properties:
            missing_inputs:
              type: array
              items:
                type: string
              example: ["budget", "interests"]

  responses:
    UnauthorizedError:
      description: Authentication failed - check your bearer token
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            error: "Unauthorized"
            message: "Invalid or missing bearer token"

    NotFoundError:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            error: "Not Found"
            message: "The requested resource was not found"

    ServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
          example:
            error: "Internal Server Error"
            message: "An unexpected error occurred"
