linkding is a simple bookmark service that you can host yourself. It supports managing bookmarks, categorizing them with tags and has a search function. It provides a bookmarklet for quickly adding new bookmarks while browsing the web. It also supports import / export of bookmarks in the Netscape HTML format. Docker optimized but I think it could be run manually.
Needs node.js to compile the JS crap.
Uses SQLite as its back-end. Plus, it's based upon Django so it probably has its own ideas about default databases (and REST APIs).
An online bookmark manager which also can act as a content archiver. Can save content as HTML, PDF, or PNG in addition to storing links for later reference. Automatic summarization and tagging of links. Multiple user accounts. Multiple back-end databases (SQLite default). Annotation support. Written in Python 3. Don't know if there's an API.
Here's a list of bookmarks for backchannel tools and articles.
A stackoverflow discussion about how to use python to make an xmlhttprequest. I looked this up because that's how you're supposed to interact with unmark's pseudo API. The accepted answer shows how to do it with scrapy, but I think it could be adapted for use with the requests module. The HTTP method would be POST, and one of the headers would be "X-Requested-With: XMLHttpRequest". It's worth a shot, at any rate.