Tolino cloud API documentation

Servers the Tolino Vision 3/4 HD talk to (Firmware 14.x).

Work in progress.

Contents

General information

Headers

User-Agent

Normal API requests:

Dalvik/1.6.0 (Linux; U; Android 4.4.2; tolino Build/KOT49H)

The browser:

Mozilla/5.0 (Linux; Android 4.4.2; en-; tolino vision 3 HD/14.1.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Mobile Safari/537.36 READER OS_BUILD/KOT49H.41429.1044823

Domains

Domains that are used by the Tolino Vision 3 HD.

Buch.de

auth.buch.de

FIXME

Google

clients3.google.com

Check if the internet is reachable

MyTolino.com

management.mytolino.com
  • List of resellers

  • eInk handshake (FIXME)

Pageplace

bosh.pageplace.de

"bosh" could be short name for "BOokSHelf"

  • ping

  • reseller configuration

  • current time

  • sync main data (books, reading status, notes)

  • ebook upload

  • ebook cover upload

cdp.pageplace.de
  • Book images?

  • Book downloads

family.pageplace.de

Family sharing

inventory.pageplace.de

FIXME

Use cases

Login process

The user-facing stuff happens in the web browser.

  1. Fetch URL of login page: GET https://thalia.de/auth/oauth2/authorize

  2. Show login page with username + password form

  3. Redirect to internal e-book reader login with code.

    Example redirect: Location: epublishing://login?code=GK6jDC

  4. Request OAuth access token: POST https://thalia.de/auth/oauth2/token

  5. Check if the device has been registered already: GET https://bosh.pageplace.de/bosh/rest/userid/xxx

  6. Register the device to the user: POST https://bosh.pageplace.de/bosh/rest/v2/registerhw

  7. Run the Sync process

Sync process

The user presses the synchronization button on the "My books" screen.

  1. Check if the device is online: GET http://bosh.pageplace.de/bosh/rest/ping

  2. Fetch the reseller configuration: GET https://bosh.pageplace.de/bosh/rest/v2/resellerconfig

  3. Fetch the number of books/items in the cloud: GET https://bosh.pageplace.de/bosh/rest/inventory/count

  4. Fetch cloud book information: GET https://inventory.pageplace.de/v2/inventory

  5. Fetch the current date/time: GET https://bosh.pageplace.de/bosh/rest/time

  6. Fetch changes since last sync: PATCH https://bosh.pageplace.de/bosh/rest/sync-data

  7. Get list of resellers: GET https://bosh.pageplace.de/bosh/rest/handshake/resellers

  8. Fetch advertisements for the main screen: GET https://bosh.pageplace.de/bosh/rest/recommendation/xyz

  9. Fetch family membership information: GET https://family.pageplace.de/v1/myself

When the user is part of a family:

  1. Fetch list of available dictionaries: GET https://bosh.pageplace.de/bosh/rest/dictionary/list

  2. Fetch list of family members: GET https://family.pageplace.de/v1/family

  3. Fetch list of shared books: GET https://family.pageplace.de/v1/shares

FIXME: What happens if the inventory count is 0? Is the inventory not fetched then?

API calls

GET https://bosh.pageplace.de/bosh/rest/handshake/resellers

Get a list of resellers (book shops) that can be selected when the Tolino reader is unlocked.

It is also used when linking the Tolino to another account on a different book seller. (FIXME: verify)

Part of the sync process.

Request

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Accept

Example: application/json; charset=UTF-8

m_id

FIXME: Maybe reseller ID?

Example: 3

hardware_id

Seems to be the same as the xxx value in the URL.

Example: 665fc389ef4e47258c5db9fa7821bd19

Content-Type

application/json; charset=UTF-8

This is a lie; there is no request body.

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

Response

HTTP status code 200 OK.

Example:

{
  "resellerListResponse": {
    "resellers": [
      {
        "reseller_id": "81",
        "reseller_name": "eBook.de",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/81/android/81_reseller_logo.png"
      },
      {
        "reseller_id": "80",
        "reseller_name": "myBookShop",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/80/android/80_reseller_logo.png"
      },
      {
        "reseller_id": "30",
        "reseller_name": "buecher.de",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/30/android/30_reseller_logo.png"
      },
      {
        "reseller_id": "90",
        "reseller_name": "IBS.it",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/90/android/90_reseller_logo.png"
      },
      {
        "reseller_id": "23",
        "reseller_name": "OSIANDER",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/23/Android/23_reseller_logo.png"
      },
      {
        "reseller_id": "24",
        "reseller_name": "MAYERSCHE",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/24/android/24_reseller_logo.png"
      },
      {
        "reseller_id": "1",
        "reseller_name": "PagePlace",
        "reseller_connected": false,
        "reseller_logo": "http://www.pageplace.de/media/eink-reader/logo_pageplace_hd.png"
      },
      {
        "reseller_id": "4",
        "reseller_name": "Thalia.at",
        "reseller_connected": false,
        "reseller_logo": "https://images.thalia.de/md4/ereader/Logo-eReading.png"
      },
      {
        "reseller_id": "7",
        "reseller_name": "Buch.ch",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/7/android/7_reseller_logo.png"
      },
      {
        "reseller_id": "11",
        "reseller_name": "Weltbild.at",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/11/android/11_reseller_logo.png"
      },
      {
        "reseller_id": "12",
        "reseller_name": "Weltbild.ch",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/12/android/12_reseller_logo.png"
      },
      {
        "reseller_id": "13",
        "reseller_name": "Hugendubel",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/13/android/13_reseller_logo.png"
      },
      {
        "reseller_id": "3",
        "reseller_name": "Thalia.de",
        "reseller_connected": true,
        "reseller_logo": "https://images.thalia.de/md2/ereader/Logo-eReading.png"
      },
      {
        "reseller_id": "10",
        "reseller_name": "Weltbild.de",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/10/android/10_reseller_logo.png"
      },
      {
        "reseller_id": "8",
        "reseller_name": "Orell Füssli",
        "reseller_connected": false,
        "reseller_logo": "https://images.thalia.de/md37/ereader/Logo-eReading.png"
      },
      {
        "reseller_id": "91",
        "reseller_name": "LIBRACCIO",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/91/android/91_reseller_logo.png"
      },
      {
        "reseller_id": "82",
        "reseller_name": "LIBRIS.NL",
        "reseller_connected": false,
        "reseller_logo": "https://download.pageplace.de/icons_rc/82/android/82_reseller_logo.png"
      }
    ]
  }
}

GET https://bosh.pageplace.de/bosh/rest/inventory/count

Fetch the number of books/items in the cloud storage.

Part of the sync process.

Request

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Accept

Example: application/json; charset=UTF-8

m_id

FIXME: Maybe reseller ID?

Example: 3

hardware_id

Seems to be the same as the xxx value in the URL.

Example: 665fc389ef4e47258c5db9fa7821bd19

Content-Type

application/json; charset=UTF-8

This is a lie; there is no request body.

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

Response

HTTP status code: 200 OK

Number of books.

Example:

{
    "count": 3
}

GET http://bosh.pageplace.de/bosh/rest/ping

Used to check if the ebook reader is online (internet reachable).

Request

GET Parameters
responseStatus=204

Always there

Response

Status Code

204 No Content

GET https://bosh.pageplace.de/bosh/rest/recommendation/xyz

Get advertisements for the main reader screen.

FIXME: Why the xyz in the URL?

Part of the sync process.

Request

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Accept

Example: application/json; charset=UTF-8

m_id

FIXME: Maybe reseller ID?

Example: 3

hardware_id

Seems to be the same as the xxx value in the URL.

Example: 665fc389ef4e47258c5db9fa7821bd19

Content-Type

application/json; charset=UTF-8

This is a lie; there is no request body.

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

GET parameters
count

Number of recommendations to return

Example: 12

fullShopUrl

true

Response

HTTP status code 200 OK.

Example:

{
  "recommendationResponse": {
    "recommendations": [
      {
        "publicationId": "DT0400.9783751502405_A40541228",
        "description": "Der erste Band der Bridgerton-Serie von Julia Quinn - die Inspiration zur Netflix-Serie! Nichts wünscht die warmherzige Daphne Bridgerton sich mehr, als zu heiraten und Kinder zu bekommen. Dafür schließt sie einen Pakt mit Simon Basset, dem heiratsunwilligen Duke of Hastings: Indem er ihr den Hof macht, erscheint der umschwärmte Aristokrat vergeben. Und Daphne rückt durch das Interesse des Herzogs gesellschaftlich in den Mittelpunkt. Ein prickelndes Spiel, bei dem es nur Sieger zu geben scheint - bis Daphne erkennt, dass nur einem Mann ihr Herz gehört: Simon!",
        "title": "Bridgerton - Der Duke und ich",
        "author": "Julia Quinn",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=149846249&turl=%2Fshop%2Farticle.jsp%3F149846249",
        "cover_url": "https://assets.thalia.media/img/artikel/0ce02217be038330f409a07aa79be644e41d9b85-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783641267575_A39529579",
        "description": "Zwei Frauen auf der Flucht. Eine Entscheidung, die alles verändert. Und kein Weg zurück. New York, Flughafen JFK: Claire soll nach Puerto Rico reisen, um ihren Mann, einen ehrgeizigen Politiker, beim Wahlkampf zu unterstützen. Doch in Wahrheit will sie nichts als fliehen - vor seinen gewalttätigen Übergriffen und der lückenlosen Kontrolle, die er über sie ausübt. Sie kommt mit Eva ins Gespräch, die bei ihrem schwerkranken Mann Sterbehilfe geleistet hat. Zu Hause in Kalifornien erwartet sie die Polizei. Innerhalb weniger Sekunden beschließen sie, die Bordkarten zu tauschen und sich gegenseitig ein neues Leben zu schenken. Erleichtert landet Claire in Kalifornien. In Evas Haus gibt es allerdings keine Hinweise auf einen Ehemann. Dann erfährt sie, dass das Flugzeug nach Puerto Rico abgestürzt ist. Und kurz darauf entdeckt sie die vermeintlich abgestürzte Eva in einer Fernsehreportage über das Unglück. Lebendig. Hat sie die Flucht in das Leben einer Anderen am Ende doch nur in eine Falle gelockt? ",
        "title": "Der Tausch - Zwei Frauen. Zwei Tickets. Und nur ein Ausweg.",
        "author": "Julie Clark",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=147900787&turl=%2Fshop%2Farticle.jsp%3F147900787",
        "cover_url": "https://assets.thalia.media/img/artikel/5113d1ed25c611ab7619b4b9d64f735ab4920c7d-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783426439838_A39547289",
        "description": "Wer das Datum seines Todes kennt, hat mit dem Sterben schon begonnen - der neue Bestseller von Sebastian Fitzek! Es ist Samstag, kurz nach 22.00 Uhr. Jules Tannberg sitzt am Begleittelefon. Ein ehrenamtlicher Telefonservice für Frauen, die zu später Stunde auf ihrem Heimweg Angst bekommen und sich einen telefonischen Begleiter wünschen, dessen beruhigende Stimme sie sicher durch die Nacht nach Hause führt - oder im Notfall Hilfe ruft. Noch nie gab es eine wirklich lebensgefährliche Situation. Bis heute, als Jules mit Klara spricht. Die junge Frau hat entsetzliche Angst. Sie glaubt, von einem Mann verfolgt zu werden, der sie schon einmal überfallen hat und der mit Blut ein Datum auf ihre Schlafzimmerwand malte: Klaras Todestag! Und dieser Tag bricht in nicht einmal zwei Stunden an ... Geheimnisvoll, beklemmend, nervenaufreibend. Sebastian Fitzeks bislang unheimlichster Psychothriller.",
        "title": "Der Heimweg",
        "author": "Sebastian Fitzek",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=147930114&turl=%2Fshop%2Farticle.jsp%3F147930114",
        "cover_url": "https://assets.thalia.media/img/artikel/165a3878ec433697eb2e7519f4e96b6d29896e54-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783641201968_A40493558",
        "description": "Sieben Sterne umfasst das Sternbild der Plejaden, und die Schwestern d'Aplièse tragen ihre Namen. Stets war ihre siebte Schwester aber ein Rätsel für sie, denn Merope ist verschwunden, seit sie denken können. Eines Tages überbringt der Anwalt der Familie die verblüffende Nachricht, dass er eine Spur entdeckt hat: Ein Weingut in Neuseeland und die Zeichnung eines sternförmigen Rings weisen den Weg. Es beginnt eine Jagd quer über den Globus, denn Mary McDougal - die Frau, die als Einzige bestätigen kann, ob ihre Tochter Mary-Kate die verschwundene Schwester ist - befindet sich auf einer Weltreise. Während die Schwestern ihre Suche nach Neuseeland, Kanada, England, Frankreich und Irland führt, schlüpft ihnen Mary immer wieder durch die Finger. Und es scheint, als wolle sie unbedingt verhindern, gefunden werden ... ",
        "title": "Die verschwundene Schwester",
        "author": "Lucinda Riley",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=149697970&turl=%2Fshop%2Farticle.jsp%3F149697970",
        "cover_url": "https://assets.thalia.media/img/artikel/d72cbd3faa63e6797600e121206703fdb0674945-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783641263140_A40225527",
        "description": "Wenn dich die Angst dein Leben lang verfolgt, weil du zu viel weißt ... Ein wolkenloser Sommertag, die Hitze drückt aufs Land. Im Zug von London nach York zielt ein Fremder mit einer Pistole auf eine Frau. Sie entkommt in letzter Sekunde. Zwei Tage später: Eine junge Frau stürzt mit ihrem Fahrrad, weil jemand einen dünnen Draht über den Weg gespannt hat. Sie ist sofort bewusstlos. Den folgenden Schuss hört sie schon nicht mehr. Die Frauen stehen in keiner Verbindung zueinander, aber die Tatwaffe ist dieselbe. Kate Linville, neu bei der North Yorkshire Police, wird sofort in die Ermittlungen hineingezogen. Sie kommt einem grausamen Geheimnis auf die Spur und gerät selbst in tödliche Gefahr. Denn der Täter, der eine vermeintliche Schuld rächen will, gibt nicht auf ... Weitere Fälle für Kate Linville und Caleb Hale: Die Betrogene Die Suche ",
        "title": "Ohne Schuld",
        "author": "Charlotte Link",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=149148070&turl=%2Fshop%2Farticle.jsp%3F149148070",
        "cover_url": "https://assets.thalia.media/img/artikel/abc400a8f5e7c7ef80964cbd2b107db03d338ffb-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783968170367_A39435394",
        "description": "Der erste Fall für Profiler und Frauenheld Nick Stein Ein fesselnder Krimi für Fans von Nele Neuhaus Eigentlich wollte Nick Stein, Profiler und bester Mann beim BKA, seine Heimatstadt Mödling so weit wie möglich hinter sich lassen. Doch wegen des Mordes an einer alten Schulkollegin, die er damals verspottete, kehrt er zurück. Genau genommen müsste er den Fall abgeben, denn die Ermittlungen führen mitten hinein in seine alte, feierfreudige Clique, die mittlerweile zur Mödlinger Elite gehört. Aber private Gefühle können einen Nick Stein nicht ablenken, er ist schließlich promovierter Psychologe. Allerdings kann der charismatische Nick den Frauen nach wie vor genauso wenig widerstehen wie sie ihm, selbst wenn ihn eine leise Stimme warnt, dass er den Lebensstil seiner alten Freunde seinerzeit nicht grundlos aufgegeben hat. Als sich auch noch der Bürgermeister einmischt und ein zweiter Mord geschieht, ist es mit der professionellen Distanz endgültig vorbei, denn hinter den bürgerlichen Fassaden lauert das nackte Grauen ... Erste Leserstimmen \"ich war überrascht, welche Wendungen die Geschichte immer wieder nimmt\" \"ein Showdown, wie ihn ein Krimi braucht, spannend bis zum Schluss\" \"der Plot ist gut konstruiert und ein Verwirrspiel der Extraklasse nimmt seinen Lauf\" \"der flüssige Schreibstil des Autors hat mich sehr gut duch die Geschichte geleitet\" \"gelungener Krimi mit viel Ermittlerarbeit, einer Prise Erotik und einem spannenden Plot\" Weitere Titel dieser Reihe Stille Schuld (ISBN: 9783968170404)",
        "title": "Narbenfrau",
        "author": "Gerlinde Friewald",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=147662274&turl=%2Fshop%2Farticle.jsp%3F147662274",
        "cover_url": "https://assets.thalia.media/img/artikel/04273d0b2c505f2a895adbf008cfa2bfd17a47aa-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783641117009_A23157788",
        "description": "Der erste Roman einer faszinierenden Reihe um die \"Sieben Schwestern\". Maia ist die älteste von sechs Schwestern, die alle von ihrem Vater adoptiert wurden, als sie sehr klein waren. Sie lebt als Einzige noch auf dem herrschaftlichen Anwesen ihres Vaters am Genfer See, denn anders als ihre Schwestern, die es drängte, draußen in der Welt ein ganz neues Leben als Erwachsene zu beginnen, fand die eher schüchterne Maia nicht den Mut, ihre vertraute Umgebung zu verlassen. Doch das ändert sich, als ihr Vater überraschend stirbt und ihr einen Umschlag hinterlässt - und sie plötzlich den Schlüssel zu ihrer bisher unbekannten Vorgeschichte in Händen hält: Sie wurde in Rio de Janeiro in einer alten Villa geboren, deren Adresse noch heute existiert. Maia fasst den Entschluss, nach Rio zu fliegen, und an der Seite von Floriano Quintelas, eines befreundeten Schriftstellers, beginnt sie, das Rätsel ihrer Herkunft zu ergründen. Dabei stößt sie auf eine tragische Liebesgeschichte in der Vergangenheit ihrer Familie, und sie taucht ein in das mondäne Paris der Jahrhundertwende, wo einst eine schöne junge Frau aus Rio einem französischen Bildhauer begegnete. Und erst jetzt fängt Maia an zu begreifen, wer sie wirklich ist und was dies für ihr weiteres Leben bedeutet ... ",
        "title": "Die sieben Schwestern Bd.1",
        "author": "Lucinda Riley",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=41227640&turl=%2Fshop%2Farticle.jsp%3F41227640",
        "cover_url": "https://assets.thalia.media/img/artikel/a720d7e96c65406afe20df76d459365e246e7dc7-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783104912998_A39626270",
        "description": "Die Platz-1-Bestseller-Serie aus Dänemark »Vor kurzem noch unbekannt, überholt Anne Mette Hancock jetzt Jo Nesbø und Jussi Adler-Olsen auf den Bestsellerlisten.« Berlingske Die Kopenhagener Investigativ-Journalistin Heloise Kaldan steckt in einer heiklen Jobkrise, als sie einen mysteriösen Brief erhält: von einer gesuchten Mörderin. Darin stehen Dinge über Heloise, die eigentlich niemand wissen kann. Beunruhigt beginnt Heloise, auf eigene Faust zu recherchieren. Die Absenderin ist seit einem brutalen Mord vor einigen Jahren spurlos verschwunden. Was will sie nun ausgerechnet von Heloise, und woher hat sie die Informationen über sie? Zur gleichen Zeit erhält auch Kommissar Erik Schäfer einen neuen Hinweis auf die Gesuchte. Alle Spuren scheinen zu Heloise Kaldan zu führen. Ist ihr Leben in Gefahr? Und können der Polizist und die Journalistin einander vertrauen? Der erste Fall der Erfolgs-Reihe um Heloise Kaldan und Erik Schäfer. Ausgezeichnet mit dem dänischen Krimi-Preis. Ein fesselnd persönlicher Thriller über Rache, Gerechtigkeit und Vergebung. »Bezwingendes Crime-Debüt auf höchstem skandinavischen Niveau.« Litteratursiden",
        "title": "Leichenblume",
        "author": "Anne Mette Hancock",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=148123770&turl=%2Fshop%2Farticle.jsp%3F148123770",
        "cover_url": "https://assets.thalia.media/img/artikel/96e70f5e92341412d8462adf041226819bbc62bf-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9780063045118_A39289545",
        "description": "An enchanting collection containing the first three novels in New York Times bestselling author Julia Quinn's beloved Bridgerton series set in Regency England—The Duke and I, The Viscount Who Loved Me, and An Offer from a Gentleman—now a series created by Shonda Rhimes for Netflix. The Duke and I When Daphne Bridgerton and Simon Basset, Duke of Hastings, agree to a fake courtship, they think they've found the perfect solution to their problems. Romantically associated with one of London's most desirable catches, Daphne's prospects among the ton will soar. For avowed bachelor Simon, an attachment to Daphne will deter would-be brides and their ambitious mamas. Their plan works like a charm—at first. But amid the glittering, gossipy, cut-throat world of London's elite, there is only one certainty: love ignores every rule. . . The Viscount Who Loved Me London's most elusive bachelor, Anthony Bridgerton is determined to wed. But one obstacle stands in his way—his intended's older sister, Kate Sheffield, who is driving Anthony mad with her determination to stop the betrothal. Kate is quite sure that reformed rakes do not make the best husbands, and Anthony Bridgerton is the most wicked rogue of them all. She's determined to protect her sister—even as she fears she may not be able to resist the reprehensible and oh so desirable rake herself . . . An Offer from a Gentleman Sophie Beckett never dreamed she'd be able to sneak into Lady Bridgerton's famed masquerade ball—or that she would be spinning in the arms of her \"Prince Charming\"—the debonair and devastatingly handsome Benedict Bridgerton. But when the clock strikes midnight, Sophie's enchanting evening ends. Since that night Benedict has been able to think of nothing but the bewitching young woman, and he's sworn to find and wed his mystery miss. Yet will another unexpectedly steal his heart—and his chance for a fairy tale love? ",
        "title": "Bridgerton Collection Volume 1",
        "author": "Julia Quinn",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=147088413&turl=%2Fshop%2Farticle.jsp%3F147088413",
        "cover_url": "https://assets.thalia.media/img/artikel/ba2c5db01eef33c301fdaa951bd98d7a52192152-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783736314221_A39672730",
        "description": "Er glaubt nicht mehr an die Liebe. Bis er sie trifft ... Auf dem Weg zu einem Vorstellungsgespräch passiert es: Elodie erwischt mit ihrem alten Jeep den glänzenden Mercedes eines reichen Schnösels. Es ist Abneigung auf den ersten Blick, als ihr der arrogante - wenn auch leider attraktive - Geschäftsmann die alleinige Schuld an dem Unfall gibt. Nach einem hitzigen Wortgefecht muss die temperamentvolle New Yorkerin sich sputen, um noch pünktlich zu ihrem Termin zu erscheinen - und staunt nicht schlecht, als sich ihr Unfallgegner als ihr zukünftiger Chef entpuppt ... \"Welch. Ein. Spaß!!! Ich habe dieses Buch von Anfang bis Ende einfach nur geliebt!\" Maryse's Book Blog Der neue Bestseller des Erfolgsduos Vi Keeland und Penelope Ward",
        "title": "Park Avenue Player",
        "author": "Vi Keeland,Penelope Ward",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=148210090&turl=%2Fshop%2Farticle.jsp%3F148210090",
        "cover_url": "https://assets.thalia.media/img/artikel/3a198b0f827f682a2f5d971528944a8aa5502aed-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783751505147_A40777800",
        "description": "Auftakt der bezaubernden Smythe-Smith-Serie von Julia Quinn! \"Wie, bitteschön, soll ich heiraten, wenn kein Gentleman um mich anhält?\" Tatendurstig beschließt Honoria Smythe-Smith, dem Eheglück etwas nachzuhelfen. Doch in die Falle, die sie stellt, tappt ausgerechnet Marcus Holroyd, Earl of Chatteris. Dass ihr Freund aus Kindertagen mehr als einen verstauchten Knöchel davonträgt, erweist sich als schicksalhaft. Denn Honoria muss Marcus pflegen - und liegt plötzlich in seinen Armen. Ist er derjenige, mit dem sie lachen, den sie heiraten und aufrichtig lieben kann? Zu spät erfährt Honoria, was Marcus einst ihrem Bruder geschworen hat ...",
        "title": "Mit List und Küssen",
        "author": "Julia Quinn",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=150416693&turl=%2Fshop%2Farticle.jsp%3F150416693",
        "cover_url": "https://assets.thalia.media/img/artikel/605e9f44edac70fb867944e9320b3d7c94acbd18-00_BF160-240.jpeg",
        "publicationType": null
      },
      {
        "publicationId": "DT0400.9783968172187_A40776890",
        "description": "Ein brutaler Mord und ein Opfer mit vielen Feinden - Nick Stein ermittelt Der spannende Krimi für Fans von Andreas Gruber Nach seinem letzten Fall hat sich Nick Stein auf unbestimmte Zeit vom BKA beurlauben lassen und hält Vorträge an diversen Universitäten. Doch die Ruhe währt nicht lange. Während seines Vortrags an der psychologischen Fakultät der LMU bittet ihn der Münchner Kriminalbeamte Axel Mayr um Hilfe bei einem Mordfall. Sofort ist Nicks Neugier geweckt, denn der Fall hat es in sich. Mit Unterstützung so mancher alter Weggefährten stürzt sich Nick in die Ermittlungen und wird immer weiter in den komplexen Fall um Geldwäsche, Prostitution und Vergewaltigung hineingezogen. Schließlich ist er dem Täter dicht auf den Fersen - doch sein Bauchgefühl sagt ihm, dass irgendetwas nicht stimmt … Weitere Titel dieser Reihe Narbenfrau (ISBN: 9783968170367) Stille Schuld (ISBN: 9783968170404) Erste Leserstimmen „Ein sorgsam konstruierter Krimi, der nie an Spannung verliert.\" „Zum Glück ist Nick Stein kein Typ für den Ruhestand. Auch sein dritter Fall ist wieder rätselhaft, komplex und unglaublich fesselnd.\" „Als Krimi-Fan war ich begeistert und habe zu jedem Zeitpunkt mit dem Ermittlerteam mitgefiebert.\" „Ein mitreißender Kriminalfall voller interessanter Wendungen.\"",
        "title": "Totenstein (nur bei Thalia!)",
        "author": "Gerlinde Friewald",
        "shop_url": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco&detailPage=true&bdeArticleId=150412963&turl=%2Fshop%2Farticle.jsp%3F150412963",
        "cover_url": "https://assets.thalia.media/img/artikel/aa36dbdd3dab5a9f1f8aea75119c429f0315b9c6-00_BF160-240.jpeg",
        "publicationType": null
      }
    ]
  }
}

PATCH https://bosh.pageplace.de/bosh/rest/sync-data

Send changes to the server and get changes since last sync back. This is the main API method for synchronization.

Part of the Sync process.

Request

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Content-Type

application/json; charset=UTF-8

Accept

application/json; charset=UTF-8

reseller_id

Example: 3

hardware_id

Example: 665fc389ef4e47258c5db9fa7821bd19

client_type

Example: TOLINO_VISION_3

GET parameters
paths

Example: publications

FIXME: What else?

Request body parameters
revision

revision of last sync response.

null when it is the first sync ever for this device.

patches

Array of changes.

No data to sync: Empty array [].

FIXME: document structure

First sync request

When nothing needs to be synchronized to the server, and nothing ever has been synchronized:

{
    "patches": [],
    "revision": null
}

Response

HTTP status code: 200 OK

FIXME: document different types and how progress is saved

New bookmarks and comments

Example:

{
  "revision": "HMwySkb2QvTCBdlNAyjAEpf+UKHoFxsaWV3yQdMYlu9lJYnoUMNDwRowMvHSFOu3DsPw+mRfrkPaZiXBeqJ8MitfmhiSoQlNBT6FYjaD4rW6Bcrv7xGvauypLFYkaq9o",
  "patches": [
    {
      "op": "add",
      "path": "/publications/DT0400.9783641243609_A40398678/comments/606778818",
      "value": {
        "revision": "Lmu7TngaxhKWHdv2FFktQFdz4lyc7kDFlZaAS+HeJfHWU2bv9FiPCTCUkDXUo7SKAncqxyDwCxG95t2u0JBMdstap9i8kDytw9JveNZhINal0xDzllUVFMfKm7HBt9m7cLdbVaqPZBKTi8XqBRFK8Q==",
        "modified": 1612116489908,
        "text": "»Würdet ihr die Aufgabe ablehnen, wenn es so wäre?«, fragte ich zurück.",
        "startPosition": "OEBPS/0159E511E7C147BFA524CA3DDE0E937C.xhtml#point(/1/4/2/78/1:0)",
        "endPosition": "OEBPS/0159E511E7C147BFA524CA3DDE0E937C.xhtml#point(/1/4/2/78/1:76)"
      }
    },
    {
      "op": "add",
      "path": "/publications/DT0400.9783641243609_A40398678/bookmark/606777963",
      "value": {
        "revision": "Lmu7TngaxhKWHdv2FFktQFdz4lyc7kDFlZaAS+HeJfHWU2bv9FiPCTCUkDXUo7SKUVTLMA8s57HlhB0Q8mKpZDUmAw+NJyupu0vRits89G6tnbMbc+VW/XxzNQfKsE9BQWfoivx5yoKm7w3r+jgQLw==",
        "modified": 1612116494839,
        "progress": 0.26923078,
        "position": "OEBPS/0159E511E7C147BFA524CA3DDE0E937C.xhtml#point(/1/4/2/70/1:0)",
        "currentPosition": "7",
        "lastPosition": "26"
      }
    },
    {
      "op": "add",
      "path": "/publications/DT0400.9783739673417_A27522964/bookmark/606779074",
      "value": {
        "revision": "HMwySkb2QvTCBdlNAyjAEpf+UKHoFxsaWV3yQdMYlu/jWquQkHI8AFujlvCDEN6Az/cX05Tmdnoti+PCVOZHjmK0futElUUgQ9l34qpnOLlQbyTlM7SrR6xheKDt04fTHhP1CTD45tmWERGvV3e+xA==",
        "modified": 1612116931592,
        "progress": 0.043393,
        "position": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/1/1:0)",
        "lastPosition": "16"
      }
    },
    {
      "op": "add",
      "path": "/publications/DT0400.9783739673417_A27522964/comments/606780680",
      "value": {
        "revision": "HMwySkb2QvTCBdlNAyjAEpf+UKHoFxsaWV3yQdMYlu/jWquQkHI8AFujlvCDEN6AxhqFD9WE9tS0SL4VnneAHAwlYWr6D5bEdS9Fyg0Mu/EYUTVuwD28pyiFSp++vhGtDKhUCfPCS0Ohi0C7PXJGtA==",
        "modified": 1612116905561,
        "text": "er einen Gleiter starten",
        "startPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/4/1:768)",
        "endPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/4/1:792)"
      }
    },
    {
      "op": "add",
      "path": "/publications/DT0400.9783739673417_A27522964/comments/606780681",
      "value": {
        "revision": "HMwySkb2QvTCBdlNAyjAEpf+UKHoFxsaWV3yQdMYlu/jWquQkHI8AFujlvCDEN6APKHWbB8HNf1ruRvf+UK5IkjbMGqptZkx8vMscjqcvlVw68+UeS+OAUKuotNqOLayfG2hLLmPZRGz1CyqOZL2Pg==",
        "modified": 1612116914525,
        "text": "Der Sturm brach ohne Vorwarnung los.",
        "startPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/2/1:0)",
        "endPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/2/1:36)"
      }
    },
    {
      "op": "add",
      "path": "/publications/DT0400.9783739673417_A27522964/comments/606780682",
      "value": {
        "revision": "HMwySkb2QvTCBdlNAyjAEpf+UKHoFxsaWV3yQdMYlu/jWquQkHI8AFujlvCDEN6A/r2JVv++Ix5Vk+IcC/9AXtWuTStnbObbxNIzKNHLGFS4L1ZLK8QsUFpdQfGAH5B9C/Sr3Ra+qLV2ayYULwCxkA==",
        "modified": 1612116925942,
        "note": "eine Notiz",
        "text": "kürzester Zeit",
        "startPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/2/1:263)",
        "endPosition": "OEBPS/caterina-di-montebasso-das-relikt_0.html#point(/1/2/1/2/1:278)"
      }
    }
  ]
}

GET https://bosh.pageplace.de/bosh/rest/time

Part of the Sync process.

Response is empty.

FIXME: What is that used for? Fetching the current time?

Request

No headers except Host: bosh.pageplace.de and Connection: Keep-Alive. This is strange, because almost all requests have a couple of other default headers (Accept, Content-Type) - so this must be deliberate.

Response

HTTP status code: 200 OK.

No content. Maybe the time is fetched from the Date header.

Example:

Server:                         nginx/1.6.2
Date:                           Sun, 31 Jan 2021 20:13:19 GMT
Content-Length:                 0
Connection:                     keep-alive
Pragma:                         no-cache
Expires:                        Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control:                  no-cache
Cache-Control:                  no-store
Timestamp:                      1612123999282
Access-Control-Allow-Origin:    *
Access-Control-Allow-Methods:   POST,GET,PUT,DELETE,PATCH
Access-Control-Allow-Headers:   t_auth_token, hardware_id, Content-Type, If-Modified-Since, m_id, authorization, X-Audiobook-Enabled, client_type, reseller_id, hardware_type,
                                client_version, os_version, language_code
Access-Control-Max-Age:         1728000
Access-Control-Expose-Headers:  response_timestamp,Date,Timestamp
Vary:                           User-Agent

GET https://bosh.pageplace.de/bosh/rest/userid/xxx

Step 5 in the Login process.

FIXME: Check if the device has been registered already to a user.

Example xxx value: 665fc389ef4e47258c5db9fa7821bd19.

There is some explanation about the hardware id in tolino-python: tolinocloud.py.

Request

No body in the request, despite the Content-Type header.

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Accept

application/json; charset=UTF-8

m_id

FIXME: Maybe reseller ID?

Example: 3

hardware_id

Seems to be the same as the xxx value in the URL.

Example: 665fc389ef4e47258c5db9fa7821bd19

Content-Type

application/json; charset=UTF-8

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

Response

HTTP status code: 200 OK

Example:

{
    "initAppResponse": {
        "config": null,
        "deviceKey": null,
        "update": 0,
        "updateVersion": null,
        "userId": "2086910932"
    }
}

POST https://bosh.pageplace.de/bosh/rest/v2/registerhw

Step 6 in the Login process.

Register the e-book reader's hardware ID with the user account.

Request

Header
t_auth_token

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

reseller_id

Example: 3

hardware_type

Example: tolino_vision_3

os_version

Example: 4.4.2

language_code

Example: en

hardware_id

Example: 665fc389ef4e47258c5db9fa7821bd19

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

Content-Type

text/plain; charset=UTF-8

This is a lie, because the request body is JSON.

Body
{
    "initAppRequest": {
        "hardware_id": "665fc389ef4e47258c5db9fa7821bd19",
        "hardware_name": "",
        "client_type": "TOLINOVISION3_14.1.0",
        "hardware_type": "tolino_vision_3"
    }
}

Response

HTTP status code: 200 OK

Contains a device key, the changelog in several languages and the latest firmware version including its download URL.

Example:

{
  "initAppResponse": {
    "deviceKey": "5Iq76M_tEoze3w49c-IOug",
    "update": 0,
    "updateVersion": "14.1.0",
    "userId": "2086910932",
    "config": [
      {
        "key": "CHANGELOG_NL",
        "value": "Verbeterde prestaties, verbeterde functies en betere integratie van onze nieuwe tolino-leeservaring. (BÈTA)\nWe hebben de software verbeterd, bugs verholpen en gezorgd voor meer stabiliteit."
      },
      {
        "key": "CHANGELOG_EN",
        "value": "Improved performance, feature enhancement and better integration of our new tolino reading experience. (BETA)\nWe have improved the software, fixed bugs and ensured more stability."
      },
      {
        "key": "CHANGELOG_FR",
        "value": "Amélioration des performances, amélioration des fonctionnalités et meilleure intégration de notre nouvelle expérience de lecture tolino. (BÊTA)\nNous avons amélioré le logiciel, corrigé des bugs et assuré plus de stabilité."
      },
      {
        "key": "DOWNLOAD_FILE_MD5",
        "value": "930d0eb9e4c861a43d8360fc8dbc0ced"
      },
      {
        "key": "CHANGELOG_ES",
        "value": "Rendimiento mejorado, mejora de funciones y mejor integración con nuestra nueva experiencia de lectura de tolino. (BETA)\nHemos mejorado el software, arreglado los errores y asegurado una mayor estabilidad.\n"
      },
      {
        "key": "CHANGELOG_DE",
        "value": "Verbesserte Leistung, Funktionserweiterungen und bessere Integration unseres neuen tolino-Leseerlebnisses (BETA).\nWir haben die Software verbessert, Fehler behoben und für mehr Stabilität gesorgt.\n"
      },
      {
        "key": "DOWNLOAD_URL",
        "value": "https://download.pageplace.de/ereader/14.1.0/alldevices/update.zip"
      },
      {
        "key": "CHANGELOG_IT",
        "value": "Prestazioni migliorate, funzionalità avanzate e migliore integrazione della nostra nuova esperienza di lettura tolino. (BETA)\nAbbiamo migliorato il software, corretto i bug e assicurato una maggiore stabilità.\n"
      }
    ]
  }
}

