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

# Create add-on

> Creates a new add-on for your organization with JavaScript resource file and optional SVG icon. The add-on extends functionality within the app for your organization.



## OpenAPI

````yaml /openapi/public/openapi-setting.json post /addon
openapi: 3.0.0
info:
  title: API - Setting
  version: 3.0.0
  description: API Documentation - RESTful API for field operations management.
servers:
  - url: https://apiweb.mile.app/api/v3
security:
  - bearerAuth: []
tags:
  - name: User
    description: >-
      User data includes information contained within a user account, such as
      details that define a user's hub access and role within the system. Hub
      access determines the locations or areas of the application a user can
      access or the specific actions they can perform. User attributes consist
      of the user ID, name, email, and status.


      The app provides five predefined user roles, and you can create custom
      roles based on your organization's needs. The predefined roles are
      **Owner, Admin, Planner, and Field user**. A user can only hold one role
      at a time but can be granted access to multiple hubs.
  - name: Team
    description: >-
      This API allows you to manage teams. It serves as a tool to effectively
      manage and restrict user task assignments within your organization.


      **To see the details of team object, please follow [this
      link](#tag/team_model)**
  - name: Role
    description: >-
      This API enables you to retrieve a list of predefined roles and any custom
      roles associated with your account. By making a GET request to this API,
      you can obtain information about the available roles within the system.
      The predefined roles refer to a set of role types that are already defined
      by the system. In this particular case, the predefined roles include
      Finance, Owner, Planner, Admin, and Field User. Additionally, the API may
      also return any custom roles that have been created within your account.


      **To see the details of role object, please follow [this
      link](#tag/role_model)**
  - name: Hub
    description: >-
      In our system, a Hub is a fundamental entity within an organization,
      serving as the central point for managing various operational components.
      It acts as the parent structure for a wide range of resources and
      functionalities, including tasks, visits, users, vehicles, routing
      results, routing configurations, and data sources.


      **To see the details of hub object, please follow [this
      link](#tag/hub_model)**


      ## Conceptual Understanding of Hubs


      - **User Perspective:** For users, a Hub represents their headquarters or
      primary working area. It is where they carry out their daily activities
      and manage their tasks effectively. Each user interacts with the Hub to
      access resources and perform operations specific to their roles.


      - **Task Perspective:** From the perspective of task management, the Hub
      signifies the working area for tasks. It is the location where tasks are
      initiated, monitored, and completed. The Hub facilitates organization and
      efficiency in task execution.


      - **Routing Perspective:** In the context of routing and logistics, a Hub
      serves as a critical location for vehicles. It is where vehicles begin
      their routes, return after completing their journeys, and may make
      strategic stops along the way. The routing module relies on the Hub to
      optimize vehicle assignments and manage routes effectively.
  - name: App Integration
    description: >-
      This API allows you to manage Integration of enterprise app. Currently
      available for Azure.


      **To see the details of integration object, please follow [this
      link](#tag/app_integration_model)**
  - name: Plugin
    description: >-
      The Plugin API allows developers to create and manage custom add-ons
      within the app. Plugins enable dynamic functionality through JavaScript
      resources and custom icons, allowing organizations to extend platform
      capabilities with custom features and integrations.


      **To see the details of plugin object, please follow [this
      link](#tag/plugin_model)**
  - name: Organization
    description: >-
      Organization management endpoints for configuring organization-level
      settings and preferences.
  - name: Addon
    description: Addon endpoints
  - name: Custom Module
    description: >-
      A "custom module" is like a personalized menu option in MileApp. It's
      something you can create and customize to make it easy to access specific
      features or content.
  - name: Password Policy
    description: >-
      Password Policy endpoints for configuring password requirements and
      security policies for your organization.
  - name: Trash
    description: >-
      Trash lists items that were deleted from your organization, so you can see
      what was removed and when.
paths:
  /addon:
    post:
      tags:
        - Addon
      summary: Create add-on
      description: >-
        Creates a new add-on for your organization with JavaScript resource file
        and optional SVG icon. The add-on extends functionality within the app
        for your organization.
      operationId: createAddon
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                name:
                  description: >-
                    Name of the add-on (3-100 characters, must be unique within
                    your organization)
                  type: string
                  minLength: 3
                  maxLength: 100
                description:
                  type: string
                resourceFile:
                  description: >-
                    JavaScript file (.js) containing the add-on code (max 5MB).
                    Must contain valid JavaScript syntax.
                  type: string
                  format: binary
                icon:
                  description: SVG icon file (.svg) for the add-on (max 500KB, optional)
                  type: string
                  format: binary
              required:
                - name
                - description
                - resourceFile
        required: true
      responses:
        '201':
          description: Add-on created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddonCreateResponse'
        '400':
          description: Bad Request - Validation failed or invalid parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - Invalid or missing access token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict - Add-on name already exists in organization
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Payload Too Large - File size exceeds maximum limit
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '415':
          description: >-
            Unsupported Media Type - Invalid file type (only .js and .svg
            allowed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity - JavaScript file contains syntax errors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Too Many Requests - Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      deprecated: false
      security:
        - bearerAuth: []
components:
  schemas:
    AddonCreateResponse:
      type: object
      properties:
        status:
          type: boolean
          description: Operation success status
          example: true
        message:
          type: string
          description: Success message
          example: Add-on created successfully
        data:
          $ref: '#/components/schemas/Addon'
      required:
        - status
        - message
        - data
    ErrorResponse:
      title: ErrorResponse
      type: object
      description: Standard error response structure
      properties:
        status:
          type: boolean
          description: Always false for error responses
        message:
          type: string
          description: Human-readable error message
        failedCode:
          type: string
          description: Error code for debugging and error tracking
      required:
        - status
        - message
    Addon:
      type: object
      properties:
        id:
          type: string
          description: >-
            Unique add-on identifier (MongoDB ObjectId). **Example**:
            `68b440c9dad4c5d45707f6d2`
        name:
          type: string
          description: >-
            Add-on display name (3-100 characters). **Example**: `Custom
            Dashboard Widget`
        description:
          type: string
        resourceFile:
          type: string
          description: >-
            Original filename of the JavaScript resource. **Example**:
            `1756656087_Custom-Dashboard-Widget.js`
        icon:
          type: string
          nullable: true
          description: >-
            Full URL to the add-on icon (if available). **Example**:
            `https://cdn.mile.app/plugins/icons/1756656087_dashboard-widget.svg`
        organizationId:
          type: string
          description: >-
            Organization identifier. 'system' for global add-ons, organization
            ID for custom add-ons. **Example**: `686cc0ff083ca8093204f002` or
            `system`
        resourceUrl:
          type: string
          description: >-
            Full URL where the JavaScript resource is hosted. **Example**:
            `https://cdn.mile.app/plugins/2025/08/31/686cc0ff083ca8093204f002/1756656087_Custom-Dashboard-Widget.js`
        createdBy:
          type: string
          description: >-
            Email address of the user who created the add-on. **Example**:
            `user@example.com`
        updatedBy:
          type: string
          nullable: true
          description: >-
            Email address of the user who last updated the add-on. May be null
            if never updated. **Example**: `user@example.com`
        createdTime:
          type: string
          format: date-time
          description: >-
            ISO 8601 timestamp when the add-on was created. **Format**:
            `YYYY-MM-DDTHH:mm:ss.ffffffZ`. **Example**:
            `2025-08-31T10:30:00.000000Z`
        updatedTime:
          type: string
          format: date-time
          description: >-
            ISO 8601 timestamp when the add-on was last updated. **Format**:
            `YYYY-MM-DDTHH:mm:ss.ffffffZ`. **Example**:
            `2025-08-31T10:35:00.000000Z`
        organizationName:
          type: string
          description: >-
            Organization display name. 'Global' for system add-ons, actual
            organization name for custom add-ons. **Example**: `Acme Logistics`
            or `Global`
        isUsed:
          type: boolean
          description: >-
            Indicates if the add-on is currently active/installed in your
            organization. **Example**: `false`
        isPublished:
          type: boolean
          description: >-
            Whether the add-on is published and visible to client users. Only
            applicable to system (global) add-ons.
          example: true
        customModuleId:
          type: string
          nullable: true
          description: >-
            ID of associated custom module or null if standalone. **Example**:
            `null` or `62846484ed5be87b6f4358f3`
      required:
        - id
        - name
        - description
        - resourceFile
        - organizationId
        - resourceUrl
        - createdBy
        - createdTime
        - updatedTime
        - organizationName
        - isUsed
      example:
        id: 68b440c9dad4c5d45707f6d2
        name: Custom Dashboard Widget
        description: A custom widget for displaying real-time analytics data
        resourceFile: 1756656087_Custom-Dashboard-Widget.js
        icon: https://cdn.mile.app/plugins/icons/1756656087_dashboard-widget.svg
        organizationId: 686cc0ff083ca8093204f002
        resourceUrl: >-
          https://cdn.mile.app/plugins/2025/08/31/686cc0ff083ca8093204f002/1756656087_Custom-Dashboard-Widget.js
        createdBy: user@example.com
        updatedBy: user@example.com
        createdTime: '2025-08-31T10:30:00.000000Z'
        updatedTime: '2025-08-31T10:35:00.000000Z'
        organizationName: Acme Logistics
        isUsed: false
        isPublished: true
        customModuleId: null
        status: active
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Use a valid Bearer token to authenticate.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.