Skip to content
AnkinizeOpenAPILog in
OverviewSync with AnkiAuthenticationAPI referenceTypeScript SDKAnkiConnect alternativeAI agentsMCP serverSelf-host

Tutorials

Browser extension

An AnkiConnect alternative that works without Anki open

AnkiConnect lets a script talk to Anki Desktop, but only while the desktop app is running on the same machine. The Ankinize REST API does the same job on a server: scripts, CI jobs, AI agents and browser extensions add and read cards with no desktop app open, and the cards sync to Anki on every device.

AnkiConnect and Ankinize side by side#

AnkiConnectAnkinize REST API
What it isAn add-on that opens an HTTP port inside Anki Desktop.A sync server that exposes the same Collection over REST.
Anki Desktop must be runningYes, on the same machine (localhost:8765).No. The API runs on the server.
Reach it from a server, CI or a phoneNot without tunnelling your desktop.Yes, over HTTPS with an API key.
Gets cards to your devicesThrough Anki's own sync, after you sync the desktop.Cards sync to Anki Desktop, AnkiDroid and AnkiMobile the next time they sync.
SearchAnki search syntax with findNotes and findCards.The same Anki search text in q, plus typed builders in the SDK.
Batches and safe retriesmulti for several actions.Batch endpoints, and an Idempotency-Key header so a retry never adds a card twice.
Drive Anki's windows (browser, add dialog)Yes: the gui actions.No. It works on the data, not the interface.
Account and costNone. Free and local.An Ankinize account (free 200 MB), or your own server.
Who maintains itA community add-on, outside the Anki team.Ankinize, independent of Anki and AnkiWeb.

When AnkiConnect is still the right tool

If you only automate on the machine where Anki runs, need to open the browser or the add dialog, or depend on a tool that already speaks AnkiConnect, keep it. Ankinize is for the cases AnkiConnect cannot reach: no desktop, no localhost, many devices.

Add a note#

The same task in both. Ankinize names a note type and a deck as strings, and keys fields by camelCase name (Back Extra is backExtra).

curl localhost:8765 -X POST -d '{
  "action": "addNote",
  "version": 6,
  "params": { "note": {
    "deckName": "Reading", "modelName": "Basic",
    "fields": { "Front": "What is FSRS?", "Back": "A spaced repetition scheduler." }
  } }
}'

Find notes#

Anki's search syntax carries over, so a query you have already written for AnkiConnect works unchanged.

curl localhost:8765 -X POST -d '{
  "action": "findNotes", "version": 6,
  "params": { "query": "deck:Reading is:due" }
}'

Action by action#

AnkiConnect actionAnkinize endpoint
deckNames, deckNamesAndIdsGET /api/v1/decks
createDeckPOST /api/v1/decks
addNotePOST /api/v1/notes
addNotesPOST /api/v1/notes/batch-create
findNotesGET /api/v1/notes?q=
findCardsGET /api/v1/cards?q=
notesInfoGET /api/v1/notes/{id}
updateNoteFieldsPATCH /api/v1/notes/{id}
deleteNotesPOST /api/v1/notes/batch-delete
getTagsGET /api/v1/tags
storeMediaFilePUT /api/v1/media/{name}
answerCardsPOST /api/v1/cards/{id}/answer

Next#

Make a key under API Keys & Devices (see Authentication), then try the calls in the API reference or install the TypeScript SDK. To let an AI agent do it, read AI agents and Ankinize.

On this page

  • AnkiConnect and Ankinize side by side
  • Add a note
  • Find notes
  • Action by action
  • Next