Inside Projects, Tickets & Resources

File transfers are most useful when they're tied back to the work they belong to — a project deliverable, a ticket attachment, a resource update. ClientCove's transfer system has two layers: a dedicated in-project workflow that's a couple clicks from start to finish, and a general "related record" linking system that works from the main transfers dashboard.

A transfer floating in the dashboard tells you "we sent / received some files for some recipient at some date". A transfer linked to a project tells you "these are the deliverables we sent for the Q2 brand refresh project on April 14, and the client downloaded them on April 15".

Linking transfers makes them part of the work history:

  • The project workspace shows transfers in its Files tab
  • The activity log records the transfer event alongside other project activity
  • Anyone reviewing the project later sees the file movement without leaving the project

For long-running engagements with many file exchanges, linking is the difference between a coherent record and a forensic puzzle.

The most useful transfer integration is the project upload link — a one-click feature inside any project's Files tab that creates a permanent inbound transfer bound to the project.

What makes it special:

  • One click to create — no modal, no fields to fill
  • Permanent — the link doesn't expire (configured as never)
  • Project-bound — every file that arrives is automatically associated with the project
  • Self-managing — once created, the same Files tab shows the link's URL, current files, and lets you upload too

The pattern is: open a project, click Create Upload Link, copy the URL, send it to your client. From then on, every time they need to send you files for that project, they use the same link. No new transfer needed each time.

  1. Open the project workspace
  2. Switch to the Files tab
  3. In the Files tab header, look for the green Create Upload Link button (only appears when no active inbound transfer exists for this project, and File Transfers is enabled)
  4. Click it
  5. Behind the scenes:
    • ClientCove POSTs to /wp-json/clientcove/v1/transfers
    • Creates an inbound transfer with title Add files to <project name> project
    • Sets expiration_preset: never
    • Sets related_post_type: project, related_post_id: <this project's ID>
  6. The page reloads
  7. The button disappears, replaced by the active upload link UI

The whole operation takes one second. You don't have to fill in recipient details, expirations, or limits — defaults are tuned for the common case ("we want to receive client files into this project, indefinitely").

Once an upload link exists, the Files tab header shows an Upload Link dropdown button (green, with cloud-upload icon). Click it to reveal:

  • Header: Public Upload Link
  • Helper text: "Share this link so others can upload files to this project."
  • The full URL in a read-only input
  • A Copy button (clipboard icon)
  • An Open in New Tab button (to test the link yourself)

Copy the URL and send it to your client however you communicate (email, Slack, embedded in your project status update). They open it on a public page — no login needed — and upload files directly to your cloud storage.

The link works as long as the inbound transfer is active. You can cancel/delete it from the main Transfers dashboard if you ever need to.

The Transfers In Section

When files start arriving via the upload link, a new Transfers In card appears at the top of the project's Files tab.

The section shows:

Header

  • Transfers In title with cloud-upload icon
  • Download Group button (when files exist) — bulk-download all received files as ZIP
  • Upload Files button — lets you (the project team) also upload directly into the same inbound transfer
  • A hidden file input picker (triggered by Upload Files)

Upload progress area

While uploads are in flight, a progress bar appears with status text and percentage.

Files table

Columns:

  • Select-all checkbox + per-file checkboxes
  • Preview thumbnail
  • File-type icon (PDF, Word, Excel, image, ZIP)
  • Name (clickable to download, with extension shown)
  • Size
  • Uploaded date
  • Uploaded By (sender name from the transfer record, or "External Upload")
  • Per-file actions (Preview if previewable, Download)

Empty state

When no files have been received:

"No files received yet. Share the upload link to receive files."

The section disappears entirely if there's no active inbound transfer AND no files have been received historically.

Outbound Transfers from Project Files

The other direction — sending files OUT of a project — works through a different button.

