MediaOS › API Reference
v1.0
REST API Reference

MediaOS API

The MediaOS REST API gives you programmatic access to your MediaOS account data — advertisers, contracts, invoices, payments, and more. Build integrations, automate workflows, and sync data across your tools.

🔑
Auth Method
HTTP Basic Auth
Rate Limit
5,000 Req / Day
📐
Architecture
RESTful Design

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.

Base URL
https://app.mediaos.com/API/
💡
All requests must use HTTPS. All responses are returned as JSON. For developer support, contact your account manager or email support@mediaos.com.
  • All API responses are UTF-8 encoded JSON.
  • Dates use the format YYYY-MM-DD HH:MM:SS.
  • Boolean fields accept true / false or 1 / 0.
  • Endpoints that list resources support pagination via per_page and page parameters.

Authentication

The API uses HTTP Basic Authentication. Your API key acts as the username and your API password as the password.

⚠️
HTTPS Required. All API requests must be made over HTTPS. Requests made over plain HTTP will be rejected.
🔒
Administrator Access Required. API credentials can only be generated by an administrator of your MediaOS account.

HTTP Basic Auth

Pass your API key as the username and your API password as the password in the Authorization header.

cURL
# Replace API_KEY and API_PASSWORD with your credentials curl -u API_KEY:API_PASSWORD \ https://yourdomain.mediaos.com/API/advertisers/

Query Parameter (Alternative)

You may alternatively pass your API key as a query string parameter named apiKey.

cURL
curl "https://yourdomain.mediaos.com/API/advertisers/?apiKey=YOUR_API_KEY"

Rate Limits

API usage is limited per account to prevent abuse and ensure service quality for all users.

ScopeLimitWindow
Per Account 5,000 requests Rolling 24-hour window
⚠️
Exceeding the limit will result in a 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.

ParameterTypeDefaultDescription
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:

JSON Response
{ "count": 142, "data": [ { "id": 1, "name": "Acme Corp", ... }, { "id": 2, "name": "Beta LLC", ... } ] }

Error Codes

The API uses standard HTTP status codes to indicate success or failure.

200OK – Request succeeded. Body contains the response data.
204No Content – Request succeeded, no body returned (e.g., DELETE).
403Forbidden – Authentication failed or insufficient permissions.
404Not Found – The requested resource does not exist.
405Method Not Allowed – The HTTP method is not supported for this endpoint.
500Server Error – An unexpected server error occurred.

Error responses include a JSON body with a human-readable message:

JSON Error Response
{ "error": "Advertiser not found." }

Account

Retrieve top-level details about your MediaOS account.

GET /account/ Get account details

Returns details for the authenticated account, including name, plan, and configuration settings.

Parameters

None.

Example Response

JSON
{ "id": 1, "name": "Your Publication", "domain": "yourdomain.mediaos.com", "plan": "pro", "timezone": "America/New_York" }

Advertisers

Advertisers are the companies or individuals that purchase advertising. Full CRUD operations are supported.

GET /advertisers/{id} Get a single advertiser

Returns a single advertiser record by its numeric ID.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredAdvertiser ID

Example Response

JSON
{ "id": 42, "name": "Acme Corp", "is_lead": false, "active": true, "owned_by_user_id": 5, "date_created": "2024-01-15 09:30:00" }
GET /advertisers/ List / search advertisers

Returns a paginated list of advertisers. All parameters are optional and can be combined for filtering.

Query Parameters

ParameterTypeDescription
idintegerFilter by exact advertiser ID
namestringFilter by name (partial match)
is_leadbooleanFilter by lead status
activebooleanFilter by active status
owned_by_user_idintegerFilter by owning sales rep
created_by_user_idintegerFilter by creating user
date_created_beforedatetimeFilter: created before this date (YYYY-MM-DD HH:MM:SS)
date_created_afterdatetimeFilter: created after this date
sort_bystringSort field
sort_orderstringasc or desc
per_pageintegerResults per page (default 25, max 100)
pageintegerPage number (default 1)
PUT /advertisers/ Create an advertiser

Creates a new advertiser record. Send parameters as JSON in the request body or as form fields.

Body Parameters

