VSCO Contacts API
The Contacts API from VSCO — 2 operation(s) for contacts.
The Contacts API from VSCO — 2 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/vsco-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: VSCO Workspace Brands Contacts API
termsOfService: https://terms-of-service.vsco.page/
description: This API is for interacting with a single Studio using <a href="https://workspace.vsco.co/settings/api" target="_blank">an API Key</a>.
contact:
name: VSCO Workspace Support
url: https://help.workspace.vsco.co/
email: workspace-support@vsco.co
version: v2.0.0
x-logo:
url: https://workspace.vsco.co/static/Images/Public/Logo.Black.vsco.svg
altText: VSCO Workspace
servers:
- url: https://tave.io/v2
description: Legacy Táve API production environment
- url: https://workspace.vsco.co/api/v2
description: Workspace API production environment
security:
- ApiKeyAuth: []
- BearerAuth: []
tags:
- name: Contacts
paths:
/address-book:
get:
summary: List contacts of a studio
operationId: listResourceAddressBook
x-entity: Contact
tags:
- Contacts
parameters:
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/includeHidden'
- $ref: '#/components/parameters/email'
- name: sortBy
in: query
description: Sort items in the collection by the given property.
schema:
title: Sort objects by properties
type: string
anyOf:
- title: id
enum:
- id
- id asc
- id desc
- title: modified
enum:
- modified
- modified asc
- modified desc
- title: created
enum:
- created
- created asc
- created desc
- title: name
enum:
- name
- name asc
- name desc
- title: kind
enum:
- kind
- kind asc
- kind desc
- title: accountBalance
enum:
- accountBalance
- accountBalance asc
- accountBalance desc
- title: anniversary
enum:
- anniversary
- anniversary asc
- anniversary desc
- title: anonymized
enum:
- anonymized
- anonymized asc
- anonymized desc
- title: bestDayToCall
enum:
- bestDayToCall
- bestDayToCall asc
- bestDayToCall desc
- title: bestTimeToCall
enum:
- bestTimeToCall
- bestTimeToCall asc
- bestTimeToCall desc
- title: cellPhone
enum:
- cellPhone
- cellPhone asc
- cellPhone desc
- title: companyName
enum:
- companyName
- companyName asc
- companyName desc
- title: contactPreference
enum:
- contactPreference
- contactPreference asc
- contactPreference desc
- title: creditBalance
enum:
- creditBalance
- creditBalance asc
- creditBalance desc
- title: email
enum:
- email
- email asc
- email desc
- title: fax
enum:
- fax
- fax asc
- fax desc
- title: firstName
enum:
- firstName
- firstName asc
- firstName desc
- title: gender
enum:
- gender
- gender asc
- gender desc
- title: homePhone
enum:
- homePhone
- homePhone asc
- homePhone desc
- title: jobTitle
enum:
- jobTitle
- jobTitle asc
- jobTitle desc
- title: lastName
enum:
- lastName
- lastName asc
- lastName desc
- title: maidenName
enum:
- maidenName
- maidenName asc
- maidenName desc
- title: previousClient
enum:
- previousClient
- previousClient asc
- previousClient desc
- title: privacyOptIn
enum:
- privacyOptIn
- privacyOptIn asc
- privacyOptIn desc
- title: requireStrictPrivacy
enum:
- requireStrictPrivacy
- requireStrictPrivacy asc
- requireStrictPrivacy desc
- title: salutation
enum:
- salutation
- salutation asc
- salutation desc
- title: schoolGradYear
enum:
- schoolGradYear
- schoolGradYear asc
- schoolGradYear desc
- title: schoolName
enum:
- schoolName
- schoolName asc
- schoolName desc
- title: sport
enum:
- sport
- sport asc
- sport desc
- title: teamName
enum:
- teamName
- teamName asc
- teamName desc
- title: teamPosition
enum:
- teamPosition
- teamPosition asc
- teamPosition desc
- title: workPhone
enum:
- workPhone
- workPhone asc
- workPhone desc
default: id
responses:
'200':
description: Address book list response.
content:
application/json:
schema:
$ref: '#/components/schemas/AddressBookCollection'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
post:
summary: Create an entry in the address book.
operationId: createResourceAddressBook
tags:
- Contacts
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Person'
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Location'
discriminator:
propertyName: kind
responses:
'201':
description: Address book creation response.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Person'
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Location'
discriminator:
propertyName: kind
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
/address-book/{id}:
get:
summary: Fetch a specific Address Book entity.
operationId: getResourceAddressBook
tags:
- Contacts
parameters:
- $ref: '#/components/parameters/idInPath'
responses:
'200':
description: Address book list response.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Person'
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Location'
discriminator:
propertyName: kind
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
put:
summary: Update a specific entry in the address book
operationId: updateResourceAddressBook
tags:
- Contacts
parameters:
- $ref: '#/components/parameters/idInPath'
requestBody:
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Person'
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Location'
discriminator:
propertyName: kind
responses:
'200':
description: Address book list response.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/Person'
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Location'
discriminator:
propertyName: kind
mapping:
person: ../schemas/entities/Person.yaml
company: ../schemas/entities/Company.yaml
location: ../schemas/entities/Location.yaml
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
delete:
summary: Delete an entry in the address book.
operationId: deleteResourceAddressBook
tags:
- Contacts
parameters:
- $ref: '#/components/parameters/idInPath'
responses:
'204':
$ref: '#/components/responses/deleteSuccess'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
components:
schemas:
Company:
allOf:
- title: Company
description: A company entity
type: object
properties:
kind:
type: string
enum:
- company
accountBalance:
allOf:
- readOnly: true
description: The account balance of this company.
- $ref: '#/components/schemas/MoneyAmount'
accountNumber:
type:
- string
- 'null'
maxLength: 50
brandId:
allOf:
- description: The default brand the company belongs to.
- $ref: '#/components/schemas/NullableId'
cellPhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
creditBalance:
allOf:
- readOnly: true
description: The credit amount associated with this company.
- $ref: '#/components/schemas/MoneyAmount'
fax:
$ref: '#/components/schemas/Event/properties/phoneNumber'
mailingAddress:
$ref: '#/components/schemas/Address'
name:
type: string
description: Company name.
maxLength: 255
phone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
primaryContactFirstName:
type:
- string
- 'null'
maxLength: 48
primaryContactLastName:
type:
- string
- 'null'
maxLength: 48
startingCost:
allOf:
- description: The cost of this person in software used prior to VSCO Workspace.
- $ref: '#/components/schemas/MoneyAmount'
startingRevenue:
allOf:
- description: The revenue from this person in software used prior to VSCO Workspace.
- $ref: '#/components/schemas/MoneyAmount'
tollFree:
$ref: '#/components/schemas/Event/properties/phoneNumber'
vendorRoleId:
description: 'This is a vendor and defines the default job role does this
contact have when added to a job.'
type:
- string
- 'null'
format: ulid
- $ref: '#/components/schemas/Contact'
Person:
allOf:
- title: Person
description: A person entity
type: object
properties:
kind:
type: string
enum:
- person
accountBalance:
allOf:
- readOnly: true
description: The account balance of this person.
- $ref: '#/components/schemas/MoneyAmount'
anniversary:
$ref: '#/components/schemas/NullableDate'
anonymized:
type: boolean
description: 'This person requested to be anonymized so personally identifiable
information has been anonymized.'
default: false
readOnly: true
bestDayToCall:
type:
- string
- 'null'
enum:
- weekdays
- weekends
- mondays
- tuesdays
- wednesdays
- thursdays
- fridays
- saturdays
- sundays
- null
bestTimeToCall:
type:
- string
- 'null'
enum:
- mornings
- afternoons
- evenings
- null
birthdate:
$ref: '#/components/schemas/NullableDate'
brandId:
allOf:
- description: The default brand the person belongs to.
- $ref: '#/components/schemas/NullableId'
cellPhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
companyName:
type:
- string
- 'null'
maxLength: 128
contactPreference:
type:
- string
- 'null'
enum:
- email
- cell-phone
- home-phone
- work-phone
- null
creditBalance:
allOf:
- readOnly: true
description: The credit amount associated with this contact.
- $ref: '#/components/schemas/MoneyAmount'
email:
type:
- string
- 'null'
format: email
fax:
$ref: '#/components/schemas/Event/properties/phoneNumber'
firstName:
type:
- string
- 'null'
maxLength: 48
gender:
type:
- string
- 'null'
enum:
- male
- female
- null
homePhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
jobTitle:
type:
- string
- 'null'
maxLength: 64
lastName:
type:
- string
- 'null'
maxLength: 48
maidenName:
type:
- string
- 'null'
maxLength: 48
mailingAddress:
$ref: '#/components/schemas/Address'
name:
type: string
description: This is used as the combination of firstName and lastName fields.
maxLength: 255
readOnly: true
previousClient:
type:
- boolean
- 'null'
privacyOptIn:
type:
- boolean
- 'null'
description: Contact has Opted-In to Marketing and Processing
default: false
requireStrictPrivacy:
type:
- boolean
- 'null'
description: Require Strict Privacy (e.g. subject to Europe's GDPR)
default: false
salutation:
type:
- string
- 'null'
enum:
- mr
- miss
- mrs
- ms
- dr
- null
schoolGradYear:
type:
- integer
- 'null'
minimum: 1900
maximum: 2100
schoolName:
type:
- string
- 'null'
maxLength: 255
sport:
type:
- string
- 'null'
maxLength: 255
startingCost:
allOf:
- description: The cost of this person in software used prior to VSCO Workspace.
- $ref: '#/components/schemas/MoneyAmount'
startingRevenue:
allOf:
- description: The revenue from this person in software used prior to VSCO Workspace.
- $ref: '#/components/schemas/MoneyAmount'
teamName:
type:
- string
- 'null'
maxLength: 255
teamPosition:
type:
- string
- 'null'
maxLength: 255
vendorRoleId:
description: 'This is a vendor and defines the default job role does this
contact have when added to a job.'
type:
- string
- 'null'
format: ulid
workPhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
- $ref: '#/components/schemas/Contact'
MoneyAmount:
title: Numeric representing an amount in the studio's currency
type: integer
minimum: -99999999999
maximum: 99999999999
example: 200
Pinned:
title: Whether or not the entity is favorited.
type:
- boolean
- 'null'
default: false
CustomFieldValue:
title: Custom Field Value
type: object
required:
- fieldId
properties:
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
fieldId:
title: Entity Identifier
description: A lowercase [ULID](https://github.com/ulid/spec) entity identifier
type: string
format: ulid
example: 01h35ccwymj5ctckp8px1azhg6
value:
type:
- string
- 'null'
Location:
allOf:
- title: Location
description: A Location entity
type: object
properties:
kind:
type: string
enum:
- location
name:
type: string
description: Location name.
maxLength: 255
phone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
tollFree:
$ref: '#/components/schemas/Event/properties/phoneNumber'
- $ref: '#/components/schemas/Contact'
Note:
title: Note
description: Additional notes about a specific entity.
type: object
required:
- contentHtml
properties:
links:
$ref: '#/components/schemas/Links'
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
authorId:
$ref: '#/components/schemas/NullableId'
contactId:
$ref: '#/components/schemas/NullableId'
contentHtml:
type:
- string
- 'null'
minLength: 1
maxLength: 1000000000
date:
$ref: '#/components/schemas/NullableDate'
jobId:
$ref: '#/components/schemas/NullableId'
Error:
description: An error.
type: object
properties:
type:
description: A namespace URI uniquely identifying the error type.
type: string
enum:
- unknown
- quota-limit
- not-implemented
title:
description: A short description of the error encountered.
type: string
example: Bad Request
detail:
description: A longer description of of the error encountered.
type: string
example: There was a problem with your request. Please see `info` for more information.
status:
description: The HTTP status code associated with this error.
type: integer
example: 400
IsHidden:
title: Hidden attribute
description: Whether or not the object is hidden.
type: boolean
example: false
readOnly: true
NullableId:
title: Entity Identifier that might be null instead
description: A ULID entity identifier that is nullable.
type:
- string
- 'null'
format: ulid
example: 01fqcr215r79p3h19crqbpzwzh
Link:
title: Hypermedia Link Relationship
description: 'The target URL indicated in the `href` property is related to the
current resource according to the defined semantics of the link
property name.'
type: object
required:
- href
properties:
href:
description: The hypertext reference to the API resource at tave.io.
type: string
format: uri
managerHref:
description: The URL to this item inside the Manager application at workspace.vsco.co.
type: string
format: uri
clientHref:
description: The URL to this item in Client Access, if available.
type: string
format: uri
ErrorValidation:
description: A validation error.
type: object
properties:
type:
description: A namespace URI uniquely identifying the error type.
type: string
enum:
- validation-error
title:
description: A short description of the error encountered.
type: string
example: Validation Error
detail:
description: Breakdown of what fields valid validation and why
type: object
status:
description: The HTTP status code associated with this error.
type: integer
example: 400
Contact:
title: Contact common fields
description: Contact common fields that all kinds share
type: object
required:
- kind
properties:
links:
$ref: '#/components/schemas/Links'
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
address:
$ref: '#/components/schemas/Address'
chatAccount1:
allOf:
- description: Chat Account 1
- $ref: '#/components/schemas/ChatAccount'
chatAccount2:
allOf:
- description: Chat Account 2
- $ref: '#/components/schemas/ChatAccount'
chatAccount3:
allOf:
- description: Chat Account 3
- $ref: '#/components/schemas/ChatAccount'
customFields:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomFieldValue'
customNumber:
type:
- string
- 'null'
maxLength: 32
deprecated: true
readOnly: true
email:
type:
- string
- 'null'
format: email
maxLength: 255
externalMappings:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ExternalMapping'
facebookUsername:
type:
- string
- 'null'
pattern: ^[a-zA-Z\d\.]{5,50}$
kind:
type: string
enum:
- company
- employee
- location
- person
notes:
description: 'A list of notes attached to this contact. This will only be returned
in a get of a specific contact and not in the list response.'
type:
- array
- 'null'
items:
$ref: '#/components/schemas/Note'
pinned:
$ref: '#/components/schemas/Pinned'
secondaryEmail:
type:
- string
- 'null'
format: email
maxLength: 64
totalCost:
allOf:
- readOnly: true
- $ref: '#/components/schemas/MoneyAmount'
totalRevenue:
allOf:
- readOnly: true
- $ref: '#/components/schemas/MoneyAmount'
twitterUsername:
type:
- string
- 'null'
pattern: ^[a-zA-Z\d.]{5,15}$
url:
type:
- string
- 'null'
format: uri
ExternalMapping:
title: External Mapping
description: 'This is used to relate a unique entity id in an external system to an
entity inside of VSCO Workspace. These objects can not be updated currently.'
type: object
required:
- id
- url
properties:
id:
type: string
minLength: 1
maxLength: 64
url:
description: The url to the remote item.
type: string
format: uri
minLength: 12
maxLength: 255
ServerTimestamp:
title: Server Timestamp
description: A server timestamp (always in UTC)
type: string
format: date-time
readOnly: true
example: '2020-08-01T17:32:32Z'
Id:
title: Entity Identifier
description: A lowercase [ULID](https://github.com/ulid/spec) entity identifier
type: string
format: ulid
example: 01h35ccwymj5ctckp8px1azhg6
readOnly: true
List:
title: Collection
description: A collection (or list) of resources.
type: object
required:
- type
- items
properties:
meta:
description: Metadata describing the current result set.
type: object
readOnly: true
properties:
currentPage:
description: The current page of results returned.
type: integer
totalPages:
description: 'The total number of pages in the result set. This is affected by
the `pageSize` parameter (`totalItems / pageSize == totalPages`).'
type: integer
totalItems:
description: 'The total number of items in the result set. This may be
affected by active search/filter parameters.'
type: integer
rows:
description: The number of rows returned per page for the current result set.
type: integer
type:
$ref: '#/components/schemas/ResourceType'
items:
description: A collection of resources returned in the current result set.
type: array
items:
type: object
ResourceType:
title: Resource Type
description: The type of resource represented.
type: string
example: resource-type
AddressBookCollection:
allOf:
- $ref: '#/components/schemas/List'
- properties:
type:
enum:
- addressbook-collection
items:
title: Address Book
type: array
items:
discriminator:
propertyName: kind
mapping:
person: ../entities/Person.yaml
company: ../entities/Company.yaml
location: ../entities/Location.yaml
employee: ../entities/Employee.yaml
anyOf:
- $ref: '#/components/schemas/Company'
- $ref: '#/components/schemas/Employee'
- $ref: '#/components/schemas/Location'
- $ref: '#/components/schemas/Person'
NullableDate:
title: A date that could be null instead
description: 'A date string consisting of year, month and day in the timezone of the
event if specified or the studio.'
type:
- string
- 'null'
format: date
example: '2020-04-10'
Employee:
allOf:
- title: Employee
description: An employee entity
type: object
properties:
anniversary:
$ref: '#/components/schemas/NullableDate'
birthdate:
$ref: '#/components/schemas/NullableDate'
brandId:
allOf:
- description: The default brand the person belongs to.
- $ref: '#/components/schemas/NullableId'
cellPhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
companyName:
type:
- string
- 'null'
maxLength: 128
contactPreference:
type:
- string
- 'null'
enum:
- email
- cell-phone
- home-phone
- work-phone
- null
displayAs:
type:
- string
- 'null'
maxLength: 64
fax:
$ref: '#/components/schemas/Event/properties/phoneNumber'
firstName:
type:
- string
- 'null'
maxLength: 48
gender:
type:
- string
- 'null'
enum:
- male
- female
- null
kind:
type: string
enum:
- employee
homePhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
jobTitle:
type:
- string
- 'null'
maxLength: 64
lastName:
type:
- string
- 'null'
maxLength: 48
maidenName:
type:
- string
- 'null'
maxLength: 48
mailingAddress:
$ref: '#/components/schemas/Address'
name:
type: string
description: This is used as the combination of firstName and lastName fields.
maxLength: 255
readOnly: true
salutation:
type:
- string
- 'null'
enum:
- mr
- miss
- mrs
- ms
- dr
- null
vendorRoleId:
description: 'This is a vendor and defines the default job role this
contact will have when added to a job.'
type:
- string
- 'null'
format: ulid
workPhone:
$ref: '#/components/schemas/Event/properties/phoneNumber'
- $ref: '#/components/schemas/Contact'
Address:
description: Represents an address.
type:
- object
- 'null'
additionalProperties: false
properties:
links:
$ref: '#/components/schemas/Links'
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
name:
type:
- string
- 'null'
maxLength: 255
readOnly: true
streetAddress:
type:
- string
- 'null'
maxLength: 512
village:
type:
- string
- 'null'
maxLength: 255
city:
type:
- string
- 'null'
maxLength: 255
state:
type:
- string
- 'null'
maxLength: 255
postalCode:
type:
- string
- 'null'
maxLength: 255
country:
type:
- string
- 'null'
maxLength: 2
latitude:
type:
- number
- 'null'
readOnly: true
longitude:
type:
- number
- 'null'
readOnly: true
googlePlaceId:
type:
- string
- 'null'
maxLength: 255
readOnly: true
timezone:
type:
- string
- 'null'
readOnly: true
Event:
properties:
phoneNumber:
title: Representation of a phone number
type:
- object
- 'null'
properties:
id:
allOf:
- readOnly: true
description: The ID of th
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vsco/refs/heads/main/openapi/vsco-contacts-api-openapi.yml