First-party app
CompanyCam

CompanyCam

Read and write CompanyCam projects, photos, videos, documents, checklists, tags, users and webhooks over the Core API v2.

stable Project ManagementDocuments & FilesProductivity

About

CompanyCam ships in the w6w first-party pack. It declares 62 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.companycam
Version
0.1.2
Author
w6w
Licence
MIT
Categories
Project Management · Documents & Files · Productivity

Overview

CompanyCam is a photo-documentation platform built for contractors, and this app brings a project’s whole record into a workflow: photos, videos, documents, comments and checklists, all filed under the project they belong to. List, create and update projects, attach a photo from a hosted URL or a document as a base64 file, add labels and tags, and manage who is assigned to or invited into a project.

Beyond projects, manage the company’s users and groups, and read or maintain the webhook subscriptions that notify your systems when something changes. A workflow can search for an existing project before creating a duplicate, and every list of photos or videos supports the cursor pagination CompanyCam’s API expects.

CompanyCam’s own documentation marks this API surface for depreciation in early 2027 with a successor API in development; this app targets the current, fully live surface.

Build with CompanyCam

Three routes to the same 62 actions. The Workflow tab is generated from CompanyCam's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

List All Checklists

checklist-list

List the company's checklists, sorted by last updated, optionally by completion.

List Checklist Templates

checklist-template-list

List the company's checklist templates, for use with Create Project Checklist.

Retrieve Company

company-get

Fetch the company this connection belongs to.

Create Group

group-create

Create a user group, optionally with members.

Delete Group

group-delete

Delete a group. Its members are not deleted.

Retrieve Group

group-get

Fetch one group by id, with its members.

List Groups

group-list

List the company's groups. Each carries its members as full user objects.

Update Group

group-update

Rename a group or replace its member list. Members are replaced, not appended.

Add Photo Comment

photo-comment-create

Post a comment on a photo, optionally credited to another user.

List Photo Comments

photo-comment-list

List the comments left on a photo.

Delete Photo

photo-delete

Delete a photo. There is no undelete.

Update Photo Description

photo-description-update

Replace a photo's description. Plain text, or HTML from the vendor's tag list.

Retrieve Photo

photo-get

Fetch one photo, including its processing status and its image variants.

List Photos

photo-list

List photos across the company, filtered by capture window, project, user, group or tag.

Add Photo Tags

photo-tag-add

Apply one or more tags to a photo by display value, creating any that are new.

List Photo Tags

photo-tag-list

List the tags applied to a photo.

Update Photo

photo-update

Set a photo's internal-only flag. This endpoint changes nothing else — use Update Photo Description for the text.

Archive Project

project-archive

Archive a project, keeping its photos and documents. Reversible with Restore.

List Assigned Users

project-assigned-user-list

List the users of this company assigned to a project.

Create Project Checklist

project-checklist-create

Create a checklist on a project from a checklist template.

Retrieve Project Checklist

project-checklist-get

Fetch one checklist on a project, with its sections, tasks and sub-tasks.

List Project Checklists

project-checklist-list

List a project's checklists in full, including sections, tasks and sub-tasks. Takes no pagination.

List Project Collaborators

project-collaborator-list

List the outside companies collaborating on a project.

Add Project Comment

project-comment-create

Post a comment on a project, optionally credited to another user.

List Project Comments

project-comment-list

List the comments left on a project.

Create Project

project-create

Create a project, optionally with an address, geofence and primary contact.

Delete Project

project-delete

Permanently delete a project and its photos, documents and comments. Prefer Archive Project unless deletion is really what is wanted.

Upload Project Document

project-document-create

Attach a document to a project. The file is sent as base64 text in JSON, with a 30 MB limit on the decoded file.

List Project Documents

project-document-list

List the documents attached to a project, with their download URLs and sizes.

Retrieve Project

project-get

Fetch a single project by id, including its notepad, contact and integrations.

Create Project Invitation

project-invitation-create

Mint a collaboration invite URL for a project. CompanyCam does not send it — the workflow delivers the link.

List Project Invitations

project-invitation-list

List a project's collaboration invitations. Each carries an invite_url that grants access.

Add Project Labels

