Newscred Campaigns API
The Campaigns API from Newscred — 7 operation(s) for campaigns.
The Campaigns API from Newscred — 7 operation(s) for campaigns.
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/newscred-campaigns-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: Newscred Campaigns API
version: V3
description: 'Operations tagged Campaigns across 2 of this provider''s published API definitions: newscred-cmp-open-api-openapi.json, newscred-welcome-open-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
- url: https://api.welcomesoftware.com/v3
description: v3 version of _Welcome_ Open API
tags:
- name: Campaigns
paths:
/campaigns:
get:
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get a list of campaigns.
operationId: listCampaigns
parameters:
- example: 127a32121da23c3a543
in: query
name: owner
schema:
description: Owner ID of the campaign
type: string
- example: '2022-08-24T00:00:00.000Z'
in: query
name: start_date
schema:
description: Start date of the campaign, in ISO 8601 UTC format
type: string
- example: '2022-08-24T00:00:00.000Z'
in: query
name: end_date
schema:
description: End date of the campaign, in ISO 8601 UTC format
type: string
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/page_size'
responses:
'200':
content:
application/json:
schema:
additionalProperties: false
properties:
data:
description: List of campaigns
items:
$ref: '#/components/schemas/CampaignListResponseItem'
type: array
pagination:
allOf:
- $ref: '#/components/schemas/Pagination'
- properties:
next:
example: https://api.cmp.optimizely.com/v3/campaigns?offset=10&page_size=10
type:
- string
- 'null'
type: object
required:
- data
- pagination
type: object
description: List of fetched campaigns
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
summary: GET /campaigns
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
post:
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Create a campaign
operationId: createCampaign
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignCreateRequest'
description: Payload to create a campaign
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignResponse'
description: Created campaign
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
summary: POST /campaigns
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{campaign_id}/fields/{field_id}:
put:
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update the field value of a campaign. '
operationId: updateCampaignField
parameters:
- example: 5f857f30e1c4a2038d6179e9
in: path
name: campaign_id
required: true
schema:
description: Unique identifier of the campaign
type: string
- example: 4f857f30e1c4a2038d6179e7
in: path
name: field_id
required: true
schema:
description: Unique identifier of the field of the campaign
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignFieldUpdateRequest'
description: Payload to update the field value
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignFieldUpdateResponse'
description: Updated the campaign field
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: PUT /campaigns/{campaign_id}/fields/{field_id}
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{id}:
get:
description: Get a campaign
operationId: getCampaign
parameters:
- example: 8q7f910551b00a722e0418830cee6612
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignResponse'
description: Fetched campaign
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: GET /campaigns/{id}
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
patch:
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Update a campaign '
operationId: updateCampaign
parameters:
- example: 8q7f910551b00a722e0418830cee6612
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignUpdateRequest'
description: Payload to update the campaign
required: true
responses:
'204':
description: Campaign updated
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: PATCH /campaigns/{id}
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{id}/attachments:
post:
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add an attachment to the campaign. '
operationId: addAttachmentToCampaign
parameters:
- example: 5f857f30e1c4a2038d6179e9
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AttachmentRequest'
description: Payload to add an attachment
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/AttachmentResponse'
description: Attachment added to the campaign
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: POST /campaigns/{id}/attachments
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{id}/brief:
get:
description: Get brief of the campaign
operationId: getCampaignBrief
parameters:
- example: 5f857f30e1c4a2038d6179e9
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignBriefResponse'
description: Fetched brief of the campaign
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: GET /campaigns/{id}/brief
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{id}/comments:
post:
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Post a comment on a campaign. '
operationId: addCommentToCampaign
parameters:
- example: da80cfd7bbf84959a8a981acbad996b3
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CommentCreateRequest'
description: Payload to add a comment
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/CampaignCommentResponse'
description: Created a comment for the campaign
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: POST /campaigns/{id}/comments
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
/campaigns/{id}/fields:
get:
description: '<span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Get the list of fields of a campaign. '
operationId: listCampaignFields
parameters:
- example: 5f857f30e1c4a2038d6179e9
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/page_size'
responses:
'200':
content:
application/json:
schema:
additionalProperties: false
properties:
data:
description: List of fields
items:
$ref: '#/components/schemas/FieldListResponseItem'
type: array
pagination:
allOf:
- $ref: '#/components/schemas/Pagination'
- properties:
next:
example: https://api.cmp.optimizely.com/v3/campaigns/5f857f30e1c4a2038d6179e9/fields?offset=10&page_size=10
type:
- string
- 'null'
type: object
required:
- data
- pagination
type: object
description: List of fetched fields
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
summary: GET campaigns/{id}/fields
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
post:
description: <span style="background-color:#e95f6a;padding:5px;border-radius:5px">Experimental</span> Add a field to a campaign.
operationId: addFieldToCampaign
parameters:
- example: 5f857f30e1c4a2038d6179e9
in: path
name: id
required: true
schema:
description: Unique identifier of the campaign
type: string
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectFieldCreateRequest'
description: Payload to add a field to a campaign
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectFieldCreateResponse'
description: Added field to a campaign.
'400':
$ref: '#/components/responses/ClientError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
summary: POST campaigns/{id}/fields
tags:
- Campaigns
security:
- OAuth2:
- openid
- profile
- offline_access
servers:
- description: v3 version of Optimizely CMP Open API
url: https://api.cmp.optimizely.com/v3
components:
schemas:
NumberTypeObjectFieldUpdatePayload:
allOf:
- $ref: '#/components/schemas/BaseObjectFieldUpdatePayload'
- properties:
values:
description: Accepts a single numeric value
items:
example: 200
type: number
maxItems: 1
type: array
type: object
StringTypeObjectFieldUpdatePayload:
allOf:
- $ref: '#/components/schemas/BaseObjectFieldUpdatePayload'
- properties:
values:
description: Any single string
items:
example: This is a test string
type: string
type: array
type: object
BaseObjectFieldUpdatePayload:
properties:
type:
description: Type of the field
example: checkbox
type: string
values:
description: Values for the campaign field
type: array
required:
- type
- values
type: object
MultiChoiceTypeObjectField:
allOf:
- $ref: '#/components/schemas/BaseObjectField'
- $ref: '#/components/schemas/MultiChoiceTypeObjectFieldUpdatePayload'
CampaignCommentResponse:
additionalProperties: false
properties:
attachments:
description: List of attachments of the comment
example:
- id: a113667245d111eb8945000c
name: sample.png
url: https://files.cmp.optimizely.com/download/96c314a645d111eb8945000c291b51d4?token=
items:
$ref: '#/components/schemas/AttachmentResponse'
type: array
comment_by:
description: Unique identifier of the user who posted the comment
example: 62a8455e29fed3045d9c7a8b
type: string
created_at:
description: Creation date and time of the campaign comment in ISO 8601 UTC format (2020-02-10T10:40:45Z)
example: '2020-10-06T13:15:30Z'
format: date-time
type: string
id:
description: Unique identifier of the campaign comment
example: 5fe38c39574b52a62a089239
type: string
is_resolved:
description: Determines if the comment is resolved in Optimizely CMP
example: false
type: boolean
links:
additionalProperties: false
description: Meta links
properties:
campaign:
description: URL of the campaign
example: https://api.cmp.optimizely.com/v3/campaigns/5fe38c39574b52a62a089239
type: string
comment_by:
description: URL of the user who posted the comment
example: https://api.cmp.optimizely.com/v3/users/62a8455e29fed3045d9c7a8b
type: string
required:
- campaign
- comment_by
type: object
modified_at:
description: Last modification date and time of the campaign comment in ISO 8601 UTC format (2020-02-10T10:40:45Z)
example: '2020-10-06T14:15:30Z'
format: date-time
type: string
parent_comment_id:
description: Unique identifier of the parent comment
example: 5fe38c39574b52a62a089238
type:
- string
- 'null'
value:
description: Content of the comment
example: Well done!
type: string
required:
- id
- value
- is_resolved
- parent_comment_id
- comment_by
- created_at
- modified_at
- attachments
- links
type: object
FieldTypeSimpleNumber:
allOf:
- $ref: '#/components/schemas/FieldBaseType'
- properties:
decimal_places:
description: Decimal place of the numerical field
example: 2
type:
- integer
- 'null'
has_thousand_separator:
description: Whether the numerical field has a thousand separator
example: true
type: boolean
required:
- has_thousand_separator
- decimal_places
type: object
FieldListResponseItem:
discriminator:
mapping:
checkbox: '#/components/schemas/FieldTypeCheckbox'
currency_number: '#/components/schemas/FieldTypeCurrencyNumber'
date: '#/components/schemas/FieldTypeCommon'
dropdown: '#/components/schemas/FieldTypeDropdown'
image: '#/components/schemas/FieldTypeCommon'
label: '#/components/schemas/FieldTypeLabel'
percentage_number: '#/components/schemas/FieldTypePercentageNumber'
radio_button: '#/components/schemas/FieldTypeRadio'
rich_text: '#/components/schemas/FieldTypeCommon'
simple_number: '#/components/schemas/FieldTypeSimpleNumber'
text: '#/components/schemas/FieldTypeCommon'
text_area: '#/components/schemas/FieldTypeCommon'
video: '#/components/schemas/FieldTypeCommon'
propertyName: type
oneOf:
- $ref: '#/components/schemas/FieldTypeCommon'
- $ref: '#/components/schemas/FieldTypeLabel'
- $ref: '#/components/schemas/FieldTypeDropdown'
- $ref: '#/components/schemas/FieldTypeRadio'
- $ref: '#/components/schemas/FieldTypeCheckbox'
- $ref: '#/components/schemas/FieldTypeSimpleNumber'
- $ref: '#/components/schemas/FieldTypePercentageNumber'
- $ref: '#/components/schemas/FieldTypeCurrencyNumber'
ResourceLabelResponse:
additionalProperties: false
description: Label associated to a fetched resource
properties:
group:
additionalProperties: false
description: Label group
properties:
id:
description: Identifier of the label group
example: 2467e583a60e23fda2b89db81a453cd2
type: string
name:
description: Name of the label group
example: Content Format
type: string
required:
- id
- name
type: object
values:
description: List of values of the label
items:
additionalProperties: false
properties:
id:
description: Identifier of the label value
example: 71c378f3fee3d822759d1bdc2aab628c
type: string
name:
description: Name of the label value
example: Photos
type: string
required:
- id
- name
type: object
type: array
required:
- group
- values
type: object
DateTypeObjectField:
allOf:
- $ref: '#/components/schemas/BaseObjectField'
- $ref: '#/components/schemas/DateTypeObjectFieldUpdatePayload'
CampaignListResponseItem:
additionalProperties: false
properties:
description:
description: Description of the campaign
example: The awesome campaign's description
type:
- string
- 'null'
end_date:
description: 'End date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2019-10-16'
type:
- string
- 'null'
id:
description: Unique identifier of the campaign
example: 8q7f910551b00a722e0418830cee6612
type: string
is_hidden:
description: Whether the campaign is hidden or not
example: false
type: boolean
links:
additionalProperties: false
description: Meta links
properties:
self:
description: URL of the campaign
example: https://api.cmp.optimizely.com/v3/campaigns/8q7f910551b00a722e0418830cee6612
type: string
required:
- self
type: object
owner:
additionalProperties: false
description: Owner information of the campaign
properties:
id:
description: Unique identifier of the owner of the campaign
example: 8q7f910551b00a722e0418830cee8211
type: string
type: object
reference_id:
description: Reference identifier of the campaign
example: CPN-1589
type: string
start_date:
description: 'Start date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2019-10-06'
type:
- string
- 'null'
title:
description: Title of the campaign
example: The awesome campaign
type: string
required:
- id
- title
- description
- start_date
- end_date
- is_hidden
- reference_id
- owner
- links
type: object
DropdownTypeObjectFieldUpdatePayload:
allOf:
- $ref: '#/components/schemas/BaseObjectFieldUpdatePayload'
- properties:
values:
description: Array of choice ID. Multiple choice values are not acceptable for `is_multi_select=false`.
items:
example: 9119a313057e401189407116fcd3
type: string
type: array
type: object
MultiChoiceTypeObjectFieldUpdatePayload:
allOf:
- $ref: '#/components/schemas/BaseObjectFieldUpdatePayload'
- properties:
values:
description: Array of choice IDs
items:
example: 9119a313057e401189407116fcd3
type: string
type: array
type: object
CampaignFieldTypes:
description: Type of the field
enum:
- checkbox
- currency_number
- date
- dropdown
- label
- radio_button
- text_area
- percentage_number
- rich_text
- simple_number
- text
- image
- video
example: image
type: string
CommentCreateRequest:
additionalProperties: false
properties:
attachments:
description: List of comment attachments.
items:
$ref: '#/components/schemas/AttachmentRequest'
type: array
value:
description: Content of the comment. Markdown is supported. To mention a user belonging to the organization, use the `@[name](openapi-user-link)` format.
example: Comment mentioning @[Organization User](https://api.cmp.optimizely.com/v3/users/5fe38aeb574b52a62a089238)
minLength: 1
type: string
required:
- value
type: object
FieldTypeCheckbox:
allOf:
- $ref: '#/components/schemas/FieldBaseType'
- properties:
choices:
description: Choices of the checkbox
items:
properties:
id:
description: Identifier of the choice
example: 6ceee2f4fa3411ecb37802420ac8001b
type: string
name:
description: Name of the choice
example: Checkbox 1 Choice 1
type: string
required:
- id
- name
- color
type: object
type: array
required:
- choices
type: object
AttachmentResponse:
additionalProperties: false
properties:
id:
description: Unique identifier for the attachment
example: 5a7f910511b0a72230ce6631
type: string
name:
description: Filename of the attachment
example: sample_image.png
type: string
url:
description: Download URL of the attachment
example: https://files.cmp.optimizely.com/download/2115bfe4450c11ebaae8000c291b51d4
type: string
required:
- id
- name
- url
type: object
FieldTypeCommon:
allOf:
- $ref: '#/components/schemas/FieldBaseType'
- type: object
AssetTypeObjectFieldUpdatePayload:
allOf:
- $ref: '#/components/schemas/BaseObjectFieldUpdatePayload'
- properties:
values:
description: Payload for fields with attachments
items:
properties:
key:
description: Unique identifier of the file upload session. This is the `upload_meta_fields.key` field retrieved from the `/v3/upload-url` endpoint.
example: ce8995aea58b11ea8cd90242ac120005
type: string
title:
description: Title of the image or video
example: Sample.jpeg
minLength: 1
type: string
required:
- title
- key
maxItems: 1
type: array
type: object
CampaignResponse:
additionalProperties: false
properties:
budget:
allOf:
- $ref: '#/components/schemas/BudgetResponse'
type:
- object
- 'null'
created_at:
description: Creation date and time of the campaign, in ISO 8601 UTC format (`2035-02-10T10:40:45Z`)
example: '2035-10-06T13:15:30Z'
format: date-time
type: string
description:
description: Description of the campaign
example: The awesome campaign's description
type:
- string
- 'null'
end_date:
description: 'End date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2019-10-16'
type:
- string
- 'null'
id:
description: Unique identifier of the campaign
example: 8q7f910551b00a722e0418830cee6612
type: string
is_hidden:
description: Whether the campaign is hidden or not
example: false
type: boolean
labels:
description: Labels associated to the campaign
items:
$ref: '#/components/schemas/ResourceLabelResponse'
type: array
links:
additionalProperties: false
description: Meta links
properties:
brief:
description: URL of the campaign brief
example: https://api.cmp.optimizely.com/v3/campaigns/8q7f910551b00a722e0418830cee6612/brief
type:
- string
- 'null'
child_campaigns:
description: URLs of the child campaigns
items:
example: https://api.cmp.optimizely.com/v3/campaigns/6fb21acf987094513ecb4b58
type: string
type: array
owner:
description: URL of the campaign owner
example: https://api.cmp.optimizely.com/v3/users/6ea1bf781398c3147393arr1
type:
- string
- 'null'
parent_campaign:
description: URL of the parent campaign
example: https://api.cmp.optimizely.com/v3/campaigns/7u7f910551b00a722e0418830cee6643
type:
- string
- 'null'
self:
description: URL of the campaign
example: https://api.cmp.optimizely.com/v3/campaigns/8q7f910551b00a722e0418830cee6612
type: string
required:
- self
- brief
- owner
- parent_campaign
- child_campaigns
type: object
reference_id:
description: Reference identifier of the campaign
example: CPN-1589
type: string
start_date:
description: 'Start date of the campaign in ISO 8601 format: `YYYY-MM-DD`'
example: '2019-10-06'
type:
- string
- 'null'
status:
description: Status of the campaign
enum:
- Not Started
- Off Track
- On Track
- Complete
- At Risk
example: On Track
type: string
title:
description: Title of the campaign
example: The awesome campaign
type: string
required:
- id
- title
- description
- start_date
- end_date
- created_at
- is_hidden
- status
- reference_id
- budget
- labels
- links
type: object
NumberTypeObjectField:
allOf:
- $ref: '#/components/schemas/BaseObjectField'
- $ref: '#/components/schemas/NumberTypeObjectFieldUpdatePayload'
Pagination:
additionalProperties: false
description: Pagination related information
properties:
next:
description: URL to the next page
example: https://api.cmp.optimizely.com/<some-path-to-next-page>?offset=10&page_size=10
type:
- string
- 'null'
previous:
description: URL to the previous page
example: null
type:
- string
- 'null'
required:
- next
- previous
type: object
FieldTypeRadio:
allOf:
- $ref: '#/components/schemas/FieldBaseType'
- properties:
choices:
description: Choices of the radio button
items:
properties:
id:
description: Identifier of the ch
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/newscred/refs/heads/main/openapi/newscred-campaigns-api-openapi.yml