Campaigns API (xx.xx.xx)

MediaMath Platform API

Download OpenAPI description
Languages
Servers
Mock server
https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/

Organizations

Organizations

Operations

Agencies

Agencies

Operations

Advertisers

Advertisers

Operations

Campaigns

Campaigns

Operations

Strategies

Strategies

Operations

Create A Strategy

Request

Create a new Strategy

Query
extendedboolean

Get extended properties in response

Bodyapplication/jsonrequired
campaign_idintegerrequired
channelsArray of strings
namestring<= 128 characters
descriptionstring<= 1024 characters
statusboolean
archivedboolean
Default false
is_programmatic_guaranteedboolean
Default false
media_typestring
Enum"DISPLAY""VIDEO"
use_optimizationboolean
ads_txt_verifiedstring or null
Enum"ANY""AUTHORIZED_ONLY""AUTHORIZED_DIRECT_ONLY""NONE"""
typestring
Enum"REM""GBO""AUD"
feature_compatibilitystring or null<= 1024 characters
device_graph_onlyboolean
idinteger
versioninteger
durationobject(strategy_duration)required
duration.​use_campaign_startboolean
duration.​use_campaign_endboolean
duration.​start_datestring or null(date-time)
duration.​end_datestring or null(date-time)
budgetobject(strategy_budget)
pacingobject(strategy_pacing)
goalsobject(strategy_goals)
frequencyobject(strategy_frequency)
inventoryobject(strategy_inventory)
targetingobject(strategy_targeting)
conceptsobject(strategy_concepts_extended)
curl -i -X POST \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies?extended=true' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "campaign_id": 0,
    "channels": [
      "string"
    ],
    "name": "string",
    "description": "string",
    "status": true,
    "archived": false,
    "is_programmatic_guaranteed": false,
    "media_type": "DISPLAY",
    "use_optimization": true,
    "ads_txt_verified": "ANY",
    "type": "REM",
    "feature_compatibility": "string",
    "device_graph_only": true,
    "id": 0,
    "version": 0,
    "duration": {
      "use_campaign_start": true,
      "use_campaign_end": true,
      "start_date": "2019-08-24T14:15:22Z",
      "end_date": "2019-08-24T14:15:22Z"
    },
    "budget": {
      "budget": 0.1,
      "currency_code": "string",
      "margin_pct": 9999999.9999
    },
    "pacing": {
      "impression_pacing_type": "even",
      "impression_pacing_amount": 1,
      "impression_pacing_interval": "hour",
      "pacing_type": "even",
      "pacing_amount": 9999999.99,
      "pacing_interval": "hour",
      "pacing_optimization_type": "monetary",
      "pacing_optimization_amount": 9999999.99,
      "use_dba_strategy_pacing": "always",
      "use_dba_strategy_pacing_after_date": "2019-08-24"
    },
    "goals": {
      "goal_type": "spend",
      "goal_value": 999999999.9999,
      "min_bid": 9999999.99,
      "max_bid": 0.01,
      "roi_target": 999999999.99,
      "bid_min_devices": 0,
      "bid_aggressiveness": 100,
      "bid_price_is_media_only": true,
      "max_bid_wm": 9999999.99,
      "use_bid_shading": true,
      "flat_rate_cpm": 0.01
    },
    "frequency": {
      "frequency_type": "even",
      "frequency_interval": "hour",
      "frequency_amount": 0,
      "frequency_optimization": true
    },
    "inventory": {
      "supply_type": "RTB",
      "run_on_all_pmp": true,
      "run_on_all_exchanges": true,
      "site_restriction_transparent_urls": true,
      "domain_restrictions": {
        "include": [
          {
            "domain": "www.mediamath.com",
            "target_type": "DOMAIN"
          }
        ],
        "exclude": [
          {
            "domain": "www.mediamath.com",
            "target_type": "DOMAIN"
          }
        ]
      },
      "site_lists": [
        {
          "site_list_id": 0,
          "assigned": true
        }
      ],
      "campaign_site_lists": [
        {
          "site_list_id": 0,
          "assigned": true
        }
      ],
      "deals": [
        {
          "deal_id": 0
        }
      ],
      "deal_groups": [
        {
          "deal_group_id": 0
        }
      ],
      "supply_sources": [
        {
          "supply_source_id": 0
        }
      ]
    },
    "targeting": {
      "fold_position": [
        "ABOVE"
      ],
      "audience": {
        "include": [
          {
            "operator": "AND",
            "segments": [
              {
                "audience_segment_id": 0,
                "user_cpm": 0.1
              }
            ]
          }
        ],
        "exclude": {
          "operator": "AND",
          "segments": [
            {
              "audience_segment_id": 0,
              "user_cpm": 0.1
            }
          ]
        }
      },
      "contextual": {
        "include": [
          {
            "code": "string",
            "operator": "AND",
            "segments": [
              {
                "targeting_segment_id": 0,
                "user_cpm": 0.1
              }
            ]
          }
        ],
        "exclude": {
          "code": "string",
          "operator": "AND",
          "segments": [
            {
              "targeting_segment_id": 0,
              "user_cpm": 0.1
            }
          ]
        }
      },
      "postal_codes": {
        "restriction": "INCLUDE",
        "codes": [
          "us-14392",
          "us-24981",
          "us-25632",
          "us-16191",
          "us-48574",
          "us14392",
          "us24981",
          "us25632",
          "us16191",
          "us48574",
          "14392",
          "24981",
          "25632",
          "16191",
          "48574"
        ]
      },
      "geofence": {
        "include": {
          "operator": "AND",
          "segments": [
            {
              "geofence_segment_id": 0
            }
          ]
        },
        "exclude": {
          "operator": "AND",
          "segments": [
            {
              "geofence_segment_id": 0
            }
          ]
        }
      },
      "my_data": {
        "include": {
          "operator": "AND",
          "pixels": [
            {
              "pixel_id": 0
            }
          ]
        },
        "exclude": {
          "operator": "AND",
          "pixels": [
            {
              "pixel_id": 0
            }
          ]
        }
      },
      "location": {
        "include": [
          {
            "operator": "string",
            "target_value_id": 0,
            "code": "DMAX"
          }
        ],
        "exclude": [
          {
            "operator": "string",
            "target_value_id": 0,
            "code": "DMAX"
          }
        ]
      },
      "technology": {
        "include": [
          {
            "operator": "string",
            "code": "BSER",
            "target_value_id": 0
          }
        ],
        "exclude": [
          {
            "operator": "string",
            "code": "BSER",
            "target_value_id": 0
          }
        ]
      },
      "ip_addresses": {
        "restriction": "INCLUDE",
        "codes": [
          "string"
        ]
      },
      "day_parts": [
        {
          "user_time": true,
          "start_hour": 1,
          "end_hour": 5,
          "days": [
            "M",
            "T",
            "W",
            "S",
            "U"
          ]
        }
      ],
      "recency": [
        {
          "pixel_id": 0,
          "from_hour": 0,
          "to_hour": 0
        }
      ],
      "language_codes": [
        {
          "code": "string",
          "name": "string"
        }
      ]
    },
    "concepts": {
      "weighting": "NONE",
      "creative_groups": [
        {
          "concept_id": 0,
          "percent": 0
        }
      ]
    }
  }'

Responses

Strategy has been created successfully

Bodyapplication/json
Any of:
dataobject(strategy_full)
metaobject
Response
application/json
{ "data": { "campaign_name": "string", "campaign_start_date": "2019-08-24T14:15:22Z", "campaign_end_date": "2019-08-24T14:15:22Z", "campaign_zone_name": "string", "campaign_service_type": "string", "name": "string", "description": "string", "status": true, "archived": false, "is_programmatic_guaranteed": false, "media_type": "DISPLAY", "use_optimization": true, "ads_txt_verified": "ANY", "type": "REM", "feature_compatibility": "string", "device_graph_only": true, "id": 0, "version": 0, "campaign_id": 0, "zone_name": "America/New_York", "created_on": "2019-08-24T14:15:22Z", "updated_on": "2019-08-24T14:15:22Z", "duration": {}, "budget": {}, "pacing": {}, "goals": {}, "frequency": {}, "inventory": {}, "targeting": {}, "concepts": {} }, "meta": { "status": "success" } }

List Strategies

Request

Get a list of strategies

Query
withstring

Get related property in response

Enum"technology""location""ip_addresses""geofences""my_data""audience""contextual""deals""site_lists""supply"
page_limitinteger[ 1 .. 1000 ]

Number of elements in the collection to retrieve

