The Active Textbook platform can be accessed online using any web browser. Offline versions for mobile devices are available at each respective device’s app store (AppStore, Google Play, Windows Store, and others).

We offer custom implementations of Active Textbook. Customization options can range anywhere from simple branding to extended functionality such as reporting systems, book widgets and more. For an example of the customization Evident Point offers, see a recent example project.

We want to work with you to make Active Textbook as easy and hassle-free for your organization to use as possible. Active Textbook can be used with any source document in PDF, ePUB 3/2 or MS Word format and is designed to be easily integrated with an organization’s other IT resources such as learning management systems or distribution networks.

To inquire about customization options, contact us!


# Portal 2.0 API #

Most routes that operate on a model/entity i.e. books, annotation sets have
the following routes:
  List:
    GET    (list url)
  Create:
    POST   (list url)
  Read (Show details):
    GET    (list url)/:id
  Update:
    PUT    (list url)/:id
  Destroy:
    DELETE (list url)/:id

The Create and Update routes will usually take the same parameters.
As a shorthand, any routes that support this will be notated as
    CRUD   (list url)
      Parameters for create/update

For example,
  CRUD     /portal/api/books
    book[backing_file] - The file to upload (as a file, not the filename/path) (required)
    book[name] - The title of the book (required)
    book[description] - The description of the book
    book[book_category_id] - The book category ID, if any categories are configured
                             (able to be by the admin only), this field is required.
                             Refer to book category section for ids.
    book[tags] - Comma separated string of tags to assign to the book
    book[cover_image] - A custom cover image file

Means that there are routes for listing, creating, reading, updating, and destroying a book,
with the parameters accepted for create and updated specified just below.

Books:
  CRUD     /portal/api/books
    book[backing_file] - The file to upload (as a file, not the filename/path) (required)
    book[name] - The title of the book (required)
    book[description] - The description of the book
    book[book_category_id] - The book category ID, if any categories are configured
                             (able to be by the admin only), this field is required.
                             Refer to book category section for ids.
    book[tags] - Comma separated string of tags to assign to the book
    book[cover_image] - A custom cover image file

Book Categories:
  List:
    GET    /portal/api/book_categories
  Thumbnail Image:
    GET    /api/book_categories/:book_category_id/thumbnail
  Details:
    GET    /api/book_categories/:id

Annotation Sets:
  CRUD   /portal/api/books/:book_id/annotation_sets
    name - The name of the annotation set
    description - The description of the annotation set

Current User:
  Details:
    GET    /portal/api/current_user
  Update:
    PUT    /portal/api/current_user
      user[full_name]
      user[email]
      user[preferred_locale]
      user[old_password]
      user[password]
      user[password_confirmation]
      user[show_tutorials]

  Login:
    POST   /api/user/login
      login
      password
      remember_me
  Logout:
    POST   /api/user/logout

