API

HTTP API

Every service method as a plain HTTP call. JSON in, JSON out, one URL per method.

GET  https://micro.mu/api/v1/<service>/<method>?arg=value
POST https://micro.mu/api/v1/<service>/<method>   {"arg":"value"}

Machine-readable catalogue → · Get a token · What calls cost

Building an AI agent instead? The MCP endpoint serves the same methods as tools, with a catalogue to plan over.

Authentication

Public methods need nothing. Anything holding your own data needs to know who you are.

A token. Make one at /token and send it as a header. A token can be scoped to named services, and the scope is enforced on every call.

curl -H "Authorization: Bearer $MU_TOKEN" \
  https://micro.mu/api/v1/notes/list

Paying instead. A metered method answers an unauthenticated call with 402 and an x402 challenge; pay it and the same request succeeds. No account, no signup — see pricing.

From a browser. A signed-in session works for reads. A POST resting on the session cookie also needs an X-CSRF-Token header, because a cookie alone does not say the request came from a page this instance served. A token does, so programs should send one.

Responses

A refusal says which kind it is, so a client knows whether to retry, re-authenticate or give up.

200The call ran. The answer is in result.
400The arguments were wrong. The message says how.
401No caller. Send a token, or pay.
402This method is metered and nothing has paid for it. The challenge says how much.
403Identified, but not enough — a paid wallet on a method that needs an account, or a cookie-authenticated POST with no CSRF token.
404No such method.
405This method changes something, so it cannot be a GET.

Errors are {"error":"..."}; success is {"result":"..."}.

15 creditsGET /api/v1/apps/build

Build a small app from a description, save it, and return its details and URL. An app is a single page — a tracker, a checklist, a counter — that keeps its own store and runs in the browser

Draws 15 credits per call, or accepts payment.

ArgumentTypeDescription
prompt *stringDescription of the app to build, e.g. 'an expense tracker', 'a packing checklist', 'a water intake counter'
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/apps/build?prompt=prompt"
GET /api/v1/apps/create

Create an app — a small, self-contained HTML tool hosted here. Takes the HTML; apps_build writes it for you from a description

ArgumentTypeDescription
name *stringApp name, e.g. "Pomodoro Timer"
html *stringThe app's HTML, inline CSS and JavaScript included, up to 256KB
slugstringURL-friendly id, e.g. pomodoro-timer. Derived from the name if omitted
descriptionstringWhat the app does. Defaults to the name
tagsstringComma-separated tags
iconstringAn SVG icon
pricenumberCredits charged per use, 0 for free, up to 1000
curl \
  "https://micro.mu/api/v1/apps/create?name=name&html=html"
8 creditsGET /api/v1/apps/edit

Edit an app you own — its name, description, tags, icon, HTML or price. Fields left out keep their value

Draws 8 credits per call, or accepts payment.

ArgumentTypeDescription
slug *stringThe app's URL slug, e.g. pomodoro-timer
namestringNew name. Left alone if omitted
descriptionstringNew description. Left alone if omitted
tagsstringNew comma-separated tags. Left alone if omitted
htmlstringNew HTML, up to 256KB. Left alone if omitted
iconstringNew SVG icon. Left alone if omitted
pricenumberCredits charged per use, 0 for free, up to 1000
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/apps/edit?slug=slug"
GET /api/v1/apps/fork

Fork an app into your own account, to change independently of the original

ArgumentTypeDescription
slug *stringSlug of the app to fork
new_slugstringSlug for the copy. Generated from the original if omitted
curl \
  "https://micro.mu/api/v1/apps/fork?slug=slug"
GET /api/v1/apps/read

Read the details of one app by its slug

ArgumentTypeDescription
slug *stringThe app's URL slug, e.g. pomodoro-timer
curl \
  "https://micro.mu/api/v1/apps/read?slug=slug"
7 creditsGET /api/v1/apps/run

Publish a snippet of JavaScript and get back a URL that runs it in a browser. It returns a link rather than output — the code runs in a sandbox when somebody opens it, not here

Draws 7 credits per call, or accepts payment.

ArgumentTypeDescription
code *stringJavaScript to run in the page. It runs as a module, in a sandbox, with no access to the caller's account
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/apps/run?code=code"
GET /api/v1/apps/test

Test an app by checking its HTML and running its mu.api calls server-side, so an author finds out what is broken without opening it

ArgumentTypeDescription
slug *stringThe app's URL slug
curl \
  "https://micro.mu/api/v1/apps/test?slug=slug"
GET /api/v1/blog/create

Publish a post to the caller's blog. For anything meant to be read later by other people — notes, write-ups, announcements. For a private note to yourself, prefer files or memory