Example: page_limit=100
page_offsetinteger[ 0 .. 1000 ]

Index of the first element in the collection to retrieve

Example: page_offset=0
sort_bystring

The field to sort by. You can use any field name in ascending or descending order. For ascending order, use the field name directly, e.g., id. For descending order, prefix the field name with a hyphen (-), e.g., -id.

Example: sort_by=id, -id, name, -name
sort_orderstring

Sorting order for the sort_by parameter for the result list

qstring

Query search for filtering. This parameter can be used to filter results based on various fields.

  • q=name=:{search}* to find all results with names starting with "search".
  • q=status==true to find all active entities.
  • q=id>=1000 to find all entities with id greater than or equal to 1000.
extendedboolean

Get extended properties in response

fullstring

Use this parameter to specify which properties to include in the response. To return all fields, set the value to *. For example, full=* will include all properties

Example: full=*
curl -i -X GET \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies?extended=true&full=*&page_limit=100&page_offset=0&q=string&sort_by=id%2C%20-id%2C%20name%2C%20-name&sort_order=string&with=technology' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

strategy list that matches the parameter criteria

Bodyapplication/json
Any of:
dataArray of objects
metaobject(pagination metadata)
Response
application/json
{ "data": [ {} ], "meta": { "status": "success", "count": 10, "total_count": 100, "offset": 0, "next_page": "string", "prev_page": "string" } }

Update A Strategy

Request

Update an existing Strategy

Path
strategy_idintegerrequired

Numeric ID of the strategy to update

Query
extendedboolean

Get extended properties in response

Bodyapplication/jsonrequired
namestring<= 128 characters
descriptionstring<= 1024 characters
statusboolean
archivedboolean
Default false
is_programmatic_guaranteedboolean
Default false
media_typestring
Enum"DISPLAY""VIDEO"
use_optimizationboolean
ads_txt_verifiedstring or null
Enum"ANY""AUTHORIZED_ONLY""AUTHORIZED_DIRECT_ONLY""NONE"""
typestring
Enum"REM""GBO""AUD"
feature_compatibilitystring or null<= 1024 characters
device_graph_onlyboolean
idinteger
versioninteger
campaign_idinteger
durationobject(strategy_duration)
budgetobject(strategy_budget)
pacingobject(strategy_pacing)
goalsobject(strategy_goals)
frequencyobject(strategy_frequency)
inventoryobject(strategy_inventory)
targetingobject(strategy_targeting)
conceptsobject(strategy_concepts_extended)
curl -i -X POST \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies/{strategy_id}?extended=true' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "string",
    "description": "string",
    "status": true,
    "archived": false,
    "is_programmatic_guaranteed": false,
    "media_type": "DISPLAY",
    "use_optimization": true,
    "ads_txt_verified": "ANY",
    "type": "REM",
    "feature_compatibility": "string",
    "device_graph_only": true,
    "id": 0,
    "version": 0,
    "campaign_id": 0,
    "duration": {
      "use_campaign_start": true,
      "use_campaign_end": true,
      "start_date": "2019-08-24T14:15:22Z",
      "end_date": "2019-08-24T14:15:22Z"
    },
    "budget": {
      "budget": 0.1,
      "currency_code": "string",
      "margin_pct": 9999999.9999
    },
    "pacing": {
      "impression_pacing_type": "even",
      "impression_pacing_amount": 1,
      "impression_pacing_interval": "hour",
      "pacing_type": "even",
      "pacing_amount": 9999999.99,
      "pacing_interval": "hour",
      "pacing_optimization_type": "monetary",
      "pacing_optimization_amount": 9999999.99,
      "use_dba_strategy_pacing": "always",
      "use_dba_strategy_pacing_after_date": "2019-08-24"
    },
    "goals": {
      "goal_type": "spend",
      "goal_value": 999999999.9999,
      "min_bid": 9999999.99,
      "max_bid": 0.01,
      "roi_target": 999999999.99,
      "bid_min_devices": 0,
      "bid_aggressiveness": 100,
      "bid_price_is_media_only": true,
      "max_bid_wm": 9999999.99,
      "use_bid_shading": true,
      "flat_rate_cpm": 0.01
    },
    "frequency": {
      "frequency_type": "even",
      "frequency_interval": "hour",
      "frequency_amount": 0,
      "frequency_optimization": true
    },
    "inventory": {
      "supply_type": "RTB",
      "run_on_all_pmp": true,
      "run_on_all_exchanges": true,
      "site_restriction_transparent_urls": true,
      "domain_restrictions": {
        "include": [
          {
            "domain": "www.mediamath.com",
            "target_type": "DOMAIN"
          }
        ],
        "exclude": [
          {
            "domain": "www.mediamath.com",
            "target_type": "DOMAIN"
          }
        ]
      },
      "site_lists": [
        {
          "site_list_id": 0,
          "assigned": true
        }
      ],
      "campaign_site_lists": [
        {
          "site_list_id": 0,
          "assigned": true
        }
      ],
      "deals": [
        {
          "deal_id": 0
        }
      ],
      "deal_groups": [
        {
          "deal_group_id": 0
        }
      ],
      "supply_sources": [
        {
          "supply_source_id": 0
        }
      ]
    },
    "targeting": {
      "fold_position": [
        "ABOVE"
      ],
      "audience": {
        "include": [
          {
            "operator": "AND",
            "segments": [
              {
                "audience_segment_id": 0,
                "user_cpm": 0.1
              }
            ]
          }
        ],
        "exclude": {
          "operator": "AND",
          "segments": [
            {
              "audience_segment_id": 0,
              "user_cpm": 0.1
            }
          ]
        }
      },
      "contextual": {
        "include": [
          {
            "code": "string",
            "operator": "AND",
            "segments": [
              {
                "targeting_segment_id": 0,
                "user_cpm": 0.1
              }
            ]
          }
        ],
        "exclude": {
          "code": "string",
          "operator": "AND",
          "segments": [
            {
              "targeting_segment_id": 0,
              "user_cpm": 0.1
            }
          ]
        }
      },
      "postal_codes": {
        "restriction": "INCLUDE",
        "codes": [
          "us-14392",
          "us-24981",
          "us-25632",
          "us-16191",
          "us-48574",
          "us14392",
          "us24981",
          "us25632",
          "us16191",
          "us48574",
          "14392",
          "24981",
          "25632",
          "16191",
          "48574"
        ]
      },
      "geofence": {
        "include": {
          "operator": "AND",
          "segments": [
            {
              "geofence_segment_id": 0
            }
          ]
        },
        "exclude": {
          "operator": "AND",
          "segments": [
            {
              "geofence_segment_id": 0
            }
          ]
        }
      },
      "my_data": {
        "include": {
          "operator": "AND",
          "pixels": [
            {
              "pixel_id": 0
            }
          ]
        },
        "exclude": {
          "operator": "AND",
          "pixels": [
            {
              "pixel_id": 0
            }
          ]
        }
      },
      "location": {
        "include": [
          {
            "operator": "string",
            "target_value_id": 0,
            "code": "DMAX"
          }
        ],
        "exclude": [
          {
            "operator": "string",
            "target_value_id": 0,
            "code": "DMAX"
          }
        ]
      },
      "technology": {
        "include": [
          {
            "operator": "string",
            "code": "BSER",
            "target_value_id": 0
          }
        ],
        "exclude": [
          {
            "operator": "string",
            "code": "BSER",
            "target_value_id": 0
          }
        ]
      },
      "ip_addresses": {
        "restriction": "INCLUDE",
        "codes": [
          "string"
        ]
      },
      "day_parts": [
        {
          "user_time": true,
          "start_hour": 1,
          "end_hour": 5,
          "days": [
            "M",
            "T",
            "W",
            "S",
            "U"
          ]
        }
      ],
      "recency": [
        {
          "pixel_id": 0,
          "from_hour": 0,
          "to_hour": 0
        }
      ],
      "language_codes": [
        {
          "code": "string",
          "name": "string"
        }
      ]
    },
    "concepts": {
      "weighting": "NONE",
      "creative_groups": [
        {
          "concept_id": 0,
          "percent": 0
        }
      ]
    }
  }'

Responses

Example Response

Bodyapplication/json
Any of:
dataobject(strategy_full)
metaobject
Response
application/json
{ "data": { "campaign_name": "string", "campaign_start_date": "2019-08-24T14:15:22Z", "campaign_end_date": "2019-08-24T14:15:22Z", "campaign_zone_name": "string", "campaign_service_type": "string", "name": "string", "description": "string", "status": true, "archived": false, "is_programmatic_guaranteed": false, "media_type": "DISPLAY", "use_optimization": true, "ads_txt_verified": "ANY", "type": "REM", "feature_compatibility": "string", "device_graph_only": true, "id": 0, "version": 0, "campaign_id": 0, "zone_name": "America/New_York", "created_on": "2019-08-24T14:15:22Z", "updated_on": "2019-08-24T14:15:22Z", "duration": {}, "budget": {}, "pacing": {}, "goals": {}, "frequency": {}, "inventory": {}, "targeting": {}, "concepts": {} }, "meta": { "status": "success" } }

Get A Strategy

Request

Get a strategy by id

Path
strategy_idintegerrequired

Numeric ID of the strategy object to get

Query
extendedboolean

Get extended properties in response

curl -i -X GET \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies/{strategy_id}?extended=true' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Example Response

Bodyapplication/json
Any of:
dataobject(strategy_full)
metaobject
Response
application/json
{ "data": { "campaign_name": "string", "campaign_start_date": "2019-08-24T14:15:22Z", "campaign_end_date": "2019-08-24T14:15:22Z", "campaign_zone_name": "string", "campaign_service_type": "string", "name": "string", "description": "string", "status": true, "archived": false, "is_programmatic_guaranteed": false, "media_type": "DISPLAY", "use_optimization": true, "ads_txt_verified": "ANY", "type": "REM", "feature_compatibility": "string", "device_graph_only": true, "id": 0, "version": 0, "campaign_id": 0, "zone_name": "America/New_York", "created_on": "2019-08-24T14:15:22Z", "updated_on": "2019-08-24T14:15:22Z", "duration": {}, "budget": {}, "pacing": {}, "goals": {}, "frequency": {}, "inventory": {}, "targeting": {}, "concepts": {} }, "meta": { "status": "success" } }

Get Targeting Friendly Names

Request

Get Targeting Friendly Names

Path
strategy_idintegerrequired

Numeric ID of the strategy object

curl -i -X GET \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies/{strategy_id}/friendly_names' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Friendly Names of Strategy Targeting

Bodyapplication/json
dataArray of objects(targeting_friendly_name)
metaobject(pagination metadata)
Response
application/json
{ "data": [ {} ], "meta": { "status": "success", "count": 10, "total_count": 100, "offset": 0, "next_page": "string", "prev_page": "string" } }

Strategy Audit Log

Request

Get a list changes to this strategy

Path
strategy_idintegerrequired

Numeric ID of the strategy

Query
page_limitinteger[ 1 .. 1000 ]

Number of elements in the collection to retrieve

Example: page_limit=100
page_offsetinteger[ 0 .. 1000 ]

Index of the first element in the collection to retrieve

Example: page_offset=0
curl -i -X GET \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies/{strategy_id}/history?page_limit=100&page_offset=0' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

list of changes to an entity