GET https://bosh.pageplace.de/bosh/rest/v2/resellerconfig

Fetch information about a given tolino reseller (shop):

etc.

Request

Header
ifmodifiedsince

Timestamp with microseconds of last reseller config file version

Example: 1603111725000

reseller_id

Example: 3

Required. "400 Bad Request" if missing.

hardware_type

Example: tolino_vision_3

os_version

Android version

Example: 4.4.2

language_code

Example: en

hardware_id

Example: 665fd389ea4e47228c5db8fa7821bd23

client_type

Example: TOLINO_VISION_3

Required. "400 Bad Request" if missing.

client_version

Tolino firmware version

Example: 14.1.0

Response

HTTP/1.1 304 Not Modified if the ifmodifiedsince header is equal or later than the modification date.

Success

HTTP/1.1 200 OK for the content

Example for headers reseller_id:3 and client_type:TOLINO_VISION_3:

{
  "reseller_id": 3,
  "client_type": "TOLINO_VISION_3",
  "version": "1.7.0",
  "lastModified": 1603111725000,
  "config": {
    "URL_HANDSHAKE": "https://management.mytolino.com/index.html?reseller=3&platform=eink",
    "STRING_BRAND_NAME": "Thalia.de",
    "URL_SHOP_EBOOK_SEARCH": "https://ereader.thalia.de/de.thalia.ers.sun/api/2004/sun/suche?einsprung=firmware&search_complex=",
    "FAMILY_SHARING_ACTIVE": "true",
    "LCP_ACTIVATED": "true",
    "URL_SHOP_EBOOK_START_PAGE": "https://ereader.thalia.de/de.thalia.ers.sun/api/2004/sun/startseite?einsprung=firmware",
    "SHOP_BASE": "https://ereader.thalia.de/de.thalia.ers.artikel/api/2004/artikel/details/?einsprung=reco",
    "URL_OAUTH_ACCESSTOKEN_FAMILY": "https://thalia.de/auth/oauth2/token?client_secret=gU5a7CA9",
    "IS_EXTERNAL_LINK_ENABLED": "true",
    "URL_RESELLER_LOGO": "http://www.tpereader.thalia.de/logos/Prod/thalia_de_sw_klein.png",
    "IS_LCP_ACTIVATED": "false",
    "URL_BOOKSHELF": "https://bosh.pageplace.de/bosh/rest",
    "OAUTH_CLIENT_ID": "treadervision3",
    "ENABLE_DATA_RECOVERY": "true",
    "URL_DEVICE_MANAGEMENT": "https://management.mytolino.com/index.html?reseller=3&platform=eink",
    "URL_BROWSER_START_PAGE": "https://www.google.de",
    "ADVERTISING_REDIRECT_BASE": "redirect.mytolino.com",
    "URL_OAUTH_AUTHORIZATION": "https://thalia.de/auth/oauth2/authorize?response_type=code&scope=SCOPE_BOSH SCOPE_BUCHDE SCOPE_MANDANT_ID.2004 SCOPE_LOGIN FAMILY&redirect_uri=epublishing://login&x_buchde.skin_id=17",
    "RECOMMENDATIONS_IS_SHUFFLE_ENABLED": "false",
    "URL_OAUTH_ACCESSTOKEN": "https://thalia.de/auth/oauth2/token?client_secret=gU5a7CA9",
    "URL_FAMILY_SHARING_MANUAL": "https://mytolino.de/family-sharing-handbuch-ereader",
    "URL_OAUTH_REVOKETOKEN": "https://thalia.de/auth/oauth2/revoke"
  },
  "configLanguageSpecific": [
    {
      "language": "FR",
      "languageConfig": {
        "STRING_ARRAY_SUPPORT_CONTACT": "E-mail: info@thalia.de##Hotline: +49 (0) 251 530 94 44##(Du lundi au vendredi de 9 h à 18 h)",
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Choisissez vos coups de cœur personnels parmi plus d'un million d'ebooks dans l'ebook-shop de Thalia.##Lisez parallèlement sur la tablette ou sur le smartphone avec l'appli eReading de Thalia.##Synchronisez vos ebooks en sécurité, confortablement et gratuitement à travers le tolino Cloud sur plusieurs appareils.##Avec votre tolino, utilisez gratuitement tous les hotspots de la Deutsche Telekom."
      }
    },
    {
      "language": "EN",
      "languageConfig": {
        "STRING_ARRAY_SUPPORT_CONTACT": "E-Mail: info@thalia.de##Hotline: +49 (0)251 530 94 44##(German speaking customer care:##Monday to Friday, 9 a.m. to 6 p.m.)",
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Browse through over 1,000,000 e-books in the Thalia shop.##Use the Thalia eBooks app to read in parallel on your tablet, computer or smartphone.##Synchronize your titles across various devices securely and free of charge via the tolino Cloud.##Use all Deutsche Telekom HotSpots free of charge with your tolino."
      }
    },
    {
      "language": "ES",
      "languageConfig": {
        "STRING_ARRAY_SUPPORT_CONTACT": "E-Mail: info@thalia.de##Línea directa: +49 (0) 251 530 94 44##(Lunes a viernes de 9:00 a 18:00 horas)",
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Seleccione de entre más de un millo de libros electrónicos en la tienda de eBooks de Thalia su destacados personalizados.##Lea de forma paralela con la aplicación de lectura digital de Thalia en su tableta o smartphone.##Sincronice sus libros electrónicos de forma segura, cómoda y gratuita a través de la tolino Cloud en distintos dispositivos.##Utilice con su dispositivo tolino de forma gratuita todos los HotSpots de la Deutsche Telekom."
      }
    },
    {
      "language": "NL",
      "languageConfig": {
        "STRING_ARRAY_SUPPORT_CONTACT": "E-Mail: info@thalia.de##Hotline: +49 (0) 251 530 94 44##(Maandag t/m vrijdag 9:00 uur - 18:00 uur)",
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Kies uit meer dan een miljoen ebooks in de Thalia eBook-Shop uw persoonlijke favorieten.##Lees met de Thalia eReading-app ook parallel op de tablet of smartphone.##Synchroniseer uw ebooks veilig, comfortabel en kosteloos via de tolino Cloud op verschillende apparaten.##Maak met uw tolino gratis gebruik van alle HotSpots van de Deutsche Telekom."
      }
    },
    {
      "language": "DE",
      "languageConfig": {
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Wählen Sie aus über einer Million eBooks im Thalia eBook-Shop Ihre persönlichen Highlights.##Lesen Sie mit der Thalia eReading App auch parallel auf dem Tablet oder Smartphone.##Synchronisieren Sie Ihre eBooks sicher, komfortabel und kostenlos über die tolino Cloud auf verschiedenen Geräten.##Nutzen Sie mit Ihrem tolino alle HotSpots der Deutschen Telekom kostenlos.",
        "STRING_ARRAY_SUPPORT_CONTACT": "E-Mail: info@thalia.de##Rufnummer: 0251 5309 444##(Montag bis Freitag 9 - 18 Uhr, Samstag 9:30 - 18 Uhr)"
      }
    },
    {
      "language": "IT",
      "languageConfig": {
        "STRING_ARRAY_SUPPORT_CONTACT": "E-mail: info@thalia.de##Hot line: +49 (0) 251 530 94 44##(da lunedì a venerdì, dalle ore 9 alle ore 18)",
        "STRING_ARRAY_ACTIVATION_ADVANTAGES": "Scegli le tue letture preferite tra oltre un milione di eBook nell'eBook shop Thalia.##Con l'app Thalia eReading, leggi in parallelo anche sul tablet o lo smartphone.##Sincronizza i tuoi eBook in modo sicuro, comodo e gratuito su dispositivi diversi tramite tolino Cloud.##Con il tuo tolino, sfrutta gratis tutti gli hot spot di Deutsche Telekom."
      }
    }
  ]
}

