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 if import_id is provided)
  • payload.import_id - String - The activity’s import_id (optional if id is 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, or email
    • status - String - Current status: wizard (draft) or created
    • kind - String - Creator type: human, system, or email
    • 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, or tentatively_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 id or import_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, or order_* 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

Back to top

Welcome to the Arkipel DevKit! This documentation will guide you through everything you need to build clients for Arkipel communities.

Contact: devkit@arkipel.co | Page URLs

Copyright © 2026 Arkipel. Distributed under an MIT license.