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

# Create Asset

> Create a new asset



## OpenAPI

````yaml https://api.oviond.com/openapi.json post /v1/assets
openapi: 3.1.0
info:
  title: Oviond Backend API
  version: 1.0.0
  description: Authentication, account management, billing, and media services for Oviond.
  x-logo:
    url: https://app.oviond.com/img/oviond-full-logo.svg
    altText: Oviond
servers:
  - url: https://api.oviond.com
    description: Production
security:
  - ApiKeyAuth: []
  - BearerAuth: []
paths:
  /v1/assets:
    post:
      tags:
        - Assets
      summary: Create Asset
      description: Create a new asset
      operationId: create_asset
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAssetRequest'
      responses:
        '201':
          description: Asset created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAssetResponse'
components:
  schemas:
    CreateAssetRequest:
      type: object
      properties:
        name:
          type: string
          minLength: 1
          example: GA4 Traffic Widget
        description:
          type: string
        type:
          type: string
          example: chart
        tags:
          type: array
          items:
            type: string
        datasources:
          type: array
          items:
            type: string
        is_recommended:
          type: boolean
        widgets:
          type: array
          items:
            $ref: '#/components/schemas/CreateWidgetItem'
      required:
        - name
        - type
    CreateAssetResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          type: object
          properties:
            id:
              type: string
          required:
            - id
      required:
        - success
        - data
    CreateWidgetItem:
      type: object
      properties:
        source_type:
          type:
            - string
            - 'null'
          enum:
            - project
            - template
        source_id:
          type:
            - string
            - 'null'
        page_id:
          type:
            - string
            - 'null'
        client_id:
          type:
            - string
            - 'null'
        type:
          type:
            - string
            - 'null'
          enum:
            - DATA
            - TEXT
            - IMAGE
            - HTML
            - VIDEO
            - EMBED
            - TITLE
            - BUTTON
            - GOAL
        chart:
          type:
            - string
            - 'null'
          enum:
            - table
            - score
            - area
            - line
            - bar
            - column
            - pie
            - donut
            - funnel
            - map
            - areaspline
            - spline
            - stacked_area
            - percentage_area
            - stacked_column
            - stacked_bar
            - 100_stacked_column
            - 3d_bar
            - 3d_column
            - 3d_pie
            - 3d_donut
            - funnel3d
            - custom
        chart_type:
          type:
            - string
            - 'null'
          enum:
            - table
            - score
            - area
            - line
            - bar
            - column
            - pie
            - donut
            - funnel
            - map
            - areaspline
            - spline
            - stacked_area
            - percentage_area
            - stacked_column
            - stacked_bar
            - 100_stacked_column
            - 3d_bar
            - 3d_column
            - 3d_pie
            - 3d_donut
            - funnel3d
            - custom
        chart_group:
          type:
            - string
            - 'null'
          enum:
            - line
            - area
            - bar
            - pie
            - funnel
            - table
            - score
            - map
            - column
            - donut
            - column_bar_charts
            - line_area_charts
            - pie_donut_charts
            - scorecard
        state:
          type:
            - string
            - 'null'
          enum:
            - loading
            - LOADING
            - active
            - ACTIVE
            - error
            - ERROR
            - NO_DATA
            - demo
            - DEMO
        title:
          type:
            - string
            - 'null'
        text:
          type:
            - string
            - 'null'
        name:
          type:
            - string
            - 'null'
        auto_generated_name:
          type:
            - string
            - 'null'
        heading:
          type:
            - string
            - 'null'
          enum:
            - h1
            - h2
            - h3
            - h4
            - h5
        align:
          type:
            - string
            - 'null'
          enum:
            - left
            - center
            - right
            - justify
        link:
          type:
            - string
            - 'null'
        link_url:
          type:
            - string
            - 'null'
        image_fit:
          type:
            - string
            - 'null'
          enum:
            - object-contain
            - object-cover
            - object-fill
            - object-none
        embed_type:
          type:
            - string
            - 'null'
          enum:
            - URL
            - IFRAME
            - HTML
        embed_url:
          type:
            - string
            - 'null'
        embed_iframe:
          type:
            - string
            - 'null'
        embed_html:
          type:
            - string
            - 'null'
        size:
          type:
            - string
            - 'null'
        description:
          type:
            - string
            - 'null'
        content:
          type:
            - string
            - 'null'
        src:
          type:
            - string
            - 'null'
        url:
          type:
            - string
            - 'null'
        icon:
          type:
            - string
            - 'null'
        target:
          type:
            - string
            - 'null'
        image_link_url:
          type:
            - string
            - 'null'
        x:
          type:
            - number
            - 'null'
        'y':
          type:
            - number
            - 'null'
        width:
          type:
            - number
            - 'null'
        height:
          type:
            - number
            - 'null'
        is_secondary:
          type:
            - boolean
            - 'null'
        icon_position:
          type:
            - string
            - 'null'
          enum:
            - top
            - right
            - bottom
            - left
            - none
        options_3d:
          type:
            - boolean
            - 'null'
        kpi:
          type:
            - boolean
            - 'null'
        blended:
          type:
            - boolean
            - 'null'
        row_limit:
          type:
            - string
            - 'null'
          enum:
            - '5'
            - '10'
            - '25'
            - '50'
            - '100'
            - '500'
            - all
        comparison_display:
          type:
            - string
            - 'null'
          enum:
            - previous
            - change
            - both
        sort_order:
          type:
            - string
            - 'null'
        sort_by:
          type:
            - string
            - 'null'
        column_widths:
          type:
            - object
            - 'null'
          additionalProperties:
            type: number
        b_height:
          type:
            - string
            - 'null'
        legend_position:
          type:
            - string
            - 'null'
          enum:
            - top
            - right
            - bottom
            - left
            - none
        invert_y_axis:
          type:
            - boolean
            - 'null'
        show_header:
          type:
            - boolean
            - 'null'
        show_name:
          type:
            - boolean
            - 'null'
        show_icon:
          type:
            - boolean
            - 'null'
        show_date:
          type:
            - boolean
            - 'null'
        show_grid_lines:
          type:
            - boolean
            - 'null'
        show_legends:
          type:
            - boolean
            - 'null'
        show_x_axis:
          type:
            - boolean
            - 'null'
        show_y_axis:
          type:
            - boolean
            - 'null'
        show_trendline:
          type:
            - boolean
            - 'null'
        show_totals:
          type:
            - boolean
            - 'null'
        show_search:
          type:
            - boolean
            - 'null'
        show_table_filters:
          type:
            - boolean
            - 'null'
        show_logarithmic:
          type:
            - boolean
            - 'null'
        show_multiple_axes:
          type:
            - boolean
            - 'null'
        show_custom_date_range:
          type:
            - boolean
            - 'null'
        show_description:
          type:
            - boolean
            - 'null'
        show_container:
          type:
            - boolean
            - 'null'
        show_label_list:
          type:
            - boolean
            - 'null'
        show_chart:
          type:
            - boolean
            - 'null'
        expand_rows:
          type:
            - boolean
            - 'null'
        datasource_id:
          type:
            - string
            - 'null'
          enum:
            - advanced-web-ranking
            - ac
            - adroll
            - ahrefs
            - basecamp
            - brightlocal
            - call-rail
            - drip
            - keywords
            - sendin-blue
            - sendgrid
            - moosend
            - mailer-lite
            - pingdom
            - uptime-robot
            - piwik-pro
            - wordpress
            - pabbly-connect
            - ment
            - twilio
            - switchy
            - vimeo
            - pinterest
            - pinterest-ads
            - gtres
            - paypal
            - gps
            - gs
            - CUSTOM_IMPORT
            - CUSTOM_DATA
            - CALCULATION
            - GOALS
            - str
            - wistia
            - ca-mon
            - convertkit
            - woocommerce
            - xero
            - matomo
            - go-high-level
            - wcs
            - bing-webmaster-tools
            - pipedrive
            - salesforce
            - tiktok
            - tiktok-ads
            - twr
            - twr-ads
            - spf
            - ytbe
            - google-local-services-ads
            - klaviyo
            - gsh
            - ga4
            - lkdin-ads
            - lkdin-pg
            - mlchmp
            - inst-ads
            - inst
            - fb-ads
            - fb-pg
            - gmb
            - serpstat
            - hubspot
            - gadw
            - sem-rush
            - se-ranking
            - microsoft-ads
            - plausible
            - snapchat-ads
            - amazon-advertising
            - microsoft-clarity
            - serp-watch
            - vbout
            - moz
            - chatgpt-ads
            - demo
        datasource_type:
          type:
            - string
            - 'null'
          enum:
            - DATASOURCE
            - CALCULATION
            - CUSTOM_DATA
            - CUSTOM_IMPORT
            - GOALS
        data_view:
          type:
            - string
            - 'null'
        metrics:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/MetricSelection'
        dimensions:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DimensionSelection'
        filters:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/WidgetFilter'
        advanced:
          type:
            - object
            - 'null'
          additionalProperties: {}
        currency:
          $ref: '#/components/schemas/CurrencyInput'
        date_range:
          allOf:
            - $ref: '#/components/schemas/DateRange'
            - type:
                - object
                - 'null'
        current_data:
          type:
            - array
            - 'null'
          items:
            type: object
            additionalProperties: {}
        current_summary:
          type:
            - object
            - 'null'
          additionalProperties: {}
        previous_data:
          type:
            - array
            - 'null'
          items:
            type: object
            additionalProperties: {}
        previous_summary:
          type:
            - object
            - 'null'
          additionalProperties: {}
        series_fetched_at:
          type:
            - string
            - 'null'
        created_at: {}
        id:
          type: string
        account_id:
          type:
            - string
            - 'null'
      required:
        - id
      additionalProperties: false
    MetricSelection:
      type: object
      properties:
        value:
          type: string
        label:
          type: string
        data_view:
          type: string
      required:
        - value
    DimensionSelection:
      type: object
      properties:
        value:
          type: string
        label:
          type: string
        data_view:
          type: string
      required:
        - value
    WidgetFilter:
      type: object
      properties:
        id:
          anyOf:
            - type: number
            - type: string
        field:
          type: string
          example: sessionMedium
        operator:
          type: string
          description: >-
            Canonical: equals, not_equals, contains, not_contains, starts_with,
            ends_with, greater_than, less_than, greater_than_or_equal,
            less_than_or_equal (vendor tokens also accepted).
          example: contains
        value:
          anyOf:
            - type: string
            - type: number
            - type: boolean
            - type: array
              items: {}
          example: cpc
        logicalOperator:
          type: string
          enum:
            - and
            - or
    CurrencyInput:
      anyOf:
        - type: object
          properties:
            code:
              type: string
              pattern: ^[A-Z]{3}$
              example: USD
            symbol:
              type: string
              example: $
            iso:
              type:
                - string
                - 'null'
              pattern: ^[A-Z]{2}$
              example: US
          required:
            - code
            - symbol
        - type: string
        - type: 'null'
      description: >-
        ISO 4217 currency code (e.g. "USD") or a full { code, symbol, iso }
        object.
    DateRange:
      type: object
      properties:
        text:
          type: string
          enum:
            - Today
            - Yesterday
            - Last 7 Days
            - Last 30 Days
            - Last 60 Days
            - Custom Days
            - This Month
            - Last Month
            - Custom Months
            - Last 2 Months
            - Last 3 Months
            - Last 12 Months
            - This Year
            - Last Year
            - Custom
          example: Last 30 Days
        compare:
          type: string
          enum:
            - None
            - Period
            - Month
            - Year
            - Custom
          example: None
        include_today:
          type: boolean
          example: false
        current_start:
          type: string
          example: '2026-03-01'
        current_end:
          type: string
          example: '2026-03-31'
        previous_start:
          type: string
          example: '2026-02-01'
        previous_end:
          type: string
          example: '2026-02-28'
        custom_days:
          type: number
          example: 60
        custom_months:
          type: number
          example: 3
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Oviond API key (prefix `oviond_`) sent as a Bearer token — the
        credential for REST/programmatic and headless integrations. Manage keys
        in Settings → API Keys. API keys do NOT authenticate the MCP endpoint
        (/mcp), which uses OAuth 2.1 + PKCE.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Supabase-issued JWT used by the Oviond web app session. External API
        consumers should authenticate with an Oviond API key (ApiKeyAuth)
        instead.

````