Maestro Content API (2.0.0)
Download OpenAPI specification:Download
Maestro Content API documentation provides instructions on using REST APIs Maestro has chosen to publicly expose to its developer customers.
Maestro APIs are defined using the OpenAPI 3.0 specification (formally Swagger). You can download these specs and use them to generate client SDKs in your prefered language. (see "Code Generation" section)
API authentication requires some combination of Client ID (same as site ID), developer API key, and/or JWT (JSON Web Token). See "Authentication" section for details.
While Maestro provides code samples using cURL and NodeJS Axios, developers can also use the Postman application to translate a REST call into approximately 30 other programming languages.
Maestro is committed to keeping its API documentation comprehensive and high-quality. If you have feedback you would like to share with us, please email our documentation team:
Click to bring up email modal > documentation@maestro.io.
When reporting missing or incorrect information, please be as specific and detailed as possible so we have a clear understanding of the problem. Please be aware this email is for documentation ONLY and not technical help issues.
An access code is associated with a subscription entitlement and a scheduled event. Typically, they are used to allow selected customers to bypass payment for an event. Though Maestro generates these codes for you in either a CSV or JSON file, it is up to you to manage them after that.
Add access code
Adds an access code to a subscription entitlement.
Sample call:
curl -X POST 'https://api.maestro.io/accesscode/v1/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your API Key>' \ -d 'accessCode=67899&siteId=<site ID>&sku=my-new-entitlement&type=subscription
Authorizations:
query Parameters
accessCode required | string Access code |
siteId required | string Maestro site ID (same as x-maestro-client-id) |
sku required | string SKU from subscription entitlement |
type required | string (TAccessCodeType) Enum: "subscription" "login" Access code type |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Response samples
- 200
{- "accessCode": "ABCD-EFGH",
- "siteId": "YOUR_MAESTRO_SITE_ID",
- "sku": "EXAMPLE-SKU",
- "type": "subscription"
}
Get access code
Gets an access code given its ID in the path.
Sample call:
curl 'https://api.maestro.io/accesscode/v1/<Access code ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your API Key>'
Authorizations:
path Parameters
id required | string Access code ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "accessCode": "abcd-1234",
- "siteId": "Your site ID",
- "sku": "My-entitlement",
- "type": "subscription"
}
Delete access code
Deletes an access code given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/accesscode/v1/60b8bfc854fe01002dc6d7ef' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization Bearer <Your JWT token>'
Authorizations:
path Parameters
id required | string Access code ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Consume access code
Consumes an access code.
Sample call:
curl 'https://api.maestro.io/accesscode/v1/consume/05RD8S' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization Bearer <Your JWT token>'
Authorizations:
path Parameters
accessCode required | string Access code value |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Response samples
- 200
{- "success": true,
- "message": "string"
}
Bulk generate access codes
Generates access codes for a subscription entitlement in either csv or json format.
Sample call:
curl -X POST 'https://api.maestro.io/accesscode/v1/bulk?kind=json' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your API Key>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"sku":"my-new-entitlement", "qty": 10}'
Authorizations:
query Parameters
kind | string Default: "json" Enum: "csv" "json" Generated access codes response format |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Bulk access code generation parameters
qty required | number [ 1 .. 100000 ] How many access codes to generate |
sku required | string Subscription SKU |
Responses
Request samples
- Payload
{- "qty": 1,
- "sku": "string"
}
Response samples
- 200
[- {
- "_id": "string",
- "accessCode": "string",
- "siteId": "string",
- "sku": "string",
- "type": "subscription",
- "created": 0,
- "modified": 0
}
]
Get account
Gets an account, given its ID in the path.
Sample call:
curl 'https://api.maestro.io/account/v3/<id>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \
Sample account object:
{"_id":"<account ID>","email":"aperson@somewebsite.com", \ "marketingOptin":false, "name":"Jane Doe","normalizedName":"jane doe", \ "roles":[],"siteId":"6094439a791f9d002d99762d", "subscriptions":[], \ "thirdPartyAuthProviders":[{"accountId":"7476398876","provider":"facebook"}], \ "uid":"email-ygu8twuj8@paulgoldman.com","created":1621536280692,"modified":1622008405811}
Note that thirdPartyAuthProviders[] and tags[] only appear if they have been set.
path Parameters
id required | string Account ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/account/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "email": "string",
- "marketingOptin": true,
- "name": "string",
- "normalizedName": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "hash": "string",
- "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
], - "subscriptions": [
- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
], - "uid": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Update account
Update an account given its ID in the path.
Sample call:
curl -X PUT 'https://api.maestro.io/account/v3/<account ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"thirdPartyAuthProviders":[{"accountId": "7476398876", "provider": "facebook"}]}'
path Parameters
id required | string Account ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Parameters to update account
string Account email | |
password | string Account password |
name | string Name |
Array of objects (ThirdPartyAuthProvider) Third-party authorization providers | |
Array of objects (AccountRole) Site roles and permissions |
Responses
Request samples
- Payload
- javascript
{- "email": "string",
- "password": "string",
- "name": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
]
}
Delete account
Deletes an account, given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/account/v3/<account ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Authorizations:
path Parameters
id required | string Account ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.delete('https://api.maestro.io/account/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Get site accounts
Get site accounts with filter options.
Sample call:
curl 'https://api.maestro.io/account/v3?name=Ryan' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Maestro developer API key>'
query Parameters
property | string Search using account object field(s), i.e., /v3?marketingOptin=true |
limit | number Max to return, default is 50. |
offset | number Offset from beginning |
sortBy | string Field to sort by, i.e., name |
sortDirection | number Sort order - 1=ascending, 2=descending |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/account/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "pagination": {
- "limit": 0,
- "offset": 0,
- "searchFields": [
- "string"
], - "sortDirection": 0,
- "totalCount": 0
}, - "results": [
- {
- "_id": "string",
- "siteId": "string",
- "email": "string",
- "marketingOptin": true,
- "name": "string",
- "normalizedName": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "hash": "string",
- "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
], - "subscriptions": [
- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
], - "uid": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
}
Create account
Creates a new account
Sample call:
curl -X POST 'https://api.maestro.io/account/v3/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -d "email=jennydoe@somewebsite.com&password=8675309JD&name=Jenny Doe"
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Request Body schema: text/plain
Parameters to create account
email required | string Account email |
password required | string Account password |
name required | string Account name |
marketingOptin | boolean Receive Maestro marketing email flag |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; const account = {"siteId":"string""email":"string""name":"string""lastLogin":42"thirdPartyAuthProviders":[]"hash":"string""roles":[]"uid":"string""created":42} axios.post('https://api.maestro.io/account/v3/', { headers }, account) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "email": "string",
- "marketingOptin": true,
- "name": "string",
- "normalizedName": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "hash": "string",
- "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
], - "subscriptions": [
- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
], - "uid": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Send password reset email
Send password reset email to account.
Sample call:
curl -X POST 'https://api.maestro.io/account/v3/reset' \ -H 'x-maestro-client-id: <Your Client ID>' \ -d 'baseUrl=https://www.maestro.io/deliton/home-page&email=sa@paulgoldman.com'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Request Body schema: text/plain
Parameters to send password reset email
email required | string Account email |
baseUrl required | string Base URL |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; const passwordResetInfo = {"baseUrl":"string""email":"string"} axios.post('https://api.maestro.io/account/v3/reset/', { headers }, passwordResetInfo) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Update user password
Updates a user's password using token received in Send password reset email API.
Sample call:
curl 'https://api.maestro.io/account/v3/reset/update' \ -H 'x-maestro-client-id: <Your Client ID>' \ -d "token=<token>&password=123pass"
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Request Body schema: text/plain
Parameters to update password
token required | string Token sent in email |
password required | string New password |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; const updatePasswordInfo = {"token":"string""password":"string"} axios.post('https://api.maestro.io/account/v3/update/', { headers }, updatePasswordInfo)
Get accounts and user profiles
Gets accounts and user profiles with filter options.
User profiles contain an account's ID and name.
Sample call:
curl 'https://api.maestro.io/account/v3/roles/query?admin=true' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Maestro developer API key>'
query Parameters
property | string Account property filter, i.e., /query?marketingOptin=true |
admin | boolean If true, only admin accounts are returned. If false or omitted, all accounts are returned. |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer key |
Responses
Request samples
- javascript
const axios = require('axios'); const querystring = require('querystring'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; const params = querystring.stringify({ search: searchFields: admin: accountQuery: }) axios.get('https://api.maestro.io/account/v3/update/', params, { headers })
Response samples
- 200
{- "accounts": [
- {
- "_id": "string",
- "siteId": "string",
- "email": "string",
- "marketingOptin": true,
- "name": "string",
- "normalizedName": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "hash": "string",
- "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
], - "subscriptions": [
- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
], - "uid": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "userProfiles": [
- {
- "_id": "string",
- "accountId": "string",
- "name": "string",
- "created": 0,
- "modified": 0
}
]
}
Get account roles
Gets an account's roles, given its ID in the path.
Sample call:
curl 'https://api.maestro.io/account/v3/roles/<account ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
path Parameters
id required | string Account ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/account/v3/roles/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
]
Update account roles
Updates an account's roles, given its ID in the path.
Sample call:
curl -X PUT 'https://api.maestro.io/account/v3/roles/<account ID>' \ -H 'content-type: application/json;charset=UTF-8' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -d '{"roles":[{"scope":"*","pageId":[],"write":true}]}'
path Parameters
id required | string Account ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Request Body schema: text/plain
Parameters to update account roles
required | Array of objects (AccountRole) Updated account roles | ||||||
Array
|
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; const accountRoles = [{ "pageId":"string" "scope": "string" "write":boolean }] axios.put( 'https://api.maestro.io/account/v3/roles/507f191e810c19729de860ea', { headers }, accountRoles) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "email": "string",
- "marketingOptin": true,
- "name": "string",
- "normalizedName": "string",
- "thirdPartyAuthProviders": [
- {
- "accountId": "string",
- "provider": "string"
}
], - "hash": "string",
- "roles": [
- {
- "pageId": [
- "string"
], - "scope": "string",
- "write": true
}
], - "subscriptions": [
- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
], - "uid": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Initiate a refund
Initiate a refund through Stripe for the given charge ID and card holder.
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Authorization required | string Your <JWT> |
Request Body schema: application/json
Request body to create a refund
accountId required | string Maestro account ID |
amount | number Refund amount. If ommited, full amount is refunded. |
chargeId required | string Stripe charge ID |
reason required | string (RefundReason) Enum: "duplicate" "fraudulent" "requested_by_customer" Stripe refund reasons |
Responses
Request samples
- Payload
- javascript
{- "accountId": "string",
- "amount": 0,
- "chargeId": "string",
- "reason": "duplicate"
}
Response samples
- 200
{- "success": true,
- "errorMessage": "string"
}
Verify domain with Stripe and Apple Pay
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro client ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { authorization: 'Your JWT', ['x-maestro-client-id']: 'Your Maestro client ID' }; axios.post( 'https://api.maestro.io/billing/v1/status/apple-pay-verify', { headers }, {} ) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
true
Besides the fields included in all webhooks by default, the eventData
object will look like
the following for channels related webhooks:
{ channelId<string>: the maestro channel's ID channelName<string>: the maestro channel's name event<string>: 'admin.channelUpdated' seo: { description<string | undefined>: the channel's SEO description image<string | undefined>: the channel's SEO image keywords<string | undefined>: the channel's SEO keywords title<string>: the channel's SEO title } siteId<string>: the maestro site ID streamId<string>: the stream ID }
Get claim status
Gets a claim status given its ID in the path
Authorizations:
path Parameters
id required | string Claim status ID |
header Parameters
x-maestro-client-id required | string Your Maestro client ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.get('https://api.maestro.io/claimstatus/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "questId": "string",
- "productId": "string",
- "accountId": "string",
- "status": "PENDING"
}
Get site claim statuses
Gets all site claim statuses
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro client ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.get('https://api.maestro.io/claimstatus/v3/', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "questId": "string",
- "productId": "string",
- "accountId": "string",
- "status": "PENDING"
}
]
Maestro provides a default subscription receipt email with the following fields:
- A "Thank you for your purchase!" message at the top
- Ticket receipt number
- Virtual ticket name
- Purchase time/date
- Ticket quantity
- Access instructions
- Link to event
- Payment method
- Ticket price
- Service charge
- Tax
- Total amount
In your site UI (ADMIN > SETTINGS > Profile), you can configure access instructions and your name and logo for this email receipt.
You can create and upload your own email template to use as a subscription purchase email receipt with the "Upload email template" API. Templates use Handlebars - a HTML templating specification that allows you to insert customers' names and other data to personalize messages for each individual recipient.
To send out receipts, Maestro uses Mandrill, a third party service that helps ensure transactional email delivery. By default, the email sender is "Maestro" and the sender email is noreply@maestro.io
. However, you can change these fields with the "Add sender email" API and Maestro can send subscription receipt emails on your behalf. Sending email on your behalf requires that you configure your DNS settings for email authentication in one of two ways:
DKIM (DomainKeys Identified Mail) - A DNS-based email authentication mechanism that helps Mandrill more effectively send mail on your behalf by allowing receivers to verify that we have permission to send your email.
To enable DKIM, create a TXT record for
mandrill._domainkey.yourdomain.com
(replaceyourdomain.com
with the domain you're setting up) with the following value:
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrLHiExVd55zd/IQ/J/mRwSRMAocV/hMB3jXwaHH36d9NaVynQFYV8NaWi69c1veUtRzGt7yAioXqLj7Z4TeEUoOLgrKsn8YnckGs9i3B3tVFB+Ch/4mPhXWiNfNdynHWBcPcbJ8kjEQ2U8y78dHZj1YeRXXVvWob2OaKynO8/lQIDAQAB;
SPF (Sender Policy Framework) - Another DNS-based email authentication mechanism. If you don't have an SPF record, you should add one for your domain. At a minimum, the value should be the following if you're only sending mail through Mandrill for that domain:
v=spf1 include:spf.mandrillapp.com ?all
"
Add sender email
Add sender email for subscription purchase receipts.
Sample call:
curl -X PUT 'https://api.maestro.io/customemail/v1/add-sender-email/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'Authorization: Bearer <Your JWT>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"domain":"www.somedomain.com", "fromEmail":"admin@somedomain.com", "fromName":"Pablo Escobar", "replyToEmail":"admin@somedomain.com"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT> |
Request Body schema: application/json
Request body to add sender email
domain required | string Domain URL (i.e., maestro.io) |
fromEmail required | string Sender email address |
fromName required | string Sender name |
replyToEmail required | string Reply to email |
Responses
Request samples
- Payload
- javascript
{- "domain": "string",
- "fromEmail": "string",
- "fromName": "string",
- "replyToEmail": "string"
}
Upload email template
Upload a handlebars email template for use as a subscription purchase email receipt.
Sample call:
curl -X PUT 'https://api.maestro.io/customemail/v1/receipt/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'Authorization: Bearer <Your JWT>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"subject":"Thank your for your purchase!", \ "template":"<div><p>Receipt Number: {{receiptNumber}}</p><p>Amount: {{amount}}</p></div>"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT> |
Request Body schema: application/json
Request body to upload email receipt template
subject required | string Email subject line |
template required | string HTML Mandrill email template with the following available variables:
|
Responses
Request samples
- Payload
- javascript
{- "subject": "string",
- "template": "string"
}
Delete email template
Deletes a previously uploaded custom email template for a subscription receipt email.
Sample call:
curl -X DELETE 'https://api.maestro.io/customemail/v1/receipt/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'Authorization: Bearer <Your JWT>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'delete', url: 'https://api.maestro.io/customemail/v1/receipt/</p></div>', headers: { 'x-maestro-client-id': 'Your client ID', 'content-type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer <Your JWT>' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Currently, there is only one kind of invite - a magic link. Magic links provide a way for users to authenticate without logging in. This gives them a way to bypass a channel entitlement gate. A typical entitlement gate would ask the user to pay to see a channel. A channel gate can be set up in your channel settings (Channel > Settings) using an existing entitlement (Entitlements > Add Entitlement). When a non-admin user goes to your site they should see this gate. If they have the invite magic link, they can paste it in the browser and bypass it, aka consume the invite. Admins are free to distribute invites to users however they wish, similar to access codes.
Get site invites
Get all site invites with filter options. No filter options returns all.
Sample call: (gets all)
curl 'https://api.maestro.io/invite/v1/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
query Parameters
consumed | boolean Consumed flag filter, i.e., |
revoked | boolean Revoked flag filter, i.e., |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.get('https://api.maestro.io/invite/v1/', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "_id": "string",
- "consumed": true,
- "redirectUri": "string",
- "revoked": true,
- "siteId": "string",
- "targetSkus": [
- "string"
], - "token": "string",
- "type": "magic-link",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Create magic link invite
Creates a magic link invite.
Sample call:
curl -X POST 'https://api.maestro.io/invite/v1/magic-link/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{ "redirectUri":"http://web.maestro.io/somesite/home-page", \ "siteId":"<site ID>", "targetSkus":["gate-entitlement"]}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to create magic link invite
redirectUri required | string Redirect URI - where the user will be on your site when the invite is consumed. |
siteId required | string Site ID |
targetSkus required | Array of arrays Target SKUs |
Responses
Request samples
- Payload
- javascript
{- "redirectUri": "string",
- "siteId": "string",
- "targetSkus": [ ]
}
Response samples
- 200
{- "invite": {
- "_id": "string",
- "consumed": true,
- "redirectUri": "string",
- "revoked": true,
- "siteId": "string",
- "targetSkus": [
- "string"
], - "token": "string",
- "type": "magic-link",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "inviteUrl": "string"
}
Get invite
Gets an invite given its ID in the path.
Sample call:
curl 'https://api.maestro.io/invite/v1/<invite ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Sample return:
{"_id":"<invite ID>","consumed":false, \ "redirectUri":"http://web.maestro.io/somesubdomain/home-page","revoked":false, \ "siteId":"<site ID>","targetSkus":["gate-entitlement"],"token":"6RZ1QV", \ "type":"magic-link", "created":1625781436608,"modified":1625781436608, \ "tags":[]}
Authorizations:
path Parameters
id required | string Invite ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/invite/v1/<invite ID>', headers: { 'x-maestro-client-id': 'Your Maestro ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "_id": "string",
- "consumed": true,
- "redirectUri": "string",
- "revoked": true,
- "siteId": "string",
- "targetSkus": [
- "string"
], - "token": "string",
- "type": "magic-link",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete invite
Deletes an invite given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/invite/v1/<invite ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
id required | string Id of invite you're deleting |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID). |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.delete('https://api.maestro.io/invite/v1/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "success": true,
- "message": "string"
}
Update a Register Invite
Authorizations:
path Parameters
id required | string Id of invite you're updating |
header Parameters
x-maestro-client-id required | string Your maestro id |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; const toUpdateinvite = { "redirectUri":"https://yourmaestrosite.com", "siteId":"string", "targetRoles":["object"] } axios.put('https://api.maestro.io/invite/v1/507f191e810c19729de860ea', { headers }, toUpdateinvite) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "consumed": true,
- "redirectUri": "string",
- "revoked": true,
- "siteId": "string",
- "targetSkus": [
- "string"
], - "token": "string",
- "type": "magic-link",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Revoke invite
Revokes an invite given its ID in the path. Revoking an unconsumed invite prevents the user from logging in via the inviteUrl
. If the invite was already consumed, it removes their subscription(s).
Sample call:
curl -X DELETE 'https://api.maestro.io/invite/v1/revoke/<invite ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
id required | string Invite ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.delete('https://api.maestro.io/invite/v1/revoke/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "success": true,
- "message": "string"
}
Get concurrent viewers in a site
Get the amount of concurrent viewers in a site and its channels
Sample call:
curl 'https://api.maestro.io/insights/v1/concurrents?siteIds=siteId1,siteId2,siteId3' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'super-api-key: <>'
Authorizations:
query Parameters
siteIds | string Provide a list of comma-separated siteIds to get |
header Parameters
x-maestro-client-id | string Your Maestro ID (same as site ID). Only used if siteIds query param is not provided. |
super-api-key required | string Your JWT Super API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { ['super-api-key']: 'Your Super API key' }; axios.get('https://api.maestro.io/insights/v1/concurrents?siteIds=siteId1,siteId2', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "siteId": "string",
- "concurrents": 0,
- "totalViews": 0,
- "channels": [
- {
- "_id": "string",
- "slug": "string",
- "concurrents": 0
}
]
}
]
A Panel is a channel sidebar with activity such as a Twitter feed, a chat thread, Shopify store, advertising, etc. While all panels have common fields, what distinguishes one panel type from another is the panel object's renderer
object.
Sample panel type objects:
ChatImage
Shopify
Person
Group
Quest
Playlist
Twitch chat
Multiple choice
Iframe
Achievement leaderboard
Channel select
Schedule
Get site panels
Gets all site panels with filter options. No options returns all.
Sample call (gets all):
curl 'https://api.maestro.io/panel/v3/' \ -H 'x-maestro-client-id: <Your Client ID>' -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
query Parameters
limit | string Limit to return, default is 50 |
offset | string Offset from beginning |
sortBy | string Sort by field |
sortDirection | string Sort direction - ascending(1) or descending(-1) |
property | string Panel property filter, i.e., v3?prop=value |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your client ID', ['x-maestro-client-id']: 'Your developer API key' }; axios.get('https://api.maestro.io/panel/v3/', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "pagination": {
- "limit": 0,
- "offset": 0,
- "searchFields": [
- "string"
], - "sortDirection": 0,
- "totalCount": 0
}, - "results": [
- {
- "_id": "string",
- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "collection": "panels",
- "site_id": "string",
- "slug": "string",
- "type": "string",
- "created": 0,
- "last_modified": 0
}
]
}
Create panel
Creates a panel.
Sample call:
curl -X POST 'https://api.maestro.io/panel/v3/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"renderer":{"panel_type":"social", \ "icon_name":"bus","panel_name":"Twitter panel test", \ "sources":[{"array_id":"dnIlTNOGQ","source":"@RayDalio"}]}, \ "site_id":"<site ID>","type":"panel"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to create a panel
required | object (Renderer) |
siteId required | string Site ID |
Responses
Request samples
- Payload
- javascript
{- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "siteId": "string"
}
Response samples
- 200
{- "_id": "string",
- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "collection": "panels",
- "site_id": "string",
- "slug": "string",
- "type": "string",
- "created": 0,
- "last_modified": 0
}
Get panel
Gets a panel given its ID in path.
Sample call:
curl 'https://api.maestro.io/panel/v3/<panel ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Sample return:
{"_id":"<panel ID>","collection":"panels", "last_modified":1613096264523, \ "renderer":{"panel_type":"shopify","icon_name":"", \ "collection":{"handle":"home","label":"Home","value":"Z2lkOi8vc2hvcGlmeS9Db2xsZWN0aW9uLzIyNjUyNTYxMDE1MA=="}, \ "id":"6094439a791f9d002d997642"},"site_id":"<site ID>", \ "slug":"panel-6094439a791f9d002d997642-generated","type":"panel", \ "created":1613096264523,"modified":1613096264523}
Authorizations:
path Parameters
id required | string Panel ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your client ID', ['x-maestro-client-id']: 'Your developer API key' }; axios.get('https://api.maestro.io/panel/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "collection": "panels",
- "site_id": "string",
- "slug": "string",
- "type": "string",
- "created": 0,
- "last_modified": 0
}
Update panel
Updates a panel given its ID in path.
Sample call:
curl -X PATCH 'https://api.maestro.io/panel/v3/<panel ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"renderer":{"description": "Mulltiple choice pop-up quiz"}}'
Authorizations:
path Parameters
id required | string Panel ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to update a panel
object (Renderer) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Responses
Request samples
- Payload
- javascript
{- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}
}
Delete panel
Deletes a panel given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/panel/v3/<panel ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
id required | string Panel ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your client ID', ['x-maestro-client-id']: 'Your developer API key' }; axios.delete('https://api.maestro.io/panel/v3/507f191e810c19729de860ea', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Replace panel
Replaces a panel given its ID in the path.
Authorizations:
path Parameters
id required | string Panel ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to replace a panel
required | object (Renderer) |
siteId required | string Site ID |
Responses
Request samples
- Payload
{- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "siteId": "string"
}
Response samples
- 200
{- "_id": "string",
- "renderer": {
- "allow_non_admin_links": true,
- "behavior": {
- "view": "list",
- "kind": "string",
- "pages": [
- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
}, - "channel": "string",
- "collection": {
- "handle": "string",
- "label": "string",
- "value": "string"
}, - "description": "string",
- "disable_on_mobile_embedded": true,
- "enable_dark_theme": true,
- "filtered_words": "string",
- "group_by_date": true,
- "groups": [
- {
- "id": "string",
- "group_banner_url": "string",
- "group_bio": "string",
- "group_name": "string",
- "group_links": [
- {
- "generated_key": "string",
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "help_link_url": "string",
- "icon_name": "airport",
- "id": "string",
- "iframe_tag": "string",
- "image_url": "string",
- "login_button_text": "string",
- "panel_name": "string",
- "panel_type": "shopify",
- "people": [
- {
- "id": "string",
- "person_bio": "string",
- "person_name": "string",
- "person_title": "string",
- "person_image_url": "string",
- "person_links": [
- {
- "link_text": "string",
- "link_url": "string",
- "link_icon_name": "airport"
}
], - "created": 0,
- "last_modified": 0
}
], - "playlist_id": "string",
- "questions": [
- {
- "array_id": "string",
- "poll_id": "string"
}
], - "quests": [
- {
- "array_id": "string",
- "quest_id": "string"
}
], - "rules_link_url": "string",
- "schedule_type_renderer": {
- "schedule_type": "calendar",
- "source_channels": [
- "string"
], - "manual_events": [
- {
- "array_id": "string",
- "end_time": 0,
- "name": "string",
- "location": "string",
- "more_info": "string",
- "references": [
- "string"
]
}
]
}, - "show_completed_count": true,
- "sources": {
- "array_id": "string",
- "source": "string"
}, - "system_image": "string",
- "system_name": "string",
- "system_welcome_message": "string",
- "url": "string"
}, - "collection": "panels",
- "site_id": "string",
- "slug": "string",
- "type": "string",
- "created": 0,
- "last_modified": 0
}
Playlists are video collections you can import from Youtube or create from videos already uploaded to your site. To create playlists in your site UI, go to Admin > Library > ADD NEW > PLAYLIST.
Get site playlists
Gets a site's playlists with possible filter options. No filter options returns all.
Sample call (gets all):
curl 'https://api.maestro.io/playlist/v1?sortDirection=-1&sortBy=title' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
query Parameters
limit | string Limit to return, default is 50 |
offset | string Offset from beginning |
sortBy | string Sort by field |
sortDirection | string Sort direction - ascending(1), descending(-1) |
property | string Playlist property filter, i.e., /v1?title=Elvis |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/playlist/v1/?title=myTitle, { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "pagination": {
- "limit": 0,
- "offset": 0,
- "pageResults": 0,
- "searchFields": [
- "string"
], - "sortBy": "string",
- "sortDirection": "string",
- "totalCount": 0
}, - "results": [
- {
- "_id": "string",
- "siteId": "string",
- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
}
Create playlist
Creates a playlist from videos that have already been added to site.
Sample call:
curl -X POST 'https://api.maestro.io/playlist/v1' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID> \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"title":"Rolling Stones", "description": "Stones favorites",\ "members":[{"id":"60b612985c59df002d5dc235","schema":"video"}, \ {"id":"60b612bc01b250002df2b994","schema":"video"}]}
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to create playlist
title required | string Playlist title |
description | string Playlist description |
required | Array of objects (Member) |
tags | Array of arrays Metadata tags |
Responses
Request samples
- Payload
- javascript
{- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "tags": [ ]
}
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get playlists
Get playlists given their IDs in the path.
Sample call:
curl 'https://api.maestro.io/playlist/v1/list?ids=<playlist ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
query Parameters
ids | string Playlist IDs, comma separated. |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "playlists": null
}
Get playlist
Gets a playlist given its ID in the path.
Sample call:
curl 'https://api.maestro.io/playlist/v1/<playlist ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Sample return:
{"_id":"<playlist ID>","siteId":"<site ID>","title":"Elvis playlist", \ "members":[{"id":"60b4ee921541e8002d0dd081","schema":"video"}, \ {"id":"60b4ee496c5e0b002da3c5ce","schema":"video"}, \ {"id":"60b4ee26017503002d643f5a","schema":"video"}, \ {"id":"60b4edfc745dd4002d603dfd","schema":"video"}], \ "created":1622470341002,"modified":1622470341002}
Authorizations:
path Parameters
id required | string Playlist ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/playlist/v1/5e95e8c70451f322fc7f219e', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Update playlist
Update existing playlist given its ID in the path.
Sample call (update title):
curl -X POST 'https://api.maestro.io/playlist/v1/<playlist ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID> \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"title":"Rolling Stones playlist", "tags":["Rolling Stones", "Mick Jagger"]}
Authorizations:
path Parameters
id required | string Playlist ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to update playlist
title | string Playlist title |
description | string Playlist description |
Array of objects (Member) Playlist videos | |
tags | Array of arrays Metadata tags |
Responses
Request samples
- Payload
- javascript
{- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "tags": [ ]
}
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete playlist
Deletes a playlist given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/playlist/v1/<playlist ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>
Authorizations:
path Parameters
id required | string Playlist ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.delete('https://api.maestro.io/playlist/v1/5e95e8c70451f322fc7f219e', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Import Youtube playlist
Imports a Youtube playlist and converts it to a Maestro playlist.
Sample call:
curl -X POST 'https://api.maestro.io/playlist/v1/external/import/youtube' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID> \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"url":"https://www.youtube.com/playlist?list=PLBnJv6rImVe8U1Bw1GbWUcICcpQYoxgdx"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Convert playlist URL
url required | string Youtube playlist URL |
Responses
Request samples
- Payload
- javascript
{- "url": "string"
}
Response samples
- 200
{- "_id": "string",
- "siteId": "string",
- "title": "string",
- "description": "string",
- "members": [
- {
- "id": "string",
- "schema": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Validate legacy references of a playlist by id
Get legacy references of a playlist given its ID in the path.
Sample call:
curl 'https://api.maestro.io/playlist/v1/validate-references/<playlist ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ **Sample return:**[{"_id": "61c09d829cd324c51bb34e09","collection": "panels","name": "Next Videos"}]
Authorizations:
path Parameters
id required | string Playlist ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' "Authorization": 'YOUR_BEARER_TOKEN' }; axios.get('https://api.maestro.io/playlist/v1/validate-references/6091bdbcf3fea700a50308c7', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Quests are ways to reward viewers for completing certain actions like answering a trivia question or sharing on Facebook. A quest object usually contains an action object, though one isn't required. To add a Quest in your site UI, go to ADMIN > CUSTOMIZE & CONTROL > Library > ADD NEW > QUEST
Get site quests
Get site quests with filter options. No options returns all.
Sample call (get all):
curl 'https://api.maestro.io/quest/v2' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
query Parameters
search | string Quest title filter. Title is labeled "Name" in the UI. |
sortBy | string Sort by field |
sortDirection | number Sort direction - ascending (1) or descending (-1) |
offset | number Offset from beginning |
limit | number Maximum to return |
property | string Any quest object property to search, i.e., .../v2?rewardType=raffle |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'YOUR_KEY', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/quest/v2/?sortBy=created&sortDirection=-1', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "pagination": {
- "limit": 0,
- "offset": 0,
- "searchFields": [
- "string"
], - "sortDirection": 0,
- "totalCount": 0
}, - "results": [
- {
- "_id": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "callToAction": "string",
- "channelId": "string",
- "kind": "answer:polls:any",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "channelIds": [
- "string"
], - "claimedMessage": "string",
- "description": "string",
- "rewardDescription": "string",
- "rewardImage": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "title": "string",
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0,
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
}
Create quest
Creates a quest
Sample call:
curl -X POST 'https://api.maestro.io/quest/v2' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"actions":[ {"arrayId":"BK2lafgbV","valueRequired":1, \ "kind":"watch:any:video","channelId":"<channel ID>",\ "body":"Watch this video"}],"channelIds":[], "claimedMessage":"Claim your money now",\ "description":"Test quest","rewardDescription":"Money honey", \ "rewardImage":"https://somewebsite.com/someimage.jpeg","rewardType":"prize",\ "siteId":"<site ID>","title":"Quest prize"}'
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Parameters to create quest
title required | string Quest title |
description required | string Quest description |
Array of objects | |
rewardDescription required | string Reward description |
rewardType required | string (RewardType) Enum: "raffle" "prize" "webhook" "prize-service-specific" Reward type |
siteId required | string Site ID Same as your Maestro client ID. |
claimedMessage required | string Claimed message |
rewardInage | string Reward image URL |
timeMaximum | number Quest end date/time in UTC format |
timeMinimum | number Quest start date/time in UTC format |
webhookId | string Webhook ID. User created. Labeled "QUEST ID" in the UI. |
webhookType | string Webhook type. User created, not an enum. Labeled "REWARD TYPE" in the UI. |
webhookValue | number Webhook value. User created. Labeled "REWARD VALUE" in the UI. |
Responses
Request samples
- Payload
{- "title": "string",
- "description": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "kind": "answer:polls:any",
- "callToAction": "string",
- "channelId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "rewardDescription": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "claimedMessage": "string",
- "rewardInage": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0
}
Response samples
- 200
{- "_id": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "callToAction": "string",
- "channelId": "string",
- "kind": "answer:polls:any",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "channelIds": [
- "string"
], - "claimedMessage": "string",
- "description": "string",
- "rewardDescription": "string",
- "rewardImage": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "title": "string",
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0,
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get quest
Gets a quest given its ID in the path.
Sample call:
curl 'https://api.maestro.io/quest/v2/<quest ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Sample return:
{"_id":"<quest ID>","actions":[{"arrayId":"olddhrtvx", \ "kind":"answer:polls:specific","channelId":"6094439a791f9d002d997640", \ "body":"Specific poll quest test","validationValue":"60d0b20ccbe5833465136b26", \ "callToAction":"https://www.somewebsite.com"}],"channelIds":[], \ "claimedMessage":"Poll claimed message","description":"Test answer specific poll quest", \ "rewardDescription":"Poll reward","rewardType":"raffle", \ "siteId":"<site ID>","timeMaximum":1625112000000, \ "timeMinimum":1625025600000,"title":"Answer specific poll quest", \ "created":1624289897208,"modified":1624290661439}
path Parameters
id required | string Quest ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Response samples
- 200
{- "_id": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "callToAction": "string",
- "channelId": "string",
- "kind": "answer:polls:any",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "channelIds": [
- "string"
], - "claimedMessage": "string",
- "description": "string",
- "rewardDescription": "string",
- "rewardImage": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "title": "string",
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0,
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete quest
Deletes a quest given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/quest/v2/<quest ID> \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
path Parameters
id required | string Quest ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Response samples
- 200
{- "_id": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "callToAction": "string",
- "channelId": "string",
- "kind": "answer:polls:any",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "channelIds": [
- "string"
], - "claimedMessage": "string",
- "description": "string",
- "rewardDescription": "string",
- "rewardImage": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "title": "string",
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0,
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Replace quest
Replace quest given its ID in the path.
path Parameters
id required | string Quest ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Parameters to replace quest
title required | string Quest title |
description required | string Quest description |
Array of objects | |
rewardDescription required | string Reward description |
rewardType required | string (RewardType) Enum: "raffle" "prize" "webhook" "prize-service-specific" Reward type |
siteId required | string Site ID. Same as your Maestro client ID. |
claimedMessage required | string Claimed message |
rewardInage | string Reward image URL |
timeMaximum | number Quest end date/time in UTC format |
timeMinimum | number Quest start date/time in UTC format |
webhookId | string Webhook ID. User created. Labeled "QUEST ID" in the UI. |
webhookType | string Webhook type. User created, not an enum. Labeled "REWARD TYPE" in the UI. |
webhookValue | number Webhook value. User created. Labeled "REWARD VALUE" in the UI. |
Responses
Request samples
- Payload
{- "title": "string",
- "description": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "kind": "answer:polls:any",
- "callToAction": "string",
- "channelId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "rewardDescription": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "claimedMessage": "string",
- "rewardInage": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0
}
Response samples
- 200
{- "_id": "string",
- "actions": [
- {
- "arrayId": "string",
- "body": "string",
- "callToAction": "string",
- "channelId": "string",
- "kind": "answer:polls:any",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "validationValue": "string",
- "valueRequired": 0
}
], - "channelIds": [
- "string"
], - "claimedMessage": "string",
- "description": "string",
- "rewardDescription": "string",
- "rewardImage": "string",
- "rewardType": "raffle",
- "siteId": "string",
- "timeMaximum": 0,
- "timeMinimum": 0,
- "title": "string",
- "webhookId": "string",
- "webhookType": "string",
- "webhookValue": 0,
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get site
Get site object
Sample call:
curl 'https://api.maestro.io/site/v1/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your client ID', ['x-maestro-client-id']: 'Your developer API key' }; axios.get('https://api.maestro.io/site/v1/', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "collections": {
- "ads": {
- "slug": "string"
}, - "articles": {
- "slug": "string"
}, - "categories": {
- "slug": "string"
}, - "channels": {
- "slug": "string"
}, - "episodes": {
- "slug": "string"
}, - "panel_sets": {
- "slug": "string"
}, - "panels": {
- "slug": "string"
}, - "people": {
- "slug": "string"
}, - "playlists": {
- "slug": "string"
}, - "polls": {
- "slug": "string"
}, - "shows": {
- "slug": "string"
}, - "tags": {
- "slug": "string"
}, - "videos": {
- "slug": "string"
}
}, - "contract": {
- "service_charge_rate": 0,
- "servicechargerate": 0
}, - "devicelimit": 0,
- "features": { },
- "last_modified": 0,
- "mentor": {
- "add_socials": true,
- "finish": true,
- "init_theme": true,
- "pick_theme": true,
- "welcome": true,
- "welcome_user": true
}, - "name": "string",
- "package": {
- "core": "string",
- "id": "string",
- "version": "string"
}, - "regions": {
- "channel-select": {
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
]
}, - "state": "string"
}, - "featured": {
- "background": "string",
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
], - "state": "string"
}, - "footer": {
- "actions": [
- {
- "content": {
- "html": "string",
- "image": "string",
- "kind": "string",
- "menu": [
- {
- "content": {
- "image": "string",
- "kind": "string",
- "url": "string"
}, - "icon": "airport",
- "text": "string"
}
], - "url": "string"
}, - "display": {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "text": "string"
}, - "icon": "airport",
- "kind": "string",
- "name": "string",
- "url": "string"
}
], - "background": "string",
- "footer_links": {
- "array_id": "string",
- "kind": "string",
- "name": "string",
- "url": "string"
}, - "hashtag": "string",
- "links": [
- {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "url": "string"
}
], - "newsletter": {
- "html": "string",
- "kind": "string",
- "text": "string"
}, - "sharing": [
- {
- "description": "string",
- "hashtag": "string",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "title": "string",
- "tweet_text": "string"
}
], - "socials": [
- {
- "array_id": "string",
- "icon": "airport",
- "title": "string",
- "url": "string"
}
], - "state": "string",
- "tweet_message": "string"
}, - "header": {
- "authentication": {
- "battlenet": true,
- "coachella": true,
- "facebook": true,
- "faceit": true,
- "maestro": true,
- "openid": true,
- "origin": true,
- "playstation": true,
- "twitch": true,
- "uplay": true,
- "wargaming": true,
- "xbox": true
}, - "background": "string",
- "default_logo": {
- "logo_link": "string",
- "logo_mobile": "string",
- "logo_title": "string",
- "logo_web": "string"
}, - "default_profile": "string",
- "logo": "string",
- "logo_link": "string",
- "mobile": {
- "background": "string",
- "logo": "string"
}, - "mobile_logo": "string",
- "profile_images": [
- {
- "image": "string",
- "title": "string",
- "url": "string"
}
], - "state": "string"
}, - "navigation": {
- "items": [
- {
- "array_id": "string",
- "has_menu": "string",
- "image": "string",
- "link": "string",
- "text": "string"
}
], - "state": "string"
}, - "player": {
- "autoplay_youtube": true,
- "show_video_embed": true,
- "show_video_title": true,
- "show_video_url": true,
- "socials": {
- "facebook": {
- "active": true
}, - "twitter": {
- "active": true
}
}, - "twitch_api": {
- "client_id": "string",
- "redirect_uri": "string"
}
}, - "settings": {
- "allow_new_admin": true,
- "code_injection": {
- "footer": "string",
- "header": "string"
}, - "custom_emails": {
- "from_email": "string",
- "reply_to_email": "string",
- "subject_line": "string",
- "subscription_receipt_template": "string"
}, - "customer_profile": {
- "logo": "string",
- "name": "string"
}, - "default_streaming_provider": "string",
- "domain": {
- "url": "string"
}, - "email": {
- "closing": "string",
- "copyright": "string",
- "from": "string",
- "mailing_address": "string",
- "signature": "string"
}, - "events": [
- {
- "from": 0,
- "name": "string",
- "to": 0
}
], - "home_id": "string",
- "icons": {
- "apple_16_x_16": "string",
- "apple_167_x_167": "string",
- "apple_180_x_180": "string",
- "favicon_128_x_128": "string",
- "favicon_196_x_196": "string",
- "favicon_228_x_228": "string"
}, - "security": {
- "password": "string"
}, - "transitions": {
- "mobile": "string",
- "web": "string"
}, - "user-segments": [
- {
- "data": [
- {
- "kind": "string",
- "type": "string",
- "location": "string"
}
], - "name": "string"
}
], - "user_profiles": {
- "change_name": true,
- "profile_images": [
- {
- "is_admin": true,
- "url": "string"
}
]
}, - "seo": {
- "title": "string",
- "image": "string",
- "keywords": [
- "string"
], - "description": "string"
}, - "localization": {
- "allow_autotranslate": true,
- "base_language": "string"
}, - "login": {
- "privacy": "string",
- "terms": "string",
- "text": "string",
- "marketing_optin": true,
- "marketing_optin_label": "string"
}, - "device_limit": 0,
- "settings_id": "string",
- "shards": [
- "string"
], - "slug": "string",
- "style": {
- "active_color": "string",
- "background": "string",
- "body_font": "string",
- "content_background_color": "string",
- "font": "string",
- "kind": "string",
- "theme": "string",
- "title_background_color": "string",
- "title_font": "string",
- "title_text_color": "string"
}, - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
}
Replace site
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Request Body schema: application/json
_id | string Site ID |
object | |
object | |
devicelimit | number Device limit |
features | object Site Features |
last_modified | number When last modified in UNIX time |
object | |
name | string Site name |
object | |
object | |
object | |
object | |
object | |
object | |
object | |
object |
Responses
Request samples
- Payload
- javascript
{- "_id": "string",
- "collections": {
- "ads": {
- "slug": "string"
}, - "articles": {
- "slug": "string"
}, - "categories": {
- "slug": "string"
}, - "channels": {
- "slug": "string"
}, - "episodes": {
- "slug": "string"
}, - "panel_sets": {
- "slug": "string"
}, - "panels": {
- "slug": "string"
}, - "people": {
- "slug": "string"
}, - "playlists": {
- "slug": "string"
}, - "polls": {
- "slug": "string"
}, - "shows": {
- "slug": "string"
}, - "tags": {
- "slug": "string"
}, - "videos": {
- "slug": "string"
}
}, - "contract": {
- "service_charge_rate": 0,
- "servicechargerate": 0
}, - "devicelimit": 0,
- "features": { },
- "last_modified": 0,
- "mentor": {
- "add_socials": true,
- "finish": true,
- "init_theme": true,
- "pick_theme": true,
- "welcome": true,
- "welcome_user": true
}, - "name": "string",
- "package": {
- "core": "string",
- "id": "string",
- "version": "string"
}, - "regions": {
- "channel-select": {
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
]
}, - "state": "string"
}, - "featured": {
- "background": "string",
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
], - "state": "string"
}, - "footer": {
- "actions": [
- {
- "content": {
- "html": "string",
- "image": "string",
- "kind": "string",
- "menu": [
- {
- "content": {
- "image": "string",
- "kind": "string",
- "url": "string"
}, - "icon": "airport",
- "text": "string"
}
], - "url": "string"
}, - "display": {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "text": "string"
}, - "icon": "airport",
- "kind": "string",
- "name": "string",
- "url": "string"
}
], - "background": "string",
- "footer_links": {
- "array_id": "string",
- "kind": "string",
- "name": "string",
- "url": "string"
}, - "hashtag": "string",
- "links": [
- {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "url": "string"
}
], - "newsletter": {
- "html": "string",
- "kind": "string",
- "text": "string"
}, - "sharing": [
- {
- "description": "string",
- "hashtag": "string",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "title": "string",
- "tweet_text": "string"
}
], - "socials": [
- {
- "array_id": "string",
- "icon": "airport",
- "title": "string",
- "url": "string"
}
], - "state": "string",
- "tweet_message": "string"
}, - "header": {
- "authentication": {
- "battlenet": true,
- "coachella": true,
- "facebook": true,
- "faceit": true,
- "maestro": true,
- "openid": true,
- "origin": true,
- "playstation": true,
- "twitch": true,
- "uplay": true,
- "wargaming": true,
- "xbox": true
}, - "background": "string",
- "default_logo": {
- "logo_link": "string",
- "logo_mobile": "string",
- "logo_title": "string",
- "logo_web": "string"
}, - "default_profile": "string",
- "logo": "string",
- "logo_link": "string",
- "mobile": {
- "background": "string",
- "logo": "string"
}, - "mobile_logo": "string",
- "profile_images": [
- {
- "image": "string",
- "title": "string",
- "url": "string"
}
], - "state": "string"
}, - "navigation": {
- "items": [
- {
- "array_id": "string",
- "has_menu": "string",
- "image": "string",
- "link": "string",
- "text": "string"
}
], - "state": "string"
}, - "player": {
- "autoplay_youtube": true,
- "show_video_embed": true,
- "show_video_title": true,
- "show_video_url": true,
- "socials": {
- "facebook": {
- "active": true
}, - "twitter": {
- "active": true
}
}, - "twitch_api": {
- "client_id": "string",
- "redirect_uri": "string"
}
}, - "settings": {
- "allow_new_admin": true,
- "code_injection": {
- "footer": "string",
- "header": "string"
}, - "custom_emails": {
- "from_email": "string",
- "reply_to_email": "string",
- "subject_line": "string",
- "subscription_receipt_template": "string"
}, - "customer_profile": {
- "logo": "string",
- "name": "string"
}, - "default_streaming_provider": "string",
- "domain": {
- "url": "string"
}, - "email": {
- "closing": "string",
- "copyright": "string",
- "from": "string",
- "mailing_address": "string",
- "signature": "string"
}, - "events": [
- {
- "from": 0,
- "name": "string",
- "to": 0
}
], - "home_id": "string",
- "icons": {
- "apple_16_x_16": "string",
- "apple_167_x_167": "string",
- "apple_180_x_180": "string",
- "favicon_128_x_128": "string",
- "favicon_196_x_196": "string",
- "favicon_228_x_228": "string"
}, - "security": {
- "password": "string"
}, - "transitions": {
- "mobile": "string",
- "web": "string"
}, - "user-segments": [
- {
- "data": [
- {
- "kind": "string",
- "type": "string",
- "location": "string"
}
], - "name": "string"
}
], - "user_profiles": {
- "change_name": true,
- "profile_images": [
- {
- "is_admin": true,
- "url": "string"
}
]
}, - "seo": {
- "title": "string",
- "image": "string",
- "keywords": [
- "string"
], - "description": "string"
}, - "localization": {
- "allow_autotranslate": true,
- "base_language": "string"
}, - "login": {
- "privacy": "string",
- "terms": "string",
- "text": "string",
- "marketing_optin": true,
- "marketing_optin_label": "string"
}, - "device_limit": 0,
- "settings_id": "string",
- "shards": [
- "string"
], - "slug": "string",
- "style": {
- "active_color": "string",
- "background": "string",
- "body_font": "string",
- "content_background_color": "string",
- "font": "string",
- "kind": "string",
- "theme": "string",
- "title_background_color": "string",
- "title_font": "string",
- "title_text_color": "string"
}, - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
}
Response samples
- 200
{- "_id": "string",
- "collections": {
- "ads": {
- "slug": "string"
}, - "articles": {
- "slug": "string"
}, - "categories": {
- "slug": "string"
}, - "channels": {
- "slug": "string"
}, - "episodes": {
- "slug": "string"
}, - "panel_sets": {
- "slug": "string"
}, - "panels": {
- "slug": "string"
}, - "people": {
- "slug": "string"
}, - "playlists": {
- "slug": "string"
}, - "polls": {
- "slug": "string"
}, - "shows": {
- "slug": "string"
}, - "tags": {
- "slug": "string"
}, - "videos": {
- "slug": "string"
}
}, - "contract": {
- "service_charge_rate": 0,
- "servicechargerate": 0
}, - "devicelimit": 0,
- "features": { },
- "last_modified": 0,
- "mentor": {
- "add_socials": true,
- "finish": true,
- "init_theme": true,
- "pick_theme": true,
- "welcome": true,
- "welcome_user": true
}, - "name": "string",
- "package": {
- "core": "string",
- "id": "string",
- "version": "string"
}, - "regions": {
- "channel-select": {
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
]
}, - "state": "string"
}, - "featured": {
- "background": "string",
- "pages": [
- {
- "array_id": "string",
- "image": "string",
- "image_active": "string",
- "page": {
- "_id": "string",
- "seo": {
- "title": "string"
}, - "slug": "string"
}
}
], - "state": "string"
}, - "footer": {
- "actions": [
- {
- "content": {
- "html": "string",
- "image": "string",
- "kind": "string",
- "menu": [
- {
- "content": {
- "image": "string",
- "kind": "string",
- "url": "string"
}, - "icon": "airport",
- "text": "string"
}
], - "url": "string"
}, - "display": {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "text": "string"
}, - "icon": "airport",
- "kind": "string",
- "name": "string",
- "url": "string"
}
], - "background": "string",
- "footer_links": {
- "array_id": "string",
- "kind": "string",
- "name": "string",
- "url": "string"
}, - "hashtag": "string",
- "links": [
- {
- "icon": "airport",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "url": "string"
}
], - "newsletter": {
- "html": "string",
- "kind": "string",
- "text": "string"
}, - "sharing": [
- {
- "description": "string",
- "hashtag": "string",
- "image": "string",
- "kind": "string",
- "name": "string",
- "text": "string",
- "title": "string",
- "tweet_text": "string"
}
], - "socials": [
- {
- "array_id": "string",
- "icon": "airport",
- "title": "string",
- "url": "string"
}
], - "state": "string",
- "tweet_message": "string"
}, - "header": {
- "authentication": {
- "battlenet": true,
- "coachella": true,
- "facebook": true,
- "faceit": true,
- "maestro": true,
- "openid": true,
- "origin": true,
- "playstation": true,
- "twitch": true,
- "uplay": true,
- "wargaming": true,
- "xbox": true
}, - "background": "string",
- "default_logo": {
- "logo_link": "string",
- "logo_mobile": "string",
- "logo_title": "string",
- "logo_web": "string"
}, - "default_profile": "string",
- "logo": "string",
- "logo_link": "string",
- "mobile": {
- "background": "string",
- "logo": "string"
}, - "mobile_logo": "string",
- "profile_images": [
- {
- "image": "string",
- "title": "string",
- "url": "string"
}
], - "state": "string"
}, - "navigation": {
- "items": [
- {
- "array_id": "string",
- "has_menu": "string",
- "image": "string",
- "link": "string",
- "text": "string"
}
], - "state": "string"
}, - "player": {
- "autoplay_youtube": true,
- "show_video_embed": true,
- "show_video_title": true,
- "show_video_url": true,
- "socials": {
- "facebook": {
- "active": true
}, - "twitter": {
- "active": true
}
}, - "twitch_api": {
- "client_id": "string",
- "redirect_uri": "string"
}
}, - "settings": {
- "allow_new_admin": true,
- "code_injection": {
- "footer": "string",
- "header": "string"
}, - "custom_emails": {
- "from_email": "string",
- "reply_to_email": "string",
- "subject_line": "string",
- "subscription_receipt_template": "string"
}, - "customer_profile": {
- "logo": "string",
- "name": "string"
}, - "default_streaming_provider": "string",
- "domain": {
- "url": "string"
}, - "email": {
- "closing": "string",
- "copyright": "string",
- "from": "string",
- "mailing_address": "string",
- "signature": "string"
}, - "events": [
- {
- "from": 0,
- "name": "string",
- "to": 0
}
], - "home_id": "string",
- "icons": {
- "apple_16_x_16": "string",
- "apple_167_x_167": "string",
- "apple_180_x_180": "string",
- "favicon_128_x_128": "string",
- "favicon_196_x_196": "string",
- "favicon_228_x_228": "string"
}, - "security": {
- "password": "string"
}, - "transitions": {
- "mobile": "string",
- "web": "string"
}, - "user-segments": [
- {
- "data": [
- {
- "kind": "string",
- "type": "string",
- "location": "string"
}
], - "name": "string"
}
], - "user_profiles": {
- "change_name": true,
- "profile_images": [
- {
- "is_admin": true,
- "url": "string"
}
]
}, - "seo": {
- "title": "string",
- "image": "string",
- "keywords": [
- "string"
], - "description": "string"
}, - "localization": {
- "allow_autotranslate": true,
- "base_language": "string"
}, - "login": {
- "privacy": "string",
- "terms": "string",
- "text": "string",
- "marketing_optin": true,
- "marketing_optin_label": "string"
}, - "device_limit": 0,
- "settings_id": "string",
- "shards": [
- "string"
], - "slug": "string",
- "style": {
- "active_color": "string",
- "background": "string",
- "body_font": "string",
- "content_background_color": "string",
- "font": "string",
- "kind": "string",
- "theme": "string",
- "title_background_color": "string",
- "title_font": "string",
- "title_text_color": "string"
}, - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
}
Replace site's features
Authorizations:
path Parameters
siteId required | string |
header Parameters
super-api-key required | string Your Super API key |
Request Body schema: application/json
access_code | boolean Access Code flag |
achievements | boolean Acheivements flag |
apple_pay | boolean Apple pay flag |
billing | boolean Billing admin flag |
code_injection | boolean Code Injection flag |
developer | boolean Developer flag |
earnings | boolean Earnings Dashboard flag |
hide_copyright | boolean Hide copyright flag |
hide_gdpr | boolean Hide GDPR banner flag |
hide_maestro_logo | boolean Hide maestro logo flag |
insights_analytics | boolean Insights Analytics flag |
gdpr | boolean Show GDPR banner flag |
generate_captions | boolean Generate Captions flag |
google_pay | boolean Google pay flag |
maestro_support | boolean Maestro support flag |
object | |
revenue | boolean Revenue flag |
secure_vods | boolean Secure VODs flag |
secure_streams | boolean Secure Streams flag |
shopify | boolean Shopify flag |
streaming | boolean Streaming flag |
streams_expire | boolean Streams expire flag |
stream_provider_account | boolean Stream provider account flag |
studio_stream | boolean Stream provider account flag |
support_4_k | boolean 4K Stream flag |
subscriptions | boolean Subscriptions flag |
uploads_v_2 | boolean uploads v2 flag |
vod_uploads | boolean VOD uploads flag |
Responses
Request samples
- Payload
- javascript
{- "access_code": true,
- "achievements": true,
- "apple_pay": true,
- "billing": true,
- "code_injection": true,
- "developer": true,
- "earnings": true,
- "hide_copyright": true,
- "hide_gdpr": true,
- "hide_maestro_logo": true,
- "insights_analytics": true,
- "gdpr": true,
- "generate_captions": true,
- "google_pay": true,
- "maestro_support": true,
- "panels": {
- "all_access": true,
- "fortnite_duos_leadberboard": true,
- "pubg_match": true,
- "tips": true
}, - "revenue": true,
- "secure_vods": true,
- "secure_streams": true,
- "shopify": true,
- "streaming": true,
- "streams_expire": true,
- "stream_provider_account": true,
- "studio_stream": true,
- "support_4_k": true,
- "subscriptions": true,
- "uploads_v_2": true,
- "vod_uploads": true
}
RESTful APIs to perform stream operations using stream objects. Go to ADMIN > CUSTOMIZE & CONTROL > Stream to add live streams in your site's UI. For more information, see the Streaming Directly to Maestro help article.
Get site streams
Gets a site's streams.
Sample call:
curl 'https://api.maestro.io/stream/v1' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/stream/v1', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Create stream
Creates a stream. Once your stream is created, a stream key and URL is returned. Follow the instructions at the Streaming Directly to Maestro help article to go live.
Sample call:
curl -X POST 'https://api.maestro.io/stream/v1' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"title": "Prince live"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Parameters to create stream
ingestUrl | string Ingestion URL, i.e., rtmp://origin.cdn.wowza.com:1935/live (rtmp=real time ingestion protocol). |
isLive | boolean Live flag |
playbackUrl | string Playback URL, i.e., https://cdn3.wowza.com/1/MVo0cng1ZGllekxR/ZEwwRit2/hls/live/playlist.m3u8 |
provider | string Provider, , i.e., mux, mux-local, wowza, mux-staging, etc. |
providerStreamId | string Provider stream ID. The ID that a provider like wowza/mux uses to identify the stream (different to our |
siteId | string Site ID |
streamKey | string Stream key - code used to activate a stream. |
title required | string Stream title. |
Responses
Request samples
- Payload
- javascript
{- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string"
}
Response samples
- 200
[- {
- "_id": "string",
- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Get stream
Gets a stream given its ID in the path.
Sample call:
curl 'https://api.maestro.io/stream/v1/<stream ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Sample return:
{"_id":"<stream ID>","fallbackImageUrl":"https://sapphire.maestro.io/media/v1/5d7ff7eb5b741c00a4aca70c/5e3cad7c4f6b3200a4512dea.png", "ingestUrl":"rtmp://global-live.mux.com:5222/app","isLive":false,"playbackUrl":"https://stream.mux.com/ZmIgOSRW7HOlP01006lThruibdk92tZFBLI1gbyTYqPW8.m3u8", "provider":"mux-local","providerStreamId":"5GKcvAGyE5OS0200ZI9Z64L00Z3JJVY8w8QEyDtT8lbKPI", "siteId":"<site ID>","streamKey":"061fbd8f-8e0a-81c8-0159-a637a0424e5d", "title":"Mux Livestream Test","created":1592960359968,"modified":1592960359968,"tags":[]}
Authorizations:
path Parameters
id required | string Stream ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/stream/v1/<stream ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "_id": "string",
- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete stream
Deletes a stream given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/stream/v1/<stream ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Authorizations:
path Parameters
id required | string Stream ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'delete', url: 'https://api.maestro.io/stream/v1/<stream ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'Authorization': 'Bearer <Your JWT>c' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Start stream
Starts a stream given its ID in the path.
Sample call:
curl -X POST 'https://api.maestro.io/stream/v1/start/<stream ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
id required | string Stream ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'post', url: 'https://api.maestro.io/stream/v1/start/<stream ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Stop stream
Stops a stream given its ID in the path.
Sample call:
curl -X POST 'https://api.maestro.io/stream/v1/stop/<stream ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
id required | string Stream ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'post', url: 'https://api.maestro.io/stream/v1/stop/<stream ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "ingestUrl": "string",
- "isLive": true,
- "playbackUrl": "string",
- "provider": "string",
- "providerStreamId": "string",
- "siteId": "string",
- "streamKey": "string",
- "title": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Besides the fields included in all webhooks by default, the eventData
object will look like
the following for streaming related webhooks:
{ event<string>: 'admin.wentLive' | 'admin.wentOffline' channelId<string>: the maestro channel's ID channelIcon<string | undefined | null>: the channel's icon channelSeoDescription<string | undefined | null>: the channel's SEO description channelSeoImage<string | undefined | null>: the channel's SEO Image URL channelSeoKeywords<string | undefined | null>: the channel's SEO keywords liveBroadcastId<string>: the ID for the live stream recording to link the VOD siteId<string>: the maestro site ID streamId<string>: the stream ID }
Non-RESTful service for streaming providers to establish an API contract with Maestro.
Authorizations:
Request Body schema: application/json
Request body Stream Provider sends to Maestro to update or register.
canGenerateCaptions | boolean |
canSupport4K | boolean |
name | string |
object |
Responses
Request samples
- Payload
- javascript
{- "canGenerateCaptions": true,
- "canSupport4K": true,
- "name": "string",
- "urls": {
- "createStream": "string",
- "deleteStream": "string",
- "startStream": "string",
- "stopStream": "string"
}
}
Response samples
- 200
{- "id": "string",
- "authorization": "string"
}
Add account subscription
Adds subscription entitlement to account.
Sample call:
curl -X POST 'https://api.maestro.io/subscription/v2/grant' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -d "accountId=<Account ID>&sku=example-entitlement"
Authorizations:
header Parameters
x-maestro-client-id required | string Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Request body to grant subscription
accountId required | string Account ID |
sku required | string Entitlement subscription being added to account, i.e., my-entitlement-subscription |
Responses
Request samples
- Payload
- javascript
{- "accountId": "string",
- "sku": "string"
}
Revoke account subscription
Revokes an account's subscription.
Sample call:
curl -X POST 'https://api.maestro.io/subscription/v2/revoke' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -d "accountId=<Account ID>&sku=example-entitlement"
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: text/plain
Request body to revoke subscription
accountId required | string Account ID |
sku required | string Entitlement subscription revoked from account, i.e., my-entitlement-subscription |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'post', url: 'https://api.maestro.io/subscription/v2/revoke?sku=my-new-entitlement&accountId=<account ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key', 'Authorization': 'Bearer <Your JWT token>' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Get site subscriptions
Gets subscriptions from site with filter options.
Sample call:
curl 'https://api.maestro.io/subscription/v2/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>'
Authorizations:
query Parameters
limit | number Max to return, default is 50. |
offset | number Offset from beginning |
sortBy | string Field to sort by, i.e., name |
sortDirection | number Sort order - 1=ascending, -1=descending |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/subscription/v2/', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
Create subscription
Creates a new site entitlement subscription
Sample call:
curl -X POST 'https://api.maestro.io/subscription/v2/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>' \ -d "siteId=<Site ID>&sku=example-entitlement&name='Example Entitlement'&subscriptionProvider=maestro&recurrence=once"
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Create subscription body parameters
name required | string Subscription entitlement name |
siteId required | string Site ID |
sku required | string Entitlement subscription being added to account, i.e., my-entitlement-subscription |
subscriptionProvider required | string Subscription entitlement provider, i.e., maestro |
Array of objects (Price) | |
recurrence | string (SubscriptionRecurrenceType) Enum: "once" "month" "year" |
Responses
Request samples
- Payload
- javascript
{- "name": "string",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once"
}
Response samples
- 200
{- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get subscription (SKU)
Gets a subscription given a subscription SKU in the path.
Sample call:
curl 'https://api.maestro.io/subscription/v2/sku/some-sku-entitlement' \ -H 'x-maestro-client-id: <Your client ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Authorizations:
path Parameters
sku required | string Subscription SKU |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/subscription/v2/some-sku-entitlement', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get subscription (ID)
Gets a subscription given its ID in the path.
Sample call:
curl 'https://api.maestro.io/subscription/v2/<subscriptionID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>' \
Sample return:
{"_id":"<subscription ID>","name":"'New Sub Entitlement'", \ "recurrence":"month","siteId":"<site ID>","sku":"new-sub-entitlement", \ "stripePlanId":"plan_JYqAlDYTI8u233","subscriptionProvider":"maestro", \ "created":1622119116324,"modified":1622119116749,"tags":[]}
Authorizations:
path Parameters
id required | string Subscription ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/subscription/v2/<subscription ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Update subscription
Updates a site subscription given its ID in path.
curl -X POST 'https://api.maestro.io/subscription/v2/<subscription ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API Key ID>' \ -d "recurrence=year"
Authorizations:
path Parameters
id required | string Subscription ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Request Body schema: application/json
Update subscription body parameters
name required | string Subscription entitlement name |
sku required | string Entitlement subscription being added to account, i.e., my-entitlement-subscription |
subscriptionProvider required | string Subscription entitlement provider, i.e., maestro |
Array of objects (Price) | |
recurrence | string (SubscriptionRecurrenceType) Enum: "once" "month" "year" |
Responses
Request samples
- Payload
- javascript
{- "name": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once"
}
Response samples
- 200
{- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete subscription
Delete a subscription given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/subscription/v2/<subscription ID> \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your Developer API key ID>'
Authorizations:
path Parameters
id required | string Subscription ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'delete', url: 'https://api.maestro.io/subscription/v2/60a4c60a49e6ca002d9108f7', headers: { 'x-maestro-client-id': 'Your client ID', 'x-maestro-developer-key': 'Your developer API key' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Get site account entitlements
Get account subscription entitlements for a site.
Sample call:
curl 'https://api.maestro.io/subscription/v2/account' \ -H 'x-maestro-client-id: <Your client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/subscription/v2/account/ headers: { 'x-maestro-client-id': '6094439a791f9d002d99762d', 'Authorization': 'Bearer <Your JWT token>' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
]
Get account entitlements
Get an account's subscription entitlements given its ID in the path.
Sample call:
curl 'https://api.maestro.io/subscription/v2/account/<account ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/subscription/v2/account/<account ID>', headers: { 'x-maestro-client-id': '6094439a791f9d002d99762d', 'Authorization': 'Bearer <Your JWT token>' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
[- {
- "_id": "string",
- "accountId": "string",
- "dateGranted": "string",
- "entitlement": {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}, - "grantedMethod": "accessCode",
- "presentmentCurrency": "string",
- "siteId": "string",
- "status": "active",
- "created": 0,
- "modified": 0
}
]
User profiles are linked to accounts. In common, they have the sane name
field. You can use the Get accounts and user profiles API to get a site's accounts and user profiles.
Get caller's user profile
Gets caller's user profile
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro client ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.get('https://api.maestro.io/userprofile/v1', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "accountId": "string",
- "name": "string",
- "created": 0,
- "modified": 0
}
Get user profile
Gets a user profile given its ID in the path
Authorizations:
path Parameters
id required | string |
header Parameters
x-maestro-client-id required | string Your Maestro client ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your developer API key', ['x-maestro-client-id']: 'Your client ID' }; axios.get('https://api.maestro.io/userprofile/v1', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "_id": "string",
- "accountId": "string",
- "name": "string",
- "created": 0,
- "modified": 0
}
Get video
Gets a video given its ID in path.
Sample call:
curl 'https://api.maestro.io/video/v3/<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Sample return:
{{"_id":"<video ID>","description":"Video Clip from Elvis Presley 1957 - Teddy Bear", \ "durationSeconds":127,"player":"youtube","siteId":"<site ID>","subscriptions":[], \ "thumbnail":"https://i.ytimg.com/vi/89MihWd6zKk/mqdefault.jpg", \ "title":"Elvis Presley - Teddy Bear - 1957","type":"vod", \ "url":"https://www.youtube.com/watch?v=89MihWd6zKk", \ "created":1622470182387,"modified":1622470182387}
Authorizations:
path Parameters
id required | string Video ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Update video
Updates a video object given its ID in the path.
Sample call:
curl -X POST 'https://api.maestro.io/video/v3/<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID> \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"player": "youtube"}'
Authorizations:
path Parameters
id required | string Video ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to update a video
durationSeconds | string Video length in seconds |
player | string (PlayerTypes) Enum: "youtube" "dailymotion" "facebook" "facebook_live" "facemask" "file" "mixcloud" "mlg" "iframe" "maestro" "soundcloud" "twitch" "vimeo" |
title | string Video title |
description | string Video description |
thumbnail | string Video thumbnail URL |
type | string (VideoTypes) Enum: "vod" "livestream" |
url | string Video URL |
tags | Array of strings Metadata tags |
Responses
Request samples
- Payload
{- "durationSeconds": "string",
- "player": "youtube",
- "title": "string",
- "description": "string",
- "thumbnail": "string",
- "type": "vod",
- "url": "string",
- "tags": [
- "string"
]
}
Response samples
- 200
{- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Delete video
Deletes a video given its ID in the path.
Sample call:
curl -X DELETE 'https://api.maestro.io/video/v3/<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
path Parameters
id required | string Video ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Get site videos
Gets site videos with filter options. No filter options returns all.
Sample call (gets all):
curl 'https://api.maestro.io/video/v3/' \ -H 'x-maestro-client-id: <Your Client ID>' -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
query Parameters
search | string Title search |
offset | number Offset from beginning |
limit | number Max number to retrieve, default is 50 |
sortBy | string Sort by field |
sortDirection | number Sort ascending (1) or descending (-1) |
property | string Any video property, i.e., .../v3?player=youtube |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "pagination": {
- "limit": 0,
- "offset": 0,
- "pageResults": 0,
- "search": "string",
- "searchFields": [
- "string"
], - "sortBy": "string",
- "sortDirection": "string",
- "totalCount": 0
}, - "results": [
- {
- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
}
Add video
Adds a video to the site.
Sample call:
curl -X POST 'https://api.maestro.io/video/v3/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID> \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"durationSeconds":127,"player":"youtube", \ "description":"Elvis is everything, Elvis is everywhere" "title":"Elvis Presley - Teddy Bear - 1957","type":"vod", \ "url":"https://www.youtube.com/watch?v=89MihWd6zKk"}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to add a video
durationSeconds required | string Video length in seconds |
player required | string (PlayerTypes) Enum: "youtube" "dailymotion" "facebook" "facebook_live" "facemask" "file" "mixcloud" "mlg" "iframe" "maestro" "soundcloud" "twitch" "vimeo" |
title required | string Video title |
type required | string (VideoTypes) Enum: "vod" "livestream" |
url required | string Video URL |
thumbnail | string Thumbnail image URL |
description | string Video description |
tags | Array of strings Metadata tags |
Responses
Request samples
- Payload
{- "durationSeconds": "string",
- "player": "youtube",
- "title": "string",
- "type": "vod",
- "url": "string",
- "thumbnail": "string",
- "description": "string",
- "tags": [
- "string"
]
}
Response samples
- 200
{- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get video data
Gets video data given a video URL
Sample call:
curl 'https://api.maestro.io/video/v3/metadata?url=https://www.youtube.com/watch?v=89MihWd6zKk' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
query Parameters
url required | string Video URL |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get livestream videos
Gets livestream videos with player filter option.
Sample call:
curl 'https://api.maestro.io/video/v3/livestreams' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'x-maestro-developer-key: <Your developer API key ID>
Authorizations:
query Parameters
player | string (PlayerTypes) Enum: "youtube" "dailymotion" "facebook" "facebook_live" "facemask" "file" "mixcloud" "mlg" "iframe" "maestro" "soundcloud" "twitch" "vimeo" Player type filter |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Response samples
- 200
{- "results": [
- {
- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
]
}
Create VOD
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID |
x-maestro-developer-key required | string Your Maestro developer API key |
Request Body schema: application/json
Parameters to create a VOD
durationSeconds required | string Video length in seconds |
streamId required | string Your stream ID |
url required | string Your URL |
Responses
Request samples
- Payload
- javascript
{- "durationSeconds": "string",
- "streamId": "string",
- "url": "string"
}
Response samples
- 200
{- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Add to the video assets
Authorizations:
path Parameters
liveBroadcastId required | string |
header Parameters
x-maestro-client-id required | string Your maestro id |
Request Body schema: application/json
Request body to add assets to videos
title | string Video title |
thumbnail | string Video thumbnail |
Responses
Request samples
- Payload
- javascript
{- "title": "string",
- "thumbnail": "string"
}
Response samples
- 200
{- "_id": "string",
- "description": "string",
- "durationSeconds": 0,
- "player": "youtube",
- "siteId": "string",
- "subscriptions": [
- {
- "_id": "string",
- "name": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "recurrence": "once",
- "siteId": "string",
- "sku": "string",
- "subscriptionProvider": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
], - "thumbnail": "string",
- "title": "string",
- "type": "vod",
- "uploadStatus": "pending",
- "url": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get total views for a video
Get total views for a vod (not including livestreams) given its ID in path.
Sample call:
curl 'https://api.maestro.io/video/v3/stats/total-views/<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>'
Sample return:
100
Authorizations:
path Parameters
id required | string Video ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Response samples
- 200
0
Get total views for a list of videos
Get total views for a list of VODs (including livestreams) given its IDs in path (comma separated).
Sample call (1 video):
curl 'https://api.maestro.io/video/v3/stats/total-views-batch/<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>'
Sample return:
[{ id: '632866517b1c0600308f3d6f' views: 100}]
Sample call (2 videos):
curl 'https://api.maestro.io/video/v3/stats/total-views-batch/<video ID>,<video ID>' \ -H 'x-maestro-client-id: <Your Client ID>'
Sample return:
[ { id: '632866517b1c0600308f3d6f' views: 100}, { id: '61ae6eceb70e95741f90ec2d' views: 200} ]
Authorizations:
path Parameters
ids required | string Video IDs |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Response samples
- 200
[- {
- "_id": "string",
- "views": 0
}
]
Besides the fields included in all webhooks by default, the eventData
object will look like
the following for video related webhooks:
{ event<string>: 'admin.vodReady' | 'admin.vodDeleted' channelId<string>: the maestro channel's ID liveBroadcastId<string>: the ID for the live stream recording thumbnail<string>: URL for the VOD thumbnail title<string>: VOD title url<string>: HLS playback URL siteId<string>: the maestro site ID streamId<string>: the source stream ID videoId<string>: the maestro VOD ID }
A wallet is created for a user when they first purchase an entitlement. Payment operations are done through Stripe.
Get wallet
Get wallet from caller account.
Sample call:
curl 'https://api.maestro.io/wallet/v1' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT>'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Authorization required | string Bearer <Your JWT> |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { authorization: 'YOUR_JWT_TOKEN', ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('/wallet/v1/recurring/{walletId}/{subscriptionId}', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
- 400
{- "wallet": {
- "_id": "string",
- "balance": 0,
- "ownerId": "string",
- "ownerType": "account",
- "siteId": "string",
- "stripeCustomerId": "string",
- "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
}
Get recurring wallet subscription
Get a wallet's recurring subscription.
Sample call:
curl 'https://api.maestro.io/wallet/v1/recurring/<wallet ID>/<subscription ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Authorizations:
path Parameters
walletId required | string Wallet ID |
subscriptionId required | string Subscription ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { authorization: 'Your JWT', ['x-maestro-client-id']: 'Your client ID' }; axios.get('/wallet/v1/recurring/{walletId}/{subscriptionId}', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
- 400
{- "frequency": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "purchaseDate": 0,
- "status": "string",
- "stripeSubscriptionId": "string"
}
Cancel recurring subscription
Cancel a wallet's recurring subscription.
Authorizations:
path Parameters
walletId required | string Wallet ID |
subscriptionId required | string Subscription ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Request Body schema: application/json
Parameters to cancel subscription
refund required | boolean Initiate a refund to the buyer |
scheduled required | string (Scheduled) Enum: "immediate" "endOfBilling" Scheduled type |
Responses
Request samples
- Payload
- javascript
{- "refund": true,
- "scheduled": "immediate"
}
Response samples
- 200
- 400
{- "success": true
}
Get wallet recurring subscriptions
Get wallet's recurring subscriptions given its ID in the path.
Sample call:
curl 'https://api.maestro.io/wallet/v1/recurring/<wallet ID>' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT>'
Authorizations:
path Parameters
walletId required | string Wallet ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Authorization required | string Bearer |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { authorization: 'Your JWT', ['x-maestro-client-id']: 'Your client ID' }; axios.get('/wallet/v1/recurring/{walletId}', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
- 400
[- {
- "frequency": "string",
- "prices": [
- {
- "currency": "string",
- "default": true,
- "stripePriceId": "string",
- "value": 0
}
], - "purchaseDate": 0,
- "status": "string",
- "stripeSubscriptionId": "string"
}
]
A webhook - a user-defined HTTP callback - lets your application know when things happen within Maestro. Currently, you can enable it for events in the following areas:
- Access codes
- Accounts
- Authorization
- Billing
- Channels
- Shopify
- Streaming
- Video
You can set this up with our APIs or in your site UI (go to Site Settings > Developer and scroll down). If you don't have an API Key yet, you'll need to generate one first to be able to enable webhooks.
Maestro calls your webhook URL with the following data:
{ account: { Maestro account object } | null; eventData: { [key]: any } | null; method: string; originPath: string; service: string; signature: string; webhookUrl: string; }
eventData
- For most services, this will include the body of the HTTP request issued by the user, other metadata ornull
.Channels
,Streaming
andVideo
messages look different. See Channels, Streaming and Video.account
- The user's Maestro account object.originPath
- Path to the Maestro channel originating the call.method
- Request type being made. GET || POST || PUT || DELETEservice
- Service triggering the event notification. For exampleaccount v3
,shopify v1
, etc.signature
- Your Maestro developer API key.webhookUrl
- Your registered POST event notification webhook URL.
Get site webhook
Get site webhook object.
Sample call:
curl 'https://api.maestro.io/webhooks/v1/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'x-maestro-developer-key: <Your developer API key>'
Sample return:
{"enabled":true,"webhookSubscriptions":["accesscode-service-v1", "account-service-v3", "auth-service-v2","billing-service-v1","shopify-service-v1"], "webhookUrl":"http://www.somesite.com/webhook"}
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your Maestro developer API key |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { "x-maestro-developer-key": 'Your client ID', ['x-maestro-client-id']: 'Your developer API key' }; axios.get('https://api.maestro.io/webhooks/v1/', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "enabled": true,
- "webhookUrl": "string",
- "webhookSubscriptions": [
- "string"
]
}
Create webhook
Create site webhook object.
Sample call:
curl -X POST 'https://api.maestro.io/webhooks/v1/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'Authorization: Bearer <Your JWT>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"webhooks":{"enabled": true, "webhookSubscriptions":["accesscode-service-v1", "account-service-v3", "auth-service-v2", "billing-service-v1","shopify-service-v1"], "webhookUrl": "http://www.somewebsite.com/webhook"}}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site IT) |
Authorization required | string Bearer |
Request Body schema: text/plain
Parameters to update webhook object
object | |||||||
|
Responses
Request samples
- javascript
var axios = require('axios'); var data = '{"webhooks":{"enabled": true, "webhookSubscriptions":["accesscode-service-v1", "account-service-v3", "auth-service-v2", "billing-service-v1","shopify-service-v1"], "webhookUrl": "http://www.somewebsite.com/webhook"}}'; var config = { method: 'put', url: 'https://api.maestro.io/webhooks/v1/', headers: { 'x-maestro-client-id': 'Your client ID', 'content-type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer <Your JWT>' }, data : data }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "enabled": true,
- "webhookUrl": "string",
- "webhookSubscriptions": [
- "string"
]
}
Update webhook
Update site webhook object.
Sample call:
curl -X PUT 'https://api.maestro.io/webhooks/v1/' \ -H 'x-maestro-client-id: <Your Maestro ID>' \ -H 'Authorization: Bearer <Your JWT>' \ -H 'content-type: application/json;charset=UTF-8' \ -d '{"webhooks":{"enabled": true, "webhookSubscriptions":["accesscode-service-v1", "account-service-v3", "auth-service-v2", "billing-service-v1","shopify-service-v1"], "webhookUrl": "http://www.somewebsite.com/webhook"}}'
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: text/plain
Parameters to update webhook object
object | |||||||
|
Responses
Request samples
- javascript
var axios = require('axios'); var data = '{"webhooks":{"enabled": true, "webhookSubscriptions":["accesscode-service-v1", "account-service-v3", "auth-service-v2", "billing-service-v1","shopify-service-v1"], "webhookUrl": "http://www.somewebsite.com/webhook"}}'; var config = { method: 'put', url: 'https://api.maestro.io/webhooks/v1/', headers: { 'x-maestro-client-id': 'Your client ID', 'content-type': 'application/json;charset=UTF-8', 'Authorization': 'Bearer <Your JWT>' }, data : data }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "enabled": true,
- "webhookUrl": "string",
- "webhookSubscriptions": [
- "string"
]
}
Authenticate an account
Authenticate an account and return a JWT
header Parameters
x-maestro-client-id required | string Your Maestro Site ID |
Request Body schema: application/json
Parameters to sign in to your account
email required | string Account email |
password required | string Account password |
Responses
Request samples
- Payload
- javascript
{- "email": "string",
- "password": "string"
}
Response samples
- 200
{- "jwt": "string",
- "refreshToken": "string",
- "service": "string"
}
Generate a login intent
Generate a login intent
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Request Body schema: application/json
Parameters to create a login intent
jwt required | string Account email |
name required | string Account name |
provider required | string Service provider |
service required | string Service name |
thirdPartyAccountId required | string Service name |
Responses
Request samples
- Payload
- javascript
{- "jwt": "string",
- "name": "string",
- "provider": "string",
- "service": "string",
- "thirdPartyAccountId": "string"
}
Response samples
- 200
{- "authenticated": true,
- "jwt": "string",
- "service": "string",
- "siteId": "string",
- "token": "string",
- "name": "string",
- "thirdPartyAccountId": "string"
}
Consumes an auth intent and returns a jwt
Consumes an auth intent and returns a jwt.
path Parameters
token required | string Token ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/auth/v2/intent/consume/8a824eef-4ee2-4416-906e-6ba2bd2a0238', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "jwt": "string",
- "refreshToken": "string",
- "service": "string"
}
Add a new Bundle
Adds a new Bundle to your site.
Sample call:
curl -X POST 'https://api.maestro.io/bundle/v1/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>' \ -d "accountId=<Account ID>&sku=example-entitlement"
Authorizations:
header Parameters
x-maestro-client-id required | string Maestro ID |
Authorization required | string Bearer <Your JWT token> |
Request Body schema: application/json
Parameters to craete bundle
_id | string Bundle ID |
name | string Bundle name |
description | string Bundle description |
image | string Bundle image URL |
sku | string Bundle SKU |
siteId | string Site ID |
presentmentCurrency | string Currency Code (USD, EUR, BRL, etc.) |
price | number Bundle price |
Array of objects (BundleItem) | |
created | number When bundle created in UNIX time |
modified | number When bundle last modified in UNIX time |
tags | Array of strings Metadata tags |
Responses
Request samples
- Payload
- javascript
{- "_id": "string",
- "name": "string",
- "description": "string",
- "image": "string",
- "sku": "string",
- "siteId": "string",
- "presentmentCurrency": "string",
- "price": 0,
- "items": [
- {
- "id": "string",
- "type": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get Bundle (ID)
Gets a bundle given its ID in the path.
Sample call:
curl 'https://api.maestro.io/bundle/v1/' \ -H 'x-maestro-client-id: <Your Client ID>' \ -H 'Authorization: Bearer <Your JWT token>'
Sample return:
{ "id": "5f7b9b9b9b9b9b9b9b9b9b9b", "name": "MyBundle", "sku": "my-bundle-1", "price": 100, "presentmentCurrency": "USD", "items": [ { "type": "ticket", "id": "123456789" } ], "description": "MyBundle description", "image": "https://example.com/image.png" }
Authorizations:
path Parameters
id required | string Bundle ID |
header Parameters
x-maestro-client-id required | string Your Maestro ID |
Responses
Request samples
- javascript
var axios = require('axios'); var config = { method: 'get', url: 'https://api.maestro.io/bundle/v1/<BUNDLE_ID>', headers: { 'x-maestro-client-id': 'Your client ID', 'Authorization': 'Bearer <Your JWT token>' } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });
Response samples
- 200
{- "_id": "string",
- "name": "string",
- "description": "string",
- "image": "string",
- "sku": "string",
- "siteId": "string",
- "presentmentCurrency": "string",
- "price": 0,
- "items": [
- {
- "id": "string",
- "type": "string"
}
], - "created": 0,
- "modified": 0,
- "tags": [
- "string"
]
}
Get page by Id
Gets a page given its ID in the path.
Sample call:
curl 'https://api.maestro.io/page/v2/<page ID>' **Sample return:**{"_id":"602ab9311d32aa002d9f6f48","active_renderers":{"livestream":true,"sidebar":true},"collection":"pages","data":{"styles":{},"regions":{},"artwork":{"header":{"logo":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602ad66caa245900a56b02bb.png"},"video":{"background":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602acbf7aa245900a56b02b5.jpg","kind":"images"}},"content":{"live":{"schedule":[{"array_id":"udymJAENT","duration":225,"end_time":"Thu Nov 11 2021 15:36:45 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Thu Nov 11 2021 15:33:00 GMT-0500 (Ecuador Time)","video":{"_id":"602ad17be86c5f00a60c436c","data":{"title":"Ricky Martin - Pégate (Live)"}}},{"array_id":"SVZzDkHt_","duration":1800,"end_time":"Fri Apr 16 2021 17:40:00 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Fri Apr 16 2021 17:10:00 GMT-0500 (Ecuador Time)","video":{"_id":"607a0b4e2ffbcb00a6781e79","data":{"title":"Test Streaming"}}},{"array_id":"31rrdQXer","duration":131,"end_time":"Invalid Date","kind":"video","repeat":"none","show_countdown":false,"start_time":"Mon Feb 15 2021 14:25:00 GMT-0500 (Ecuador Time)","video":{"_id":"602acb10e86c5f00a60c436b","data":{"title":"Introducing Dolby Atmos Music + Coldplay | Dolby Music"}}},{"array_id":"BB_20ihKc","duration":216,"end_time":"Wed Aug 21 2019 17:09:47 GMT-0700 (Pacific Daylight Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Wed Aug 21 2019 17:06:11 GMT-0700 (Pacific Daylight Time)","video":{"_id":"5d5ddbd5452a8d9901a43c03","data":{"name":"Lady GaGa - Poker Face [Official Music Video] HQ"},"slug":"lady-ga-ga-poker-face-official-music-video-hq-5d5ddbd5452a8d9901a43c03"}}]},"offline":{"image":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/618d7a85119de100a74a57d6.jpg","kind":"video","mode":"tv","video":{"_id":"602acf92c50bf5002d285e0e"}}},"countdown":{"start_time":"Tue Jan 04 2022 19:29:00 GMT-0500 (Ecuador Time)","title":"Countdown"},"default_mode":"none","gate":{"active":false,"kind":"none","gate":{"subscriptions":[]}},"name":"Watch","schedule":[{"all_day":"yes","duration":2090,"end_time":"Nov 03 2017 01:00:00 GMT+0000 (GMT)","kind":"video","repeat":"none","start_date":"Nov 03 2017","start_time":"Nov 03 2017 00:00:00 GMT+0000 (GMT)","video":{"_id":"5cd3501f74a7d0005b901b71","data":{"name":"Test Video"},"slug":"test-video"}}],"sidebar":[{"_id":"5cd3501f74a7d0005b901b6f","seo":{"title":"Chat"},"slug":"chat"},{"_id":"5cd3501f74a7d0005b901b70","seo":{"title":"Social"},"slug":"social"}],"welcome_screen":{"active":false,"duration":5,"image":"","mobile_image":""}},"last_modified":1643057286035,"renderers":{"livestream":{"livestream_doc":{"_id":"6050e78c57925500a6842944","created":1615914892950,"duration_seconds":0,"modified":1615914892950,"site_id":"602ab9311d32aa002d9f6f35","thumbnail":"https://static.maestro.io/media/5f32f379c04207002caf9c7f/5f6aa0146a9be500a5f3305f.jpg","title":"Test","type":"livestream"},"livestream_published":false,"stream_id":"612666d1d6be50002ea2b998","video_id":"619299eb7fb8cb002e1b1e60"},"sidebar":{"items":[{"array_id":"ojPS_l1gC","id":"609d932a9f42a53905fdb0a3"},{"array_id":"ry6E89OMl","id":"6197d81234cbd37cca05bbf4"},{"array_id":"7ttEXkxPz","id":"6050e5fdd3f5be0ceeb5c6f9"},{"array_id":"oY-k2TYM7","id":"602acefca8c994a364211454"},{"array_id":"gmrLAxQyM","id":"602ad72d89939c4c86b6bac5"},{"array_id":"TR3Ixxi-O","id":"60391df58f3bcf59cff41661"}]}},"seo":{"description":"lalallala","title":"Watch"},"site_id":"602ab9311d32aa002d9f6f35","slug":"home-page-1","style":{"channel_background_color":"#171e26"},"type":"channel","created":1557352479891,"modified":1643057286035,"tags":[]}
path Parameters
id required | string Page ID |
Responses
Request samples
- javascript
const axios = require('axios'); axios.get('https://api.maestro.io/pages/v2/602ab9311d32aa002d9f6f48') .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
{- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
Get Site's Channels
Gets channels related to a site
Sample call:
curl 'https://api.maestro.io/page/v2/channel' **Sample return:**[{"_id":"602ab9311d32aa002d9f6f48","active_renderers":{"livestream":true,"sidebar":true},"collection":"pages","data":{"styles":{},"regions":{},"artwork":{"header":{"logo":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602ad66caa245900a56b02bb.png"},"video":{"background":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602acbf7aa245900a56b02b5.jpg","kind":"images"}},"content":{"live":{"schedule":[{"array_id":"udymJAENT","duration":225,"end_time":"Thu Nov 11 2021 15:36:45 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Thu Nov 11 2021 15:33:00 GMT-0500 (Ecuador Time)","video":{"_id":"602ad17be86c5f00a60c436c","data":{"title":"Ricky Martin - Pégate (Live)"}}},{"array_id":"SVZzDkHt_","duration":1800,"end_time":"Fri Apr 16 2021 17:40:00 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Fri Apr 16 2021 17:10:00 GMT-0500 (Ecuador Time)","video":{"_id":"607a0b4e2ffbcb00a6781e79","data":{"title":"Test Streaming"}}},{"array_id":"31rrdQXer","duration":131,"end_time":"Invalid Date","kind":"video","repeat":"none","show_countdown":false,"start_time":"Mon Feb 15 2021 14:25:00 GMT-0500 (Ecuador Time)","video":{"_id":"602acb10e86c5f00a60c436b","data":{"title":"Introducing Dolby Atmos Music + Coldplay | Dolby Music"}}},{"array_id":"BB_20ihKc","duration":216,"end_time":"Wed Aug 21 2019 17:09:47 GMT-0700 (Pacific Daylight Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Wed Aug 21 2019 17:06:11 GMT-0700 (Pacific Daylight Time)","video":{"_id":"5d5ddbd5452a8d9901a43c03","data":{"name":"Lady GaGa - Poker Face [Official Music Video] HQ"},"slug":"lady-ga-ga-poker-face-official-music-video-hq-5d5ddbd5452a8d9901a43c03"}}]},"offline":{"image":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/618d7a85119de100a74a57d6.jpg","kind":"video","mode":"tv","video":{"_id":"602acf92c50bf5002d285e0e"}}},"countdown":{"start_time":"Tue Jan 04 2022 19:29:00 GMT-0500 (Ecuador Time)","title":"Countdown"},"default_mode":"none","gate":{"active":false,"kind":"none","gate":{"subscriptions":[]}},"name":"Watch","schedule":[{"all_day":"yes","duration":2090,"end_time":"Nov 03 2017 01:00:00 GMT+0000 (GMT)","kind":"video","repeat":"none","start_date":"Nov 03 2017","start_time":"Nov 03 2017 00:00:00 GMT+0000 (GMT)","video":{"_id":"5cd3501f74a7d0005b901b71","data":{"name":"Test Video"},"slug":"test-video"}}],"sidebar":[{"_id":"5cd3501f74a7d0005b901b6f","seo":{"title":"Chat"},"slug":"chat"},{"_id":"5cd3501f74a7d0005b901b70","seo":{"title":"Social"},"slug":"social"}],"welcome_screen":{"active":false,"duration":5,"image":"","mobile_image":""}},"last_modified":1643057286035,"renderers":{"livestream":{"livestream_doc":{"_id":"6050e78c57925500a6842944","created":1615914892950,"duration_seconds":0,"modified":1615914892950,"site_id":"602ab9311d32aa002d9f6f35","thumbnail":"https://static.maestro.io/media/5f32f379c04207002caf9c7f/5f6aa0146a9be500a5f3305f.jpg","title":"Test","type":"livestream"},"livestream_published":false,"stream_id":"612666d1d6be50002ea2b998","video_id":"619299eb7fb8cb002e1b1e60"},"sidebar":{"items":[{"array_id":"ojPS_l1gC","id":"609d932a9f42a53905fdb0a3"},{"array_id":"ry6E89OMl","id":"6197d81234cbd37cca05bbf4"},{"array_id":"7ttEXkxPz","id":"6050e5fdd3f5be0ceeb5c6f9"},{"array_id":"oY-k2TYM7","id":"602acefca8c994a364211454"},{"array_id":"gmrLAxQyM","id":"602ad72d89939c4c86b6bac5"},{"array_id":"TR3Ixxi-O","id":"60391df58f3bcf59cff41661"}]}},"seo":{"description":"lalallala","title":"Watch"},"site_id":"602ab9311d32aa002d9f6f35","slug":"home-page-1","style":{"channel_background_color":"#171e26"},"type":"channel","created":1557352479891,"modified":1643057286035,"tags":[]}]
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/pages/v2/channel', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
Get Site's Channels and Landings
Gets channels and landings related to a site
Sample call:
curl 'https://api.maestro.io/page/v2/channel/channels-landings' **Sample return:**[{"_id":"602ab9311d32aa002d9f6f48","active_renderers":{"livestream":true,"sidebar":true},"collection":"pages","data":{"styles":{},"regions":{},"artwork":{"header":{"logo":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602ad66caa245900a56b02bb.png"},"video":{"background":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602acbf7aa245900a56b02b5.jpg","kind":"images"}},"content":{"live":{"schedule":[{"array_id":"udymJAENT","duration":225,"end_time":"Thu Nov 11 2021 15:36:45 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Thu Nov 11 2021 15:33:00 GMT-0500 (Ecuador Time)","video":{"_id":"602ad17be86c5f00a60c436c","data":{"title":"Ricky Martin - Pégate (Live)"}}},{"array_id":"SVZzDkHt_","duration":1800,"end_time":"Fri Apr 16 2021 17:40:00 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Fri Apr 16 2021 17:10:00 GMT-0500 (Ecuador Time)","video":{"_id":"607a0b4e2ffbcb00a6781e79","data":{"title":"Test Streaming"}}},{"array_id":"31rrdQXer","duration":131,"end_time":"Invalid Date","kind":"video","repeat":"none","show_countdown":false,"start_time":"Mon Feb 15 2021 14:25:00 GMT-0500 (Ecuador Time)","video":{"_id":"602acb10e86c5f00a60c436b","data":{"title":"Introducing Dolby Atmos Music + Coldplay | Dolby Music"}}},{"array_id":"BB_20ihKc","duration":216,"end_time":"Wed Aug 21 2019 17:09:47 GMT-0700 (Pacific Daylight Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Wed Aug 21 2019 17:06:11 GMT-0700 (Pacific Daylight Time)","video":{"_id":"5d5ddbd5452a8d9901a43c03","data":{"name":"Lady GaGa - Poker Face [Official Music Video] HQ"},"slug":"lady-ga-ga-poker-face-official-music-video-hq-5d5ddbd5452a8d9901a43c03"}}]},"offline":{"image":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/618d7a85119de100a74a57d6.jpg","kind":"video","mode":"tv","video":{"_id":"602acf92c50bf5002d285e0e"}}},"countdown":{"start_time":"Tue Jan 04 2022 19:29:00 GMT-0500 (Ecuador Time)","title":"Countdown"},"default_mode":"none","gate":{"active":false,"kind":"none","gate":{"subscriptions":[]}},"name":"Watch","schedule":[{"all_day":"yes","duration":2090,"end_time":"Nov 03 2017 01:00:00 GMT+0000 (GMT)","kind":"video","repeat":"none","start_date":"Nov 03 2017","start_time":"Nov 03 2017 00:00:00 GMT+0000 (GMT)","video":{"_id":"5cd3501f74a7d0005b901b71","data":{"name":"Test Video"},"slug":"test-video"}}],"sidebar":[{"_id":"5cd3501f74a7d0005b901b6f","seo":{"title":"Chat"},"slug":"chat"},{"_id":"5cd3501f74a7d0005b901b70","seo":{"title":"Social"},"slug":"social"}],"welcome_screen":{"active":false,"duration":5,"image":"","mobile_image":""}},"last_modified":1643057286035,"renderers":{"livestream":{"livestream_doc":{"_id":"6050e78c57925500a6842944","created":1615914892950,"duration_seconds":0,"modified":1615914892950,"site_id":"602ab9311d32aa002d9f6f35","thumbnail":"https://static.maestro.io/media/5f32f379c04207002caf9c7f/5f6aa0146a9be500a5f3305f.jpg","title":"Test","type":"livestream"},"livestream_published":false,"stream_id":"612666d1d6be50002ea2b998","video_id":"619299eb7fb8cb002e1b1e60"},"sidebar":{"items":[{"array_id":"ojPS_l1gC","id":"609d932a9f42a53905fdb0a3"},{"array_id":"ry6E89OMl","id":"6197d81234cbd37cca05bbf4"},{"array_id":"7ttEXkxPz","id":"6050e5fdd3f5be0ceeb5c6f9"},{"array_id":"oY-k2TYM7","id":"602acefca8c994a364211454"},{"array_id":"gmrLAxQyM","id":"602ad72d89939c4c86b6bac5"},{"array_id":"TR3Ixxi-O","id":"60391df58f3bcf59cff41661"}]}},"seo":{"description":"lalallala","title":"Watch"},"site_id":"602ab9311d32aa002d9f6f35","slug":"home-page-1","style":{"channel_background_color":"#171e26"},"type":"channel","created":1557352479891,"modified":1643057286035,"tags":[]}]
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/pages/v2/channel/channels-landings', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
Get Site's Landings
Gets landings related to a site
Sample call:
curl 'https://api.maestro.io/page/v2/landing' **Sample return:**[{"_id":"602ab9311d32aa002d9f6f48","active_renderers":{"livestream":true,"sidebar":true},"collection":"pages","data":{"styles":{},"regions":{},"artwork":{"header":{"logo":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602ad66caa245900a56b02bb.png"},"video":{"background":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/602acbf7aa245900a56b02b5.jpg","kind":"images"}},"content":{"live":{"schedule":[{"array_id":"udymJAENT","duration":225,"end_time":"Thu Nov 11 2021 15:36:45 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Thu Nov 11 2021 15:33:00 GMT-0500 (Ecuador Time)","video":{"_id":"602ad17be86c5f00a60c436c","data":{"title":"Ricky Martin - Pégate (Live)"}}},{"array_id":"SVZzDkHt_","duration":1800,"end_time":"Fri Apr 16 2021 17:40:00 GMT-0500 (Ecuador Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Fri Apr 16 2021 17:10:00 GMT-0500 (Ecuador Time)","video":{"_id":"607a0b4e2ffbcb00a6781e79","data":{"title":"Test Streaming"}}},{"array_id":"31rrdQXer","duration":131,"end_time":"Invalid Date","kind":"video","repeat":"none","show_countdown":false,"start_time":"Mon Feb 15 2021 14:25:00 GMT-0500 (Ecuador Time)","video":{"_id":"602acb10e86c5f00a60c436b","data":{"title":"Introducing Dolby Atmos Music + Coldplay | Dolby Music"}}},{"array_id":"BB_20ihKc","duration":216,"end_time":"Wed Aug 21 2019 17:09:47 GMT-0700 (Pacific Daylight Time)","kind":"video","repeat":"none","show_countdown":false,"start_time":"Wed Aug 21 2019 17:06:11 GMT-0700 (Pacific Daylight Time)","video":{"_id":"5d5ddbd5452a8d9901a43c03","data":{"name":"Lady GaGa - Poker Face [Official Music Video] HQ"},"slug":"lady-ga-ga-poker-face-official-music-video-hq-5d5ddbd5452a8d9901a43c03"}}]},"offline":{"image":"https://dev.static.maestro.io/media/602ab9311d32aa002d9f6f35/618d7a85119de100a74a57d6.jpg","kind":"video","mode":"tv","video":{"_id":"602acf92c50bf5002d285e0e"}}},"countdown":{"start_time":"Tue Jan 04 2022 19:29:00 GMT-0500 (Ecuador Time)","title":"Countdown"},"default_mode":"none","gate":{"active":false,"kind":"none","gate":{"subscriptions":[]}},"name":"Watch","schedule":[{"all_day":"yes","duration":2090,"end_time":"Nov 03 2017 01:00:00 GMT+0000 (GMT)","kind":"video","repeat":"none","start_date":"Nov 03 2017","start_time":"Nov 03 2017 00:00:00 GMT+0000 (GMT)","video":{"_id":"5cd3501f74a7d0005b901b71","data":{"name":"Test Video"},"slug":"test-video"}}],"sidebar":[{"_id":"5cd3501f74a7d0005b901b6f","seo":{"title":"Chat"},"slug":"chat"},{"_id":"5cd3501f74a7d0005b901b70","seo":{"title":"Social"},"slug":"social"}],"welcome_screen":{"active":false,"duration":5,"image":"","mobile_image":""}},"last_modified":1643057286035,"renderers":{"livestream":{"livestream_doc":{"_id":"6050e78c57925500a6842944","created":1615914892950,"duration_seconds":0,"modified":1615914892950,"site_id":"602ab9311d32aa002d9f6f35","thumbnail":"https://static.maestro.io/media/5f32f379c04207002caf9c7f/5f6aa0146a9be500a5f3305f.jpg","title":"Test","type":"livestream"},"livestream_published":false,"stream_id":"612666d1d6be50002ea2b998","video_id":"619299eb7fb8cb002e1b1e60"},"sidebar":{"items":[{"array_id":"ojPS_l1gC","id":"609d932a9f42a53905fdb0a3"},{"array_id":"ry6E89OMl","id":"6197d81234cbd37cca05bbf4"},{"array_id":"7ttEXkxPz","id":"6050e5fdd3f5be0ceeb5c6f9"},{"array_id":"oY-k2TYM7","id":"602acefca8c994a364211454"},{"array_id":"gmrLAxQyM","id":"602ad72d89939c4c86b6bac5"},{"array_id":"TR3Ixxi-O","id":"60391df58f3bcf59cff41661"}]}},"seo":{"description":"lalallala","title":"Watch"},"site_id":"602ab9311d32aa002d9f6f35","slug":"home-page-1","style":{"channel_background_color":"#171e26"},"type":"landing","created":1557352479891,"modified":1643057286035,"tags":[]}]
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
Responses
Request samples
- javascript
const axios = require('axios'); const headers = { ['x-maestro-client-id']: 'YOUR_MAESTRO_ID' }; axios.get('https://api.maestro.io/pages/v2/landing', { headers }) .then((response) => { console.log(response); }) .catch((err) => { console.error(err); });
Response samples
- 200
[- {
- "collection": "pages",
- "data": {
- "artwork": { },
- "content": { },
- "countdown": { },
- "default_mode": "string",
- "gate": { },
- "name": "string",
- "schedule": [
- { }
], - "sidebar": [
- { }
], - "welcome_screen": { }
}, - "site_id": "string",
- "type": "channel",
- "slug": "string"
}
]
Upsert third party calendar events based on thirdPartyEventId field
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Request Body schema: application/json
Array of objects (EventCategory) | |
object (EventDate) | |
descriptionRaw | string |
object (EventImage) | |
titleRaw | string |
siteId | string |
thirdPartyEventId | string |
Responses
Request samples
- Payload
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Response samples
- 200
- 201
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Create a new calendar event
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Request Body schema: application/json
Array of objects (EventCategory) | |
object (EventDate) | |
descriptionRaw | string |
object (EventImage) | |
titleRaw | string |
siteId | string |
thirdPartyEventId | string |
Responses
Request samples
- Payload
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Response samples
- 201
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Get calendar events between timestamps
Authorizations:
query Parameters
startTimestamp required | number |
endTimestamp required | number |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Response samples
- 200
[- {
- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
]
Get calendar event filters for a site
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Response samples
- 200
[- {
- "options": [
- {
- "color": "string",
- "value": "string"
}
], - "title": "string"
}
]
Get unique calendar event categories for a site
Authorizations:
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Response samples
- 200
[- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
]
Get a calendar event by ID
Authorizations:
path Parameters
id required | string |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Response samples
- 200
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Update a calendar event by ID
Authorizations:
path Parameters
id required | string |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Request Body schema: application/json
Array of objects (EventCategory) | |
object (EventDate) | |
descriptionRaw | string |
object (EventImage) | |
titleRaw | string |
siteId | string |
thirdPartyEventId | string |
Responses
Request samples
- Payload
{- "categories": [
- {
- "id": "string",
- "label": {
- "color": "string",
- "id": "string",
- "title": "string"
}, - "title": "string"
}
], - "date": {
- "endTimestamp": 0,
- "startTimestamp": 0,
- "timeZone": "string",
- "useEndTime": true
}, - "descriptionRaw": "string",
- "image": {
- "show": true,
- "src": "string"
}, - "titleRaw": "string",
- "siteId": "string",
- "thirdPartyEventId": "string"
}
Get unique calendar labels for a category
Authorizations:
path Parameters
categoryTitle required | string |
header Parameters
x-maestro-client-id required | string Your Maestro ID (same as site ID) |
x-maestro-developer-key required | string Your developer API key |
Responses
Response samples
- 200
[- {
- "color": "string",
- "id": "string",
- "title": "string"
}
]