In the project Files tab, when you select one or more files (checkbox on each row), a fixed Bulk Actions Toolbar slides in at the top-right with these actions:

  • Deselect All
  • Delete (admin/editor)
  • Download as ZIP
  • Create Transfer (when File Transfers is enabled)

Click Create Transfer to open the project-specific transfer modal. It's a two-step modal:

Step 1 — Configure

Pre-populated with:

  • The selected files (count + total size, expandable list)
  • Empty Title, Message, Recipient Name, Recipient Email
  • Default 1-week expiration
  • Optional password

Fill in the recipient details and click Create Transfer.

Step 2 — Success

  • Shareable link with copy-to-clipboard
  • Optional notification send (if recipient email was provided)

The created transfer is automatically related_post_type: project for this project, so it surfaces in the project's transfer history and the activity log.

The Active Transfers Dropdown

Outbound transfers created from the project also surface in a header dropdown.

When the project has any active outbound transfers, a blue Transfers button appears next to Download All in the Files header, with a count badge.

Click to reveal a dropdown listing each active transfer:

  • Title
  • File count
  • Expiration date (if set)
  • Copy link button (clipboard icon)
  • Open in new tab button

Useful when you sent something to a client a week ago and want to grab the link again to remind them.

Linking from the Main Transfers Dashboard

The in-project workflow is the convenient path. The general path — linking any transfer to any portal record — is in the main Transfers dashboard's create modals.

In both Send Files and Request Files modals, expand Advanced Options to find:

  • Related type dropdown — Project / Ticket / Resource
  • Related record dropdown — populated based on the selected type (and filtered to the chosen client if set)

Pick a type and a specific record. The transfer is created with related_post_type and related_post_id set, exactly as if it had been created from inside that record.

This path is useful when:

  • The transfer doesn't fit cleanly into any one record (so you create it from the dashboard, then link)
  • You want to link to a ticket or resource (which don't have first-class in-record UI yet)
  • You're creating multiple transfers for one record and the dashboard is faster than navigating into the record each time

Tickets & Resources Today

Honest status:

Record TypeLinking via dashboardFirst-class in-record UI
Project✓ (Advanced Options)✓ (Create Upload Link button + Transfers In + bulk Create Transfer)
Ticket✓ (Advanced Options)— (no dedicated transfer UI in the ticket workspace yet)
Resource✓ (Advanced Options)— (no dedicated transfer UI in the resource workspace yet)

For tickets and resources, the linking works under the hood — set related_post_type: ticket or resource in the dashboard, and the transfer is associated with that record at the database level. The Files tab on a project knows how to query and display its related transfers; the equivalent UI for tickets and resources hasn't been built yet.

If you want to send a transfer for a specific ticket today:

  1. Open the main Transfers dashboard
  2. Click Send Files
  3. Fill in the basics
  4. Open Advanced Options
  5. Pick Related: Ticket, then pick the specific ticket
  6. Send

The transfer record links to the ticket via related_post_id, even if no UI surfaces it in the ticket workspace today. Future portal updates can add the in-ticket UI without re-doing data linking.

How the Linking Works

For the technically curious or anyone customizing the portal:

Database schema

The wp_clientcove_transfers table stores related_post_type and related_post_id columns on every transfer record. They're nullable — most one-off transfers leave them empty.

Helper function

clientcove_get_transfers_for_post($post_type, $post_id, $status = '') returns all transfers linked to a given post. Used by the project Files tab to populate the Transfers In section and the Active Transfers dropdown.

REST API

The /wp-json/clientcove/v1/transfers endpoint accepts related_post_type and related_post_id parameters in the POST body when creating a transfer. The dashboard modals use this; the project's "Create Upload Link" button uses this; any custom integration can use this.

Audit log

Linked transfers don't currently fire activity log events on the linked record automatically (the project Files tab logs its own "Created upload link for project" event manually). Adding linked-record activity events is a customization layer your team can add via post-create hooks if you need it for tickets or resources.

Was this page helpful?