project-label-add

Apply one or more labels to a project by display value, creating any that are new.

Delete Project Label

project-label-delete

Remove one label from a project by label id. The label itself is not deleted.

List Project Labels

project-label-list

List the labels applied to a project. Labels use the same Tag shape as photos.

List Projects

project-list

List projects, optionally filtered by name/address, status or modification time.

Update Project Notepad

project-notepad-update

Replace a project's notepad text. Read the project first to append rather than overwrite.

Add Photo to Project

project-photo-create

Add a photo to a project from a publicly reachable URL. CompanyCam fetches and processes it asynchronously.

List Project Photos

project-photo-list

List the photos captured at a project, with cursor pagination.

Restore Project

project-restore

Restore an archived project. Does not undo a deletion.

Update Project

project-update

Update a project's name, address, coordinates or geofence.

Assign User to Project

project-user-assign

Assign a user of this company to a project.

Remove Assigned User

project-user-remove

Remove a user's assignment from a project. Does not delete the user.

List Project Videos

project-video-list

List the videos captured at a project. Treat playback_url as valid only once status is processed.

Create Tag

tag-create

Create a tag by display value. The normalised value is derived server-side.

Delete Tag

tag-delete

Delete a tag, removing it from every photo and project that carries it.

Retrieve Tag

tag-get

Fetch one tag by id.

List All Tags

tag-list

List the company's tags. There is no server-side search on this endpoint.

Update Tag

tag-update

Rename a tag. The change applies everywhere the tag is used.

Create User

user-create

Add a user to the company. The role can only be set at creation.

Retrieve Current User

user-current-get

Fetch the user this connection acts as, which is who writes are credited to.

Delete User

user-delete

Remove a user from the company. Their photos and comments remain.

Retrieve User

user-get

Fetch one user by id.

List Users

user-list

List the company's users. The endpoint offers no filters, including by status.

Update User

user-update

Update a user's name, email, phone or password. The role cannot be changed.

Retrieve Video

video-get

Fetch one video. Poll until status is processed before using playback_url or format.

List Videos

video-list

List videos across the company. playback_url is only meaningful once status is processed.

Create Webhook

webhook-create

Subscribe a URL to CompanyCam events. Supply a token to make deliveries verifiable; the response never carries it back.

Delete Webhook

webhook-delete

Delete a webhook subscription. Disable it instead to pause deliveries reversibly.

Retrieve Webhook

webhook-get

Fetch one webhook. The signing token is removed before it is returned.

List Webhooks

webhook-list

List the company's webhooks. The signing token is removed from every row before it is returned.

Update Webhook

webhook-update

Change a webhook's URL, scopes, signing token or enabled flag. Scopes are replaced, not merged.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying CompanyCam's real ids.

{
  "manifestVersion": "2",
  "name": "companycam-example",
  "steps": [
    {
      "id": "group-create",
      "uses": {
        "app": "io.w6w.companycam",
        "action": "group-create",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "name": "<name>"
      }
    }
  ]
}

Here are some of the things you can do

  • Create Group

    perform
    group-create
  • List All Checklists

    search
    checklist-list
  • List Checklist Templates

    search
    checklist-template-list
  • Retrieve Company

    read
    company-get
  • Retrieve Group

    read
    group-get

+57 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for CompanyCam, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to CompanyCam. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "project-create",
  payload: {
    name: "<value>",
    // address: "<value>",
    // lat: "<value>",
    // lon: "<value>",
    // geofence: "<value>",
    // primaryContact: "<value>",
    // actAs: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action project-create --payload '{"name":"<value>"}'

Give an AI agent CompanyCam — without giving it CompanyCam's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.companycam#group-create",
    "input": {
      "name": "<name>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's CompanyCam connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

CompanyCam's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. CompanyCam itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

CompanyCam declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

CompanyCam platform status

Component status from status.companycam.com. Covers the API, Web App, Uploads & Processing, Search, Mobile App, Integrations and Notifications.

quota

API quota headroom

CompanyCam publishes no rate-limit or quota signal: no rate-limit response headers on the wire, none declared in the OpenAPI document, no documented limit or 429, and no usage-reporting endpoint.