ArgumentTypeDescription
content *stringThe post body, at least 50 characters
titlestringPost title. One is generated from the body if omitted
tagsstringComma-separated tags
privatebooleanTrue to keep it to yourself
curl \
  "https://micro.mu/api/v1/blog/create?content=content"
POST /api/v1/blog/delete

Delete one of the caller's own blog posts, by id or title. Refuses posts written by anyone else, and refuses an ambiguous title rather than guessing. Irreversible, so confirm with the user first

Changes something, so POST only.

ArgumentTypeDescription
idstringThe post's id, as given by blog_list
titlestringThe post's title, or enough of it to be unambiguous. An ambiguous title is refused rather than guessed — deleting the wrong post is not recoverable
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{}' \
  https://micro.mu/api/v1/blog/delete
GET /api/v1/blog/list

Read recent blog posts — titles, snippets and ids

ArgumentTypeDescription
limitnumberOptional max number of posts (default all recent)
curl \
  "https://micro.mu/api/v1/blog/list"
GET /api/v1/blog/read

Read one blog post in full, by id or by title. Use after blog_list has found a candidate and the summary is not enough

ArgumentTypeDescription
idstringThe post's id, as given by blog_list
titlestringThe post's title, or enough of it to be unambiguous — use this when you have a name rather than an id
curl \
  "https://micro.mu/api/v1/blog/read"
GET /api/v1/blog/update

Edit one of the caller's own posts. Fields left out keep their current value

ArgumentTypeDescription
id *stringThe post's id, as given by blog_list
titlestringNew title. Left alone if omitted
contentstringNew body, at least 50 characters. Left alone if omitted
tagsstringNew comma-separated tags. Left alone if omitted
curl \
  "https://micro.mu/api/v1/blog/update?id=id"
GET /api/v1/chat/messages

Read the recent conversation in a discussion room

ArgumentTypeDescription
roomstringRoom id, as returned by Rooms
curl \
  "https://micro.mu/api/v1/chat/messages"
GET /api/v1/chat/rooms

List discussion rooms that currently have activity

ArgumentTypeDescription
limitnumberHow many rooms to return (default 20)
curl \
  "https://micro.mu/api/v1/chat/rooms"
GET /api/v1/chat/send

Say something in a discussion room, as the caller. Use chat_rooms to find the room id

ArgumentTypeDescription
room *stringRoom id, as returned by chat_rooms
content *stringWhat to say
curl \
  "https://micro.mu/api/v1/chat/send?room=room&content=content"
GET /api/v1/contacts/add

Save someone to the address book. Adding a name already there updates it rather than making a second card

Needs an account.

ArgumentTypeDescription
name *stringThe person's name, e.g. "Sarah Chen"
emailstringTheir email address
phonestringTheir phone number
notestringAnything worth remembering about them
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/contacts/add?name=name"
POST /api/v1/contacts/delete

Remove someone from the address book

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
id *stringThe contact's id, from contacts_find or contacts_list
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"id"}' \
  https://micro.mu/api/v1/contacts/delete
GET /api/v1/contacts/find

Look someone up in the address book by name, part of a name, or address. Use this before sending mail to a person named rather than addressed

Needs an account.

ArgumentTypeDescription
query *stringA name, part of a name, or an address
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/contacts/find?query=query"
GET /api/v1/contacts/list

List everyone in the caller's address book

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/contacts/list"
POST /api/v1/docs/delete

Delete one of your documents, by id

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
id *stringDocument id, from docs_list
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"id"}' \
  https://micro.mu/api/v1/docs/delete
GET /api/v1/docs/list

List your documents, most recently changed first, with an optional search over titles and bodies. Use this to find an id

Needs an account.

ArgumentTypeDescription
querystringOptional text to match against titles and bodies
limitnumberMaximum documents to return (default 50)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/docs/list"
GET /api/v1/docs/read

Read one of your documents in full, by id or by exact title

Needs an account.

ArgumentTypeDescription
idstringDocument id, from docs_list
titlestringExact title, if you do not have the id
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/docs/read"
GET /api/v1/docs/write

Write a document — a title and a markdown body. Pass an id to replace one you already have. Private unless you set public. For something long enough to re-read; for a short thing to remember, use notes

Needs an account.

ArgumentTypeDescription
title *stringThe document's title
content *stringThe document's body, as markdown
idstringExisting document id to replace. Omit to create a new one
publicbooleanReadable by anyone when true. Private by default
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/docs/write?title=title&content=content"
GET /api/v1/email/history

The emails this account has sent, newest first, and what became of each one — delivered, undelivered, failed, or still going. Asks the carrier about anything still in flight, so it is current when read

Needs an account.