ParameterTypeRequiredDescription
namestringRequiredAdvertiser display name
created_by_user_idintegerOptionalUser who created the record
owned_by_user_idintegerOptionalSales rep / owner
is_leadbooleanOptionalMark as a lead (not yet a customer)
sales_lockbooleanOptionalLock record from other sales reps
descriptionstringOptionalFree-text description / notes
general_ledger_account_codestringOptionalGL account code for accounting integrations

Example Request

cURL
curl -u API_KEY:API_PASSWORD -X PUT \ -H "Content-Type: application/json" \ -d '{"name":"Acme Corp","owned_by_user_id":5}' \ https://yourdomain.mediaos.com/API/advertisers/
POST /advertisers/{id} Update an advertiser

Updates an existing advertiser. Only the fields provided will be updated (partial update).

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredAdvertiser 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.

GET /agencies/{id} Get a single agency

Returns a single agency record by its numeric ID.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredAgency ID
GET /agencies/ List / search agencies

Returns a paginated list of agencies.

Query Parameters

ParameterTypeDescription
idintegerFilter by agency ID
namestringFilter by name (partial match)
sort_bystringSort field
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1
PUT /agencies/ Create an agency

Creates a new agency record.

Body Parameters

ParameterTypeRequiredDescription
namestringRequiredAgency name
created_by_user_idintegerOptionalCreating user ID
owned_by_user_idintegerOptionalOwning sales rep ID
discount_percentdecimalOptionalDefault agency discount (e.g. 15.00 for 15%)
POST /agencies/{id} Update an agency

Updates an existing agency. All body fields are optional; only provided fields are changed.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredAgency ID to update

Contacts

Contacts are individual people associated with an advertiser or agency. Full CRUD is supported.

ℹ️
A contact can be assigned to either an advertiser or an agency — not both. Supplying both advertiser_id and agency_id will result in an error.
GET /contacts/{id} Get a single contact

Returns a single contact by ID.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredContact ID
GET /contacts/ Search contacts

Returns a paginated list of contacts matching the given filters.

Query Parameters

ParameterTypeDescription
idintegerFilter by contact ID
namestringFilter by full name (partial match)
advertiser_idintegerFilter by linked advertiser
agency_idintegerFilter by linked agency
owned_by_user_idintegerFilter by owning sales rep
created_by_user_idintegerFilter by creating user
is_leadbooleanFilter by lead status
activebooleanFilter by active status
date_created_beforedatetimeCreated before date
date_created_afterdatetimeCreated after date
sort_bystringid, first_name, last_name, title
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1
PUT /contacts/ Create a contact

Creates a new contact. The contact must be linked to either an advertiser or an agency (not both).

Body Parameters

ParameterTypeRequiredDescription
advertiser_idintegerOptional*Link to an advertiser
agency_idintegerOptional*Link to an agency (use one or the other)
titlestringOptionalJob title
first_namestringOptionalFirst name
last_namestringOptionalLast name
owned_by_user_idintegerOptionalOwning sales rep
POST /contacts/{id} Update a contact

Updates an existing contact. All body fields are optional.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredContact ID

Contact Data

Contact data stores typed attributes for contacts, advertisers, or agencies — such as phone numbers, email addresses, and websites.

GET /contactDataTypes/ List all contact data types

Returns the full list of available contact data types (e.g., Phone, Email, Website).

GET /contactData/{id} Get a single contact data item

Returns a single contact data record by ID.

GET /contactData/ Search contact data

Returns contact data records. If no filters are supplied, the most recent 100 records are returned.

Query Parameters

ParameterTypeDescription
advertiser_idintegerFilter by advertiser
contact_idintegerFilter by contact
agency_idintegerFilter by agency
PUT /contactData/ Create a contact data item

Creates a new contact data record. The record must be linked to exactly one of: advertiser_id, agency_id, or contact_id.

Body Parameters

ParameterTypeRequiredDescription
contact_data_type_idintegerRequiredThe type of data (from /contactDataTypes/)
valuestringRequiredThe data value (e.g., phone number)
advertiser_idintegerRequired*Link to an advertiser
agency_idintegerRequired*Link to an agency
contact_idintegerRequired*Link to a contact (one of the three is required)
POST /contactData/{id} Update a contact data item

Updates the value of an existing contact data record.

Body Parameters

ParameterTypeRequiredDescription
valuestringRequiredUpdated value

Addresses

Postal addresses for advertisers, agencies, or contacts. Full CRUD is supported.

GET /addresses/{id} Get a single address

