BrightEdge Technologies product_grid API
APIs for product grid
APIs for product grid
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/brightedge-technologies-product-grid-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: BrightEdge Platform Product Grid API
description: This API provides the ability to integrate with BrightEdge Platform
version: 5.0.0
tags:
- name: product_grid
description: APIs for product grid
paths:
/5.0/productgrid/info:
post:
tags:
- product_grid
summary: Test
operationId: info_5_0_productgrid_info_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/keywords:
post:
tags:
- product_grid
summary: Get keyword metrics data
operationId: get_keyword_metrics_5_0_productgrid_keywords_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsMetricsInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordMetricsResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/keyword_groups:
post:
tags:
- product_grid
summary: Get keyword group metrics data
operationId: get_keyword_group_metrics_5_0_productgrid_keyword_groups_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordGroupMetricsInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordGroupMetricsResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/top_sellers/trend_chart:
post:
tags:
- product_grid
summary: Get keyword top sellers trend chart
description: Get top sellers trend chart data for a given account and time range.
operationId: get_top_sellers_trend_chart_5_0_productgrid_top_sellers_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopSellersTrendChartInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TopSellersTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/presence/trend_chart:
post:
tags:
- product_grid
summary: Get presence breakdown info
operationId: get_product_grid_presence_trend_chart_5_0_productgrid_presence_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PresenceTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/grid_types/trend_chart:
post:
tags:
- product_grid
summary: Get grid types breakdown info
operationId: get_grid_types_trend_chart_5_0_productgrid_grid_types_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/GridTypesTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/top_products/trend_chart:
post:
tags:
- product_grid
summary: Get keyword top products trend chart
description: Get top products trend chart data for a given account and time range.
operationId: get_top_products_trend_chart_5_0_productgrid_top_products_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopProductsTrendChartInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TopProductsTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/keywords_with_product_grid_presence:
post:
tags:
- product_grid
summary: Get keywords with product grid presence info
operationId: get_keywords_with_product_grid_presence_5_0_productgrid_keywords_with_product_grid_presence_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/keywords/export:
post:
tags:
- product_grid
summary: Export keyword metrics data as CSV
description: Export keyword metrics data as CSV with specified columns.
operationId: export_keyword_metrics_csv_5_0_productgrid_keywords_export_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CSVKeywordMetricsExportRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/5.0/productgrid/keyword_groups/export:
post:
tags:
- product_grid
summary: Export keyword group metrics data as CSV
description: Export keyword group metrics data as CSV with specified columns.
operationId: export_keyword_group_metrics_csv_5_0_productgrid_keyword_groups_export_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CSVKeywordGroupMetricsExportRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/info:
post:
tags:
- product_grid
summary: Test
operationId: info_latest5_productgrid_info_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/keywords:
post:
tags:
- product_grid
summary: Get keyword metrics data
operationId: get_keyword_metrics_latest5_productgrid_keywords_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsMetricsInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordMetricsResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/keyword_groups:
post:
tags:
- product_grid
summary: Get keyword group metrics data
operationId: get_keyword_group_metrics_latest5_productgrid_keyword_groups_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordGroupMetricsInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordGroupMetricsResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/top_sellers/trend_chart:
post:
tags:
- product_grid
summary: Get keyword top sellers trend chart
description: Get top sellers trend chart data for a given account and time range.
operationId: get_top_sellers_trend_chart_latest5_productgrid_top_sellers_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopSellersTrendChartInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TopSellersTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/presence/trend_chart:
post:
tags:
- product_grid
summary: Get presence breakdown info
operationId: get_product_grid_presence_trend_chart_latest5_productgrid_presence_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PresenceTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/grid_types/trend_chart:
post:
tags:
- product_grid
summary: Get grid types breakdown info
operationId: get_grid_types_trend_chart_latest5_productgrid_grid_types_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/GridTypesTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/top_products/trend_chart:
post:
tags:
- product_grid
summary: Get keyword top products trend chart
description: Get top products trend chart data for a given account and time range.
operationId: get_top_products_trend_chart_latest5_productgrid_top_products_trend_chart_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopProductsTrendChartInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TopProductsTrendChartResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/keywords_with_product_grid_presence:
post:
tags:
- product_grid
summary: Get keywords with product grid presence info
operationId: get_keywords_with_product_grid_presence_latest5_productgrid_keywords_with_product_grid_presence_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceInputModel'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceResult'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/keywords/export:
post:
tags:
- product_grid
summary: Export keyword metrics data as CSV
description: Export keyword metrics data as CSV with specified columns.
operationId: export_keyword_metrics_csv_latest5_productgrid_keywords_export_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CSVKeywordMetricsExportRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
/latest5/productgrid/keyword_groups/export:
post:
tags:
- product_grid
summary: Export keyword group metrics data as CSV
description: Export keyword group metrics data as CSV with specified columns.
operationId: export_keyword_group_metrics_csv_latest5_productgrid_keyword_groups_export_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CSVKeywordGroupMetricsExportRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- http_basic: []
- forwarded_http_basic: []
- session_cookie: []
- session_header: []
components:
schemas:
PaginationInput:
properties:
limit:
type: integer
title: Limit
default: 30000
offset:
type: integer
title: Offset
default: 0
type: object
title: PaginationInput
description: Pagination input model.
TopProductsTrendChartResult:
properties:
data:
items:
type: object
type: array
title: Data
total:
type: integer
title: Total
type: object
required:
- data
- total
title: TopProductsTrendChartResult
KeywordsWithProductGridPresenceResult:
properties:
data:
items:
$ref: '#/components/schemas/KeywordsWithProductGridPresenceItem'
type: array
title: Data
type: object
required:
- data
title: KeywordsWithProductGridPresenceResult
description: Keywords with product grid presence item model.
TopSellersTrendChartResult:
properties:
data:
items:
type: object
type: array
title: Data
total:
type: integer
title: Total
type: object
required:
- data
- total
title: TopSellersTrendChartResult
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
KeywordMetricsResult:
properties:
data:
items:
$ref: '#/components/schemas/KeywordMetricsItem'
type: array
title: Data
total:
type: integer
title: Total
branded_keywords:
type: integer
title: Branded Keywords
non_branded_keywords:
type: integer
title: Non Branded Keywords
type: object
required:
- data
- total
title: KeywordMetricsResult
CSVKeywordMetricsExportRequest:
properties:
body:
$ref: '#/components/schemas/KeywordsMetricsInputModel'
columns:
items:
$ref: '#/components/schemas/ColumnConfig'
type: array
title: Columns
type: object
required:
- body
- columns
title: CSVKeywordMetricsExportRequest
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
KeywordMetricsItem:
properties:
id:
type: integer
title: Id
keyword:
type: string
title: Keyword
group_titles:
items:
type: string
type: array
title: Group Titles
stores:
items:
type: string
type: array
title: Stores
search_volume:
type: integer
title: Search Volume
search_volume_diff:
type: integer
title: Search Volume Diff
search_volume_diffpercent:
type: number
title: Search Volume Diffpercent
clicks:
type: integer
title: Clicks
clicks_diff:
type: integer
title: Clicks Diff
clicks_diffpercent:
type: number
title: Clicks Diffpercent
blended_rank:
type: number
title: Blended Rank
blended_rank_diff:
type: number
title: Blended Rank Diff
blended_rank_diffpercent:
type: number
title: Blended Rank Diffpercent
tile_rank:
type: number
title: Tile Rank
tile_rank_diff:
type: number
title: Tile Rank Diff
tile_rank_diffpercent:
type: number
title: Tile Rank Diffpercent
domain_presence_product_grids_count:
type: integer
title: Domain Presence Product Grids Count
total_product_grid_presence_count:
type: integer
title: Total Product Grid Presence Count
domain_presence_top_grid_rank:
type: integer
title: Domain Presence Top Grid Rank
domain_presence_top_grid_rank_diff:
type: integer
title: Domain Presence Top Grid Rank Diff
domain_presence_top_grid_rank_prev:
type: integer
title: Domain Presence Top Grid Rank Prev
grid_presence_ratio:
type: number
title: Grid Presence Ratio
type: object
required:
- id
- keyword
- group_titles
- stores
- search_volume
- search_volume_diff
- search_volume_diffpercent
- clicks
- clicks_diff
- clicks_diffpercent
- blended_rank
- blended_rank_diff
- blended_rank_diffpercent
- tile_rank
- tile_rank_diff
- tile_rank_diffpercent
- domain_presence_product_grids_count
- total_product_grid_presence_count
- domain_presence_top_grid_rank
- domain_presence_top_grid_rank_diff
- domain_presence_top_grid_rank_prev
- grid_presence_ratio
title: KeywordMetricsItem
description: Keyword metrics item model.
GridTypesTrendChartTimeItem:
properties:
time:
type: integer
title: Time
keywords:
type: integer
title: Keywords
type: object
required:
- time
- keywords
title: GridTypesTrendChartTimeItem
description: Grid types trend chart time item model.
CSVKeywordGroupMetricsExportRequest:
properties:
body:
$ref: '#/components/schemas/KeywordGroupMetricsInputModel'
columns:
items:
$ref: '#/components/schemas/ColumnConfig'
type: array
title: Columns
type: object
required:
- body
- columns
title: CSVKeywordGroupMetricsExportRequest
KeywordGroupMetricsItem:
properties:
keywordgroup:
type: string
title: Keywordgroup
keyword_group_id:
type: integer
title: Keyword Group Id
time:
type: integer
title: Time
parent_keyword_group_id:
type: integer
title: Parent Keyword Group Id
search_volume:
type: integer
title: Search Volume
avg_volume:
type: integer
title: Avg Volume
clicks:
type: integer
title: Clicks
product_grid_count:
type: number
title: Product Grid Count
blended_rank:
type: number
title: Blended Rank
tile_rank:
type: number
title: Tile Rank
search_volume_previous_value:
type: integer
title: Search Volume Previous Value
clicks_previous_value:
type: integer
title: Clicks Previous Value
product_grid_count_previous_value:
type: number
title: Product Grid Count Previous Value
tile_rank_previous_value:
type: number
title: Tile Rank Previous Value
search_volume_diff:
type: integer
title: Search Volume Diff
clicks_diff:
type: integer
title: Clicks Diff
product_grid_count_diff:
type: integer
title: Product Grid Count Diff
blended_rank_diff:
type: number
title: Blended Rank Diff
tile_rank_diff:
type: number
title: Tile Rank Diff
search_volume_diffpercent:
type: number
title: Search Volume Diffpercent
clicks_diffpercent:
type: number
title: Clicks Diffpercent
product_grid_count_diffpercent:
type: number
title: Product Grid Count Diffpercent
blended_rank_diffpercent:
type: number
title: Blended Rank Diffpercent
tile_rank_diffpercent:
type: number
title: Tile Rank Diffpercent
both_no_product_grid_and_regular_listing_diffpercent:
type: number
title: Both No Product Grid And Regular Listing Diffpercent
regular_listing_only_diffpercent:
type: number
title: Regular Listing Only Diffpercent
product_grid_only_diffpercent:
type: number
title: Product Grid Only Diffpercent
both_product_grid_and_regular_listing_diffpercent:
type: number
title: Both Product Grid And Regular Listing Diffpercent
keywords_count:
type: integer
title: Keywords Count
keywords_count_previous_value:
type: integer
title: Keywords Count Previous Value
keywords_count_diff:
type: integer
title: Keywords Count Diff
keywords_count_diffpercent:
type: number
title: Keywords Count Diffpercent
opportunity_count:
type: number
title: Opportunity Count
opportunity_count_previous_value:
type: number
title: Opportunity Count Previous Value
product_grid_coverage_percentage:
type: number
title: Product Grid Coverage Percentage
product_grid_coverage_percentage_previous_value:
type: number
title: Product Grid Coverage Percentage Previous Value
product_grid_rank1_count:
type: number
title: Product Grid Rank1 Count
product_grid_rank1_count_previous_value:
type: number
title: Product Grid Rank1 Count Previous Value
product_grid_rank1_count_diff:
type: number
title: Product Grid Rank1 Count Diff
product_grid_rank1_count_diffpercent:
type: number
title: Product Grid Rank1 Count Diffpercent
avg_top_grid_rank:
type: number
title: Avg Top Grid Rank
avg_top_grid_rank_previous_value:
type: number
title: Avg Top Grid Rank Previous Value
avg_top_grid_rank_diff:
type: number
title: Avg Top Grid Rank Diff
avg_top_grid_rank_diffpercent:
type: number
title: Avg Top Grid Rank Diffpercent
avg_grid_count:
type: number
title: Avg Grid Count
domain_product_grid_count:
type: number
title: Domain Product Grid Count
search_volume_with_domain_presence:
type: number
title: Search Volume With Domain Presence
search_volume_with_domain_presence_prev:
type: number
title: Search Volume With Domain Presence Prev
avg_grid_count_with_domain_presence:
type: number
title: Avg Grid Count With Domain Presence
type: object
required:
- keywordgroup
- keyword_group_id
- time
- parent_keyword_group_id
- search_volume
- avg_volume
- clicks
- product_grid_count
- blended_rank
- tile_rank
- search_volume_previous_value
- clicks_previous_value
- product_grid_count_previous_value
- tile_rank_previous_value
- search_volume_diff
- clicks_diff
- product_grid_count_diff
- blended_rank_diff
- tile_rank_diff
- search_volume_diffpercent
- clicks_diffpercent
- product_grid_count_diffpercent
- blended_rank_diffpercent
- tile_rank_diffpercent
- both_no_product_grid_and_regular_listing_diffpercent
- regular_listing_only_diffpercent
- product_grid_only_diffpercent
- both_product_grid_and_regular_listing_diffpercent
- keywords_count
- keywords_count_previous_value
- keywords_count_diff
- keywords_count_diffpercent
- opportunity_count
- opportunity_count_previous_value
- product_grid_coverage_percentage
- product_grid_coverage_percentage_previous_value
- product_grid_rank1_count
- product_grid_rank1_count_previous_value
- product_grid_rank1_count_diff
- product_grid_rank1_count_diffpercent
- avg_top_grid_rank
- avg_top_grid_rank_previous_value
- avg_top_grid_rank_diff
- avg_top_grid_rank_diffpercent
- avg_grid_count
- domain_product_grid_count
- search_volume_with_domain_presence
- search_volume_with_domain_presence_prev
- avg_grid_count_with_domain_presence
title: KeywordGroupMetricsItem
GridTypesTrendChartResult:
properties:
data:
items:
$ref: '#/components/schemas/GridTypesTrendChartTypeItem'
type: array
title: Data
total:
type: integer
title: Total
type: object
required:
- data
- total
title: GridTypesTrendChartResult
description: Grid types trend chart result model.
KeywordsWithProductGridPresenceInputModel:
properties:
account_id:
type:
# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/brightedge-technologies/refs/heads/main/openapi/brightedge-technologies-product-grid-api-openapi.yml