ArgumentTypeDescription
limitnumberMax messages (default 20)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/email/history"
4 creditsPOST /api/v1/email/send

Send a real email to an outside address, from this instance's authenticated sending domain. Takes an address, a subject and a body; resolve a name with contacts_find first. It really is delivered — there is no draft state to undo from. To send as your own address on this instance, so a reply comes back to your inbox, use mail_email; for somebody on this instance use mail_send

Needs an account. Changes something, so POST only. Draws 4 credits per call, or accepts payment.

ArgumentTypeDescription
to *stringRecipient email address. Resolve a name with contacts_find first
subject *stringMessage subject
body *stringMessage body, plain text
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"body","subject":"subject","to":"to"}' \
  https://micro.mu/api/v1/email/send
GET /api/v1/email/sender

The address email is sent from, where replies to it go, which addresses this account has proved are its own, and how many messages are left today

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/email/sender"
GET /api/v1/email/verify

Check that somebody can read an email address — the verification a signup form runs. Call it with an address to have a six-digit code emailed there, then again with the code the person typed back: the answer says approved or why not, so a wrong code is an answer rather than an error. Pass app to put your product's name in the message rather than this instance's. Costs one send and counts against the daily email allowance. Pass mine when the address is your own and you want mail from it recognised here

Needs an account.

ArgumentTypeDescription
address *stringThe address to verify — usually one of your users', not your own
codestringThe code the person typed back. Omit to have one emailed to them
appstringYour product's name, to put in the message. Defaults to this account's name
minebooleanSet only when the address is your own: on approval it is recorded here, so mail you send from it reaches your agent instead of a spam folder
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/email/verify?address=address"
GET /api/v1/events/create

Schedule a reminder or event at a given time; optionally repeating, and optionally running a prompt through the agent when it fires

Needs an account.

ArgumentTypeDescription
title *stringWhat to be reminded about, e.g. 'Call the dentist'
when *stringWhen to fire, RFC3339 with timezone offset, e.g. 2026-07-22T15:00:00+01:00
notestringOptional extra detail
minutesnumberHow long it lasts in minutes (default 30)
repeatstringHow often it recurs: hourly, daily, weekly or monthly. Omit for once
promptstringOptional instruction to run through the agent when it fires, e.g. "brief me on today's news". The answer is mailed to you
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/events/create?title=title&when=when"
POST /api/v1/events/delete

Cancel an event by id

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
id *stringThe event's id, as given by events_list
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"id"}' \
  https://micro.mu/api/v1/events/delete
GET /api/v1/events/free

Find when the caller has nothing booked — open slots of a given length, within working hours

Needs an account.

ArgumentTypeDescription
fromstringStart of the window to search, RFC3339, e.g. 2026-08-03T00:00:00+01:00. Defaults to now
tostringEnd of the window, RFC3339. Defaults to a week after from
minutesnumberHow long a slot you need, in minutes (default 30)
day_startnumberEarliest hour of the day to offer, 0-23 (default 9)
day_endnumberLatest hour of the day to offer, 0-23 (default 18)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/events/free"
GET /api/v1/events/list

List the caller's upcoming events and reminders, each with its id

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/events/list"
POST /api/v1/files/delete

Delete a file you own

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
id *stringThe file's id
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"id"}' \
  https://micro.mu/api/v1/files/delete
GET /api/v1/files/get

Read a stored file back by its id

Needs an account.

ArgumentTypeDescription
id *stringThe file's id, as returned by files_put or files_list
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/files/get?id=id"
GET /api/v1/files/list

List the caller's stored files, newest first

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/files/list"
GET /api/v1/files/put

Store a file and get a URL for it — a report, a CSV, a transcript

Needs an account.

ArgumentTypeDescription
name *stringFile name including its extension, e.g. "report.csv"
content *stringThe file's contents — plain text, or base64 when encoding is "base64"
encodingstring"base64" for binary files; omit for text
typestringOptional content type, e.g. "text/csv". Guessed from the name when omitted
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/files/put?name=name&content=content"
GET /api/v1/files/share

Make a file readable by anyone with its URL, or private again

Needs an account.

ArgumentTypeDescription
id *stringThe file's id
public *booleanTrue to let anyone with the URL read it, false to make it private again
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/files/share?id=id&public=true"
GET /api/v1/flights/airport

Report what is happening at an airport right now: what is on the ground, what is on approach and what is climbing out. Live positions, not the timetable, so it says nothing about scheduled or delayed departures

ArgumentTypeDescription
code *stringAn airport code or name, e.g. 'LHR', 'EGLL' or 'Heathrow'
curl \
  "https://micro.mu/api/v1/flights/airport?code=code"
GET /api/v1/flights/overhead

