This guide walks you through the basics: authenticating, saving an item, listing your library, and creating an annotation.
Prerequisites
Set your token as an environment variable so you can copy-paste the examples:
export MATTER_TOKEN = "mat_your_token_here"
1. Verify your token
curl https://api.getmatter.com/public/v1/me \
-H "Authorization: Bearer $MATTER_TOKEN "
{
"object" : "account" ,
"id" : "act_k8x2m" ,
"name" : "Jane Smith" ,
"email" : "jane@example.com" ,
"is_pro" : true ,
"rate_limit" : {
"read" : 120 ,
"write" : 30
}
}
2. Save an article
curl -X POST https://api.getmatter.com/public/v1/items \
-H "Authorization: Bearer $MATTER_TOKEN " \
-H "Content-Type: application/json" \
-d '{"url": "https://paulgraham.com/greatwork.html", "status": "queue"}'
{
"object" : "item" ,
"id" : "itm_r9f3a" ,
"title" : "How to Do Great Work" ,
"url" : "https://paulgraham.com/greatwork.html" ,
"author" : {
"object" : "author" ,
"id" : "aut_p4w7q" ,
"name" : "Paul Graham"
},
"status" : "queue" ,
"processing_status" : "completed" ,
"is_favorite" : false ,
"content_type" : "article" ,
"word_count" : 11842 ,
"reading_progress" : 0.0 ,
"image_url" : null ,
"tags" : [],
"updated_at" : "2026-03-30T18:30:00Z"
}
If processing_status is "processing", the content is being extracted in the background. Poll GET /items/{id} until it becomes "completed" (typically 20-60 seconds).
If the URL is already in your library, the existing item is returned instead of creating a duplicate. The response status will be 200 instead of 201.
3. List your library
curl "https://api.getmatter.com/public/v1/items?status=queue&limit=5" \
-H "Authorization: Bearer $MATTER_TOKEN "
{
"object" : "list" ,
"results" : [
{
"object" : "item" ,
"id" : "itm_r9f3a" ,
"title" : "How to Do Great Work" ,
"status" : "queue" ,
"content_type" : "article"
}
],
"has_more" : false ,
"next_cursor" : null
}
4. Tag the article
curl -X POST https://api.getmatter.com/public/v1/items/itm_r9f3a/tags \
-H "Authorization: Bearer $MATTER_TOKEN " \
-H "Content-Type: application/json" \
-d '{"name": "essays"}'
{
"object" : "tag" ,
"id" : "tag_n5j2x" ,
"name" : "essays"
}
5. Archive when done
curl -X PATCH https://api.getmatter.com/public/v1/items/itm_r9f3a \
-H "Authorization: Bearer $MATTER_TOKEN " \
-H "Content-Type: application/json" \
-d '{"status": "archive"}'
{
"object" : "item" ,
"id" : "itm_r9f3a" ,
"status" : "archive" ,
"updated_at" : "2026-03-30T20:30:00Z"
}
Next steps
Pagination Efficiently page through large libraries.
Incremental sync Pull only items that changed since your last sync.
Rate limits Understand request quotas and how to stay within them.
Full API reference Every endpoint, parameter, and response field.