Returns a single address by ID.

GET /addresses/ Search addresses

Query Parameters

ParameterTypeDescription
idintegerFilter by address ID
advertiser_idintegerFilter by advertiser
agency_idintegerFilter by agency
contact_idintegerFilter by contact
PUT /addresses/ Create an address

Creates a new address. Must be assigned to one of: advertiser, agency, or contact.

Body Parameters

ParameterTypeRequiredDescription
country_codestringRequiredISO country code (e.g. US)
advertiser_idintegerOptional*Link to advertiser
agency_idintegerOptional*Link to agency
contact_idintegerOptional*Link to contact (one of three required)
line1stringOptionalAddress line 1
line2stringOptionalAddress line 2
line3stringOptionalAddress line 3
line4stringOptionalAddress line 4
citystringOptionalCity
statestringOptionalState / Province
postal_codestringOptionalZIP / Postal code
POST /addresses/{id} Update an address

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.

GET /users/{id} Get a single user

Returns a single user record by ID.

GET /users/ Search users

Query Parameters

ParameterTypeDescription
idintegerFilter by user ID
first_namestringFilter by first name
last_namestringFilter by last name
emailstringFilter by email address
activebooleanFilter by active status
is_administratorbooleanFilter by admin role
is_salesbooleanFilter by sales role
is_productionbooleanFilter by production role
is_accountingbooleanFilter by accounting role
sort_bystringid, firstName, lastName, email
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1

Products

Products represent the publications, websites, or media channels in your account. Read-only.

GET /products/{id} Get a single product

Returns a single product by ID.

GET /products/ List all products

Returns all products in the account. No filters required.

Ad Sizes

Ad sizes define the available creative dimensions for a product. Read-only.

GET /adSizes/{id} Get a single ad size

Returns a single ad size record by ID.

GET /adSizes/ Search ad sizes

Query Parameters

ParameterTypeRequiredDescription
product_idintegerRequiredFilter by product
activebooleanOptionalFilter by active status

Ad Rates

Ad rates define the pricing for ad sizes within a product. Read-only.

GET /adRates/{id} Get a single ad rate

Returns a single ad rate record by ID.

GET /adRates/ Search ad rates

Query Parameters

ParameterTypeRequiredDescription
product_idintegerRequiredFilter by product
ad_size_idintegerOptionalFilter by ad size
activebooleanOptionalFilter by active status

Issues

Issues are publication dates / editions for a product (e.g., January 2025 magazine issue). Read-only.

GET /issues/{id} Get a single issue

Returns a single issue by ID.

GET /issues/ List issues for a product

Query Parameters

ParameterTypeRequiredDescription
product_idintegerRequiredProduct to list issues for

Locations

Locations are geographic zones used for targeting ad insertions. Read-only.

GET /locations/{id} Get a single location

Returns a single location record by ID.

GET /locations/ List locations for a product

Query Parameters

ParameterTypeRequiredDescription
product_idintegerRequiredProduct to list locations for

Sections

Sections are content areas within a product (e.g., "Back Cover", "Page 4"). Read-only.

GET /sections/{id} Get a single section

Returns a single section record by ID.

GET /sections/ List sections for a product

Query Parameters

ParameterTypeRequiredDescription
product_idintegerRequiredProduct to list sections for

Contracts

Contracts represent advertising orders / sales agreements. Read-only.

GET /contracts/{id} Get a single contract

Returns a single contract record by ID.

GET /contracts/ Search contracts

Query Parameters

ParameterTypeDescription
idintegerFilter by contract ID
advertiser_idintegerFilter by advertiser
date_created_beforedatetimeCreated before date
date_created_afterdatetimeCreated after date
date_sold_beforedatetimeSold before date
date_sold_afterdatetimeSold after date
amount_fromdecimalMinimum contract total
amount_todecimalMaximum contract total
statusstringFilter by contract status
is_proposalbooleanFilter proposals vs. signed contracts
sort_bystringid, date_created, date_sold, total, status
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1

Contract Line Items

Individual line items within a contract, describing what was sold. Read-only.

GET /contractLineItems/{id} Get a single line item

Returns a single contract line item by ID.

GET /contractLineItems/ Get line items for a contract

Query Parameters

ParameterTypeRequiredDescription
contract_idintegerRequiredContract to retrieve line items for
GET /contractLineItemTypes/{id} Get a single line item type

Returns a single contract line item type by ID.

GET /contractLineItemTypes/ List all line item types

Returns the full list of contract line item types available in the account.

Insertions

Ad insertions represent a single placement of an advertisement — linking a contract, product, issue, section, and location. Read-only.

GET /insertions/{id} Get a single insertion

Returns a single insertion record by ID.

GET /insertions/ Search insertions

Query Parameters

ParameterTypeDescription
idintegerFilter by insertion ID
contract_idintegerFilter by contract
product_idintegerFilter by product
advertiser_idintegerFilter by advertiser
section_idintegerFilter by section
issue_idintegerFilter by issue
location_idintegerFilter by location
sort_bystringid, contract_id, product_id, advertiser_id, section_id, issue_id, location_id
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1

Invoices

Invoices track billing records generated from contracts. Read-only.

GET /invoices/{id} Get a single invoice

Returns a single invoice by ID.

GET /invoices/ Search invoices

Query Parameters

ParameterTypeDescription
idintegerFilter by invoice ID
contract_idintegerFilter by contract
advertiser_idintegerFilter by advertiser
date_created_beforedatetimeCreated before date
date_created_afterdatetimeCreated after date
date_due_beforedatetimeDue before date
date_due_afterdatetimeDue after date
amount_fromdecimalMinimum invoice total
amount_todecimalMaximum invoice total
sort_bystringid, date_created, date_due, total
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1

Invoice Line Items

Individual charges on an invoice. Read-only.

GET /invoiceLineItems/{id} Get a single invoice line item

Returns a single invoice line item by ID.

GET /invoiceLineItemTypes/ List all invoice line item types

Returns all invoice line item type definitions for the account.

GET /invoiceLineItemTypes/{id} Get a single invoice line item type

Returns a single invoice line item type by ID.

Payments

Payments record money received against invoices. Supports search and creation.

GET /payments/{id} Get a single payment

Returns a single payment record by ID.

GET /payments/ Search payments

Query Parameters

ParameterTypeDescription
idintegerFilter by payment ID
entered_by_user_idintegerFilter by user who entered the payment
date_created_beforedatetimeCreated before date
date_created_afterdatetimeCreated after date
amount_fromdecimalMinimum payment amount
amount_todecimalMaximum payment amount
contract_idintegerFilter by contract
advertiser_idintegerFilter by advertiser
sort_bystringid, date_created, amount
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1
POST /payments/single Create a payment

Records a new payment against an invoice.

Body Parameters

ParameterTypeRequiredDescription
invoice_idintegerRequiredInvoice this payment applies to
amountdecimalRequiredPayment amount
notesstringRequiredInternal notes about the payment
payment_typestringRequiredPayment method (e.g. check, credit_card, wire)
payment_datedatetimeRequiredDate the payment was received (YYYY-MM-DD HH:MM:SS)

Example Request

cURL
curl -u API_KEY:API_PASSWORD -X POST \ -H "Content-Type: application/json" \ -d '{ "invoice_id": 1234, "amount": 500.00, "notes": "Check #4521", "payment_type": "check", "payment_date": "2025-01-15 00:00:00" }' \ https://yourdomain.mediaos.com/API/payments/single

Ad Requests

Ad requests track incoming creative submission requests tied to insertions. Read-only.

GET /adRequests/ Search ad requests

Query Parameters

ParameterTypeDescription
idintegerFilter by ad request ID
sort_bystringid
sort_orderstringasc or desc
per_pageintegerDefault 25, max 100
pageintegerDefault 1

Ads

Ads represent the creative assets and metadata for delivered advertisements. Read-only.

GET /ads/{id} Get a single ad

Returns a single ad record including creative metadata and delivery status.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredAd ID

Memberships

Memberships track subscription or membership records associated with contacts. Read-only.

GET /memberships/verify Verify a member by email

Checks whether a given email address has an active membership record.

Query Parameters

ParameterTypeRequiredDescription
emailstringRequiredEmail address to verify

Example Response

JSON
{ "email": "member@example.com", "is_member": true, "membership_id": 87, "expires": "2025-12-31 23:59:59" }
GET /memberships/{id} Get a single membership

Returns a single membership record by ID.

Path Parameters

ParameterTypeRequiredDescription
idintegerRequiredMembership ID