List the aircraft flying near a location right now, nearest first, with altitude, speed, heading and distance. Live positions broadcast by the aircraft themselves, not a schedule

ArgumentTypeDescription
nearstringWhere to look: a place name, or an airport name or code, e.g. 'Camden, London' or 'LHR'
latnumberOptional latitude, if the location is already known
lonnumberOptional longitude, if the location is already known
radiusnumberOptional radius in nautical miles (default 30, maximum 250)
curl \
  "https://micro.mu/api/v1/flights/overhead"
GET /api/v1/flights/track

Find where an aircraft is right now by flight number ('BA117'), radio callsign ('BAW117') or registration ('G-ZBKL'). Only sees aeroplanes that are airborne and in range of a receiver — not finding one does not mean the flight was cancelled

ArgumentTypeDescription
flight *stringA flight number ('BA117'), a radio callsign ('BAW117'), or an aircraft registration ('G-ZBKL')
curl \
  "https://micro.mu/api/v1/flights/track?flight=flight"
GET /api/v1/food/hygiene

Food hygiene ratings for UK businesses, from the Food Standards Agency inspections. Takes a business name, a town or postcode, or a lat/lon to look around

ArgumentTypeDescription
namestringBusiness name, e.g. 'Nandos'
wherestringTown, street or postcode to narrow it to
latnumberOptional: look around this point instead
lonnumberOptional: look around this point instead
limitnumberHow many to return, default 10, max 30
curl \
  "https://micro.mu/api/v1/food/hygiene"
GET /api/v1/food/product

Look up a packaged food by its barcode — name, brand, ingredients, allergens, nutrition per 100g, Nutri-Score and how processed it is

ArgumentTypeDescription
barcode *stringThe barcode, 6 to 14 digits, e.g. 5000168034928
curl \
  "https://micro.mu/api/v1/food/product?barcode=barcode"
GET /api/v1/hazards/alerts

Current disasters worldwide from GDACS — cyclones, floods, volcanoes, wildfires and earthquakes — with an alert level of green, orange or red. Pass lat/lon to ask about somewhere in particular

ArgumentTypeDescription
levelstringLowest level to include: green, orange or red — default green (everything)
latnumberOptional: only alerts near this point
lonnumberOptional: only alerts near this point
within_kmnumberOptional: how near, in kilometres, default 1000 when lat/lon given
curl \
  "https://micro.mu/api/v1/hazards/alerts"
GET /api/v1/hazards/quakes

Recent earthquakes worldwide from the USGS, with magnitude, place and how long ago. Pass lat/lon to ask about somewhere in particular, min for a magnitude floor, and period for hour, day, week or month

ArgumentTypeDescription
minnumberSmallest magnitude to include, default 2.5
periodstringhour, day, week or month — default day
latnumberOptional: only events near this point
lonnumberOptional: only events near this point
within_kmnumberOptional: how near, in kilometres, default 500 when lat/lon given
curl \
  "https://micro.mu/api/v1/hazards/quakes"
15 creditsGET /api/v1/images/generate

Generate an image from a text prompt and return its URL

Needs an account. Draws 15 credits per call, or accepts payment.

ArgumentTypeDescription
prompt *stringWhat the image should depict
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/images/generate?prompt=prompt"
GET /api/v1/mail/inbox

List the account's most recent messages — read my mail, check my inbox

Needs an account.

ArgumentTypeDescription
limitnumberMax messages (default 10)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/mail/inbox"
GET /api/v1/mail/info

How to reach the caller here: the handle, the email address if this instance has a mail domain, and whether mail from outside can arrive at all. Pass a tag for a separate one (you+tag) — give that out, then read only its messages with mail_inbox(tag)

Needs an account.

ArgumentTypeDescription
tagstringA label for this handle, e.g. "research" or "receipts". Omit for the plain one
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/mail/info"
POST /api/v1/mail/send

Write to somebody, as you. A username reaches them on this instance and is free; a full email address leaves over SMTP under this instance's domain, so a reply comes back to your inbox, and is charged. Resolve a name with contacts_find first. Mail that leaves needs a mail domain configured — without one use email_send, which sends from this instance's own sending domain and expects no reply

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
to *stringRecipient: a username on this instance, or a full email address. Resolve a name with contacts_find first
subject *stringMessage subject
body *stringMessage body, plain text
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"body","subject":"subject","to":"to"}' \
  https://micro.mu/api/v1/mail/send
GET /api/v1/markets/convert

Convert an amount from one currency to another — 250 GBP in JPY. Uses European Central Bank reference rates, and takes a past date back to 1999. Crypto converts at the live price through the dollar

ArgumentTypeDescription
amountnumberHow much to convert. Default 1
from *stringCurrency or asset to convert from, as a code: GBP, USD, EUR, BTC…
to *stringCurrency or asset to convert to, as a code: JPY, USD, ETH…
datestringOptional: the rate on a past day, as 2020-01-03. Currencies only, back to 1999
curl \
  "https://micro.mu/api/v1/markets/convert?from=from&to=to"
GET /api/v1/markets/list

Get live prices for cryptocurrencies, stocks, commodities (oil, gold, silver, copper and crops), futures and currencies

ArgumentTypeDescription
categorystringcrypto (BTC, ETH, SOL…), stocks, commodities (OIL, GOLD, SILVER, COPPER, COFFEE, WHEAT, CORN, SOYBEANS, OATS), futures (the metals and oil alone) or currencies (EUR, GBP, JPY…). Default crypto
curl \
  "https://micro.mu/api/v1/markets/list"
GET /api/v1/news/list

Read recent news headlines with short summaries, balanced across topics

ArgumentTypeDescription
topicstringOptional topic/category filter (e.g. tech, world, business)
limitnumberOptional max number of headlines (default 30)
curl \
  "https://micro.mu/api/v1/news/list"
GET /api/v1/news/read

Read one news article in full by its id or URL

ArgumentTypeDescription
id *stringArticle id (from Headlines) or article URL
curl \
  "https://micro.mu/api/v1/news/read?id=id"
GET /api/v1/notes/add

Write a note under a title, so it is there next conversation. Writing a title that exists rewrites that note

Needs an account.

ArgumentTypeDescription
title *stringWhat the note is called, e.g. "location" or "project brief". Writing a title that exists rewrites that note
text *stringWhat the note says
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/notes/add?title=title&text=text"
POST /api/v1/notes/delete

Delete one note by title

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
title *stringThe note to delete, as returned by notes_list
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"title"}' \
  https://micro.mu/api/v1/notes/delete
GET /api/v1/notes/get

Read one note by title. Use it when you know the title; notes_list when you do not

Needs an account.

ArgumentTypeDescription
title *stringThe note's title, as given to notes_add
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/notes/get?title=title"
GET /api/v1/notes/list

List every note the caller has written, with its text

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/notes/list"
GET /api/v1/places/address

Name the place at a latitude and longitude — the reverse of places_geocode. Use it whenever you have coordinates and need to say where that is

ArgumentTypeDescription
lat *numberLatitude, e.g. 51.5308
lon *numberLongitude, e.g. -0.1238
curl \
  "https://micro.mu/api/v1/places/address?lat=1.5&lon=1.5"
GET /api/v1/places/elevation

How high a place is above sea level, in metres and feet. Sampled from a 90-metre global elevation model, so a summit reads a little under its surveyed height

ArgumentTypeDescription
placestringA place name or address, e.g. 'Denver' or 'Ben Nevis'
latnumberOptional latitude, if the location is already known
lonnumberOptional longitude, if the location is already known
curl \
  "https://micro.mu/api/v1/places/elevation"
GET /api/v1/places/geocode

Resolve a place name or address to coordinates

ArgumentTypeDescription
addressstringA place name or address to locate
curl \
  "https://micro.mu/api/v1/places/geocode"
4 creditsGET /api/v1/places/nearby

List points of interest near a location

Draws 4 credits per call, or accepts payment.

ArgumentTypeDescription
nearstringPlace to look around, e.g. 'Camden, London' (or give lat/lon)
latnumberOptional latitude
lonnumberOptional longitude
querystringOptional keyword to filter by, e.g. 'cafe'
radiusnumberOptional radius in metres (default 1000)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/places/nearby"
GET /api/v1/prayer/qibla

Get the qibla — the compass bearing to face for Islamic prayer from a location

ArgumentTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
curl \
  "https://micro.mu/api/v1/prayer/qibla?lat=1.5&lon=1.5"
GET /api/v1/prayer/reflection

Get today's Islamic reflection — a verse of the Quran with its surah, a saying of the Prophet, and a name of Allah

curl \
  "https://micro.mu/api/v1/prayer/reflection"
GET /api/v1/prayer/saying

Look up a hadith from Sahih al-Bukhari, optionally from a given book

ArgumentTypeDescription
booknumberBook number within Sahih al-Bukhari. Omit for a saying from any book
curl \
  "https://micro.mu/api/v1/prayer/saying"
GET /api/v1/prayer/times

Get today's Islamic prayer times (salah) for a location, and which prayer is next

ArgumentTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
tzstringIANA timezone of the location, e.g. Europe/London (defaults to UTC)
methodstringCalculation convention: isna, mwl, egypt, karachi, gulf, diyanet, muis or jakim (defaults to isna)
curl \
  "https://micro.mu/api/v1/prayer/times?lat=1.5&lon=1.5"
