Skip to content

feat: add recordings API support for trash/archive/unarchive operations #85

@brigleb

Description

@brigleb

Summary

Add support for the Basecamp Recordings API to enable trash, archive, and unarchive operations across all resource types. This provides a unified way to manage the lifecycle of any Basecamp "recording" (todos, messages, documents, cards, comments, etc.).

API Support

The Basecamp API provides these recording operations:

# Trash a recording
PUT /buckets/{bucket_id}/recordings/{recording_id}/status/trashed.json

# Archive a recording  
PUT /buckets/{bucket_id}/recordings/{recording_id}/status/archived.json

# Unarchive/restore a recording
PUT /buckets/{bucket_id}/recordings/{recording_id}/status/active.json

All return 204 No Content on success.

Additionally, there's a query endpoint:

GET /projects/recordings.json?type=Todo&status=trashed

Supported types: Comment, Document, Kanban::Card, Message, Todo, Upload, etc.

Proposed CLI Interface

Generic Commands

# Trash any recording
bc4 trash 12345 --project 67890
bc4 trash https://3.basecamp.com/.../todos/12345

# Archive any recording
bc4 archive 12345 --project 67890
bc4 archive https://3.basecamp.com/.../messages/12345

# Restore/unarchive
bc4 restore 12345 --project 67890
bc4 unarchive https://3.basecamp.com/.../documents/12345

Resource-Specific Commands

# Todo-specific
bc4 todo trash 12345
bc4 todo archive 12345
bc4 todo restore 12345

# Message-specific
bc4 message trash 12345
bc4 message archive 12345

# Document-specific
bc4 document trash 12345
bc4 document archive 12345

List Trashed/Archived Items

bc4 recordings list --type Todo --status trashed
bc4 recordings list --type Message --status archived

Implementation Notes

  • The card archive operation already uses this API (internal/api/card.go:275)
  • Could add a generic RecordingOperations interface
  • Consider confirmation prompts for destructive operations
  • Trashed items are permanently deleted after 30 days

Priority

Medium - Enables proper resource lifecycle management across all types.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions