Introduction
The MediaOS API is a REST API that returns JSON. It provides access to your account's CRM data, inventory, orders, and billing records.
- All API responses are UTF-8 encoded JSON.
- Dates use the format
YYYY-MM-DD HH:MM:SS. - Boolean fields accept
true/falseor1/0. - Endpoints that list resources support pagination via
per_pageandpageparameters.
Authentication
The API uses HTTP Basic Authentication. Your API key acts as the username and your API password as the password.
HTTP Basic Auth
Pass your API key as the username and your API password as the password in the Authorization header.
Query Parameter (Alternative)
You may alternatively pass your API key as a query string parameter named apiKey.
Rate Limits
API usage is limited per account to prevent abuse and ensure service quality for all users.
| Scope | Limit | Window |
|---|---|---|
| Per Account | 5,000 requests | Rolling 24-hour window |
429 Too Many Requests response. Implement exponential backoff in your integration to handle this gracefully. Rate limit counters reset at the start of each 24-hour window.Pagination & Sorting
List endpoints support server-side pagination and sorting via query parameters.
| Parameter | Type | Default | Description |
|---|---|---|---|
per_page |
integer | 25 |
Number of records to return per page. Maximum value is 100. |
page |
integer | 1 |
Page number to return. Starts at 1. |
sort_by |
string | Varies | Field to sort results by. Accepted values vary per endpoint. |
sort_order |
string | asc |
Sort direction. Accepted values: asc or desc. |
All paginated responses include a top-level count field with the total number of matching records:
Error Codes
The API uses standard HTTP status codes to indicate success or failure.
Error responses include a JSON body with a human-readable message:
Account
Retrieve top-level details about your MediaOS account.
Returns details for the authenticated account, including name, plan, and configuration settings.
Parameters
None.
Example Response
Advertisers
Advertisers are the companies or individuals that purchase advertising. Full CRUD operations are supported.
Returns a single advertiser record by its numeric ID.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Advertiser ID |
Example Response
Returns a paginated list of advertisers. All parameters are optional and can be combined for filtering.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by exact advertiser ID |
name | string | Filter by name (partial match) |
is_lead | boolean | Filter by lead status |
active | boolean | Filter by active status |
owned_by_user_id | integer | Filter by owning sales rep |
created_by_user_id | integer | Filter by creating user |
date_created_before | datetime | Filter: created before this date (YYYY-MM-DD HH:MM:SS) |
date_created_after | datetime | Filter: created after this date |
sort_by | string | Sort field |
sort_order | string | asc or desc |
per_page | integer | Results per page (default 25, max 100) |
page | integer | Page number (default 1) |
Example Response
Creates a new advertiser record. Send parameters as JSON in the request body or as form fields.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Required | Advertiser display name |
created_by_user_id | integer | Optional | User who created the record |
owned_by_user_id | integer | Optional | Sales rep / owner |
is_lead | boolean | Optional | Mark as a lead (not yet a customer) |
sales_lock | boolean | Optional | Lock record from other sales reps |
description | string | Optional | Free-text description / notes |
general_ledger_account_code | string | Optional | GL account code for accounting integrations |
Example Request
Example Response
Updates an existing advertiser. Only the fields provided will be updated (partial update).
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Advertiser ID to update |
Body Parameters
Same fields as Create — all optional. Only supplied fields are updated.
Agencies
Agencies represent advertising agencies that act on behalf of advertisers. Full CRUD is supported.
Returns a single agency record by its numeric ID.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Agency ID |
Example Response
Returns a paginated list of agencies.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by agency ID |
name | string | Filter by name (partial match) |
sort_by | string | Sort field |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new agency record.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Required | Agency name |
created_by_user_id | integer | Optional | Creating user ID |
owned_by_user_id | integer | Optional | Owning sales rep ID |
discount_percent | decimal | Optional | Default agency discount (e.g. 15.00 for 15%) |
Example Response
Updates an existing agency. All body fields are optional; only provided fields are changed.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Agency ID to update |
Contacts
Contacts are individual people associated with an advertiser or agency. Full CRUD is supported.
advertiser_id and agency_id will result in an error.Returns a single contact by ID.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Contact ID |
Example Response
Returns a paginated list of contacts matching the given filters.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by contact ID |
name | string | Filter by full name (partial match) |
advertiser_id | integer | Filter by linked advertiser |
agency_id | integer | Filter by linked agency |
owned_by_user_id | integer | Filter by owning sales rep |
created_by_user_id | integer | Filter by creating user |
is_lead | boolean | Filter by lead status |
active | boolean | Filter by active status |
date_created_before | datetime | Created before date |
date_created_after | datetime | Created after date |
sort_by | string | id, first_name, last_name, title |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new contact. The contact must be linked to either an advertiser or an agency (not both).
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
advertiser_id | integer | Optional* | Link to an advertiser |
agency_id | integer | Optional* | Link to an agency (use one or the other) |
title | string | Optional | Job title |
first_name | string | Optional | First name |
last_name | string | Optional | Last name |
owned_by_user_id | integer | Optional | Owning sales rep |
Example Response
Updates an existing contact. All body fields are optional.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Contact ID |
Contact Data
Contact data stores typed attributes for contacts, advertisers, or agencies — such as phone numbers, email addresses, and websites.
Returns the full list of available contact data types (e.g., Phone, Email, Website).
Example Response
Returns a single contact data record by ID.
Example Response
Returns contact data records. If no filters are supplied, the most recent 100 records are returned.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
advertiser_id | integer | Filter by advertiser |
contact_id | integer | Filter by contact |
agency_id | integer | Filter by agency |
Example Response
Creates a new contact data record. The record must be linked to exactly one of: advertiser_id, agency_id, or contact_id.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_data_type_id | integer | Required | The type of data (from /contactDataTypes/) |
value | string | Required | The data value (e.g., phone number) |
advertiser_id | integer | Required* | Link to an advertiser |
agency_id | integer | Required* | Link to an agency |
contact_id | integer | Required* | Link to a contact (one of the three is required) |
Example Response
Updates the value of an existing contact data record.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
value | string | Required | Updated value |
Addresses
Postal addresses for advertisers, agencies, or contacts. Full CRUD is supported.
Returns a single address by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by address ID |
advertiser_id | integer | Filter by advertiser |
agency_id | integer | Filter by agency |
contact_id | integer | Filter by contact |
Example Response
Creates a new address. Must be assigned to one of: advertiser, agency, or contact.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
country_code | string | Required | ISO country code (e.g. US) |
advertiser_id | integer | Optional* | Link to advertiser |
agency_id | integer | Optional* | Link to agency |
contact_id | integer | Optional* | Link to contact (one of three required) |
line1 | string | Optional | Address line 1 |
line2 | string | Optional | Address line 2 |
line3 | string | Optional | Address line 3 |
line4 | string | Optional | Address line 4 |
city | string | Optional | City |
state | string | Optional | State / Province |
postal_code | string | Optional | ZIP / Postal code |
Example Response
Updates an existing address. All fields are optional.
Users
Retrieve user records for members of your MediaOS account. Users are read-only via the API.
Returns a single user record by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by user ID |
first_name | string | Filter by first name |
last_name | string | Filter by last name |
email | string | Filter by email address |
active | boolean | Filter by active status |
is_administrator | boolean | Filter by admin role |
is_sales | boolean | Filter by sales role |
is_production | boolean | Filter by production role |
is_accounting | boolean | Filter by accounting role |
sort_by | string | id, firstName, lastName, email |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Products
Products represent the publications, websites, or media channels in your account. Read-only.
Returns a single product by ID.
Example Response
Returns all products in the account. No filters required.
Example Response
Ad Sizes
Ad sizes define the available creative dimensions for a product. Read-only.
Returns a single ad size record by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | integer | Required | Filter by product |
active | boolean | Optional | Filter by active status |
Example Response
Ad Rates
Ad rates define the pricing for ad sizes within a product. Read-only.
Returns a single ad rate record by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | integer | Required | Filter by product |
ad_size_id | integer | Optional | Filter by ad size |
active | boolean | Optional | Filter by active status |
Example Response
Issues
Issues are publication dates / editions for a product (e.g., January 2025 magazine issue). Read-only.
Returns a single issue by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | integer | Required | Product to list issues for |
Example Response
Locations
Locations are geographic zones used for targeting ad insertions. Read-only.
Returns a single location record by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | integer | Required | Product to list locations for |
Example Response
Sections
Sections are content areas within a product (e.g., "Back Cover", "Page 4"). Read-only.
Returns a single section record by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
product_id | integer | Required | Product to list sections for |
Example Response
Contracts
Contracts represent advertising orders / sales agreements. Full CRUD and status-transition actions are supported.
Returns a single contract record by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by contract ID |
advertiser_id | integer | Filter by advertiser |
date_created_before | datetime | Created before date |
date_created_after | datetime | Created after date |
date_sold_before | datetime | Sold before date |
date_sold_after | datetime | Sold after date |
amount_from | decimal | Minimum contract total |
amount_to | decimal | Maximum contract total |
status | string | Filter by contract status |
is_proposal | boolean | Filter proposals vs. signed contracts |
sort_by | string | id, date_created, date_sold, total, status |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new contract (proposal). The new contract starts in open status.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
advertiser_id | integer | Required | Advertiser this contract belongs to |
agency_id | integer | Optional | Agency acting on behalf of advertiser |
sold_by_user_id | integer | Optional | Sales rep responsible for this contract |
notes | string | Optional | Internal notes |
insertion_order_number | string | Optional | External IO number |
down_payment_amount | decimal | Optional | Required down payment amount |
term_id | integer | Optional | Payment term |
percent_discount | decimal | Optional | Discount percentage applied to total |
tax_rate_id | integer | Optional | Tax rate to apply |
business_unit_id | integer | Optional | Business unit assignment |
Example Request
Example Response
Updates an existing contract. Won contracts cannot be modified via this endpoint — use the action endpoints instead.
400. Use setToLost or setToOpen to change status.Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Contract ID to update |
Body Parameters
Same fields as Create — all optional except advertiser_id. Only supplied fields are updated.
Marks a contract as Won (sold). Enforces all business rules: sales lock, pending forecast items, DocuSign requirements, and down payment checks.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
sold_date | date | Optional | Date contract was sold (defaults to today) |
Example Request
Marks a contract as Lost. Cannot be applied to Won (sold) contracts or forecast contracts.
Moves a Lost contract back to Open (Proposal) status. Only Lost→Open transitions are allowed. Won contracts cannot be moved back to Open.
Approves a discount that exceeds the account threshold. The calling user must be an admin or sales manager.
Contract Line Items
Individual line items within a contract, describing adjustments such as discounts and fees. Full CRUD is supported on non-Won contracts.
Returns a single contract line item by ID.
Example Response
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
contract_id | integer | Required | Contract to retrieve line items for |
Example Response
Creates a new line item on a contract. Cannot add to a Won contract.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
contract_id | integer | Required | Contract this line item belongs to |
contract_line_item_type_id | integer | Required | Type of line item |
amount | decimal | Required | Amount (positive for additions, negative for discounts) |
notes | string | Optional | Description or notes |
taxable | boolean | Optional | Whether this line item is taxable |
apply_to_insertion_id | integer | Optional | Apply only to a specific insertion |
Example Response
Updates an existing line item. Cannot modify line items on a Won contract.
Body Parameters
Same fields as Create. Only supplied fields are updated.
Deletes a contract line item. Cannot delete from a Won contract. Returns 204 No Content on success.
Returns a single contract line item type by ID.
Example Response
Returns the full list of contract line item types available in the account.
Example Response
Insertions
Ad insertions represent a single placement of an advertisement — linking a contract, product, issue, section, and location. Full CRUD is supported on non-Won contracts.
Returns a single insertion record by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by insertion ID |
contract_id | integer | Filter by contract |
product_id | integer | Filter by product |
advertiser_id | integer | Filter by advertiser |
section_id | integer | Filter by section |
issue_id | integer | Filter by issue |
location_id | integer | Filter by location |
sort_by | string | id, contract_id, product_id, advertiser_id, section_id, issue_id, location_id |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new insertion on a contract. The contract must not be Won.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
contract_id | integer | Required | Contract this insertion belongs to |
product_id | integer | Required | Publication / product |
ad_size_id | integer | Optional | Ad size |
ad_rate_id | integer | Optional | Ad rate |
issue_id | integer | Optional | Issue |
section_id | integer | Optional | Section |
location_id | integer | Optional | Location |
ad_id | integer | Optional | Associated ad creative |
quantity | integer | Optional | Number of insertions |
discount | decimal | Optional | Discount amount |
placement | string | Optional | Placement notes |
description | string | Optional | Description |
deliver_date | date | Optional | Delivery date (YYYY-MM-DD) |
taxable | boolean | Optional | Whether this insertion is taxable |
Example Response
Updates an existing insertion. The parent contract must not be Won.
Body Parameters
Same fields as Create. Only supplied fields are updated.
Deletes an insertion. Cannot delete if the insertion has already been invoiced. Returns 204 No Content on success.
Invoices
Invoices track billing records generated from contracts. Supports search, generation from Won contracts, deletion, and write-off actions.
Returns a single invoice by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by invoice ID |
contract_id | integer | Filter by contract |
advertiser_id | integer | Filter by advertiser |
date_created_before | datetime | Created before date |
date_created_after | datetime | Created after date |
date_due_before | datetime | Due before date |
date_due_after | datetime | Due after date |
amount_from | decimal | Minimum invoice total |
amount_to | decimal | Maximum invoice total |
sort_by | string | id, date_created, date_due, total |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Generates a new invoice for a Won contract. The contract must have a soldDate set. All insertion_ids must belong to the specified contract.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
contract_id | integer | Required | ID of the Won contract to invoice |
insertion_ids | integer[] | Required | Array of insertion IDs to include on this invoice |
create_date | date | Optional | Invoice creation date (defaults to today) |
due_date | date | Optional | Invoice due date |
Example Request
Example Response
Deletes an invoice. Cannot delete if the invoice has any applied payments — unapply all payments first. Returns 204 No Content on success.
Writes off the remaining balance on an invoice. Requirements:
- Invoice must be editable (
canEdit()) - Invoice must not be a credit memo
- Invoice must have a positive remaining balance
Invoice Line Items
Individual charges on an invoice. Read-only.
Returns a single invoice line item by ID.
Example Response
Returns all invoice line item type definitions for the account.
Example Response
Returns a single invoice line item type by ID.
Example Response
Payments
Payments record money received against invoices. Supports search and creation.
Returns a single payment record by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by payment ID |
entered_by_user_id | integer | Filter by user who entered the payment |
date_created_before | datetime | Created before date |
date_created_after | datetime | Created after date |
amount_from | decimal | Minimum payment amount |
amount_to | decimal | Maximum payment amount |
contract_id | integer | Filter by contract |
advertiser_id | integer | Filter by advertiser |
sort_by | string | id, date_created, amount |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Records a new payment against an invoice.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
invoice_id | integer | Required | Invoice this payment applies to |
amount | decimal | Required | Payment amount |
notes | string | Required | Internal notes about the payment |
payment_type | string | Required | Payment method (e.g. check, credit_card, wire) |
payment_date | datetime | Required | Date the payment was received (YYYY-MM-DD HH:MM:SS) |
Example Request
Example Response
Deletes a payment and unapplies it from all invoices. Requirements:
- Calling user must be an admin, sales manager, or accounting
- Payment must not fall within an accounting lock date period
Returns 204 No Content on success.
Ad Requests
Ad requests track incoming creative submission requests tied to insertions. Full CRUD and cancel action are supported.
Returns a single ad request record by ID.
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by ad request ID |
sort_by | string | id |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new ad request. The new request starts in pending status.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
advertiser_id | integer | Required | Advertiser this request belongs to |
requested_by_user_id | integer | Optional | User who created the request (defaults to authenticated user) |
assigned_to_user_id | integer | Optional | Designer or user assigned to fulfill the request |
insertion_id | integer | Optional | Insertion this request is associated with |
ad_id | integer | Optional | Ad creative to use |
details | string | Optional | Instructions or notes for the request |
due_date | date | Optional | Due date (YYYY-MM-DD) |
Example Response
Updates an existing ad request. Only supplied fields are updated.
Body Parameters
Same fields as Create. All fields optional except advertiser_id.
Cancels an ad request. Cannot cancel an already-canceled request.
Deletes an ad request. Cannot delete if the request has proofs or a designer is assigned. Returns 204 No Content on success.
Ads
Ads represent the creative assets and metadata for delivered advertisements. Full CRUD is supported. File uploads are not supported via the API — use the application UI for uploading creative files.
Returns a single ad record including creative metadata and delivery status.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Ad ID |
Example Response
Query Parameters
| Parameter | Type | Description |
|---|---|---|
id | integer | Filter by ad ID |
advertiser_id | integer | Filter by advertiser |
name | string | Filter by name (partial match) |
active | boolean | Filter active (not deleted) ads |
sort_by | string | id, name, date_created |
sort_order | string | asc or desc |
per_page | integer | Default 25, max 100 |
page | integer | Default 1 |
Example Response
Creates a new ad record. File uploads are not supported via the API — use the application UI to attach creative files.
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
advertiser_id | integer | Required | Advertiser this ad belongs to |
name | string | Optional | Ad name / title |
text | string | Optional | Ad copy or description |
Example Response
Updates an existing ad's metadata. Only supplied fields are updated.
Body Parameters
Same fields as Create. Only supplied fields are updated.
Memberships
Memberships track subscription or membership records associated with contacts. Read-only.
Checks whether a given email address has an active membership record.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | Required | Email address to verify |
Example Response
Returns a single membership record by ID.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Required | Membership ID |