http \
POST \
https://bsky.social/xrpc/com.atproto.server.createSession \
identifier=USERNAME.bsky.social \
password=APP_SPECIFIC_PASSWORD
http \
POST \
https://bsky.social/xrpc/com.atproto.repo.createRecord \
Authorization:"Bearer ACCESS_JWT" \
repo=DID \
collection=app.bsky.feed.post \
record\[\$type\]=app.bsky.feed.post \
record\[text\]="Test post please ignore" \
record\[createdAt\]="$(date -Iseconds)"
Copy the ACCESS_JWT and DID from the response of the createSession call (in real code, you'd store the response in a variable).
These resources helped me put this together:
Facets (analogous to Telegram's message entities) https://docs.bsky.app/docs/advanced-guides/post-richtext