Bodyapplication/json
dataArray of objects or null
metaobject(pagination metadata)
Response
application/json
{ "data": [ {} ], "meta": { "status": "success", "count": 10, "total_count": 100, "offset": 0, "next_page": "string", "prev_page": "string" } }

List User Permissions Details

Request

List Users with Permission

Path
strategy_idintegerrequired

Numeric ID of the strategy

Query
page_limitinteger[ 1 .. 1000 ]

Number of elements in the collection to retrieve

Example: page_limit=100
page_offsetinteger[ 0 .. 1000 ]

Index of the first element in the collection to retrieve

Example: page_offset=0
sort_bystring

The field to sort by. You can use any field name in ascending or descending order. For ascending order, use the field name directly, e.g., id. For descending order, prefix the field name with a hyphen (-), e.g., -id.

Example: sort_by=id, -id, name, -name
qstring

Query search for filtering. This parameter can be used to filter results based on various fields.

  • q=name=:{search}* to find all results with names starting with "search".
  • q=status==true to find all active entities.
  • q=id>=1000 to find all entities with id greater than or equal to 1000.
curl -i -X GET \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/strategies/{strategy_id}/permissions?page_limit=100&page_offset=0&q=string&sort_by=id%2C%20-id%2C%20name%2C%20-name' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

OK

Bodyapplication/json
dataArray of objects(permission_strategy)
metaobject(pagination metadata)
Response
application/json
{ "data": [ {} ], "meta": { "status": "success", "count": 10, "total_count": 100, "offset": 0, "next_page": "string", "prev_page": "string" } }

Bulk Strategy Audit Log

Request

Get a list of changes to these strategies

Query
page_limitinteger[ 1 .. 1000 ]

Number of elements in the collection to retrieve

Example: page_limit=100
page_offsetinteger[ 0 .. 1000 ]

Index of the first element in the collection to retrieve

Example: page_offset=0
Bodyapplication/json
idArray of integersnon-emptyrequired
curl -i -X POST \
  'https://apidocs.mediamath.com/_mock/apis/campaigns-api/openapi/audit_log/strategies?page_limit=100&page_offset=0' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "id": [
      0
    ]
  }'

Responses

list of changes to a group of entities

Bodyapplication/json
dataArray of objects or null
metaobject(pagination metadata)
Response
application/json
{ "data": [ {} ], "meta": { "status": "success", "count": 10, "total_count": 100, "offset": 0, "next_page": "string", "prev_page": "string" } }

Targeting

Targeting

Operations

Vendor Contracts

Vendor Contracts

Operations

Strategy Templates

Strategy Templates

Operations

Atomic Creatives

Atomic Creatives

Operations

Concepts

Concepts

Operations

Creatives

Creatives

Operations

Pixel Bundles

Pixel Bundles

Operations

Campaign Plans

Campaign Plans

Operations

Strategy Plans

Strategy Plans

Operations

Bulk Update

Bulk Update

Operations

Marketplaces

Marketplaces

Operations

Users

Users

Operations

Enterprise Controls

Enterprise Controls

Operations

General

General

Operations

Currency Rates

Currency Rates

Operations

Site Lists

Site Lists

Operations

Timezones

Timezones

Operations

Strategy Groups

Strategy Groups

Operations

Strategy Day Parts

Strategy Day Parts

Operations

Strategy Deals

Strategy Deals

Operations

Strategy IP Addresses

Strategy IP Addresses

Operations

Strategy Concepts

Strategy Concepts

Operations

Targeting Segments

Targeting Segments

Operations

Strategy Target Values

Strategy Target Values

Operations

List Organization Settings

Operations

Update Organization Settings

Operations

New Strategy Plans

Operations

Strategy Plan Target Values

Operations

Campaigns Budget Flights

Operations

User Settings

Operations

Update User Settings

Operations

Supply Sources

Operations

Vendors

Operations

Ad Servers

Operations

Site Lists Site Download

Operations

Site Lists Assignments

Operations

Targeting Segment Objectives

Operations

Targeting Segment Objective

Operations