Download OpenAPI specification:
MamutTV API. Errors are returned as application/problem+json.
The Turnstile token goes either in the X-Turnstile-Token header or in the cf-turnstile-response body field
| X-Turnstile-Token | string |
| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| cf-turnstile-response | string |
| email required | string <email> |
| password required | string |
{- "cf-turnstile-response": "string",
- "email": "user@example.com",
- "password": "string"
}{- "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
- "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64"
}The Turnstile token goes either in the X-Turnstile-Token header or in the cf-turnstile-response body field
| X-Turnstile-Token | string |
| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| cf-turnstile-response | string |
| email required | string <email> |
| name required | string |
| password required | string [ 12 .. 72 ] characters |
{- "cf-turnstile-response": "string",
- "email": "user@example.com",
- "name": "string",
- "password": "stringstring"
}{- "message": "Conta criada com sucesso. Enviamos um link de verificacao para o seu e-mail."
}{- "address": {
- "address1": "Rua Moura",
- "address2": "Ap. 601",
- "city": "São José",
- "number": "270",
- "state": "SC",
- "zipCode": "88117250"
}, - "createdAt": "2024-01-03T18:17:52.838Z",
- "document": {
- "type": "CPF",
- "value": "40652029060"
}, - "email": "john@doe.com",
- "entitlement": "active",
- "freeTrial": {
- "endsAt": "2024-01-10T18:17:52.838Z",
- "status": "active"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mainProfileId": "98ae0467-8b93-46a4-9ab0-aafff34c7be6",
- "name": "John",
- "notifyNewEpisodeEmail": false,
- "phone": "+5548991148203",
- "profiles": [
- {
- "avatar": "string",
- "createdAt": "2024-01-03T18:17:52.838Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "isKids": false,
- "name": "John Doe",
- "parentalControl": false,
- "updatedAt": "2024-01-03T18:17:52.838Z",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}
], - "status": "ACTIVE",
- "updatedAt": "2024-01-03T18:17:52.838Z"
}| accessToken required | string non-empty |
| refreshToken required | string non-empty |
{- "accessToken": "string",
- "refreshToken": "string"
}{- "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
- "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64"
}| deviceUuid | string <= 128 characters |
{- "deviceUuid": "a3f1c0de-1234-5678-9abc-def012345678"
}{- "deviceCode": "string",
- "expiresIn": 480,
- "interval": 5,
- "slotCheckSupported": true,
- "status": "string",
- "userCode": "string"
}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.
| deviceCode required | string [ 1 .. 64 ] characters |
{- "deviceCode": "0192f0c3-6f9e-7a1b-9c2d-3e4f5a6b7c8d"
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "status": "approved",
- "userCode": "12345678"
}| subscriptionId | string <uuid> |
| userCode required | string non-empty |
{- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
- "userCode": "string"
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "deviceCode": "9018c41a-c414-471c-8b50-f5169f6e6f64",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "status": "approved",
- "userCode": "12345678"
}| email required | string <email> |
| password required | string |
{- "email": "user@example.com",
- "password": "string"
}{- "accessToken": "9018c41a-c414-471c-8b50-f5169f6e6f64",
- "refreshToken": "9018c41a-c414-471c-8b50-f5169f6e6f64"
}| credential required | string non-empty |
{- "credential": "string"
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}| uniqueCode required | string non-empty |
{- "uniqueCode": "string"
}{- "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9",
- "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9"
}| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| token required | string non-empty |
{- "token": "string"
}{- "message": "E-mail alterado com sucesso."
}| email required | string <email> |
{- "email": "user@example.com"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| token required | string non-empty |
{- "token": "string"
}{- "message": "Solicitacao cancelada. Sua conta segue com o e-mail atual."
}| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| newEmail required | string <email> |
| password required | string |
{- "newEmail": "new@doe.com",
- "password": "string"
}{- "message": "Enviamos um link de confirmacao para o novo e-mail."
}| password required | string <= 72 characters |
{- "password": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Partial update: only non-empty fields are applied, and the address is only applied when zipCode is present.
object (CommandAddressStruct) | |
object (CommandDocumentStruct) | |
| mainProfileId | string <uuid> |
| name | string |
| notifyNewEpisodeEmail | boolean |
| phone | string |
{- "address": {
- "address1": "Rua Moura",
- "address2": "Ap. 601",
- "city": "São José",
- "number": "270",
- "state": "SC",
- "zipCode": "88117250"
}, - "document": {
- "type": "CPF",
- "value": "40652029060"
}, - "mainProfileId": "98ae0467-8b93-46a4-9ab0-aafff34c7be6",
- "name": "John",
- "notifyNewEpisodeEmail": true,
- "phone": "+5548991148203"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| actualPassword required | string |
| confirmNewPassword required | string [ 12 .. 72 ] characters |
| newPassword required | string [ 12 .. 72 ] characters |
{- "actualPassword": "string",
- "confirmNewPassword": "stringstring",
- "newPassword": "stringstring"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Always answers 202, whether or not the email is registered.
| email required | string <email> |
{- "email": "user@example.com"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| code required | string non-empty |
| newPassword required | string [ 12 .. 72 ] characters |
{- "code": "string",
- "newPassword": "stringstring"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| file required | string |
| isKids | boolean |
| layout | string |
| name required | string |
{- "file": "images/avatar-1.png",
- "isKids": false,
- "layout": "elegant",
- "name": "Test"
}{- "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"
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "avatar": "string",
- "createdAt": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "isKids": false,
- "layout": "string",
- "name": "string",
- "parentalControl": {
- "active": true
}, - "updatedAt": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| file | string |
| isKids | boolean |
| layout | string |
| name | string |
object (EditProfileParentalControlPatch) |
{- "file": "images/avatar-1.png",
- "isKids": false,
- "layout": "elegant",
- "name": "Test",
- "parentalControl": {
- "active": true,
- "actualPassword": "1234",
- "change": true,
- "confirmPassword": "new.password",
- "password": "new.password"
}
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Mails a single-use link to the account address. The PIN itself is never sent.
| id required | string <uuid> |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Consumes the single-use token from the reset e-mail and stores the new PIN. The current PIN is not required.
| id required | string <uuid> |
| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| confirmPin required | string [ 1 .. 32 ] characters |
| pin required | string [ 1 .. 32 ] characters |
| token required | string non-empty |
{- "confirmPin": "1234",
- "pin": "1234",
- "token": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Answers whether the PIN matches. The PIN itself is never returned by any endpoint.
| id required | string <uuid> |
| pin required | string [ 1 .. 32 ] characters |
{- "pin": "1234"
}{- "valid": true
}{- "sessions": [
- {
- "city": "string",
- "country": "string",
- "deviceInfo": "string",
- "deviceName": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ip": "string",
- "isMobile": true,
- "lastAccess": "2019-08-24T14:15:22Z",
- "lastActivity": "string",
- "loc": "string",
- "org": "string",
- "region": "string",
- "timezone": "string"
}
]
}| sessionId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Answers, for one device, which subscriptions still have a free seat and whether that device already occupies one. Read requiresSelection to know if there is still a choice to make: a device that already holds a seat signs in through that same subscription.
Two flows reach this route. With userCode, the caller is the approving phone and the device is the one waiting on that pairing — deviceUuid is ignored. Without userCode, the caller is the device itself signing in by e-mail, and it identifies itself through deviceUuid, falling back to the device already recorded on the caller's own session.
| userCode | string <= 64 characters Examples: userCode=12345678 |
| deviceUuid | string <= 128 characters Examples: deviceUuid=a3f1c0de-1234-5678-9abc-def012345678 |
{- "deviceKnown": true,
- "requiresSelection": false,
- "subscriptions": [
- {
- "availableSlots": 1,
- "deviceAlreadyBound": false,
- "eligible": true,
- "licenseId": "be894337-ec7c-4bdc-ac72-f939e31237ae",
- "planCategory": "family",
- "reason": "slot_available",
- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
- "totalSlots": 4,
- "usedSlots": 3
}
]
}| Authorization | string |
| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| city | string |
| country | string |
| deviceInfo | string |
| deviceModel | string |
| deviceUuid | string |
| ip | string |
| isMobile | boolean |
| loc | string |
| macAddress | string |
| org | string |
| region | string |
| timezone | string |
{- "city": "string",
- "country": "string",
- "deviceInfo": "string",
- "deviceModel": "string",
- "deviceUuid": "string",
- "ip": "string",
- "isMobile": true,
- "loc": "string",
- "macAddress": "string",
- "org": "string",
- "region": "string",
- "timezone": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Sets the subscription of the current session. A device never changes subscription on request: when the session's device already holds a seat on another subscription, responds 409 and nothing changes. The seat is freed only from the account panel, through DELETE /api/v1/user/licenses/{licenseId}/device, and only on plans that allow changing the device.
| subscriptionId | string <uuid> |
{- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}{- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}{- "licenses": [
- {
- "bound": true,
- "city": "string",
- "country": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "deviceId": "string",
- "deviceInfo": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ip": "string",
- "isMobile": true,
- "lastAccess": "2019-08-24T14:15:22Z",
- "loc": "string",
- "org": "string",
- "region": "string",
- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
- "timezone": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}{- "licenses": [
- {
- "bound": true,
- "city": "string",
- "country": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "deviceId": "string",
- "deviceInfo": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "ip": "string",
- "isMobile": true,
- "lastAccess": "2019-08-24T14:15:22Z",
- "loc": "string",
- "org": "string",
- "region": "string",
- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
- "timezone": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}Frees the license's seat and signs its device out. Only per-device plus and family plans allow changing the device: on a per-device plan responds 403 and the device stays bound.
| licenseId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| invitedEmail required | string <email> |
{- "invitedEmail": "user@example.com"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| token required | string |
{- "token": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| licenseId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Returns the family subscription of another account in which the caller occupies a seat. The owner of a family plan is not a member of it and receives 404, as does anyone without a seat in a family subscription that currently allows content.
{- "cancelAtPeriodEnd": true,
- "ownerFirstName": "string",
- "planExpiresAt": "2019-08-24T14:15:22Z",
- "status": "active",
- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}{- "slots": [
- {
- "deviceName": "string",
- "licenseId": "be894337-ec7c-4bdc-ac72-f939e31237ae",
- "memberName": "string",
- "occupant": "string",
- "pendingInvite": {
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "invitedEmail": "string",
- "resendCount": 0
}
}
], - "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f",
- "totalSlots": 0
}| licenseId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| name required | string [ 1 .. 50 ] characters |
{- "name": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}The subscription stays active until the end of the current billing period.
| subscriptionId required | string <uuid> |
{- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| screens_quantity required | integer <int64> >= 1 Quantidade comprada no Stripe, não o número de vagas. individual: uma por tela; individual_plus: pacotes, sempre 1 (o pacote dá 4 vagas); family: uma por tela, a partir de 3. |
| stripe_plan_id required | string non-empty |
{- "screens_quantity": 1,
- "stripe_plan_id": "string"
}{- "checkoutSession": {
- "id": "string",
- "status": "string",
- "url": "string"
}
}| payment_method_id required | string non-empty |
{- "payment_method_id": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| payment_method_id required | string non-empty |
{- "payment_method_id": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string non-empty |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| category required | string Enum: "individual" "family" "individual_plus" |
| lang | string Default: "pt" Enum: "pt" "en" "es" |
{- "plan_options": [
- {
- "description": "string",
- "name": "string",
- "price": 0,
- "stripe_id": "string",
- "stripe_price_id": "string",
- "years": "string"
}
]
}| stripe_id required | string non-empty |
| screens_quantity required | integer <int64> >= 1 Quantidade comprada no Stripe, não o número de vagas. individual: uma por tela; individual_plus: pacotes, sempre 1 (o pacote dá 4 vagas); family: uma por tela, a partir de 3. |
| lang | string Default: "pt" Enum: "pt" "en" "es" |
{- "plan": {
- "description": "string",
- "discount_percentage_applied": 0,
- "name": "string",
- "price": 0,
- "price_without_discount": 0,
- "screens_quantity": 0,
- "stripe_id": "string",
- "stripe_price_id": "string",
- "total_with_discount": 0,
- "years": "string"
}
}[- {
- "cancelAtPeriodEnd": true,
- "canceledAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "paymentStatus": "string",
- "planCategory": "individual",
- "planDetails": {
- "description": "string",
- "is_partner": true,
- "name": "string",
- "price": 0,
- "stripe_id": "string",
- "stripe_price_id": "string",
- "years": "string"
}, - "planExpiresAt": "2019-08-24T14:15:22Z",
- "resellerName": "string",
- "screensQuantity": 0,
- "source": "stripe",
- "status": "string",
- "stripeCheckoutSessionId": "string",
- "stripeCustomerId": "string",
- "stripePlanId": "string",
- "stripeSubscriptionId": "string",
- "totalPaid": 0,
- "updatedAt": "2019-08-24T14:15:22Z",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}
]The plan change is prorated and invoiced immediately.
| planId required | string non-empty |
| subscriptionId required | string <uuid> |
{- "planId": "string",
- "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}[- {
- "backupPlaylistId": "7991fa44-7417-4104-81b6-35cef8b9fc02",
- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "managedBy": {
- "kind": "reseller",
- "name": "string"
}, - "name": "string",
- "protected": true,
- "providerBlocked": true,
- "providerID": "string",
- "providerLabel": "string",
- "providerStatus": "string",
- "routes": [
- {
- "baseUrl": "string",
- "dnsId": "be7a56a3-552d-4cda-a1bb-1c2299dd5f2a",
- "position": 0
}
], - "status": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "url": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}
]| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| name | string |
| pin | string <= 64 characters |
| protected | boolean |
| providerID | string |
| url required | string <uri> non-empty |
{- "name": "Test",
- "pin": "string",
- "protected": true,
- "providerID": "string",
}{- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "protected": true,
- "providerID": "string",
- "status": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "url": "string",
- "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b"
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| pin | string <= 64 characters Current PIN. Required when the playlist is protected. |
{- "pin": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| currentPin | string <= 64 characters Current PIN. Required when the playlist is protected. |
| name required | string |
| pin | string <= 64 characters New PIN. Empty keeps the current one on a protected playlist. |
| protected | boolean |
| providerID | string |
| url required | string |
{- "currentPin": "string",
- "name": "string",
- "pin": "string",
- "protected": true,
- "providerID": "string",
- "url": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Mails a single-use link to the account address. The PIN itself is never sent.
| id required | string <uuid> |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}Consumes the single-use token from the reset e-mail and stores the new PIN. The current PIN is not required.
| id required | string <uuid> |
| CF-Connecting-IP | string |
| X-Forwarded-For | string |
| confirmPin required | string [ 1 .. 64 ] characters |
| pin required | string [ 1 .. 64 ] characters |
| token required | string non-empty |
{- "confirmPin": "1234",
- "pin": "1234",
- "token": "string"
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "activeSource": {
- "playlistId": "string",
- "providerId": "string"
}, - "join": {
- "channels": true,
- "movies": true,
- "series": true
}, - "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "resolved": {
- "channels": [
- "string"
], - "media": [
- "string"
], - "movies": [
- "string"
], - "series": [
- "string"
]
}, - "selection": {
- "property1": {
- "channels": true,
- "movies": true,
- "series": true
}, - "property2": {
- "channels": true,
- "movies": true,
- "series": true
}
}, - "sources": [
- {
- "blocked": true,
- "name": "string",
- "playlistId": "string",
- "providerId": "string",
- "routes": [
- {
- "baseUrl": "string",
- "dnsId": "be7a56a3-552d-4cda-a1bb-1c2299dd5f2a",
- "position": 0
}
], - "status": "online",
- "url": "string"
}
], - "version": 0
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| activeProviderId required | string non-empty |
required | object (SourceSelectionJoinFlags) |
required | object |
{- "activeProviderId": "string",
- "join": {
- "channels": true,
- "movies": true,
- "series": true
}, - "selection": {
- "property1": {
- "channels": true,
- "movies": true,
- "series": true
}, - "property2": {
- "channels": true,
- "movies": true,
- "series": true
}
}
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| description | string |
| name | string |
| profileId | string <uuid> |
| type | string Enum: "default" "favorites" "import" |
{- "description": "string",
- "name": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "type": "default"
}{- "createdAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "type": "string"
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| kind required | string Enum: "movie" "tv" "channel" |
| tmdbId | string |
| contentId | string |
| favoritesListId | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| favoritesListId | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| kind | string Enum: "movie" "tv" "channel" |
{- "favorites": [
- {
- "contentId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "string",
- "posterPath": "string",
- "title": "string",
- "tmdbId": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}| contentId | string |
| favoritesListId | string <uuid> |
| kind required | string Enum: "movie" "tv" "channel" |
| posterPath | string <= 500 characters |
| profileId required | string <uuid> |
| title | string <= 500 characters |
| tmdbId | string |
{- "contentId": "string",
- "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
- "kind": "movie",
- "posterPath": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "title": "string",
- "tmdbId": "string"
}{- "contentId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "string",
- "posterPath": "string",
- "title": "string",
- "tmdbId": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "favoritesLists": [
- {
- "created_at": "2019-08-24T14:15:22Z",
- "description": "string",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "type": "string",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}| favoritesListId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| posterPath | string <= 500 characters |
| profileId required | string <uuid> |
| title | string <= 500 characters |
{- "posterPath": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "title": "string"
}{- "contentId": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "favoritesListId": "b04c9441-7dc4-4f87-90e3-43be465e4a99",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "string",
- "posterPath": "string",
- "title": "string",
- "tmdbId": "string",
- "updatedAt": "2019-08-24T14:15:22Z"
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
[- {
- "contentId": "external-123",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "tv_series",
- "rating": 5,
- "title": "Breaking Bad",
- "tmdbId": "1396"
}
]| contentId required | string |
| kind | string |
| profileId required | string <uuid> |
| rating required | integer <int64> [ 1 .. 10 ] |
| title required | string |
| tmdbId required | string |
{- "contentId": "string",
- "kind": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "rating": 1,
- "title": "string",
- "tmdbId": "string"
}{- "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"
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| contentId required | string |
| kind | string |
| profileId required | string <uuid> |
| rating required | integer <int64> [ 1 .. 10 ] |
| title required | string |
| tmdbId required | string |
{- "contentId": "string",
- "kind": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "rating": 1,
- "title": "string",
- "tmdbId": "string"
}{- "contentId": "external-123",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "kind": "tv_series",
- "rating": 5,
- "title": "Breaking Bad",
- "tmdbId": "1396"
}identityKey is opaque to the client: the list endpoint returns it, this one takes it back. It travels in query and not in path because a ct: key carries the raw title, spaces and slashes included.
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| identityKey required | string [ 1 .. 255 ] characters |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "series": [
- {
- "createdAt": "2019-08-24T14:15:22Z",
- "fromEpisode": 0,
- "fromSeason": 0,
- "hasNewEpisode": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identityKey": "string",
- "lastEpisode": 0,
- "lastSeason": 0,
- "mediaId": "string",
- "newCount": 0,
- "newEpisode": 0,
- "newSeason": 0,
- "notifiedAt": "2019-08-24T14:15:22Z",
- "poster": "string",
- "title": "string"
}
]
}| mediaId required | string [ 1 .. 255 ] characters |
| profileId required | string <uuid> |
{- "mediaId": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a"
}{- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identityKey": "string",
- "lastEpisode": 0,
- "lastSeason": 0,
- "mediaId": "string",
- "poster": "string",
- "title": "string"
}| 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 |
{- "histories": [
- {
- "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
}
]
}Returns 201 on the first access to the media item and 200 when an existing entry is refreshed.
| kind required | string [ 1 .. 50 ] characters |
| media_id required | string non-empty |
| profile_id required | string <uuid> |
| tmdb_id required | integer <int64> >= 1 |
{- "kind": "string",
- "media_id": "string",
- "profile_id": "bfcb6779-b1f9-41fc-92d7-88f8bc1d12e8",
- "tmdb_id": 1
}{- "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
}Returns 201 with a Location header when the entry is created and 200 when an existing entry is updated.
| 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 |
{- "elapsedTimeMs": 1,
- "episode": 0,
- "fullyElapsed": true,
- "mediaId": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "season": 0,
- "sourceId": "string",
- "totalTimeMs": 1
}{- "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
}Deletes every episode entry of the title. identity_key is opaque to the client: the list endpoint returns it, this one takes it back.
| profile_id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| identity_key required | string non-empty |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}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.
| profile_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: 10 |
| media_id | string |
| watched | boolean |
{- "items": [
- {
- "backdropPath": "string",
- "elapsedTimeMs": 0,
- "episode": 0,
- "fullyElapsed": true,
- "haveNextEpisode": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "identityKey": "string",
- "inProduction": true,
- "kind": "string",
- "logoPath": "string",
- "mediaId": "string",
- "notifiedAt": "2019-08-24T14:15:22Z",
- "posterPath": "string",
- "releaseDate": "string",
- "season": 0,
- "sourceId": "string",
- "title": "string",
- "tmdbId": 0,
- "totalTimeMs": 0,
- "updatedAt": "2019-08-24T14:15:22Z",
- "voteAverage": 0.1
}
], - "page": 0,
- "pageSize": 0,
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a"
}| 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]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}| 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]... |
{- "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"
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| unread | boolean Quando true, devolve só as não lidas |
| limit | integer <int64> [ 1 .. 50 ] Default: 20 |
{- "items": [
- {
- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "payload": {
- "episode": 0,
- "fromEpisode": 0,
- "fromSeason": 0,
- "identityKey": "string",
- "mediaId": "string",
- "newCount": 0,
- "poster": "string",
- "season": 0,
- "title": "string"
}, - "readAt": "2019-08-24T14:15:22Z",
- "type": "string"
}
], - "unreadCount": 0
}read=false clears the mark. profileId is required: it is what proves the notification belongs to a profile of the caller.
| id required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
| read required | boolean |
{- "read": true
}{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}The code only links a reseller to the account; it never signs anyone in. Valid for 24 hours, and generating a new one invalidates the previous.
{- "code": "string",
- "expiresAt": "2019-08-24T14:15:22Z"
}| date | string^\d{4}-\d{2}-\d{2}$ Dia da agenda em America/Sao_Paulo. Vazio: hoje. |
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "date": "string",
- "matches": [
- {
- "away": {
- "logo": "string",
- "name": "string",
- "slug": "string"
}, - "broadcasters": [
- "string"
], - "channels": [
- {
- "name": "string",
- "provider_id": "string",
- "source": "title",
- "stream_id": 0
}
], - "elapsed": 0,
- "followed": true,
- "home": {
- "logo": "string",
- "name": "string",
- "slug": "string"
}, - "id": "string",
- "kickoff": "2019-08-24T14:15:22Z",
- "league": {
- "name": "string",
- "slug": "string"
}, - "score": {
- "away": 0,
- "home": 0
}, - "state": "pre",
- "status": "string"
}
]
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "teams": [
- {
- "followed": true,
- "leagues": [
- {
- "name": "string",
- "slug": "string"
}
], - "logo": "string",
- "name": "string",
- "slug": "string"
}
]
}| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "teams": [
- {
- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "logo": "string",
- "name": "string",
- "slug": "string"
}
]
}| logo | string <= 500 characters |
| name required | string [ 1 .. 120 ] characters |
| profileId required | string <uuid> |
| slug required | string [ 1 .. 120 ] characters ^[a-z0-9-]+$ Identidade do time, do campo slug da agenda |
{- "logo": "string",
- "name": "string",
- "profileId": "faebe71b-2bf8-4bdb-9b67-258e4d6aa00a",
- "slug": "string"
}{- "createdAt": "2019-08-24T14:15:22Z",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "logo": "string",
- "name": "string",
- "slug": "string"
}| slug required | string [ 1 .. 120 ] characters ^[a-z0-9-]+$ |
| profileId required | string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]... |
{- "detail": "Property foo is required but is missing.",
- "errors": [
- {
- "location": "string",
- "message": "string",
- "value": null
}
], - "status": 400,
- "title": "Bad Request",
}