Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@RickCogley
Last active February 25, 2024 01:45
Show Gist options
  • Star 32 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save RickCogley/69f430d4418ae5498e8febab44d241c9 to your computer and use it in GitHub Desktop.
Save RickCogley/69f430d4418ae5498e8febab44d241c9 to your computer and use it in GitHub Desktop.
Testing curl to matrix.org

Testing the matrix.org client-server API

Matrix is:

an open standard for decentralised communication, providing simple HTTP APIs and open source reference implementations for securely distributing and persisting JSON over an open federation of servers.

It's pretty fantastic, if you think on the massive problem of fragmentation all across the web. They've created an easy to use API, and you can do a kludgy test using curl from the terminal (*nix, mac, win). See: http://matrix.org/docs/howtos/client-server.html

It's pretty straightforward to do a quick test. I have an account at https://matrix.org / https://vector.im, so I used that to get a token.

curl -XPOST -d '{"type":"m.login.password", "user":"myuserid", "password":"mypass"}' "https://matrix.org/_matrix/client/r0/login"

That returns the token in some json:

{"access_token":"MDAxO...blahblah","refresh_token":"MDAxO...blahblah","home_server":"matrix.org","user_id":"@myuserid:matrix.org"}

Now you have the access_token you can use in your curl command, when hitting the API, and I understand that this token does not expire. Also get the ID from a room you create at matrix.org (get room properties via the web UI), which for me was !QaRABAkxDBNukDoCOY. The ! is problematic in shells so, escape it after you paste the room id into your curl command.

Think of the curl command as a really, really simple analogue to a proper matrix.org client like vector.im, so, the URL of the API is that of your home server; in this case matrix.org. (Thanks @Half-Shot)

curl -XPOST -d '{"msgtype":"m.text", "body":"Hello from '"$USER"'"}' "https://matrix.org/_matrix/client/r0/rooms/\!QaRABAkxDBNukDoCOY:matrix.org/send/m.room.message?access_token=MDAxO...blahblah"

You can use shell variables in your curl command, but you have to split the data part using single quotes. The json's structure makes this a little confusing, but it's basically:

... -d 'whatever'"$thevar"'whatever' "https..."

Now it should be working, and you could now shell script it, separating those long strings out into variables, and pulling in, say, a $1 arg to make it easy to ping a certain room with messages from your servers. I.e. something like:

> matrixlog "did a yum update"
@travnewmatic
Copy link

@bedawi
Copy link

bedawi commented Sep 25, 2019

@jasalt
Copy link

jasalt commented Jul 16, 2020

Seems they changed the POST to PUT. This is what I got to work today.

curl 'https://SERVER/_matrix/client/r0/rooms/ROOMNAME/send/m.room.message/123?access_token='TOKEN' -X PUT --data '{"msgtype":"m.text","body":"hello world"}'

ref: https://matrix.org/docs/api/client-server/#!/Room32participation/sendMessage

@erickhavel
Copy link

Not sure if the original gist has been edited but it still works for me (didn't check out the comments here until after I tried it).

@sunrisepi
Copy link

I am able to send plaintext messages, thanks. Is it possible to send bold text using this API va curl? I do not see this documented anywhere, just curious... thanks.

@sunrisepi
Copy link

I would love to see if we could use curl to send stuff that looks as professional and nicely formatted as Discord notifications. Check below for an example. Anyone know if it is possible to accomplish the same thing using the Matrix API?

https://birdie0.github.io/discord-webhooks-guide/discord_webhook.html

@kuhlmannmarkus
Copy link

Thanks for this summary!
I had to escape the ! and the : while sending a message differently, though. Otherwise the room was not recognized.
! = %21
: = %3A
Hope this helps.

@G2G2G2G
Copy link

G2G2G2G commented Aug 12, 2021

@sunrisepi

Is it possible to send bold text using this API va curl? I do not see this documented anywhere, just curious... thanks.

uhh you're just sending json.. change the json to the correct json and it'll send anything you want...
-XPOST -d '{"msgtype":"m.text", "body":"**Hello**","format":"org.matrix.custom.html","formatted_body":"<strong>hello</strong>"}'

@huedaya
Copy link

huedaya commented Oct 19, 2022

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment