Common Room Activities API
The Activities API from Common Room — 7 operation(s) for activities.
The Activities API from Common Room — 7 operation(s) for activities.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/common-room-activities-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Common Room Core Activities API
version: 1.0.0
description: "Common Room Core REST APIs for getting data in to Common Room.\n<br/><br/>\nFor SCIM APIs <a href=\"./scim.html\">see the SCIM documentation</a>.\n<br/><br/>\nFor New, V2 APIs <a href=\"./api-v2.html\">see the V2 API documentation</a>.\n<br/><br/>\nTo use the Common Room API, or get started with the Common Room Zapier integration, you will need to create an API token.\nTo create an API token:\n<ol>\n <li>Navigate to Setting | API tokens\n <li>Create a “New Token\"\n</ol>\n\n# Authentication\n\n<!-- ReDoc-Inject: <security-definitions> -->"
x-logo:
url: /common-room-api-logo.svg
servers:
- url: https://api.commonroom.io/community/v1
description: Common Room Core API v1
tags:
- name: Activities
paths:
/source/{destinationSourceId}/activity:
post:
description: 'Adds new activity into the destination source, or updates existing activity previously added via API with the same activity ID and activity type
'
summary: Add or Edit Activity
tags:
- Activities
operationId: addUpdateActivityToSource
parameters:
- in: path
name: destinationSourceId
schema:
type: integer
required: true
description: The Destination Source ID of the created API signal. See https://www.commonroom.io/docs/signals/custom-integrations/zapier-api/#create-an-api-signal for details.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApiActivity'
responses:
'202':
description: OK - Activity info accepted and will be processed
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
'400':
$ref: '#/components/responses/InvalidRequest'
'404':
description: Destination Source Not Found
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
'429':
$ref: '#/components/responses/RateLimited'
/activityTypes:
get:
description: 'Gets all activity types
'
summary: Get Activity Types
tags:
- Activities
operationId: getActivityTypes
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
example: started_training
displayName:
type: string
example: Started training
'429':
$ref: '#/components/responses/RateLimited'
/activities/{id}:
get:
summary: Get an activity by ID
description: Retrieve a specific activity by its unique identifier.
tags:
- Activities
parameters:
- name: id
in: path
required: true
schema:
type: string
description: The prefixed activity ID (format `a_<number>`)
- name: cols
in: query
required: false
schema:
type: string
description: 'Comma-separated list of additional columns to include in the response.
Valid values: `contactId`, `content`, `isUserInitiated`, `participantCount`,
`providerId`, `providerName`, `replyCount`, `sentiment`, `subSourceNames`,
`url`.
'
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
$ref: '#/components/schemas/ActivityResponse'
'400':
description: Bad Request (e.g. invalid activity ID or invalid parameters)
content:
application/json:
schema:
$ref: '#/components/schemas/ApiV2ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'404':
description: Activity not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiV2ErrorResponse'
'429':
$ref: '#/components/responses/RateLimited'
/activities:
get:
summary: List activities
description: Retrieve a list of activities with pagination support.
tags:
- Activities
parameters:
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 50
description: The maximum number of activities to return per page
- name: cursor
in: query
required: false
schema:
type: string
description: Pagination cursor from a previous response
- name: sort
in: query
required: false
schema:
type: string
enum:
- id
- activityTime
default: activityTime
description: Field to sort results by.
- name: direction
in: query
required: false
schema:
type: string
enum:
- asc
- desc
default: asc
description: Sort direction
- name: cols
in: query
required: false
schema:
type: string
description: 'Comma-separated list of additional columns to include in the response.
Valid column values: `contactId`, `content`, `isUserInitiated`,
`participantCount`, `providerId`, `providerName`, `replyCount`, `sentiment`,
`subSourceNames`, `url`. The meta column `recordCount` can be
requested to return the total number of matching activities in
`meta.recordCount`.
'
- name: contactId
in: query
required: false
schema:
type: string
description: Filter activities by prefixed contact ID (format `c_<number>`)
- name: organizationId
in: query
required: false
schema:
type: string
description: Filter activities by prefixed organization ID (format `o_<number>`)
- name: startDate
in: query
required: false
schema:
type: string
format: date-time
description: Only return activities occurring at or after this ISO-8601 datetime
- name: endDate
in: query
required: false
schema:
type: string
format: date-time
description: Only return activities occurring at or before this ISO-8601 datetime
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
$ref: '#/components/schemas/ActivityList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ApiV2ErrorResponse'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'429':
$ref: '#/components/responses/RateLimited'
/activity-types:
get:
summary: List activity types
description: 'List all activity type identifiers supported by Common Room, along with
their human-readable display names. Use the `id` as the `type` value
returned by `/activities`.
'
tags:
- Activities
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
$ref: '#/components/schemas/ActivityTypeList'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'429':
$ref: '#/components/responses/RateLimited'
/activity-categories:
get:
summary: List activity categories
description: List all activity category labels for the community.
tags:
- Activities
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
$ref: '#/components/schemas/ActivityCategoryList'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'429':
$ref: '#/components/responses/RateLimited'
/activity-sentiment:
get:
summary: List activity sentiment labels
description: List all activity sentiment classifications for the community.
tags:
- Activities
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
$ref: '#/components/schemas/ActivitySentimentList'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Status'
'429':
$ref: '#/components/responses/RateLimited'
components:
schemas:
ApiActivityType:
type: object
required:
- id
- displayName
properties:
id:
type: string
description: Activity type identifier (e.g. `tweet`, `pr_comment`)
displayName:
type: string
description: Human-readable display name for the activity type
ApiTagAssignmentByName:
type: object
properties:
type:
type: string
enum:
- name
name:
description: 'Name of the tag to assign.
This will assign an existing label if a matching one is found by name, otherwise a new label will be created and assigned.
'
type: string
required:
- type
- name
ApiActivitySentiment:
type: object
required:
- id
- name
properties:
id:
type: string
description: Prefixed label ID (format `l_<number>`)
name:
type: string
description: Display name for the sentiment (e.g. positive, negative, neutral)
ApiTagAssignmentById:
type: object
properties:
type:
type: string
enum:
- id
id:
description: ID of the tag to assign, taken from the tag API
type: string
required:
- type
- id
ApiTagAssignment:
type: object
description: Optional List of tags to assign
oneOf:
- $ref: '#/components/schemas/ApiTagAssignmentById'
- $ref: '#/components/schemas/ApiTagAssignmentByName'
discriminator:
propertyName: type
mapping:
id: '#/components/schemas/ApiTagAssignmentById'
name: '#/components/schemas/ApiTagAssignmentByName'
ApiActivity:
type: object
description: Information about an activity that occurred
properties:
id:
description: Unique identifier for the activity within this source. This ID must be unique for each individual activity, and should be generated by the third party system you are pulling data from (this ID does _not_ come from Common Room). Used to deduplicate and keep the latest values for a given activity when combined with the activityType.
type: string
activityType:
description: Type of activity being added or edited. Check /activityTypes route for accepted values. Used to deduplicate and keep the latest values for a given activity when combined with the id.
type: string
user:
$ref: '#/components/schemas/ApiUser'
activityTitle:
description: An optional title to use when rendering the activity. Useful for things like a post title, merge request title, etc.
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/TextContent'
discriminator:
propertyName: type
mapping:
text: '#/components/schemas/TextContent'
content:
description: Optional content to display when rendering the activity, used to hold a message which was posted or information about what occurred.
type:
- object
- 'null'
oneOf:
- $ref: '#/components/schemas/TextContent'
- $ref: '#/components/schemas/MarkdownContent'
discriminator:
propertyName: type
mapping:
text: '#/components/schemas/TextContent'
markdown: '#/components/schemas/MarkdownContent'
timestamp:
description: Time the activity occurred, in standard ISO 8601 format (YYYY-MM-DDThh:mm:ss.sssZ). Current UTC time is used if not supplied
type: string
format: date-time
url:
description: URL pointing to the activity on a third party source, allows linking from Common Room to the source activity
type:
- string
- 'null'
tags:
description: Optional list of activity tags to assign to this activity
type: array
items:
$ref: '#/components/schemas/ApiTagAssignment'
parentActivity:
description: Optional field which allows for "conversational threading", structuring activities as nested, associated with or in reply to another activity.
type:
- object
- 'null'
properties:
id:
type: string
description: Unique identifier of another activity which should be treated as a conversational "parent" of this activity.
activityType:
type: string
description: Activity type of the parent activity
required:
- id
- activityType
subSource:
description: Optional "sub source" the activity took place in. This allows further sub-dividing the sources data into third-party concepts like a slack channel, github repository or meetup group. Common examples include a slack channel name, meetup group hosting an event, a github repo an issue was created in.
type:
- object
- 'null'
properties:
type:
type: string
enum:
- name
name:
type: string
description: Name of the sub source
example: slack-channel-1
required:
- type
- name
required:
- id
- activityType
- user
ActivityTypeList:
type: object
required:
- success
- data
properties:
success:
type: boolean
enum:
- true
data:
type: array
items:
$ref: '#/components/schemas/ApiActivityType'
ApiV2Error:
type: object
required:
- code
- message
properties:
code:
type: string
description: A machine-readable error code identifying the failure.
enum:
- invalid_parameters
- invalid_organization_id
- org_not_found
- invalid_contact_id
- contact_not_found
- invalid_object_id
- object_not_found
- invalid_object_type_id
- object_type_not_found
- invalid_segment_id
- segment_not_found
- invalid_activity_id
- activity_not_found
- conflict
- internal_server_error
- invalid_custom_field_id
- custom_field_not_found
- invalid_prospector_contact_id
- prospector_contact_not_found
- invalid_prospector_company_id
- prospector_company_not_found
message:
type: string
description: A human-readable description of the error.
ApiUser:
type: object
description: Information about a user. Provide as many fields as possible to enable better matching and merging into a single Common Room profile.
properties:
id:
description: Unique identifier for the user within this source (identifier unrelated to Common Room). This ID must be unique for each individual user, and should be generated by the third party system you are pulling data from (this ID does _not_ come from Common Room). Used as the primary key for this user within this source, to group all the user's activity together.
type: string
fullName:
description: The full name of the user.
type:
- string
- 'null'
firstName:
description: The first name of the user. Used if no full name given.
type:
- string
- 'null'
lastName:
description: The last name of the user. Used if no full name given.
type:
- string
- 'null'
username:
description: The username the user.
type:
- string
- 'null'
avatarUrl:
description: The url for the users avatar.
type:
- string
- 'null'
bio:
description: The biography for the user, to be used in the contact's "About" section.
type:
- string
- 'null'
email:
description: The email for the user, used to help enrich details about the person.
type:
- string
- 'null'
format: email
linkedin:
description: Information about the users LinkedIn account
type:
- object
- 'null'
properties:
type:
type: string
enum:
- handle
value:
type: string
description: Parsable value which includes the LinkedIn handle.
example: in/person
required:
- type
- value
github:
description: Information about the users Github account
type:
- object
- 'null'
properties:
type:
type: string
enum:
- handle
value:
type: string
description: Parsable value which includes their github handle, eg "Person" from https://github.com/Person
example: Person
required:
- type
- value
twitter:
description: Information about the users Twitter account
type:
- object
- 'null'
properties:
type:
type: string
enum:
- handle
value:
type: string
description: Parsable value which includes their twitter handle, eg @Person or Person
example: '@Person'
required:
- type
- value
discord:
description: Information about the users Discord account, taken from the form username#discriminator
type:
- object
- 'null'
properties:
type:
type: string
enum:
- username
username:
type: string
example: person
discriminator:
schema:
anyOf:
- type: string
- type: number
example: 1234
required:
- username
- discriminator
externalProfiles:
description: An optional list of known external profiles.
type:
- array
- 'null'
items:
type: object
properties:
url:
type: string
description: The url of the external profile referenced
name:
type: string
description: The name to use when rendering the external profile url
required:
- url
roleAtCompany:
description: The users role at their company, such as Engineering, Marketing, Sales
type:
- string
- 'null'
example: Engineering
titleAtCompany:
description: The users title at their company
type:
- string
- 'null'
companyName:
description: The name of the users company
type:
- string
- 'null'
example: Common Room
companyDomain:
description: The web domain of the users company
type:
- string
- 'null'
example: commonroom.io
country:
description: The country the user resides in
type:
- string
- 'null'
city:
description: The city the user resides in
type:
- string
- 'null'
region:
description: The state, prefecture or region the user resides in, such as Washington, New York, Ontario, New South Whales
type:
- string
- 'null'
example: Washington
rawLocation:
description: Loose description of a location to be interpreted, such as 'Seattle, WA', USA, Kyiv, Ukraine, Hong Kong
type:
- string
- 'null'
example: Seattle, WA
tags:
description: Optional list of contact tags to assign to this user
type: array
items:
$ref: '#/components/schemas/ApiTagAssignment'
customFields:
description: Optional list of custom fields to update for this user
type: array
items:
$ref: '#/components/schemas/ApiCustomFields'
required:
- id
TextContent:
type: object
properties:
type:
type: string
enum:
- text
value:
type: string
description: Plain text content of the activity
required:
- type
- value
ActivitySentimentList:
type: object
required:
- success
- data
properties:
success:
type: boolean
enum:
- true
data:
type: array
items:
$ref: '#/components/schemas/ApiActivitySentiment'
ActivityCategoryList:
type: object
required:
- success
- data
properties:
success:
type: boolean
enum:
- true
data:
type: array
items:
$ref: '#/components/schemas/ApiActivityCategory'
ActivityResponse:
type: object
required:
- success
- data
properties:
success:
type: boolean
enum:
- true
data:
$ref: '#/components/schemas/ApiActivity_2'
ApiActivity_2:
type: object
required:
- id
- type
- activityTime
properties:
id:
type: string
description: Prefixed activity ID (format `a_<number>`)
type:
type: string
description: Activity type identifier (e.g. `tweet`, `pr_comment`)
activityTime:
type: string
format: date-time
description: When the activity occurred
contactId:
type: string
description: Prefixed contact ID (format `c_<number>`)
content:
type:
- string
- 'null'
isUserInitiated:
type: boolean
participantCount:
type: integer
providerId:
type: string
description: Prefixed signal source ID (format `sig_<number>`)
providerName:
type:
- string
- 'null'
replyCount:
type: integer
sentiment:
type:
- string
- 'null'
subSourceNames:
type: array
items:
type: string
url:
type: string
format: uri
ApiCustomFields:
type: object
description: Optional list of custom fields to update
properties:
id:
description: ID of the custom field to update which you can retrieve using the /members/customFields endpoint.
type: number
value:
type: object
description: 'The value of the custom field. Important: Omitting this field will clear the custom field value and cannot be undone.'
properties:
type:
type: string
description: The defined type of the custom field
enum:
- enum
- string
- date
- int
- number
- url
- boolean
example: boolean
value:
description: The updated value of the custom field.
example: true
oneOf:
- type: string
- type: number
- type: url
- type: date
description: Only supports ISO 8601 date format (YYYY-MM-DD).
- type: boolean
- type: array
items:
oneOf:
- type: string
description: Only applicable for multivalue string custom fields.
- type: number
description: Only applicable for multi-value number custom fields.
- type: date
description: Only applicable for multivalue date custom fields.
- type: url
description: Only applicable for multivalue URL custom fields.
- type: boolean
description: Only applicable for multivalue boolean custom fields.
required:
- type
- value
required:
- id
MarkdownContent:
type: object
properties:
type:
type: string
enum:
- markdown
value:
type: string
description: Markdown content of the activity
required:
- type
- value
ApiV2ErrorResponse:
type: object
required:
- success
- error
properties:
success:
type: boolean
enum:
- false
error:
$ref: '#/components/schemas/ApiV2Error'
ApiActivityCategory:
type: object
required:
- id
- name
- value
properties:
id:
type: string
description: Prefixed label ID (format `l_<number>`)
name:
type: string
description: Display name for the category
value:
type: string
description: Machine-readable category value
ActivityList:
type: object
required:
- success
- data
- meta
properties:
success:
type: boolean
enum:
- true
data:
type: array
items:
$ref: '#/components/schemas/ApiActivity_2'
meta:
type: object
required:
- nextCursor
properties:
nextCursor:
type:
- string
- 'null'
description: Cursor for pagination; pass as the `cursor` query parameter to fetch the next page.
recordCount:
type: integer
description: Total number of records matching the query. Only returned when `cols=recordCount` is requested.
Status:
type: object
properties:
status:
type: string
enum:
- ok
- failure
- not-found
example: success
reason:
type: string
errors:
type: array
items:
type: string
required:
- status
example:
status: not created
errors:
- name is missing
responses:
InvalidRequest:
description: Invalid Request
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
application/json:
schema:
type: object
properties:
reason:
type: string
description: A reason of `invalid-request-body` indicates that the request body did not match the schema required by our API docs. Please double-check that your request body matches the schema above, and contact us for help if you continue to experience issues.
docs:
type: string
description: A link to this API documentation
RateLimited:
description: Rate Limited
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
description: The datetime in epoch seconds when the interval resets
schema:
type: integer
Retry-After:
description: The UTC datetime when the interval resets
schema:
type: string
format: date-time
content:
application/json:
schema:
type: object
properties:
reason:
type: string
rateLimit:
type: object
description: A summary of the rate limit encountered, additional information is available in the headers.
properties:
intervalLimit:
type: number
description: The total amount of requests permitted within the interval
intervalRemaining:
type: number
description: The amount of requests remaining within the interval
intervalResetSeconds:
type: number
description: The amount of time in seconds representing a single interval
waitMs:
type: number
description: The amount of time to wait until the next interval
headers:
X-RateLimit-Limit:
description: The total amount of requests permitted within the interval
schema:
type: integer
X-RateLimit-Remaining:
description: The total amount of requests remaining within the interval
schema:
type: integer
securitySchemes:
BearerAuth:
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/common-room/refs/heads/main/openapi/common-room-activities-api-openapi.yml