GET https://inventory.pageplace.de/v2/inventory

Fetch information about books stored in the cloud.

Part of the sync process.

Request

Full example request URL:

https://inventory.pageplace.de/v2/inventory?page=0&size=300&includeLoaned=true&contentTypeFilter=EBOOK&contentFormatFilter=ACSM&contentFormatFilter=EPUB&contentFormatFilter=PDF
Header
Authorization

OAuth token obtained from POST https://thalia.de/auth/oauth2/token.

Example: Bearer eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiw...

Accept

Example: application/json; charset=UTF-8

Accept-Encoding

gzip

m_id

FIXME: Maybe reseller ID?

Example: 3

Hardware-Id

Example: 665fc389ef4e47258c5db9fa7821bd19

Content-Type

application/json; charset=UTF-8

This is a lie; there is no request body.

client_type

Example: TOLINO_VISION_3

client_version

Example: 14.1.0

Reseller-Id

Example: 3

Cookie

Multiple times:

  • OAUTH-JSESSIONID=3EFAEC6B69D811252C75861880C338AB.15acdb90; Path=/; Secure; HttpOnly

  • JSESSIONID=C0D8A077F6D2E13251ECDCD60FE6D18A

Cookie2

Example: $Version=1

GET parameters
page

Example: 0

size

