Skip to content

bitmark JSON Bit Object Reference

Introduction

Below is a real-world example of a bitmark JSON object with detailed explanations. This oject is used as a container for all variants of a bit (like markup description, JSON description in the bit property, ready for extensions, like bitmark xml, QTI, DITA, ... descriptions) and for additional system, sharing or private information.

markup, bit, meta, system and private

At the root level of the Bit object, you will find up to five properties:

{
    "markup": "[.multiple-choice-text]...",
    "bit": {
        "type": "multiple-choice-text",
        ...
        "private": {
            ...
        },
        "meta": {
        ...
        }
    },
    "sharing": {
        ...
    },

    "system": {
        ...
    },
    "private": {
        ...
    }
}
Properties Data Type, Description
markup String, optional
Contains the original bitmark Markup that was used to construct this Bit. As Bits can be created in various ways, not just from markup, this property can be missing entirely.
However, if the Bit is created from markup, the markup is kept to recreate the whole object at any given point in time (all properties, especially the content of the bit property). Whenever a newer version of markup or an improved markup parser becomes available (bug fixes, new features, additional meta-data, ...), new versions of Bits can get generated from this markup.
bit Object
Contains the content that is displayed to the user. As JSON does not support polymorphism, the differences between the different types of Bits is restricted to this node. See the Bit Types Reference
meta Object, optional
Contains the meta data that comes along with this bit.
private Object, optional
This optional property contains private data of the author of that bit. Please see here for details.
system Object, optional
This optional property contains system information, like ouput from the parser, version, .... Please see here for details.

Set meta Properties [/meta/...]

To set a property with bitmark Markup. Please use the [/meta/...] tag. The tag contains a JSON Pointer to the desired property and a value.

[/meta/context: business]

For boolean properties, the value can be ignored. In this case, the value is considered to be true.

[/meta/isFree]

Is the equivalent to

[/meta/isFree: true]

For setting values in an arry, just repeat setting a value to the array property.

[/meta/ageRange: 18]
[/meta/ageRange: 969]

meta

The meta objects contains the following properties.

context, subject, topics

    "meta": {
        ...
        "context": "business",
        "subject": "Expats in Switzerland - How to do successful business in Switzerland. - How to write a Motivational Cover Letter - Tips and Tricks.",
        "topics":  [ "Motivational Cover Letter", "Résumé/CV" ],
         ...
    }
bitmark JSON Data Type, Description
context String, optional
Contains the high level context. The valid values for context are strictly defined. The API will reject any other values:
business, personal, academic, kids, travel, immigration
subject String, optional
Contains a free form text. This text is never shown to the user and is aimed at the AI backend to classify the content, find related content and show good search results. It is usually constructed from the related static Article-Bit and the chapter titles leading to this bit.
topics Array of Strings, optional
Contains typical topics used in learning material. Many publishers use their own system. Mainly depending on their specialisation. Please feel free to use your own system. If you use a hierarchy, sub-categories, ..., please combine these values, separated by a "-". There is some AI magic in the API to map different systems.
"Animals", "Animals - Great Apes", "Greeting people"

For high quality content (marked as such in the store object), these properties must be present and contain high quality data.

These properties don't have their own short markup tags (one letter special character).

Tip

bitmark JSON properties can be set by using markup. To set a certain property, you wrap it with an -Tag. For example, [/meta/context: business] sets the context property to the value "business".

Note

Please let us know, if there is a context, skill, ... missing.

complexity, grade, ageRange

This is the complexity of the Bit.

    "meta": {
        ...
        "complexity": "intermediate",
        "grade": "4",
        "ageRange": [18, 969],
        ...
    }
bitmark JSON Data Type, Description
complexity* String, optional*
"basic", "intermediate", "complex"
grade* String, optional*
This is the grade (school year).
ageRange Array of Integer of length = 2, optional
Contains the age range for this content: [from age, to age]. Use 969 for open end. See why

For high quality content (marked as such in the store object), these properties must be present and contain high quality data.

duration