GET /api/v1/prayer/verse

Look up a chapter of the Quran, or one verse within it, by number. Use prayer_search to ask a question instead of naming a reference

ArgumentTypeDescription
chapter *numberChapter (surah) number, 1-114
versenumberVerse number within the chapter. Omit for the whole chapter
curl \
  "https://micro.mu/api/v1/prayer/verse?chapter=1.5"
3 creditsGET /api/v1/routes/directions

The turn-by-turn route between two places, with the distance for each instruction. Use ETA instead when only the travel time is wanted — this asks the provider for more and costs more

Draws 3 credits per call, or accepts payment.

ArgumentTypeDescription
fromstringWhere the journey starts, e.g. 'King's Cross, London' (or give from_lat/from_lon)
tostringWhere the journey ends, e.g. 'Heathrow Airport'
from_latnumberOptional start latitude, if already known
from_lonnumberOptional start longitude, if already known
to_latnumberOptional end latitude, if already known
to_lonnumberOptional end longitude, if already known
modestringHow to travel: drive (default), walk, cycle or transit
depart_atstringWhen the journey starts, as RFC3339. Defaults to now
arrive_bystringBe there by this time, as RFC3339. Cannot be combined with depart_at
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/routes/directions"
2 creditsGET /api/v1/routes/eta

How long it takes to travel between two places, by road rather than as the crow flies. Can be asked about a future departure, or told when you need to arrive and answer when to leave

Draws 2 credits per call, or accepts payment.

ArgumentTypeDescription
fromstringWhere the journey starts, e.g. 'King's Cross, London' (or give from_lat/from_lon)
tostringWhere the journey ends, e.g. 'Heathrow Airport'
from_latnumberOptional start latitude, if already known
from_lonnumberOptional start longitude, if already known
to_latnumberOptional end latitude, if already known
to_lonnumberOptional end longitude, if already known
modestringHow to travel: drive (default), walk, cycle or transit
depart_atstringWhen the journey starts, as RFC3339 (e.g. 2026-08-13T08:00:00Z). Defaults to now. Traffic and timetables are read for this time
arrive_bystringBe there by this time, as RFC3339. Answers when to leave. Cannot be combined with depart_at
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/routes/eta"
2 creditsGET /api/v1/routes/nearest

Given a starting point and several destinations, say which is quickest to reach and put them in order. Each destination is a separate routing lookup, so ask about the places you are actually choosing between rather than a long list

Draws 2 credits per call, or accepts payment.

ArgumentTypeDescription
fromstringWhere you are starting from, e.g. 'Shoreditch, London' (or give from_lat/from_lon)
from_latnumberOptional start latitude, if already known
from_lonnumberOptional start longitude, if already known
to *arrayThe places to compare, e.g. ['Heathrow', 'Gatwick', 'Stansted']
modestringHow to travel: drive (default), walk, cycle or transit
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/routes/nearest?to=to"
GET /api/v1/sms/history

Read the texts this account has sent and received, newest first. Both directions, which is why it is not called an inbox

Needs an account.

ArgumentTypeDescription
limitnumberHow many messages to return, newest first (default 50, max 200)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/sms/history"
GET /api/v1/sms/number

The number texts are sent from, which numbers are verified as yours, and how many messages are left today

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/sms/number"
POST /api/v1/sms/send

Text somebody, from this instance's number. Charged per 160-character segment, capped per day, and the recipient can stop it with STOP

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
to *stringThe number to text, in international format, e.g. +447700900123. Use contacts_find to turn a name into one
text *stringWhat to say. Charged per 160-character segment, so brevity is not only good manners
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"text","to":"to"}' \
  https://micro.mu/api/v1/sms/send
GET /api/v1/sms/verify

Claim a number as your own, so texts arriving from it reach this account. Call it with just the number to have a code texted there, then again with the code

Needs an account.

ArgumentTypeDescription
number *stringYour own number, in international format
codestringThe code that was texted to that number. Omit to have one sent
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/sms/verify?number=number"
GET /api/v1/social/list

Read the latest social posts from the network

ArgumentTypeDescription
limitnumberOptional max number of posts (default all recent)
curl \
  "https://micro.mu/api/v1/social/list"
GET /api/v1/stream/list

Read recent events from the console timeline

ArgumentTypeDescription
limitnumberHow many events to return (default 20, max 100)
curl \
  "https://micro.mu/api/v1/stream/list"
GET /api/v1/stream/post

Post an entry to the console timeline

ArgumentTypeDescription
content *stringWhat to post to the console
curl \
  "https://micro.mu/api/v1/stream/post?content=content"
GET /api/v1/tasks/create

