2018-11-12 03:08:33 +01:00
# Friendica Directory Protocol
2019-02-03 15:30:31 +01:00
## Surprise
```
GET /servers/surprise
```
Redirects to the base URL of a random server with open registration policy and above 75 health.
2018-11-12 03:08:33 +01:00
## Search
```
2020-09-27 19:41:28 +02:00
GET /search[/account_type]?q=...[& page=...][& limit=...]
2018-11-12 03:08:33 +01:00
Accept: application/json
```
2020-09-27 19:41:28 +02:00
URI Parameter:
- `account_type` (optional): An arbitrary account type string. Expected values are `all` , `people` , `news` , `organization` and `forum` . Default is `all` .
Query parameters:
2018-11-12 03:08:33 +01:00
- `q` : The search query.
2018-12-24 03:23:08 +01:00
- `page` (optional): The page number, default is 1.
2020-09-27 19:41:28 +02:00
- `limit` (optional): The page size, default is 20, max is 100.
2018-11-12 03:08:33 +01:00
Returns a JSON structure containing a paginated list profiles matching the search query and the optional account type.
Example:
```json
{
"query": "philosophy",
"page": 1,
"itemsperpage": 20,
"count": "13",
2018-12-24 03:23:08 +01:00
"profiles": [
{
"id": "2259",
"name": "Hyp🌧lite Pe☂ov🍃n (he/him)",
"username": "hypolite",
"addr": "hypolite@friendica.mrpetovan.com",
"account_type": "People",
"pdesc": "Subpar geek, french/english, science, games, feminism, jokes and anything in between. Avatar by @DearMsDear@mastodon .art",
"locality": "Brooklyn",
"region": "New York",
"country": "USA",
"profile_url": "https://friendica.mrpetovan.com/profile/hypolite",
"dfrn_request": "https://friendica.mrpetovan.com/dfrn_request/hypolite",
"photo": "https://friendica.mrpetovan.com/photo/27330388315ae4ed2b03e3c116980490-4.jpg?ts=1541567135",
"tags": "videogame gaming boardgame politics philosophy development programming php",
"last_activity": "2018-45"
},
...
]
}
```
### Legacy interest match search
```
POST /msearch
Content-Type: application/x-www-form-urlencoded
Accept: application/json
```
Parameters:
- `s` : The search query, a list of tags separated by spaces or commas is expected.
- `p` (optional): The page number, default is 1.
- `n` (optional): The number of items per page, default is 80.
Returns a JSON structure containing a paginated list profiles matching the search query and the optional account type.
Example:
```json
{
"query": "videogame gaming boardgame politics philosophy development programming php",
"page": 1,
2018-12-24 15:45:47 +01:00
"items_page": 100,
"total": 32,
"results": [
2018-11-12 03:08:33 +01:00
{
"name": "Hyp🌧lite Pe☂ov🍃n (he/him)",
2018-12-24 15:45:47 +01:00
"url": "https://friendica.mrpetovan.com/profile/hypolite",
"photo": "https://friendica.mrpetovan.com/photo/27330388315ae4ed2b03e3c116980490-4.jpg?ts=1545521478",
"tags": "videogame gaming boardgame politics philosophy development programming php"
2018-11-12 03:08:33 +01:00
},
...
]
}
```
## Profile submission
`GET /submit?url=...`
Parameters:
- `url` : a hexadecimal-encoded profile URL to be added to the directory.
The success of the operation is indicated by the HTTP response code.
## Synchronization
`GET /sync/pull/all`
Returns a JSON structure containing all the profiles displayed by the directory.
Example:
```json
{
now: 1541942034,
count: 7435,
results: [
"http://example.com/profile/test",
...
]
}
```
`GET /sync/pull/since/1541942034`
Returns a JSON structure containing profiles displayed by the directory that have been updated since the provided UNIX timestamp.
Example:
```json
{
now: 1541942160,
count: 2766,
results: [
"http://example.com/profile/test",
...
]
}
```