curl --request GET \
--url https://api.parley.so/v1/files \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.parley.so/v1/files"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.parley.so/v1/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.parley.so/v1/files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.parley.so/v1/files"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.parley.so/v1/files")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parley.so/v1/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"type": "file",
"id": "cmf2y1a2b0003abcd",
"name": "engagement-letter.pdf",
"location": {
"type": "project",
"id": "cmf2x8k0q0001abcd",
"name": "Acme Corp H-1B petition"
},
"folder": {
"type": "folder",
"id": "cmf2y0z9x0004abcd",
"name": "Evidence"
},
"mediaType": "application/pdf",
"status": "ready",
"createdAt": "2026-10-03T12:00:00.000Z",
"updatedAt": "2026-10-03T12:01:30.000Z"
}
],
"nextCursor": "<string>"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "The request is invalid.",
"details": {
"issues": [
{
"path": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid credentials."
}
}{
"error": {
"code": "FORBIDDEN",
"message": "You don't have permission to do this."
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests."
}
}List files
List the files and folders of one location, newest first by default: pass exactly one of projectId, accountId, contactId, intakeId, or library=true. Starts at the location’s top level: pass folderId to list inside a folder, and recursive=true to include everything below. Returns 400 INVALID_REFERENCE when the location or folder doesn’t exist or you can’t see it.
curl --request GET \
--url https://api.parley.so/v1/files \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.parley.so/v1/files"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.parley.so/v1/files', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.parley.so/v1/files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.parley.so/v1/files"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.parley.so/v1/files")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parley.so/v1/files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"type": "file",
"id": "cmf2y1a2b0003abcd",
"name": "engagement-letter.pdf",
"location": {
"type": "project",
"id": "cmf2x8k0q0001abcd",
"name": "Acme Corp H-1B petition"
},
"folder": {
"type": "folder",
"id": "cmf2y0z9x0004abcd",
"name": "Evidence"
},
"mediaType": "application/pdf",
"status": "ready",
"createdAt": "2026-10-03T12:00:00.000Z",
"updatedAt": "2026-10-03T12:01:30.000Z"
}
],
"nextCursor": "<string>"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "The request is invalid.",
"details": {
"issues": [
{
"path": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid credentials."
}
}{
"error": {
"code": "FORBIDDEN",
"message": "You don't have permission to do this."
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests."
}
}Authorizations
A Parley API key.
Query Parameters
List this project's files. Pass exactly one of projectId, accountId, contactId, intakeId, or library.
1List this account's files. Pass exactly one of projectId, accountId, contactId, intakeId, or library.
1List this contact's files. Pass exactly one of projectId, accountId, contactId, intakeId, or library.
1List this intake's files. Pass exactly one of projectId, accountId, contactId, intakeId, or library.
1true for the organization's Library. Pass exactly one of projectId, accountId, contactId, intakeId, or library.
List inside this folder, which must be in the location. Omit to start at the top level.
1Include everything below the starting point, not just the files and folders directly in it.
Case-insensitive. Only files and folders whose name contains this text.
1Only files, or only folders.
file, folder Only records created at or after this time. An ISO 8601 date (YYYY-MM-DD, read as UTC midnight) or date-time.
Only records created before this time. An ISO 8601 date (YYYY-MM-DD, read as UTC midnight) or date-time.
Only records last updated at or after this time. An ISO 8601 date (YYYY-MM-DD, read as UTC midnight) or date-time.
Only records last updated before this time. An ISO 8601 date (YYYY-MM-DD, read as UTC midnight) or date-time.
Sort order: a field name, prefixed with - for descending. Defaults to -createdAt.
name, -name, createdAt, -createdAt, updatedAt, -updatedAt Opaque cursor from nextCursor. Pass the same filters and sort. Omit for the first page.
1Maximum number of items to return.
1 <= x <= 250Response
OK
A file or a folder, told apart by type.
- Option 1
- Option 2
Show child attributes
Show child attributes
{
"type": "file",
"id": "cmf2y1a2b0003abcd",
"name": "engagement-letter.pdf",
"location": {
"type": "project",
"id": "cmf2x8k0q0001abcd",
"name": "Acme Corp H-1B petition"
},
"folder": {
"type": "folder",
"id": "cmf2y0z9x0004abcd",
"name": "Evidence"
},
"mediaType": "application/pdf",
"status": "ready",
"createdAt": "2026-10-03T12:00:00.000Z",
"updatedAt": "2026-10-03T12:01:30.000Z"
}
Cursor for the next page, or null on the last page.
Was this page helpful?
