List conversation messages
curl --request GET \
--url https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"type": "<string>",
"actor": "creator",
"collaborationId": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"text": "<string>",
"comment": "<string>",
"sender": {
"id": "<string>",
"name": "<string>",
"email": "[email protected]"
},
"attachments": [
{
"fileName": "<string>",
"fileSize": 123,
"mimeType": "<string>",
"downloadUrl": "<string>"
}
],
"proposal": {
"proposalId": "<string>",
"collaborationId": "<string>",
"requestId": "<string>",
"status": "offer_pending",
"createdBy": "creator",
"priceCents": 123,
"currency": "<string>",
"packageName": "<string>",
"placements": [
{
"date": "2023-11-07T05:31:56Z",
"postType": "<string>",
"platform": "<string>"
}
],
"comment": "<string>"
},
"stats": {
"viewCount": 123,
"likeCount": 123,
"commentCount": 123,
"shareCount": 123,
"contentUrl": "<string>",
"contentTitle": "<string>",
"platform": "<string>"
}
}
],
"pagination": {
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": {
"code": "INVALID_QUERY_PARAMETER",
"message": "Invalid query parameters",
"details": [
{
"field": "limit",
"message": "Number must be less than or equal to 250"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Invalid or expired API key"
}
}{
"error": {
"code": "MISSING_SCOPE",
"message": "API key missing required scope: write:conversations"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Conversation not found"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "This API key is over its rate limit. Wait for Retry-After before sending more.",
"details": {
"limit": 2,
"windowSeconds": 1
}
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "API key verification is temporarily unavailable, retry shortly"
}
}Conversations
List conversation messages
Returns the typed conversation timeline newest first. Reading messages does not mark the conversation as read.
GET
/
conversations
/
{conversationId}
/
messages
List conversation messages
curl --request GET \
--url https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://workspace.passionfroot.me/api/v1/conversations/{conversationId}/messages"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "<string>",
"type": "<string>",
"actor": "creator",
"collaborationId": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"text": "<string>",
"comment": "<string>",
"sender": {
"id": "<string>",
"name": "<string>",
"email": "[email protected]"
},
"attachments": [
{
"fileName": "<string>",
"fileSize": 123,
"mimeType": "<string>",
"downloadUrl": "<string>"
}
],
"proposal": {
"proposalId": "<string>",
"collaborationId": "<string>",
"requestId": "<string>",
"status": "offer_pending",
"createdBy": "creator",
"priceCents": 123,
"currency": "<string>",
"packageName": "<string>",
"placements": [
{
"date": "2023-11-07T05:31:56Z",
"postType": "<string>",
"platform": "<string>"
}
],
"comment": "<string>"
},
"stats": {
"viewCount": 123,
"likeCount": 123,
"commentCount": 123,
"shareCount": 123,
"contentUrl": "<string>",
"contentTitle": "<string>",
"platform": "<string>"
}
}
],
"pagination": {
"hasMore": true,
"nextCursor": "<string>"
}
}{
"error": {
"code": "INVALID_QUERY_PARAMETER",
"message": "Invalid query parameters",
"details": [
{
"field": "limit",
"message": "Number must be less than or equal to 250"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Invalid or expired API key"
}
}{
"error": {
"code": "MISSING_SCOPE",
"message": "API key missing required scope: write:conversations"
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Conversation not found"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "This API key is over its rate limit. Wait for Retry-After before sending more.",
"details": {
"limit": 2,
"windowSeconds": 1
}
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "API key verification is temporarily unavailable, retry shortly"
}
}Authorizations
Create an API key from Settings → AI agents & API in your Partner workspace.
Path Parameters
Query Parameters
Include messages created on or after this date or timestamp.
Required range:
1 <= x <= 250Opaque cursor returned by the previous page.

