# Private message Send a private message to a user or multiple users. `POST {{ api_url }}/v1/messages` ## Usage examples
``` curl {{ api_url }}/v1/messages \ -u BOT_EMAIL_ADDRESS:BOT_API_KEY \ -d "type=private" \ -d "to=hamlet@example.com" \ -d "content=I come not, friends, to steal away your hearts." ```
```python #!/usr/bin/env python import zulip # Download ~/zuliprc-dev from your dev server client = zulip.Client(config_file="~/zuliprc-dev") # Send a private message client.send_message({ "type": "private", "to": "hamlet@example.com", "content": "I come not, friends, to steal away your hearts." }) ```
You can use `zulip-send` (available after you `pip install zulip`) to easily send Zulips from the command-line, providing the message content via STDIN. ```bash zulip-send hamlet@example.com \ --user othello-bot@example.com --api-key a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 ``` You can omit the `user` and `api-key` arguments if you have a `~/.zuliprc` file. See also the [full API endpoint documentation](/api).
More examples and documentation can be found [here](https://github.com/zulip/zulip-js). ```js const zulip = require('zulip-js'); // Download zuliprc-dev from your dev server const config = { zuliprc: 'zuliprc-dev', }; zulip(config).then((client) => { // Send a private message const params = { to: 'hamlet@example.com', type: 'private', content: 'I come not, friends, to steal away your hearts.', } client.messages.send(params).then(console.log); }); ```
## Arguments {generate_api_arguments_table|arguments.json|private-message.md} ## Response #### Return values * `id`: The ID of the newly created message #### Example response {!successful-api-send-message-json-response.md!} A typical failed JSON response for when the recipient's email address is invalid: ``` { 'code':'BAD_REQUEST', 'msg':"Invalid email 'hamlet@example.com'", 'result':'error' } ``` {!invalid-api-key-json-response.md!}