Example: 300

includeLoaned

Example: true

contentTypeFilter

Example: EBOOK

contentFormatFilter:

Multiple values allowed (repeat the parameter)

Allowed values:
  • ACSM

  • EPUB

  • PDF

Response

Header
Content-Type

application/json;charset=UTF-8

Example:

{
  "lastModifiedDate": 1612123999080,
  "page": {
    "content": [
      {
        "publicationId": "DT0400.9783641243609_A40398678",
        "resellerId": "3",
        "resellerName": "THALIA.DE",
        "contentType": "EBOOK",
        "shelfId": "39549013",
        "authors": [
          {
            "name": null,
            "firstName": "Patrick",
            "lastName": "Ness"
          }
        ],
        "title": "Chaos Walking - Die Mission (E-Only)",
        "subtitle": "Die Vorgeschichte zur »Chaos Walking«-Trilogie",
        "isbnEan": "9783641243609",
        "language": null,
        "keywords": [
          "Tribute von Panem; Divergent; Dystopie; Tom Holland; Daisy Ridley; Mads Mikkelsen; Young Adult; Nick Jonas; Hollywood-Verfilmung",
          "9783641243609"
        ],
        "publisher": "Random House ebook",
        "issuedDate": 1607900400000,
        "fileResources": [
          {
            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783641243609_A40398678/cover",
            "format": "image/jpeg",
            "type": "COVER_IMAGE",
            "lastModifiedDate": null
          }
        ],
        "contentProtectionType": "UNPROTECTED",
        "purchasedDate": 1612116184445,
        "sequenceNo": null,
        "transactionId": "339905364",
        "contentSources": [
          "PURCHASED"
        ],
        "readableContentInfo": {
          "isTextToSpeechEnabled": false,
          "renderingEngine": "FGRE"
        },
        "audioContentInfo": null,
        "subscriptionInfo": null,
        "familySharing": true,
        "defaultCover": null,
        "contentFormat": "application/epub+zip",
        "abstract": "Wer ist das Mädchen an der Seite von Todd Hewitt?\n\nAls Todd Hewitt auf das Mädchen Viola trifft, verändert dies sein Leben schlagartig. Er erkennt, dass es auf einer Lüge aufgebaut war. Er ist plötzlich in tödlicher Gefahr. Er hat zum ersten Mal in seinem Leben jemanden gefunden, dessen Gedanken er nicht lesen kann - und den er trotzdem perfekt versteht. Doch woher nur kommt die geheimnisvolle Viola, mit der er auf der Flucht ist? Die exklusive Vorgeschichte zur »Chaos Walking«-Bestseller-Trilogie beantwortet diese Frage zum ersten Mal."
      },
      {
        "publicationId": "DT0400.9783739673417_A27522964",
        "resellerId": "3",
        "resellerName": "THALIA.DE",
        "contentType": "EBOOK",
        "shelfId": "39549013",
        "authors": [
          {
            "name": null,
            "firstName": "Caterina",
            "lastName": "di Montebasso"
          }
        ],
        "title": "Das Relikt",
        "subtitle": "Sci Fi Kurzgeschichte",
        "isbnEan": "9783739673417",
        "language": "de",
        "keywords": [],
        "publisher": "BookRix",
        "issuedDate": 1473804000000,
        "fileResources": [
          {
            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783739673417_A27522964/cover",
            "format": "image/jpeg",
            "type": "COVER_IMAGE",
            "lastModifiedDate": null
          }
        ],
        "contentProtectionType": "WATERMARK",
        "purchasedDate": 1612116343128,
        "sequenceNo": null,
        "transactionId": "339901326",
        "contentSources": [
          "PURCHASED"
        ],
        "readableContentInfo": {
          "isTextToSpeechEnabled": true,
          "renderingEngine": "FGRE"
        },
        "audioContentInfo": null,
        "subscriptionInfo": null,
        "familySharing": true,
        "defaultCover": null,
        "contentFormat": "application/epub+zip",
        "abstract": "<p>Eine Pyramide. Niemand kennt ihren wahren Ursprung. Mythen und falsche Interpretationen umwölken sie. Puhlie, ein Farmerjunge aus dem Volk der Amaranth, gibt sich mit den alten Erklährungen nicht zufrieden. Er widmet sein Leben der Lösung des Rätsels. Doch erst eine Generation später wird es entschlüsselt. Ungeheure Umwälzungen durchströmen daraufhin das gesamte Universum. Doch geschiet dies alles nicht zum ersten Mal.</p>"
      },
      {
        "publicationId": "DT0400.9783842028357_A29383154",
        "resellerId": "3",
        "resellerName": "THALIA.DE",
        "contentType": "EBOOK",
        "shelfId": "39549013",
        "authors": [
          {
            "name": null,
            "firstName": "Ban",
            "lastName": "Zarbo"
          }
        ],
        "title": "Gratis-Leseprobe: Kamo - Pakt mit der Geisterwelt",
        "subtitle": null,
        "isbnEan": "9783842028357",
        "language": null,
        "keywords": [
          "Shounen; Shonen Jump; Abenteuer; Action; Mystery; Shonen; Geist; Geister; Dämon; Dämonen; Tod; Bleach; Death Note; Fantasy"
        ],
        "publisher": "TOKYOPOP Verlag",
        "issuedDate": 1489618800000,
        "fileResources": [
          {
            "resource": "https://cdp.pageplace.de/cdp/public/publications/DT0400/9783842028357_A29383154/cover",
            "format": "image/jpeg",
            "type": "COVER_IMAGE",
            "lastModifiedDate": null
          }
        ],
        "contentProtectionType": "WATERMARK",
        "purchasedDate": 1612116728634,
        "sequenceNo": null,
        "transactionId": "339906865",
        "contentSources": [
          "PURCHASED"
        ],
        "readableContentInfo": {
          "isTextToSpeechEnabled": true,
          "renderingEngine": "FGRE"
        },
        "audioContentInfo": null,
        "subscriptionInfo": null,
        "familySharing": true,
        "defaultCover": null,
        "contentFormat": "application/pdf",
        "abstract": "All die Jahre hat der herzkranke Kamo gegen den Tod gekämpft, doch vergebens - sein junges Leben neigt sich dem Ende zu. Kurz vor seinem letzten Atemzug erhält er Besuch von Crimson, einem mächtigen Geist, der ihm ein unglaubliches Angebot macht: \"Hilf mir, zwölf Geister zu besiegen und ihre Seelen einzufangen, und ich schenke dir ein neues Herz.\" Aber welchen Preis zahlt man für einen Pakt mit einem Geist?"
      }
    ],
    "totalElements": 3,
    "totalPages": 1,
    "numberOfElements": 3,
    "size": 300,
    "number": 0
  },
  "deletedContent": []
}

GET https://thalia.de/auth/oauth2/authorize

Fetch URL of actual login page.

First step in the Login process.

Source

This URL is provided in the reseller configuration, key config.URL_OAUTH_ACCESSTOKEN.

Request

GET Parameters
response_type

Example: code

scope

Example: SCOPE_BOSH%20SCOPE_BUCHDE%20SCOPE_MANDANT_ID.2004%20SCOPE_LOGIN%20FAMILY

redirect_uri

Example: epublishing://login

x_buchde.skin_id

Example: 17

client_id

Example: treadervision3

Headers
User-Agent

Browser user agent.

lcp

Example: 1

X-Requested-With

Example: de.telekom.epub

Response

Redirect to actual login page.

Status code: HTTP/1.1 302

Header
Location:

Example: https://thalia.de/de.thalia.ecp.authservice.application/oauth2/login?response_type=code&scope=SCOPE_BOSH%20SCOPE_BUCHDE%20SCOPE_MANDANT_ID.2004%20SCOPE_LOGIN%20FAMILY&redirect_uri=epublishing://login&x_buchde.skin_id=17&client_id=treadervision3

POST https://thalia.de/auth/oauth2/token

Step 4 of the Login process.

Uses:

  1. Log in to obtain an access token.

  2. Generate access token from a refresh token.

Request

GET parameters
client_secret

Provided in the reseller configuration.

Example: gU5a7CA9

Headers
Content-Type

application/x-www-form-urlencoded

User-Agent

DT_EINK_10_NETRONIX DT_EINK_UPD_PP_14.1.0

Cookie:

Example: gcor=SIDYBbxYkmvUvoO8hy@2Sfx4QAAA9o; ab_bucket=9; ab_container=3; OAUTH-JSESSIONID=9C95C20ECEE74164E76F60C205147822.15acdb90

Cookie2

$Version=1

POST parameters
grant_type:

authorization_code

redirect_uri

epublishing://login

The e-reader internal login process

code

Obtained from login form page redirect.

Example: GK6jDC

client_id

Example: treadervision3

Response

HTTP status code 200 OK

{
    "access_token": "eyJhbGciOiJSUzI1NiJ9.eyJhdWRpZW5jZSI6InRyZWFkZXJ2aXNpb24zIiwiZXhwaXJlcyI6IjE2MTIxMzgzOTczMzMiLCJ4X2J1Y2hkZS51c2VyX2lk...",
    "expires_in": 14399,
    "refresh_token": "ad351547-bcb3-43b2-9914-d88f0a3704c8",
    "scope": "FAMILY SCOPE_BOSH SCOPE_BUCHDE SCOPE_LOGIN",
    "token_type": "bearer",
    "x_buchde.mandant_id": "2004",
    "x_buchde.user_id": "39549013"
}

About

This documentation has been written by Christian Weiske, cweiske+tolino@cweiske.de.

Last update: 2021-02-20T21:32:12+01:00

License

It is licensed under the GNU Free Documentation License.

Source code

The documentation sources are available at http://git.cweiske.de/tolino-api-docs.git/ and mirrored at https://github.com/cweiske/tolino-api-docs

Home page

A rendered version of this documentation is available at http://cweiske.de/tolino-api-docs.htm

Building

You need to install rst2html5 before (the version with bootstrap CSS):

$ pip3 install rst2html5-tools

Rendering the docs is done via the Makefile:

$ make