Add a task. Assign it to the agent and it can pick the task up itself

Needs an account.

ArgumentTypeDescription
title *stringWhat is to be done
detailstringAnything the doer needs to know: context, links, constraints
assigneestringme (default) or agent — assign to the agent and it can pick the task up
duestringOptional deadline, RFC3339 or 2006-01-02 15:04
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/tasks/create?title=title"
POST /api/v1/tasks/delete

Remove a task

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
id *stringThe task's id
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id":"id"}' \
  https://micro.mu/api/v1/tasks/delete
GET /api/v1/tasks/list

List the caller's tasks, open ones first; optionally filtered by state

Needs an account.

ArgumentTypeDescription
statusstringOptional filter: todo, doing or done
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/tasks/list"
GET /api/v1/tasks/next

The next task assigned to the agent — what to work on now

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/tasks/next"
GET /api/v1/tasks/update

Change a task: its state, or the result of doing it

Needs an account.

ArgumentTypeDescription
id *stringThe task's id
titlestringNew title
detailstringNew detail
statusstringtodo, doing or done
resultstringWhat came of it — the answer, the outcome, what was found
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/tasks/update?id=id"
1 creditGET /api/v1/text/classify

Sort text into one of the labels you give, with a confidence. For routing, triage and moderation. Capped at 30,000 characters

Draws 1 credit per call, or accepts payment.

ArgumentTypeDescription
text *stringThe text to sort
labels *stringComma-separated labels to choose between
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/text/classify?text=text&labels=labels"
5 creditsGET /api/v1/text/extract

Turn text into JSON matching a schema you give. Pass the fields you want as a JSON schema or a plain description; returns JSON only. Capped at 30,000 characters

Draws 5 credits per call, or accepts payment.

ArgumentTypeDescription
text *stringThe text to read
schema *stringA JSON schema, or a plain description of the fields wanted
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/text/extract?text=text&schema=schema"
2 creditsGET /api/v1/text/summarise

Summarise text into a few sentences. Pass style=bullets for a list, or a sentence count. Capped at 30,000 characters

Draws 2 credits per call, or accepts payment.

ArgumentTypeDescription
text *stringThe text to summarise
stylestringOptional: 'bullets' for a list, otherwise prose
linesnumberOptional: roughly how many sentences or bullets
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/text/summarise?text=text"
3 creditsGET /api/v1/text/translate

Translate text into another language, preserving formatting. Capped at 30,000 characters

Draws 3 credits per call, or accepts payment.

ArgumentTypeDescription
text *stringThe text to translate
to *stringTarget language, e.g. 'French' or 'ar'
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/text/translate?text=text&to=to"
GET /api/v1/transit/arrivals

What is due at a stop and when. Takes a stop name or an id. In London this is live from TfL — buses, tube, DLR, Overground and Elizabeth line. Elsewhere it is the published timetable, and says so

ArgumentTypeDescription
stop *stringStop name or id, e.g. 'Oxford Circus' or 940GZZLUOXC
curl \
  "https://micro.mu/api/v1/transit/arrivals?stop=stop"
GET /api/v1/transit/feeds

Which published timetables this instance carries, and which others it could — with the size of each, so an operator can see what switching one on costs. Also names the feeds that look right but whose timetables have run out

ArgumentTypeDescription
countrystringOptional two-letter code to narrow the list: GB, US, ES…
curl \
  "https://micro.mu/api/v1/transit/feeds"
GET /api/v1/transit/nearby

Bus stops and stations near a point, nearest first, with the id each one is called by. London live from TfL; elsewhere from whichever published timetables this instance has loaded

ArgumentTypeDescription
lat *numberLatitude
lon *numberLongitude
radiusnumberMetres to search, default 400, max 2000
curl \
  "https://micro.mu/api/v1/transit/nearby?lat=1.5&lon=1.5"
GET /api/v1/transit/status

Which lines are delayed, part-suspended or closed right now, and why. London only

ArgumentTypeDescription
modesstringOptional: tube, dlr, overground, elizabeth-line, tram — comma separated
curl \
  "https://micro.mu/api/v1/transit/status"
POST /api/v1/user/block

Block another account, hiding all of their content from the caller's view

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
user *stringThe username to block
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"user":"user"}' \
  https://micro.mu/api/v1/user/block
GET /api/v1/user/flag

Report a post, comment or message for a human moderator to look at. Does not remove anything itself — use user_hide to hide something from your own view

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/user/flag"
GET /api/v1/user/hide

Hide an item so the caller stops seeing it. Affects only this account's view; use user_flag to report something to a moderator instead

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/user/hide"
GET /api/v1/user/save