This is the expacted average reading/learning duration.

    "meta": {
        ...
        "duration": "PT2M10S",
        ...
    }

Duration in ISO_8601

maxScore

This is the maximum score a user can achieve with this quiz.

    "meta": {
        ...
        "maxScore": 20,
        ...
    }

maxScore = 0 indicates that the result can be used as a poll (no result is returned, but the inputs are collected).

language

Language of the bit.

    "meta": {
        ...
        "language": "en",
        ...
    }
bitmark JSON Data Type, Description
language* String
This is the language a Bit is written in.
In language learning, this is the language of the hints, learning objectives or explanations when written in the native language of the student.
In general, two letter language codes (ISO 639-1 codes) are used.
In some cases, the language declaration needs to be more specific. Language localisation is used in such case (e.g. "de-CH").
For language learning Bits, please note the learningLanguge property.

For high quality content (marked as such in the store object), these properties must be present and contain high quality data.

Sometimes, hints, learning objectives or explanations are also translated to the learning language. At the moment, this type of quizzes cannot described fully content-first by the bitmark standard. As a work around, ypu might tag the translations as emphazised. We are not happy about that.

set

    "meta": {
        ...
        "set": {
            "item": [ { "type": "text", "text": "A10" } ],
            "lead": [ { "type": "text", "text": "Exercise" } ],
            "title": [ { "type": "text", "text": "Traveling around the World" } ],
            "isGenericTitle": false,
            "isProgress": true,
            "setRef": "a10-3243253-2",
            "setIndex": 0
        },
        ...
    }

Bits that belong to a set of bits, contain a set property.

tags

Tags are used to highlight recurring subjects in a book or collection of books. This is an additional way to structure content. Let's imagine a German grammar book that is strictly organized in chappters according to the typical subjects of German grammar. The author keeps using examples around sports, especially football. In this case, to use a #sports and a #football tag would make sense. Tags are used for searching/filtering bits of a book.

    "meta": {
        ...
        "tags": ["#sports", "#football"],
        ...
    }

Tag names might be displayed to the user and must be in the language of the book. Tag names must start with a "#".

Language Learning

The following properties are only present in bits used for language learning.

    "meta": {
        ...
        "learningLanguage": "de-CH",
        "languageSkills": ["reading"],
        "levelILR": ["1", "1+"],
        "levelCEFR": ["A2", "B1"],
        "levelACTFL": ["IM", "IH"],
        "grammar": ["Verbs: Present"],
        ...
    }

learningLanguage

These are levels for language learning. Learning material sometimes belong to more than one level.

bitmark JSON Data Type, Description
learningLanguage String
For language learning material, this is the language to be learned/teached. In general, two letter language codes (ISO 639-1 codes) are used. In some cases, the language declaration needs to be more specific. Language localisation is used in such case (e.g. "en-US").
If the learningLanguage property is not present or empty, the value of language is used.

languageSkills

bitmark JSON Data Type, Description
languageSkills Array of Strings, optional*
"reading", "speaking", "listening", "writing", "translation", "audio translation", "interpretation", "intercultural communication", "transcreation", "other"

levelILR, levelCEFR and levelACTFL

bitmark JSON Data Type, Description
levelILR String, optional*
ILR Also see table below
levelCEFR String, optional*
CEFR Also see table below
levelACTFL String, optional*
ACTFL Also see table below

In the Book JSON, all three levels are present. If you use our API, at least one level must present at the creation of the Bit. The others are approximately calculated.

For high quality content (marked as such in the store object), these properties must be present and contain high quality data.

ILR CEFR ACTFL
0, 0+ A1 NL, NM, NH
1 A2 IL, IM
1+ B1 IH
2, 2+ B2 AL, AM, AH
3, 3+ C1 S
4, 4+ C2 D

grammar

bitmark JSON Data Type, Description
grammar Array of Strings, optional*
Many publishers use their own system to classify grammar. Some more, some less detailed. Please feel free to use your own system. There is some AI magic in the API to map different systems. Grammar values might be displayed to the user. So please make them short and use title case notation. Some common API and data models call this "skills"! For high quality content, this property must contain "-" if a grammar topic is not meaningfully applicable.
"Verbs: Past Imperfect", "-"

sharing

The sharing objects defines the owner (creator), copyright holder, origin Books and access rights.

    "sharing": {
        "owner": {
            "fullName": "Thomas Gabathuler",
            "nicKName": "Gaba.",
            "gid": "com.getmorebrain.u0"
        },

        ...
    }

thisBook, originBook

Bits that are requested from an API Endpoint that includes a book, thisBook includes meta data from this book. Bits might also contain meta data from an origin book. This is typically the book a user bought from a publisher.

thisBook and originBook might bouth be missing entierly. A bit can also exists for itself. Both properties might also contain the same book.

A typical example, where thisBook and originBook differ, is a bit coming from a school book that was first stored and then retrieved from a user's notebook. In this case, orginBook points to the original school book. thisBook points to the user's notebbok.

The originBook and thisBook might contain a chapterPath property that contains the path of a bit it has inside its origin/this book.

Not every Bit is contained by a book, so, these fields might be missing completely.

    "sharing": {
        ...
        "originBook": {
            "id": "",
            "externalId": "",
            "type": "book",
            "subType": "book",
            "isLiveBook": false,
            "isSmartBook": false,
            "isPublic": false,
            "isHighQuality": true,
            "shopURL": "https://books.markup.com/shop/a_publisher/0923480923i4/",
            "shareURL": "https://books.markup.cloud/reader/book/0923480923i4/",
            "chapterPath": [
                { "item": [], "title": [ { "type": "text", "text": "Origin Book Title" } ], "isGenericTitle": false, "level": 0, "isProgress": false, "ref": "a1298789" },
                { "item": [ { "type": "text", "text": "2" } ], "title": [ { "type": "text", "text": "Chapter Two" } ], "isGenericTitle": false, "level": 1, "isProgress": true,  "ref": "a1298811" } ] },
                { "item": [ { "type": "text", "text": "2.7" } ], "title": [ { "type": "text", "text": "Chapter Two Seven" } ], "isGenericTitle": false, "level": 2, "isProgress": true,  "ref": "a1298923" } ] }
            ]
        },
        ...
    }

Important

Every Bit can be part of several books. However, it only inherits meta data from one book, its "master book." This is the book referenced here.

book Data Type, Description
type String
"book" indicates a fully featured book (with table of content, chapters, ...), displayed with a book reader interface.
"collection" indicates a list of bits. A collection has no chapters, table of content, ... Collections are displayed with a search/filter interface.
isLiveBook Boolean
Live Books are constantly growing and can be followed. Followed books send notifications if new content becomes available.
Example: YouTube channels, quizzes based on real news, ...
isSmartBook Boolean
Smart Books are AI driven and can give didactically valuable feedback and/or provide a personal learning experience.
isPublic Boolean
Indicates public content. No need to check the store or an account for rights.
isHighQuality Boolean
Indicates high quality content generated by professionals. Guaranteed free of mistakes and fully described by meta data.
shopURL String
Reference to the book that contains this bit. The url points to the shop. Use this url to share a link to this book in the shop.
shareURL String
Reference to the book that contains this bit. The url points to the book. If it is not free and not owned, a preview with a buy button is shown. Use this url to share a link to this book (over mail, messengers, ...).
chapterPath* Array of Chapter Objects
Contains the chapter hierarchy of this bit. Not every Bit is contained by a book, so, this field might be missing.

chapterPath

chapterPath entries have very similar properties like the toc (table of content) of a book. Every chapter has a level. The first object (level 0) is the book itself.

See toc entry for detailed explanation of the properties.

