activity:query
Description: Retrieve a single activity by ID or import_id with its participations.
Request Schema
{
"payload": {
"type": "activity:query",
"id": 123
},
"signature": "payload_ed25519_hex_signature",
"source_public_key": "your_client_public_key"
}
Or using import_id:
{
"payload": {
"type": "activity:query",
"import_id": "ACT-001"
},
"signature": "payload_ed25519_hex_signature",
"source_public_key": "your_client_public_key"
}
Request Attributes
- See global request attributes
-
payload.id- Integer - The activity ID (optional ifimport_idis provided) -
payload.import_id- String - The activity’s import_id (optional ifidis provided)
At least one of id or import_id must be provided.
Authentication Behavior
This endpoint follows Pattern A: Full Account Access.
All authentication methods see the same data - no person filtering is applied.
Response Schema (Success)
{
"source_public_key": "community_public_key",
"source_site": {
"protocol": "https",
"fqdn": "arkipel.localhost:3000"
},
"created_at": "2025-03-18T10:30:00Z",
"signature": "8b6392d5550605bd6ccddf9c21ebec470de4b44e4b4deb746076e37ab61c5346e07e7c7c7cebb5bbee41cdd92a476bcd3f02373d146ec165b31c31fc31c9ce0d",
"payload": {
"type": "activity:query",
"resource": {
"id": 123,
"import_id": "ACT-001",
"title": "Community Meeting",
"body": "Agenda:\n- Budget review\n- Event planning\n- New members",
"intent": "event",
"status": "created",
"kind": "human",
"start_at": "2026-05-25T10:00:00Z",
"end_at": "2026-05-25T12:00:00Z",
"due_at": null,
"completed_at": null,
"created_at": "2026-05-21T13:00:00Z",
"updated_at": "2026-05-21T13:00:00Z",
"commentable": {
"type": "Person",
"id": 456,
"name": "John Doe",
"import_id": "P001"
},
"participations": [
{
"id": 1,
"status": "attending",
"attendee": {
"type": "Person",
"id": 456,
"name": "John Doe",
"import_id": "P001"
}
}
]
}
}
}
Response Attributes
-
payload.resource- Object - The requested activity:-
id- Integer - Unique identifier -
import_id- String or null - External reference ID -
title- String or null - Activity title -
body- String or null - Content as plain text -
intent- String - Activity type:event,note,task,transport,birthday,form, oremail -
status- String - Current status:wizard(draft) orcreated -
kind- String - Creator type:human,system, oremail -
start_at- ISO 8601 timestamp or null - Start time -
end_at- ISO 8601 timestamp or null - End time -
due_at- ISO 8601 timestamp or null - Due/reminder time -
completed_at- ISO 8601 timestamp or null - Completion time -
created_at- ISO 8601 timestamp - Creation time -
updated_at- ISO 8601 timestamp - Last update time -
commentable- Object or null - The subject this activity is about-
type- String - Class name (Person, Organization, Household) -
id- Integer - Subject ID -
name- String - Display name of the subject -
import_id- String or null - Subject’s import ID
-
-
participations- Array - List of attendees/participants (safe, no confidential fields)-
id- Integer - Participation ID -
status- String - Attendance status:unknown,attended,absent,attending,not_attending, ortentatively_attending -
attendee- Object or null - The attending entity-
type- String - Class name (Person, Organization, Household) -
id- Integer - Attendee ID -
name- String - Display name -
import_id- String or null - Attendee’s import ID
-
-
-
Error Responses
Activity Not Found
{
"source_public_key": "community_public_key",
"source_site": {
"protocol": "https",
"fqdn": "arkipel.localhost:3000"
},
"created_at": "2025-03-18T10:30:00Z",
"signature": "...",
"payload": {
"type": "activity:query"
},
"error": "Activity not found for id: 999999 or import_id: ",
"status": "not_found"
}
Bad Request
{
"payload": {
"type": "activity:query"
},
"error": "Error message",
"status": "bad_request"
}
Usage Notes
- This is an ephemeral query - no message is persisted to the database
- Soft-deleted activities return a “not_found” error
- Authentication can be via token, whitelist, or membership
- The activity is findable by either
idorimport_id— the first matching record is returned - Participations are returned with safe fields only (no confidential attributes like
price_cents,payment_status,secure_token,survey_submitted_at, ororder_*fields are exposed) - Use this endpoint to fetch full activity details after receiving activity IDs from feed:query or inbox:query
- For activity lists, use feed:query which returns lightweight activity references