Save an item to the caller's bookmarks so it can be found again. Private to the caller, and reversible with user_unsave

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/user/save"
GET /api/v1/user/saved

List the items the caller has saved for later, with their links

Needs an account.

ArgumentTypeDescription
limitnumberMax results (default 50)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/user/saved"
GET /api/v1/user/unblock

Stop blocking another account, so their posts and messages reach the caller again. Reverses user_block

Needs an account.

ArgumentTypeDescription
user *stringThe username to stop blocking
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/user/unblock?user=user"
POST /api/v1/user/unsave

Remove an item from the caller's bookmarks. Leaves the item itself untouched — this only forgets that it was saved

Needs an account. Changes something, so POST only.

curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{}' \
  https://micro.mu/api/v1/user/unsave
GET /api/v1/video/list

Read the latest videos from curated channels

ArgumentTypeDescription
limitnumberOptional max number of videos (default all recent)
curl \
  "https://micro.mu/api/v1/video/list"
GET /api/v1/wallet/address

Your own address on Base, to receive USDC. Created the first time you ask. Funds sent on any other chain land at the same address there and cannot be reached from here

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/wallet/address"
GET /api/v1/wallet/balance

What your wallet holds in USDC on Base. Says so plainly when the chain could not be reached, because that is not the same as holding nothing

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/wallet/balance"
GET /api/v1/wallet/list

Which priced servers this wallet is allowed to pay, by name. Pass one of these names to wallet_pay

Needs an account.

curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/wallet/list"
GET /api/v1/wallet/pay

Call a tool on one of those servers and pay for it from your wallet if it asks. Nothing is spent when the tool is free. Every payment is capped per call and per day, so a server cannot name any price it likes

Needs an account.

ArgumentTypeDescription
serverstringWhich server to call, by the name wallet_list gives. Defaults to this instance
tool *stringThe tool to call on that server, e.g. web_search
argsobjectArguments for that tool
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/wallet/pay?tool=tool"
GET /api/v1/weather/air

Air quality at a location right now — AQI, PM2.5, PM10, ozone, nitrogen dioxide, UV index, and pollen where it is counted

ArgumentTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
curl \
  "https://micro.mu/api/v1/weather/air?lat=1.5&lon=1.5"
1 creditGET /api/v1/weather/forecast

Get the weather forecast for a location — current conditions and the days ahead

Draws 1 credit per call, or accepts payment.

ArgumentTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/weather/forecast?lat=1.5&lon=1.5"
GET /api/v1/weather/history

What the weather actually was at a location between two dates — average high and low, total rainfall and the extremes. Records run a few days behind today

ArgumentTypeDescription
lat *numberLatitude of the location
lon *numberLongitude of the location
start *stringFirst day, as 2025-08-01
end *stringLast day, as 2025-08-31
curl \
  "https://micro.mu/api/v1/weather/history?lat=1.5&lon=1.5&start=start&end=end"
GET /api/v1/weather/marine

Sea state at a coastal or offshore point — wave height, period and direction now and for the days ahead, with sea temperature

ArgumentTypeDescription
lat *numberLatitude of a coastal or offshore point
lon *numberLongitude of a coastal or offshore point
daysnumberHow many days ahead, 1 to 7 — default 3
curl \
  "https://micro.mu/api/v1/weather/marine?lat=1.5&lon=1.5"
GET /api/v1/web/fetch

Fetch a web page by URL and return its cleaned readable content, stripping ads, popups and navigation. Needs an account

ArgumentTypeDescription
url *stringThe URL to fetch
curl \
  "https://micro.mu/api/v1/web/fetch?url=url"
GET /api/v1/whatsapp/history

Read the WhatsApp messages this account has sent and received, newest first

Needs an account.

ArgumentTypeDescription
limitnumberHow many messages to return, newest first (default 50, max 200)
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/whatsapp/history"
GET /api/v1/whatsapp/open

List who can be written to on WhatsApp right now and until when. Check this before promising to follow up later

Needs an account.

ArgumentTypeDescription
numberstringOne number to ask about. Omit for everyone you can currently write to
curl \
  -H "Authorization: Bearer $MU_TOKEN" \
  "https://micro.mu/api/v1/whatsapp/open"
POST /api/v1/whatsapp/send

Send a WhatsApp message. Only to somebody who has written to this instance in the last 24 hours — WhatsApp's own rule, not this one, and there is no way around it without templates approved in advance

Needs an account. Changes something, so POST only.

ArgumentTypeDescription
to *stringTheir number in international format, e.g. +447700900123. They must have messaged this instance within the last 24 hours
text *stringWhat to say
curl -X POST \
  -H "Authorization: Bearer $MU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"text","to":"to"}' \
  https://micro.mu/api/v1/whatsapp/send