mamut-api (1.0.0)

Download OpenAPI specification:

License: Proprietary

MamutTV API. Errors are returned as application/problem+json.

Authentication

Sign-in, token refresh and device session flow

Sign in to the dashboard with a Turnstile token

The Turnstile token goes either in the X-Turnstile-Token header or in the cf-turnstile-response body field

header Parameters
X-Turnstile-Token
string
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
cf-turnstile-response
string
email
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{
  • "cf-turnstile-response": "string",
  • "email": "user@example.com",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
  • "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64"
}

Sign up with a Turnstile token

The Turnstile token goes either in the X-Turnstile-Token header or in the cf-turnstile-response body field

header Parameters
X-Turnstile-Token
string
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
cf-turnstile-response
string
email
required
string <email>
name
required
string
password
required
string [ 12 .. 72 ] characters

Responses

Request samples

Content type
application/json
{
  • "cf-turnstile-response": "string",
  • "email": "user@example.com",
  • "name": "string",
  • "password": "stringstring"
}

Response samples

Content type
application/json
{
  • "message": "Conta criada com sucesso. Enviamos um link de verificacao para o seu e-mail."
}

Generate a single-use sign-in code

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "uniqueCode": "string"
}

Get the authenticated user

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "address": {
    },
  • "createdAt": "2024-01-03T18:17:52.838Z",
  • "document": {
    },
  • "email": "john@doe.com",
  • "entitlement": "active",
  • "freeTrial": {
    },
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "mainProfileId": "98ae0467-8b93-46a4-9ab0-aafff34c7be6",
  • "name": "John",
  • "phone": "+5548991148203",
  • "profiles": [
    ],
  • "status": "ACTIVE",
  • "updatedAt": "2024-01-03T18:17:52.838Z"
}

Refresh the access token

Request Body schema: application/json
required
accessToken
required
string non-empty
refreshToken
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "accessToken": "string",
  • "refreshToken": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
  • "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64"
}

Create a device login session

Responses

Response samples

Content type
application/json
{
  • "deviceCode": "string",
  • "expiresIn": 480,
  • "interval": 5,
  • "status": "string",
  • "userCode": "string"
}

Check the status of a device session code

Polled by the device with the device_code it received when the pairing started. While the user has not approved yet, answers 400 with error=authorization_pending: keep polling, respecting the interval from the pairing response. Once the code dies, answers 400 with error=expired_token: stop polling and start a new pairing. Error codes follow RFC 8628 section 3.5. The user_code shown on screen is not accepted here: it is meant to be read out loud.

Request Body schema: application/json
required
deviceCode
required
string [ 1 .. 64 ] characters

Responses

Request samples

Content type
application/json
{
  • "deviceCode": "0192f0c3-6f9e-7a1b-9c2d-3e4f5a6b7c8d"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "status": "approved",
  • "userCode": "12345678"
}

Approve a pending device session

Authorizations:
bearerAuth
Request Body schema: application/json
required
subscriptionId
string <uuid>
userCode
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
  • "userCode": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "deviceCode": "9018c41a-c414-471c-8b50-f5169f6e6f64",
  • "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "status": "approved",
  • "userCode": "12345678"
}

Sign in with email and password

Request Body schema: application/json
required
email
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
  • "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
  • "requiresSubscriptionSelection": false
}

Sign in with a Google account

Request Body schema: application/json
required
credential
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "credential": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "requiresSubscriptionSelection": false
}

Sign in with a single-use code

Request Body schema: application/json
required
uniqueCode
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "uniqueCode": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
  • "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}

Email verification

Address verification and email change confirmation

Confirm a pending email change

header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
token
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "token": "string"
}

Response samples

Content type
application/json
{
  • "message": "E-mail alterado com sucesso."
}

Request a new email verification link

Request Body schema: application/json
required
email
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com"
}

Response samples

Content type
application/problem+json
{}

Cancel a pending email change or revert a confirmed one

header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
token
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "token": "string"
}

Response samples

Content type
application/json
{
  • "message": "Solicitacao cancelada. Sua conta segue com o e-mail atual."
}

Verify the account email

query Parameters
token
required
string

Responses

Response samples

Content type
application/json
{
  • "message": "E-mail verificado com sucesso."
}

Request a change of the account email

Authorizations:
bearerAuth
header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
newEmail
required
string <email>
password
required
string

Responses

Request samples

Content type
application/json
{
  • "newEmail": "new@doe.com",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "message": "Enviamos um link de confirmacao para o novo e-mail."
}

Account

Account data, password recovery and profile PIN

Delete the authenticated user's account

Authorizations:
bearerAuth
Request Body schema: application/json
required
password
required
string <= 72 characters

Responses

Request samples

Content type
application/json
{
  • "password": "string"
}

Response samples

Content type
application/problem+json
{}

Update the authenticated user account

Partial update: only non-empty fields are applied, and the address is only applied when zipCode is present.

Authorizations:
bearerAuth
Request Body schema: application/json
required
object (CommandAddressStruct)
object (CommandDocumentStruct)
mainProfileId
string <uuid>
name
string
phone
string

Responses

Request samples

Content type
application/json
{
  • "address": {
    },
  • "document": {
    },
  • "mainProfileId": "98ae0467-8b93-46a4-9ab0-aafff34c7be6",
  • "name": "John",
  • "phone": "+5548991148203"
}

Response samples

Content type
application/problem+json
{}

Change the password of the authenticated user

Authorizations:
bearerAuth
header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
actualPassword
required
string
confirmNewPassword
required
string [ 12 .. 72 ] characters
newPassword
required
string [ 12 .. 72 ] characters

Responses

Request samples

Content type
application/json
{
  • "actualPassword": "string",
  • "confirmNewPassword": "stringstring",
  • "newPassword": "stringstring"
}

Response samples

Content type
application/problem+json
{}

Request a password recovery code by email

Always answers 202, whether or not the email is registered.

Request Body schema: application/json
required
email
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com"
}

Response samples

Content type
application/problem+json
{}

Reset the password with a recovery code

header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
code
required
string non-empty
newPassword
required
string [ 12 .. 72 ] characters

Responses

Request samples

Content type
application/json
{
  • "code": "string",
  • "newPassword": "stringstring"
}

Response samples

Content type
application/problem+json
{}

Profiles

Viewer profiles of an account

Create a profile

Authorizations:
bearerAuth
Request Body schema: application/json
required
file
required
string
isKids
boolean
layout
string
name
required
string

Responses

Request samples

Content type
application/json
{
  • "file": "images/avatar-1.png",
  • "isKids": false,
  • "layout": "elegant",
  • "name": "Test"
}

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "deletedAt": "2019-08-24T14:15:22Z",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "isKids": true,
  • "layout": "string",
  • "name": "string",
  • "parentalControl": true,
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}

Delete a profile

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Get a profile by id

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
{
  • "avatar": "string",
  • "createdAt": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "isKids": false,
  • "layout": "string",
  • "name": "string",
  • "parentalControl": {
    },
  • "updatedAt": "string",
  • "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}

Update a profile

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Request Body schema: application/json
required
file
string
isKids
boolean
layout
string
name
string
object (EditProfileParentalControlPatch)

Responses

Request samples

Content type
application/json
{
  • "file": "images/avatar-1.png",
  • "isKids": false,
  • "layout": "elegant",
  • "name": "Test",
  • "parentalControl": {
    }
}

Response samples

Content type
application/problem+json
{}

Send a link to redefine a profile parental control PIN

Mails a single-use link to the account address. The PIN itself is never sent.

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/problem+json
{}

Redefine a profile parental control PIN with a reset token

Consumes the single-use token from the reset e-mail and stores the new PIN. The current PIN is not required.

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid>
header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
confirmPin
required
string [ 1 .. 32 ] characters
pin
required
string [ 1 .. 32 ] characters
token
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "confirmPin": "1234",
  • "pin": "1234",
  • "token": "string"
}

Response samples

Content type
application/problem+json
{}

Check a profile parental control PIN

Answers whether the PIN matches. The PIN itself is never returned by any endpoint.

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid>
Request Body schema: application/json
required
pin
required
string [ 1 .. 32 ] characters

Responses

Request samples

Content type
application/json
{
  • "pin": "1234"
}

Response samples

Content type
application/json
{
  • "valid": true
}

Sessions

Active sessions and device info

List the user's sessions

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "sessions": [
    ]
}

Log out a session

Authorizations:
bearerAuth
path Parameters
sessionId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Update the device info of the current session

Authorizations:
bearerAuth
header Parameters
Authorization
string
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
city
string
country
string
deviceInfo
string
deviceModel
string
deviceUuid
string
ip
string
isMobile
boolean
loc
string
macAddress
string
org
string
region
string
timezone
string

Responses

Request samples

Content type
application/json
{
  • "city": "string",
  • "country": "string",
  • "deviceInfo": "string",
  • "deviceModel": "string",
  • "deviceUuid": "string",
  • "ip": "string",
  • "isMobile": true,
  • "loc": "string",
  • "macAddress": "string",
  • "org": "string",
  • "region": "string",
  • "timezone": "string"
}

Response samples

Content type
application/problem+json
{}

Select the subscription of the current session

Authorizations:
bearerAuth
Request Body schema: application/json
required
subscriptionId
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}

Response samples

Content type
application/json
{
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}

Licenses

Seats bound to devices

List individual plan licenses

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "licenses": [
    ]
}

List family plan licenses

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "licenses": [
    ]
}

Unbind the device from a license

Authorizations:
bearerAuth
path Parameters
licenseId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Family

Family plan seats and invitations

Invite a member to a family plan seat

Authorizations:
bearerAuth
Request Body schema: application/json
required
invitedEmail
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "invitedEmail": "user@example.com"
}

Response samples

Content type
application/problem+json
{}

Accept a family plan invite

Authorizations:
bearerAuth
Request Body schema: application/json
required
token
required
string

Responses

Request samples

Content type
application/json
{
  • "token": "string"
}

Response samples

Content type
application/problem+json
{}

Preview a family plan invite by token

query Parameters
token
required
string

Responses

Response samples

Content type
application/json
{
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "ownerFirstName": "string"
}

Cancel a pending family plan invite

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Resend a pending family plan invite

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Remove a member from a family plan seat

Authorizations:
bearerAuth
path Parameters
licenseId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

List the seats of the caller's family plan

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "slots": [
    ],
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
  • "totalSlots": 0
}

Rename a family plan seat's device

Authorizations:
bearerAuth
path Parameters
licenseId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Request Body schema: application/json
required
name
required
string [ 1 .. 50 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/problem+json
{}

Billing

Plans, subscription, payment methods and invoices

Cancel the subscription

The subscription stays active until the end of the current billing period.

Authorizations:
bearerAuth
Request Body schema: application/json
required
subscriptionId
required
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}

Response samples

Content type
application/problem+json
{}

Create a checkout session

Authorizations:
bearerAuth
Request Body schema: application/json
required
screens_quantity
required
integer <int64> >= 1
stripe_plan_id
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "screens_quantity": 1,
  • "stripe_plan_id": "string"
}

Response samples

Content type
application/json
{
  • "checkoutSession": {
    }
}

Set the default payment method

Authorizations:
bearerAuth
Request Body schema: application/json
required
payment_method_id
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "payment_method_id": "string"
}

Response samples

Content type
application/problem+json
{}

List the invoice history

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "invoices": [
    ]
}

List saved payment methods

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "payment_methods": [
    ]
}

Add a payment method

Authorizations:
bearerAuth
Request Body schema: application/json
required
payment_method_id
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "payment_method_id": "string"
}

Response samples

Content type
application/problem+json
{}

Remove a payment method

Authorizations:
bearerAuth
path Parameters
id
required
string non-empty

Responses

Response samples

Content type
application/problem+json
{}

List plans by category

Authorizations:
bearerAuth
query Parameters
category
required
string
Enum: "individual" "family" "individual_plus"

Responses

Response samples

Content type
application/json
{
  • "plan_options": [
    ]
}

Get a plan by ID

Authorizations:
bearerAuth
path Parameters
stripe_id
required
string non-empty
query Parameters
screens_quantity
required
integer <int64> >= 1

Responses

Response samples

Content type
application/json
{
  • "plan": {
    }
}

List the account subscriptions

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Change the subscription plan

The plan change is prorated and invoiced immediately.

Authorizations:
bearerAuth
Request Body schema: application/json
required
planId
required
string non-empty
subscriptionId
required
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "planId": "string",
  • "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}

Response samples

Content type
application/problem+json
{}

Activate the free trial

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "endsAt": "2024-01-10T18:17:52.838Z",
  • "message": "free trial activated"
}

Webhooks

Inbound calls from payment providers

Playlists

Playlist management

List the user's playlists

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a playlist

Authorizations:
bearerAuth
header Parameters
CF-Connecting-IP
string
X-Forwarded-For
string
Request Body schema: application/json
required
name
string
pin
string
protected
boolean
providerID
string
url
required
string <uri> non-empty

Responses

Request samples

Content type
application/json
{
  • "name": "Test",
  • "pin": "string",
  • "protected": true,
  • "providerID": "string",
}

Response samples

Content type
application/json
{
  • "createdAt": "2019-08-24T14:15:22Z",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "string",
  • "pin": "string",
  • "protected": true,
  • "providerID": "string",
  • "status": "string",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "url": "string",
  • "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}

Delete a playlist

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Update a playlist

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Request Body schema: application/json
required
name
required
string
pin
string
protected
boolean
providerID
string
url
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "pin": "string",
  • "protected": true,
  • "providerID": "string",
  • "url": "string"
}

Response samples

Content type
application/problem+json
{}

Favorites

Favorite channels, movies and lists

Create a favorites list

Authorizations:
bearerAuth
Request Body schema: application/json
required
description
string
name
string
profileId
string <uuid>
type
string
Enum: "default" "favorites" "import"

Responses

Request samples

Content type
application/json
{
  • "description": "string",
  • "name": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "type": "default"
}

Response samples

Content type
application/json
{
  • "createdAt": "2019-08-24T14:15:22Z",
  • "description": "string",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "type": "string"
}

List the favorites lists of a profile

Authorizations:
bearerAuth
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
{
  • "favoritesLists": [
    ]
}

Delete a favorites list

Authorizations:
bearerAuth
path Parameters
favoritesListId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Remove a channel from favorites

Authorizations:
bearerAuth
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
contentId
required
string

Responses

Response samples

Content type
application/problem+json
{}

List the favorite channels of a playlist

Authorizations:
bearerAuth
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
{
  • "favoriteChannels": [
    ]
}

Add a channel to favorites

Authorizations:
bearerAuth
Request Body schema: application/json
required
contentId
string
profileId
required
string <uuid>
title
required
string

Responses

Request samples

Content type
application/json
{
  • "contentId": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "title": "string"
}

Response samples

Content type
application/json
{
  • "contentId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "title": "string",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Remove a movie from a favorites list

Authorizations:
bearerAuth
query Parameters
favoritesListId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
tmdbId
string
contentId
string
kind
string <= 50 characters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Add a movie to a favorites list

Authorizations:
bearerAuth
Request Body schema: application/json
required
contentId
string
favoritesListId
string <uuid>
kind
string
profileId
required
string <uuid>
title
required
string
tmdbId
string

Responses

Request samples

Content type
application/json
{
  • "contentId": "string",
  • "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
  • "kind": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "title": "string",
  • "tmdbId": "string"
}

Response samples

Content type
application/json
{
  • "contentId": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "kind": "string",
  • "title": "string",
  • "tmdbId": "string",
  • "updatedAt": "2019-08-24T14:15:22Z"
}

List the movies of a favorites list

Authorizations:
bearerAuth
path Parameters
favoritesListId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
{
  • "favoriteMovies": [
    ]
}

Content ratings

Per-user content ratings

List content ratings

Authorizations:
bearerAuth
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Add a content rating

Authorizations:
bearerAuth
Request Body schema: application/json
required
contentId
required
string
kind
string
profileId
required
string <uuid>
rating
required
integer <int64> [ 1 .. 10 ]
title
required
string
tmdbId
required
string

Responses

Request samples

Content type
application/json
{
  • "contentId": "string",
  • "kind": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "rating": 1,
  • "title": "string",
  • "tmdbId": "string"
}

Response samples

Content type
application/json
{
  • "contentId": "external-123",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "kind": "tv_series",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "rating": 5,
  • "title": "Breaking Bad",
  • "tmdbId": "1396"
}

Delete a content rating

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
query Parameters
profileId
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Update a content rating

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Request Body schema: application/json
required
contentId
required
string
kind
string
profileId
required
string <uuid>
rating
required
integer <int64> [ 1 .. 10 ]
title
required
string
tmdbId
required
string

Responses

Request samples

Content type
application/json
{
  • "contentId": "string",
  • "kind": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "rating": 1,
  • "title": "string",
  • "tmdbId": "string"
}

Response samples

Content type
application/json
{
  • "contentId": "external-123",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "kind": "tv_series",
  • "rating": 5,
  • "title": "Breaking Bad",
  • "tmdbId": "1396"
}

Viewing

Watch progress, watched content and access history

List the access history of a profile

Authorizations:
bearerAuth
query Parameters
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
page
integer <int64> >= 1
Default: 1
pageSize
integer <int64> [ 1 .. 100 ]
Default: 30

Responses

Response samples

Content type
application/json
{
  • "histories": [
    ]
}

Add a media item to the access history

Returns 201 on the first access to the media item and 200 when an existing entry is refreshed.

Authorizations:
bearerAuth
Request Body schema: application/json
required
kind
required
string [ 1 .. 50 ] characters
media_id
required
string non-empty
profile_id
required
string <uuid>
tmdb_id
required
integer <int64> >= 1

Responses

Request samples

Content type
application/json
{
  • "kind": "string",
  • "media_id": "string",
  • "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
  • "tmdb_id": 1
}

Response samples

Content type
application/json
{
  • "accessed_at": "2019-08-24T14:15:22Z",
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "kind": "string",
  • "media_id": "string",
  • "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
  • "tmdb_id": 0
}

Save the watching progress of a content title

Returns 201 with a Location header when the entry is created and 200 when an existing entry is updated.

Authorizations:
bearerAuth
Request Body schema: application/json
required
elapsedTimeMs
required
integer <int64> >= 1
episode
integer <int64> >= 0
fullyElapsed
boolean
mediaId
required
string [ 1 .. 255 ] characters
profileId
required
string <uuid>
season
integer <int64> >= 0
sourceId
string <= 255 characters
totalTimeMs
required
integer <int64> >= 1

Responses

Request samples

Content type
application/json
{
  • "elapsedTimeMs": 1,
  • "episode": 0,
  • "fullyElapsed": true,
  • "mediaId": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "season": 0,
  • "sourceId": "string",
  • "totalTimeMs": 1
}

Response samples

Content type
application/json
{
  • "contentTitle": "string",
  • "elapsedTimeMs": 0,
  • "episode": 0,
  • "fullyElapsed": true,
  • "haveNextEpisode": true,
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "identityKey": "string",
  • "kind": "string",
  • "mediaId": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "season": 0,
  • "sourceId": "string",
  • "tmdbId": 0,
  • "totalTimeMs": 0
}

Remove a title from the continue watching shelf

Deletes every episode entry of the title. identity_key is opaque to the client: the list endpoint returns it, this one takes it back.

Authorizations:
bearerAuth
path Parameters
profile_id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
query Parameters
identity_key
required
string non-empty

Responses

Response samples

Content type
application/problem+json
{}

List watching progress for a profile

Without query params, returns the most recent entry per title. With media_id, returns every episode of that media. With watched=true, only fully watched entries.

Authorizations:
bearerAuth
path Parameters
profile_id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
query Parameters
page
integer <int64> >= 1
Default: 1
pageSize
integer <int64> [ 1 .. 100 ]
Default: 10
media_id
string
watched
boolean

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "page": 0,
  • "pageSize": 0,
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a"
}

Delete a watching progress entry

Authorizations:
bearerAuth
path Parameters
profile_id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/problem+json
{}

Get a watching progress entry

Authorizations:
bearerAuth
path Parameters
profile_id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
id
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...

Responses

Response samples

Content type
application/json
{
  • "contentTitle": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "elapsedTimeMs": 0,
  • "episode": 0,
  • "fullyElapsed": true,
  • "haveNextEpisode": true,
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "identityKey": "string",
  • "kind": "string",
  • "mediaId": "string",
  • "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
  • "season": 0,
  • "sourceId": "string",
  • "tmdbId": 0,
  • "totalTimeMs": 0,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

health

Liveness probe

Health check

Responses

Response samples

Content type
application/json
{
  • "status": "string"
}