Example:
A bit requested from /bits/12344 does contain an empty chapterPath property.
A bit requested from /books/4636/bits/12344 does contain the path to the bit inside the book 4636

    "sharing": {
        ...
        "chapterPath": [
            { "item": [], "title": [ { "type": "text", "text": "Origin Book Title" } ], "isGenericTitle": false, "level": 0, "isProgress": false, "ref": "a1298789" },
            { "item": [ { "type": "text", "text": "2" } ], "title": [ { "type": "text", "text": "Chapter Two" } ], "isGenericTitle": false, "level": 1, "isProgress": true,  "ref": "a1298811" } ] },
            { "item": [ { "type": "text", "text": "2.7" } ], "title": [ { "type": "text", "text": "Chapter Two Seven" } ], "isGenericTitle": false, "level": 2, "isProgress": true,  "ref": "a1298923" } ] }
        ],
        ...
    }

isFree

Indicates if this Bit can be used for free, even if it is part of a fee-based book. This flag is often used together with the isPreview flag, to provide a preview that is actually working.

    "sharing": {
        ...
        "isFree": false,
        ...
    }

isPublic

Indicates if this Bit can be used for free and publicly (even if isFree is set to false). Public books can be read even without an account.

    "sharing": {
        ...
        "isPublic": false,
        ...
    }

isPreview

Indicates if this Bit is to be shown as part of a preview chapter. If this is an interactive bit (quiz), this does not automatically mean that you can also interact with this bit. The interactive quiz is displayed read-only.

See next property, if you want free and interactive bits.

    "meta": {
        ...
        "isPreview": false,
        ...
    }
    "sharing": {
        ...
        "copyright": "© 2012 by A Publisher International Ltd., Zurich, Switzerland",
        ...
    }

Copyright in human readable form. Can be used to be displayed to the end user.

publisher

    "sharing": {
        ...
        "publisher": {
            "name": "A Publisher International Ltd., Zurich, Switzerland",
            "href": "https://www.a_publisher.com",
            "mail": "comments@a_publisher.com"
        },
        ...
    }

Publisher info. The fields href and mail are optional.

license

    "sharing": {
        ...
        "license": {
            "name": "A Publisher license",
            "remarks":"For the exclusive use of A Publisher language centers",
            "source": "https://www.a_publisher.com/licensee/",
            "yearRange": [2012, 2017]
        },
        ...
    }

License info. All fields are optional. Including the "license" container

authors

    "sharing": {
        ...
        "authors": [
            {"name":"A Publications Ltd., New York", "role":"Design, Layout and Cartoons"},
            {"name":"CPI books, Ulm, Germany", "role":"Printed and bound"},
            {"name":"© dreamstime.com, © fotolia.com, © iStockphoto.com and by A Publications Ltd., Bern", "role":"Pictures"},
        ],
        ...
    }

Human readable authors info. Usually not used to be displayed to the end user. All fields are optional. Including the "authors" container

shareURL

The url points to this Bit. If it is not free, owned or purchased, a preview with a buy button is displayed. Use this url to share a link to this Bit.

    "sharing": {
        ...
        "shareURL": "https://a_publisher.com/bit/b1234",
        ...
    }

system

The system object is read only. It is set by the API.

    ...
    "system": {
        "creationDate": "2018-04-23T18:25:43.511Z",
        "modificationDate": "2018-04-23T18:25:43.511Z",

        "version": "2.0",

        "parser": {
            "name": "markup.json.js",
            "version": "1.0",
            "status": "OK",
            "fatalError": "",
            "errors": [],
            "warnings": []
        }
    },
    ...

private

    "private": {
        "id": "HJ_98798723",
        "ui_hint": "underline",
        "legacy_hints": {
            "paper-and-pen-instruction": "Underline the correct solution with your pen."
        },
        "author_id": "m.mustermann2",
        "legacy-title-image": "https://a_publisher.com/dolphins.jpg",
        "print-title-image": "https://a_publisher.com/dolphins.tiff",
        "approvedAt": "23.3.2018",
        "approvedBy": "JH",
        "item_number":"e2110"
    },

Private info. This node can be freely used by the publisher for any internal use. There are no restrictions (besides being 100% valid JSON, of course).

Timestamps

Timestamps are in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ

Information about time zones in timestamps, please see.