export const metadata = {
title: 'Contacts',
description:
'On this page, we’ll dive into the different contact endpoints you can use to manage contacts programmatically.',
}
# Contacts
As the name suggests, contacts are a core part of Protocol — the very reason Protocol exists is so you can have secure conversations with your contacts. On this page, we'll dive into the different contact endpoints you can use to manage contacts programmatically. We'll look at how to query, create, update, and delete contacts. {{ className: 'lead' }}
## The contact model
The contact model contains all the information about your contacts, such as their username, avatar, and phone number. It also contains a reference to the conversation between you and the contact and information about when they were last active on Protocol.
### Properties
Unique identifier for the contact.
The username for the contact.
The phone number for the contact.
The avatar image URL for the contact.
The contact display name in the contact list. By default, this is just the
username.
Unique identifier for the conversation associated with the contact.
Timestamp of when the contact was last active on the platform.
Timestamp of when the contact was created.
---
## List all contacts {{ tag: 'GET', label: '/v1/contacts' }}
This endpoint allows you to retrieve a paginated list of all your contacts. By default, a maximum of ten contacts are shown per page.
### Optional attributes
Limit the number of contacts returned.
```bash {{ title: 'cURL' }}
curl -G https://api.protocol.chat/v1/contacts \
-H "Authorization: Bearer {token}" \
-d active=true \
-d limit=10
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.contacts.list()
```
```python
from protocol_api import ApiClient
client = ApiClient(token)
client.contacts.list()
```
```php
$client = new \Protocol\ApiClient($token);
$client->contacts->list();
```
```json {{ title: 'Response' }}
{
"has_more": false,
"data": [
{
"id": "WAz8eIbvDR60rouK",
"username": "FrankMcCallister",
"phone_number": "1-800-759-3000",
"avatar_url": "https://assets.protocol.chat/avatars/frank.jpg",
"display_name": null,
"conversation_id": "xgQQXg3hrtjh7AvZ",
"last_active_at": 705103200,
"created_at": 692233200
},
{
"id": "hSIhXBhNe8X1d8Et"
// ...
}
]
}
```
---
## Create a contact {{ tag: 'POST', label: '/v1/contacts' }}
This endpoint allows you to add a new contact to your contact list in Protocol. To add a contact, you must provide their Protocol username and phone number.
### Required attributes
The username for the contact.
The phone number for the contact.
### Optional attributes
The avatar image URL for the contact.
The contact display name in the contact list. By default, this is just the username.
```bash {{ title: 'cURL' }}
curl https://api.protocol.chat/v1/contacts \
-H "Authorization: Bearer {token}" \
-d username="FrankMcCallister" \
-d phone_number="1-800-759-3000" \
-d avatar_url="https://assets.protocol.chat/avatars/frank.jpg"
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.contacts.create({
username: 'FrankMcCallister',
phone_number: '1-800-759-3000',
avatar_url: 'https://assets.protocol.chat/avatars/frank.jpg',
})
```
```python
from protocol_api import ApiClient
client = ApiClient(token)
client.contacts.create(
username="FrankMcCallister",
phone_number="1-800-759-3000",
avatar_url="https://assets.protocol.chat/avatars/frank.jpg",
)
```
```php
$client = new \Protocol\ApiClient($token);
$client->contacts->create([
'username' => 'FrankMcCallister',
'phone_number' => '1-800-759-3000',
'avatar_url' => 'https://assets.protocol.chat/avatars/frank.jpg',
]);
```
```json {{ title: 'Response' }}
{
"id": "WAz8eIbvDR60rouK",
"username": "FrankMcCallister",
"phone_number": "1-800-759-3000",
"avatar_url": "https://assets.protocol.chat/avatars/frank.jpg",
"display_name": null,
"conversation_id": "xgQQXg3hrtjh7AvZ",
"last_active_at": null,
"created_at": 692233200
}
```
---
## Retrieve a contact {{ tag: 'GET', label: '/v1/contacts/:id' }}
This endpoint allows you to retrieve a contact by providing their Protocol id. Refer to [the list](#the-contact-model) at the top of this page to see which properties are included with contact objects.
```bash {{ title: 'cURL' }}
curl https://api.protocol.chat/v1/contacts/WAz8eIbvDR60rouK \
-H "Authorization: Bearer {token}"
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.contacts.get('WAz8eIbvDR60rouK')
```
```python
from protocol_api import ApiClient
client = ApiClient(token)
client.contacts.get("WAz8eIbvDR60rouK")
```
```php
$client = new \Protocol\ApiClient($token);
$client->contacts->get('WAz8eIbvDR60rouK');
```
```json {{ title: 'Response' }}
{
"id": "WAz8eIbvDR60rouK",
"username": "FrankMcCallister",
"phone_number": "1-800-759-3000",
"avatar_url": "https://assets.protocol.chat/avatars/frank.jpg",
"display_name": null,
"conversation_id": "xgQQXg3hrtjh7AvZ",
"last_active_at": 705103200,
"created_at": 692233200
}
```
---
## Update a contact {{ tag: 'PUT', label: '/v1/contacts/:id' }}
This endpoint allows you to perform an update on a contact. Currently, the only attribute that can be updated on contacts is the `display_name` attribute which controls how a contact appears in your contact list in Protocol.
### Optional attributes
The contact display name in the contact list. By default, this is just the username.
```bash {{ title: 'cURL' }}
curl -X PUT https://api.protocol.chat/v1/contacts/WAz8eIbvDR60rouK \
-H "Authorization: Bearer {token}" \
-d display_name="UncleFrank"
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.contacts.update('WAz8eIbvDR60rouK', {
display_name: 'UncleFrank',
})
```
```python
from protocol_api import ApiClient
client = ApiClient(token)
client.contacts.update("WAz8eIbvDR60rouK", display_name="UncleFrank")
```
```php
$client = new \Protocol\ApiClient($token);
$client->contacts->update('WAz8eIbvDR60rouK', [
'display_name' => 'UncleFrank',
]);
```
```json {{ title: 'Response' }}
{
"id": "WAz8eIbvDR60rouK",
"username": "FrankMcCallister",
"phone_number": "1-800-759-3000",
"avatar_url": "https://assets.protocol.chat/avatars/frank.jpg",
"display_name": "UncleFrank",
"conversation_id": "xgQQXg3hrtjh7AvZ",
"last_active_at": 705103200,
"created_at": 692233200
}
```
---
## Delete a contact {{ tag: 'DELETE', label: '/v1/contacts/:id' }}
This endpoint allows you to delete contacts from your contact list in Protocol. Note: This will also delete your conversation with the given contact.
```bash {{ title: 'cURL' }}
curl -X DELETE https://api.protocol.chat/v1/contacts/WAz8eIbvDR60rouK \
-H "Authorization: Bearer {token}"
```
```js
import ApiClient from '@example/protocol-api'
const client = new ApiClient(token)
await client.contacts.delete('WAz8eIbvDR60rouK')
```
```python
from protocol_api import ApiClient
client = ApiClient(token)
client.contacts.delete("WAz8eIbvDR60rouK")
```
```php
$client = new \Protocol\ApiClient($token);
$client->contacts->delete('WAz8eIbvDR60rouK');
```