Common Room Contacts API
The Contacts API from Common Room — 6 operation(s) for contacts.
The Contacts API from Common Room — 6 operation(s) for contacts.
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-contacts-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 Contacts 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: Contacts
paths:
/source/{destinationSourceId}/user:
post:
description: 'Adds a new user into the destination source, or updates existing user previously added via API with the same ID
'
summary: Add or Edit User
tags:
- Contacts
operationId: addUpdateUserToSource
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/ApiUser'
responses:
'202':
description: OK - User 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'
/members/customFields:
get:
description: 'Gets all contact custom fields for a room
'
summary: Gets all contact custom fields for a room
tags:
- Contacts
parameters:
- in: query
name: destinationSourceId
schema:
type: string
description: If a value is provided provided, the API will only return custom fields that can be written to by the specified destination source
required: false
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
required:
- id
- name
- type
- multivalue
properties:
id:
type: number
description: Custom field ID
example: 12345
name:
type: string
description: Custom field name
example: Preferred programming language
type:
type: string
description: Custom field type
example: enum
multivalue:
type: boolean
description: Whether the custom field accepts multiple assigned values
example: false
values:
type: array
description: Array of acceptable values if the custom field type is an `enum`.
items:
type: string
example: Python
/user/{email}:
summary: Represents a Contact
description: 'Represents a Contact associated with an email address within the room
identified by the authentication scheme.
'
parameters:
- name: email
schema:
type: string
format: email
example: contact@example.commonroom.io
in: path
required: true
get:
summary: Get Contact by E-Mail
deprecated: true
description: A Contact's profile based on an email address.
tags:
- Contacts
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:
$ref: '#/components/schemas/CommunityMember'
'404':
description: Not Found
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/Status'
'429':
$ref: '#/components/responses/RateLimited'
delete:
summary: Anonymize Contact
description: 'Request removal of all personally identifiable information (PII) for the
Contact associated by this email address.
This does not immediately anonymize the contact. The anonymization
is queued and will happen at a future time within 15 days.
'
tags:
- Contacts
responses:
'200':
description: OK
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
content:
text/plain:
schema:
type: string
application/json:
schema:
$ref: '#../'
example:
status: success
'404':
description: Not Found
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/Status'
'429':
$ref: '#/components/responses/RateLimited'
/members:
parameters:
- in: query
name: twitter
schema:
type: string
example: twitterHandle
- in: query
name: email
schema:
type: string
example: email@domain.com
- in: query
name: github
schema:
type: string
example: githubHandle
- in: query
name: linkedin
schema:
type: string
example: in/username
get:
summary: Get Contact By E-Mail or Socials
deprecated: true
tags:
- Contacts
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:
fullName:
type: string
example: Greg
activities_count:
type: number
avatar:
type: string
description: Avatar URL string
bio:
type: string
organization:
type: string
title:
type: string
first_seen:
type: string
description: Date when contact appeared in your room in ISO 8601 format
last_active:
type: string
description: Date of the contact's last activity in ISO 8601 format
location:
type: object
member_tags:
type: array
segments:
type: array
items:
type: object
properties:
id:
type: number
name:
type: string
url:
type: string
twitter:
type: string
github:
type: string
linkedin:
type: string
discord:
type: string
youtube:
type: string
common_room_member_url:
type: string
custom_fields:
type: array
items:
type: object
properties:
name:
type: string
type:
type: string
description: enum, string, date, int, url, boolean
example: boolean
value:
description: Value of custom field
example: true
'400':
description: Parameter Error
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
'404':
description: 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'
/contacts/{id}:
get:
summary: Get a contact by ID
description: Retrieve a specific contact by their unique identifier.
tags:
- Contacts
parameters:
- name: id
in: path
required: true
schema:
type: string
description: The prefixed contact ID (format `c_<number>`)
- name: cols
in: query
required: false
schema:
type: string
description: 'Comma-separated list of additional columns to include in the response.
Valid values: `activateMessage`, `avatarUrl`, `fullName`, `location`, `primaryEmail`,
`phoneNumbers`, `title`, `companyName`, `companyWebsite`, `connectedCustomObjects`,
`profiles`, `jobHistory`, `leadScores`, `recentActivities`, `recentWebPages`,
`recentWebVisitsNumber`, `segments`, `sparkSummary`, `recentSparkSummaries`, `tags`,
`url`. Use `cf_*` to include all custom fields, or `cf_<id>` for a specific one.
'
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/ContactResponse'
'400':
description: Bad Request (e.g. invalid contact 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: Contact not found
content:
application/json:
schema:
$ref: '#/components/schemas/ApiV2ErrorResponse'
'429':
$ref: '#/components/responses/RateLimited'
/contacts:
get:
summary: List contacts
description: Retrieve a list of contacts with pagination support.
tags:
- Contacts
parameters:
- name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 50
description: The maximum number of contacts 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
default: id
description: 'Field to sort results by. One of: `id`, `latest_activity`, `name`,
a lead-score ID (format `ls_<number>`), or a custom-field ID (format `cf_<number>`).
'
- 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: `activateMessage`, `avatarUrl`, `fullName`, `location`,
`primaryEmail`, `phoneNumbers`, `title`, `companyName`, `companyWebsite`,
`connectedCustomObjects`, `profiles`, `jobHistory`, `leadScores`, `recentActivities`,
`recentWebPages`, `recentWebVisitsNumber`, `segments`, `sparkSummary`,
`recentSparkSummaries`, `tags`, `url`. Use `cf_*` to include all custom fields, or
`cf_<id>` for a specific one. The meta column `recordCount` can be requested to
return the total number of matching contacts in `meta.recordCount`.
'
- name: organizationId
in: query
required: false
schema:
type: string
description: Filter contacts by prefixed organization ID (format `o_<number>`)
- name: segmentId
in: query
required: false
schema:
type: string
description: Filter contacts by segment ID (e.g. s_123456)
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/ContactList'
'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'
components:
schemas:
ApiFieldValue:
description: A typed custom-field value. The `type` discriminator indicates the value's runtime type.
oneOf:
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- string
value:
type: string
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- url
value:
type: string
format: uri
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- int
value:
type: integer
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- number
value:
type: number
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- date
value:
type: string
format: date-time
- type: object
required:
- type
- value
properties:
type:
type: string
enum:
- boolean
value:
type: boolean
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
ContactList:
type: object
required:
- success
- data
- meta
properties:
success:
type: boolean
enum:
- true
data:
type: array
items:
$ref: '#/components/schemas/Contact'
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.
ApiLocation:
type: object
description: A best-effort location, with each component populated when known.
properties:
city:
type: string
description: City name
region:
type: string
description: State, province, or region name
country:
type: string
description: Country name
CommunityMember:
CommunityMember:
type: object
properties:
id:
type: integer
example: 147920
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
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
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
Contact:
type: object
required:
- id
- name
properties:
id:
type: string
description: Prefixed contact ID (format `c_<number>`)
name:
type: string
description: The contact's display name
avatarUrl:
type:
- string
- 'null'
format: uri
fullName:
type:
- string
- 'null'
location:
allOf:
- $ref: '#/components/schemas/ApiLocation'
primaryEmail:
type:
- string
- 'null'
phoneNumbers:
type: array
items:
type: object
required:
- type
- value
properties:
type:
type: string
value:
type: string
title:
type:
- string
- 'null'
companyName:
type:
- string
- 'null'
companyWebsite:
type:
- string
- 'null'
connectedCustomObjects:
type: array
items:
type: object
required:
- id
- name
- objectType
properties:
id:
type: string
description: Prefixed custom object ID (format `co_<number>`)
name:
type: string
objectType:
type: string
customFields:
type: object
description: Map of custom-field ID (format `cf_<number>`) to its typed value.
additionalProperties:
$ref: '#/components/schemas/ApiFieldValue'
profiles:
type: array
items:
type: object
required:
- type
- value
properties:
type:
type: string
value:
type: string
jobHistory:
type: array
items:
type: object
required:
- company
- title
- startDate
- endDate
properties:
company:
type: string
title:
type:
- string
- 'null'
startDate:
type: string
endDate:
type:
- string
- 'null'
leadScores:
type: array
items:
$ref: '#/components/schemas/ApiLeadScore'
segments:
type: array
items:
type: object
required:
- id
- name
properties:
id:
type: string
description: Prefixed segment ID (format `s_<number>`)
name:
type: string
recentWebPages:
type: array
items:
type: object
required:
- url
- numVisits
properties:
url:
type: string
numVisits:
type: integer
recentWebVisitsNumber:
type: integer
recentActivities:
type: array
items:
$ref: '#/components/schemas/ApiActivity'
activateMessage:
type:
- object
- 'null'
required:
- title
- message
properties:
title:
type: string
message:
type:
- string
- 'null'
sparkSummary:
type:
- string
- 'null'
recentSparkSummaries:
type: array
items:
type: string
tags:
type: array
description: Prefixed label IDs (format `l_<number>`)
items:
type: string
url:
type: string
format: uri
description: Common Room URL for this contact
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
# --- truncated at 32 KB (37 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/common-room/refs/heads/main/openapi/common-room-contacts-api-openapi.yml