To be documented:
        contacts_portal_api_book_acl_entries_group GET    /portal/api/books/:book_id/acl_entries/groups/:id/contacts
                portal_api_book_acl_entries_groups GET    /portal/api/books/:book_id/acl_entries/groups
                                                   POST   /portal/api/books/:book_id/acl_entries/groups
             new_portal_api_book_acl_entries_group GET    /portal/api/books/:book_id/acl_entries/groups/new
            edit_portal_api_book_acl_entries_group GET    /portal/api/books/:book_id/acl_entries/groups/:id/edit
                 portal_api_book_acl_entries_group GET    /portal/api/books/:book_id/acl_entries/groups/:id
                                                   PUT    /portal/api/books/:book_id/acl_entries/groups/:id
                                                   DELETE /portal/api/books/:book_id/acl_entries/groups/:id
              portal_api_book_acl_entries_contacts GET    /portal/api/books/:book_id/acl_entries/contacts
                                                   POST   /portal/api/books/:book_id/acl_entries/contacts
           new_portal_api_book_acl_entries_contact GET    /portal/api/books/:book_id/acl_entries/contacts/new
          edit_portal_api_book_acl_entries_contact GET    /portal/api/books/:book_id/acl_entries/contacts/:id/edit
               portal_api_book_acl_entries_contact GET    /portal/api/books/:book_id/acl_entries/contacts/:id
                                                   PUT    /portal/api/books/:book_id/acl_entries/contacts/:id
                                                   DELETE /portal/api/books/:book_id/acl_entries/contacts/:id
         portal_api_book_acl_entries_pending_users GET    /portal/api/books/:book_id/acl_entries/pending_users
                                                   POST   /portal/api/books/:book_id/acl_entries/pending_users
      new_portal_api_book_acl_entries_pending_user GET    /portal/api/books/:book_id/acl_entries/pending_users/new
     edit_portal_api_book_acl_entries_pending_user GET    /portal/api/books/:book_id/acl_entries/pending_users/:id/edit
          portal_api_book_acl_entries_pending_user GET    /portal/api/books/:book_id/acl_entries/pending_users/:id
                                                   PUT    /portal/api/books/:book_id/acl_entries/pending_users/:id
                                                   DELETE /portal/api/books/:book_id/acl_entries/pending_users/:id
                       portal_api_reports_download GET    /portal/api/current_user/reports/download
                 quizzes_portal_api_annotation_set GET    /portal/api/current_user/annotation_sets/:id/quizzes
                comments_portal_api_annotation_set GET    /portal/api/current_user/annotation_sets/:id/comments
               find_by_user_id_portal_api_contacts GET    /portal/api/current_user/contacts/find_by_user_id
                         groups_portal_api_contact GET    /portal/api/current_user/contacts/:id/groups
                               portal_api_contacts GET    /portal/api/current_user/contacts
                                                   POST   /portal/api/current_user/contacts
                            new_portal_api_contact GET    /portal/api/current_user/contacts/new
                           edit_portal_api_contact GET    /portal/api/current_user/contacts/:id/edit
                                portal_api_contact GET    /portal/api/current_user/contacts/:id
                                                   PUT    /portal/api/current_user/contacts/:id
                                                   DELETE /portal/api/current_user/contacts/:id
                         contacts_portal_api_group GET    /portal/api/current_user/groups/:id/contacts
                             join_portal_api_group POST   /portal/api/current_user/groups/:id/join
                      add_contact_portal_api_group POST   /portal/api/current_user/groups/:id/add_contact
                   remove_contact_portal_api_group DELETE /portal/api/current_user/groups/:id/remove_contact
                                 portal_api_groups GET    /portal/api/current_user/groups
                                                   POST   /portal/api/current_user/groups
                              new_portal_api_group GET    /portal/api/current_user/groups/new
                             edit_portal_api_group GET    /portal/api/current_user/groups/:id/edit
                                  portal_api_group GET    /portal/api/current_user/groups/:id
                                                   PUT    /portal/api/current_user/groups/:id
                                                   DELETE /portal/api/current_user/groups/:id
                portal_api_user_signup_invitations GET    /portal/api/current_user/user_signup_invitations
                                                   POST   /portal/api/current_user/user_signup_invitations
             new_portal_api_user_signup_invitation GET    /portal/api/current_user/user_signup_invitations/new
            edit_portal_api_user_signup_invitation GET    /portal/api/current_user/user_signup_invitations/:id/edit
                 portal_api_user_signup_invitation GET    /portal/api/current_user/user_signup_invitations/:id
                                                   PUT    /portal/api/current_user/user_signup_invitations/:id
                                                   DELETE /portal/api/current_user/user_signup_invitations/:id
                                portal_api_reports GET    /portal/api/current_user/reports
                                                   POST   /portal/api/current_user/reports
                             new_portal_api_report GET    /portal/api/current_user/reports/new
                            edit_portal_api_report GET    /portal/api/current_user/reports/:id/edit
                                 portal_api_report GET    /portal/api/current_user/reports/:id
                                                   PUT    /portal/api/current_user/reports/:id
                                                   DELETE /portal/api/current_user/reports/:id
                         portal_api_coupons_redeem POST   /portal/api/current_user/coupons/redeem
                                portal_api_coupons GET    /portal/api/current_user/coupons
                                                   POST   /portal/api/current_user/coupons
                             new_portal_api_coupon GET    /portal/api/current_user/coupons/new
                            edit_portal_api_coupon GET    /portal/api/current_user/coupons/:id/edit
                                 portal_api_coupon GET    /portal/api/current_user/coupons/:id
                                                   PUT    /portal/api/current_user/coupons/:id
                                                   DELETE /portal/api/current_user/coupons/:id
   api_active_textbook_annotation_set_offline_sync POST   /api/active_textbooks/:active_textbook_id/annotation_sets/:annotation_set_id/offline_sync                         api/offline_sync#sync {:format=>:json}
    api_active_textbook_annotation_set_media_items GET    /api/active_textbooks/:active_textbook_id/annotation_sets/:annotation_set_id/media_items
                  api_offline_downloads_properties GET    /api/active_textbooks/:active_textbook_id/offline_downloads/properties                                            api/offline_downloads#properties {:format=>:json}
                       api_offline_downloads_fetch GET    /api/active_textbooks/:active_textbook_id/offline_downloads(/annotation_sets/:annotation_set_id)/fetch/:type      api/offline_downloads#fetch {:format=>:json}
                              api_user_accept_eula POST   /api/user/accept_eula
                       api_validate_client_version GET    /api/validate_client_version
                                                   POST   /api/user/facebook_login