Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/vsco-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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 Specification
openapi: 3.2.0
info:
title: VSCO Workspace Brands Jobs 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: Jobs
paths:
/job:
get:
summary: List jobs of a studio
operationId: listResourceJob
x-entity: Job
tags:
- Jobs
parameters:
- $ref: '#/components/parameters/page'
- $ref: '#/components/parameters/pageSize'
- $ref: '#/components/parameters/includeClosed'
- $ref: '#/components/parameters/externalMappingId'
- 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: accountBalance
enum:
- accountBalance
- accountBalance asc
- accountBalance desc
- title: bookingDate
enum:
- bookingDate
- bookingDate asc
- bookingDate desc
- title: closed
enum:
- closed
- closed asc
- closed desc
- title: closedDate
enum:
- closedDate
- closedDate asc
- closedDate desc
- title: completedDate
enum:
- completedDate
- completedDate asc
- completedDate desc
- title: creditBalance
enum:
- creditBalance
- creditBalance asc
- creditBalance desc
- title: customNumber
enum:
- customNumber
- customNumber asc
- customNumber desc
- title: eventDate
enum:
- eventDate
- eventDate asc
- eventDate desc
- title: fulfillmentDate
enum:
- fulfillmentDate
- fulfillmentDate asc
- fulfillmentDate desc
- title: guestCount
enum:
- guestCount
- guestCount asc
- guestCount desc
- title: inquiryDate
enum:
- inquiryDate
- inquiryDate asc
- inquiryDate desc
- title: lastClientActivity
enum:
- lastClientActivity
- lastClientActivity asc
- lastClientActivity desc
- title: leadConfidence
enum:
- leadConfidence
- leadConfidence asc
- leadConfidence desc
- title: leadDecisionExpectedByDate
enum:
- leadDecisionExpectedByDate
- leadDecisionExpectedByDate asc
- leadDecisionExpectedByDate desc
- title: leadMaxBudget
enum:
- leadMaxBudget
- leadMaxBudget asc
- leadMaxBudget desc
- title: leadRating
enum:
- leadRating
- leadRating asc
- leadRating desc
- title: leadStatusChangedAt
enum:
- leadStatusChangedAt
- leadStatusChangedAt asc
- leadStatusChangedAt desc
- title: pinned
enum:
- pinned
- pinned asc
- pinned desc
- title: previousInteractionDate
enum:
- previousInteractionDate
- previousInteractionDate asc
- previousInteractionDate desc
- title: stage
enum:
- stage
- stage asc
- stage desc
- title: staleDate
enum:
- staleDate
- staleDate asc
- staleDate desc
- title: title
enum:
- title
- title asc
- title desc
- title: totalCost
enum:
- totalCost
- totalCost asc
- totalCost desc
- title: totalGratuity
enum:
- totalGratuity
- totalGratuity asc
- totalGratuity desc
- title: totalProfit
enum:
- totalProfit
- totalProfit asc
- totalProfit desc
- title: totalRevenue
enum:
- totalRevenue
- totalRevenue asc
- totalRevenue desc
- title: webLead
enum:
- webLead
- webLead asc
- webLead desc
default: id
responses:
'200':
description: Job list response.
content:
application/json:
schema:
$ref: '#/components/schemas/JobCollection'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
post:
summary: Create a job.
operationId: createResourceJob
tags:
- Jobs
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
responses:
'201':
description: Job creation response.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
/job/{id}:
get:
summary: Get a specific job
operationId: getResourceJob
tags:
- Jobs
parameters:
- $ref: '#/components/parameters/idInPath'
responses:
'200':
description: Fetch a specific Job entity.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
put:
summary: Update a specific job.
operationId: updateResourceJob
tags:
- Jobs
parameters:
- $ref: '#/components/parameters/idInPath'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
responses:
'200':
description: Job response.
content:
application/json:
schema:
$ref: '#/components/schemas/Job'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
delete:
summary: Delete a job.
operationId: deleteResourceJob
tags:
- Jobs
parameters:
- $ref: '#/components/parameters/idInPath'
responses:
'204':
$ref: '#/components/responses/deleteSuccess'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
/job/{jobId}/quote:
post:
summary: Create a quote on a given job
operationId: createResourceJobQuote
tags:
- Jobs
parameters:
- $ref: '#/components/parameters/jobIdInPath'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
responses:
'201':
description: Quote creation response.
content:
application/json:
schema:
$ref: '#/components/schemas/Quote'
'400':
$ref: '#/components/responses/validationError'
'429':
$ref: '#/components/responses/tooManyRequestsError'
components:
schemas:
Links:
title: Link Relationships
description: 'Each property defines a hypertext link relationship as indicated by a
link object or array of link objects. The target URL of each hypertext
link relationship is related to the current resource according to the
defined semantics of the link relationship property name.'
readOnly: true
required:
- self
type: object
example: "\"self\": {\n \"href\": \"https://example.com/object-endpoint/03c41781-f06f-4402-a5d9-1c30ccb4db29\",\n \"title\": \"Example Link Relationship\",\n \"type\": \"application/json\",\n}"
properties:
self:
allOf:
- title: Self
description: The target URL is the current resource's own location.
- $ref: '#/components/schemas/Link'
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
QuoteRecipient:
title: Quote Recipient
type: object
properties:
contactId:
allOf:
- writeOnly: true
- $ref: '#/components/schemas/Id'
clientUrl:
type: string
format: uri
readOnly: true
lastSent:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDateTime'
lastViewed:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDateTime'
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'
QuoteOption:
title: Quote Option
type: object
properties:
id:
allOf:
- readOnly: true
- $ref: '#/components/schemas/Id'
name:
type:
- string
- 'null'
allOf:
- $ref: '#/components/schemas/OrderConfiguration'
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
JobCollection:
allOf:
- properties:
type:
enum:
- job-collection
items:
title: Job
type: array
items:
$ref: '#/components/schemas/Job'
- $ref: '#/components/schemas/List'
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
OrderItem:
title: Order Item
type: object
required:
- name
properties:
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
orderId:
$ref: '#/components/schemas/Id'
productId:
allOf:
- $ref: '#/components/schemas/Id'
name:
type: string
minLength: 1
maxLength: 128
descriptionHtml:
type:
- string
- 'null'
maxLength: 16777215
baseConfiguration:
type:
- array
- 'null'
readOnly: true
items:
$ref: '#/components/schemas/ProductConfiguration'
configuration:
type:
- array
- 'null'
readOnly: true
items:
$ref: '#/components/schemas/ProductConfiguration'
basePricePerUnit:
$ref: '#/components/schemas/MoneyAmount'
pricePerUnit:
$ref: '#/components/schemas/MoneyAmount'
baseCostPerUnit:
$ref: '#/components/schemas/MoneyAmount'
costPerUnit:
$ref: '#/components/schemas/MoneyAmount'
units:
type: number
format: float
taxable:
type: boolean
discount:
type: boolean
discountKind:
type: string
enum:
- amount
- percent
default: amount
selectability:
type: string
enum:
- required
- suggested
- optional
default: required
selected:
type: boolean
children:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/OrderItem'
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
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
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'
Quote:
title: Quote
description: A job quote (pre-booking). POST creates the quote and its priced option invoices.
type: object
properties:
id:
$ref: '#/components/schemas/Id'
jobId:
allOf:
- readOnly: true
- $ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
hidden:
$ref: '#/components/schemas/IsHidden'
kind:
type: string
enum:
- simple
- advanced
default: simple
name:
type:
- string
- 'null'
introduction:
type:
- string
- 'null'
status:
type: string
enum:
- open
- booked
- closed
readOnly: true
expiration:
type:
- object
- 'null'
properties:
date:
$ref: '#/components/schemas/NullableDate'
period:
type: integer
minimum: 0
periodType:
type: string
enum:
- days
- weeks
- months
recipients:
description: Required when the job has no client contacts.
type: array
items:
$ref: '#/components/schemas/QuoteRecipient'
options:
description: Priced line-item collections. Simple quotes must have exactly one option.
type: array
items:
$ref: '#/components/schemas/QuoteOption'
ProductConfiguration:
title: Product Configuration
type: object
required:
- name
- affectsPrice
- kind
- value
properties:
id:
allOf:
- description: If this option was created in VSCO Workspace, it will have an ID. If this order was imported, it may not.
- $ref: '#/components/schemas/NullableId'
name:
type: string
affectsPrice:
type: boolean
kind:
type: string
enum:
- AddOn
- Option
value:
type: string
unitCost:
allOf:
- {}
- $ref: '#/components/schemas/MoneyAmount'
unitPrice:
allOf:
- {}
- $ref: '#/components/schemas/MoneyAmount'
PositiveMoneyAmount:
title: Positive numeric representing an amount in the studio's currency
type: integer
minimum: 0
maximum: 99999999999
NullableDateTime:
title: A date time (in UTC) that could be null instead
description: 'A date time string consisting of year, month and day along with hour,
minute and second in UTC.'
type:
- string
- 'null'
format: date-time
example: '2020-06-17T13:06:22+00:00'
OrderConfiguration:
title: Order Configuration
type: object
properties:
lineItems:
type: array
items:
$ref: '#/components/schemas/OrderItem'
preTaxDiscount:
type:
- object
- 'null'
readOnly: true
properties:
fixedAmount:
allOf:
- {}
- $ref: '#/components/schemas/PositiveMoneyAmount'
percentageAmount:
allOf:
- {}
- $ref: '#/components/schemas/PositiveMoneyAmount'
percentage:
type:
- integer
- 'null'
minimum: 0
maximum: 100
multipleOf: 0.001
afterTaxDiscount:
type:
- object
- 'null'
readOnly: true
properties:
fixedAmount:
allOf:
- {}
- $ref: '#/components/schemas/PositiveMoneyAmount'
percentageAmount:
allOf:
- {}
- $ref: '#/components/schemas/PositiveMoneyAmount'
percentage:
type: integer
minimum: 0
maximum: 100
multipleOf: 0.001
taxGroupId:
$ref: '#/components/schemas/NullableId'
tax1:
title: Tax Line
description: These values are computed when a taxGroupId is set on the order
type:
- object
- 'null'
readOnly: true
properties:
taxRateId:
$ref: '#/components/schemas/NullableId'
isInclusive:
type: boolean
default: false
name:
type: string
rate:
type: number
minimum: 0
maximum: 1
multipleOf: 0.0001
amount:
$ref: '#/components/schemas/PositiveMoneyAmount'
tax2:
$ref: '#/components/schemas/OrderConfiguration/properties/tax1'
tax3:
$ref: '#/components/schemas/OrderConfiguration/properties/tax1'
taxCombined:
allOf:
- title: Combined Tax Line
description: This is a summary of all tax lines if the tax is configured to combine separate tax lines into a single line on orders and invoices
- $ref: '#/components/schemas/OrderConfiguration/properties/tax1'
taxIsCompounding:
type: boolean
description: Rarely, certain taxes are compounded one after the other, aka "tax the tax"
readOnly: true
default: false
subtotal:
type: object
readOnly: true
properties:
amount:
$ref: '#/components/schemas/PositiveMoneyAmount'
taxable:
$ref: '#/components/schemas/PositiveMoneyAmount'
nonTaxable:
$ref: '#/components/schemas/PositiveMoneyAmount'
total:
allOf:
- readOnly: true
- $ref: '#/components/schemas/PositiveMoneyAmount'
Job:
title: Job
description: https://help.workspace.vsco.co/en/articles/639878-leads-jobs-and-job-stages
type: object
properties:
links:
$ref: '#/components/schemas/Links'
id:
$ref: '#/components/schemas/Id'
created:
$ref: '#/components/schemas/ServerTimestamp'
modified:
$ref: '#/components/schemas/ServerTimestamp'
accountBalance:
allOf:
- readOnly: true
description: The account balance for this job.
- $ref: '#/components/schemas/MoneyAmount'
bookingDate:
$ref: '#/components/schemas/NullableDate'
brandId:
$ref: '#/components/schemas/NullableId'
closed:
description: 'Whether or not the lead or job is closed. A closed reason might be
provided as well.'
type: boolean
example: false
closedReasonId:
$ref: '#/components/schemas/NullableId'
closedDate:
$ref: '#/components/schemas/NullableDate'
closedReasonName:
type:
- string
- 'null'
readOnly: true
completedDate:
$ref: '#/components/schemas/NullableDate'
contactFormId:
$ref: '#/components/schemas/NullableId'
creditBalance:
allOf:
- readOnly: true
description: The credit amount associated with this job.
- $ref: '#/components/schemas/MoneyAmount'
customFields:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomFieldValue'
customNumber:
type:
- string
- 'null'
maxLength: 32
deprecated: true
readOnly: true
eventDate:
$ref: '#/components/schemas/NullableDate'
externalMappings:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ExternalMapping'
fulfillmentDate:
$ref: '#/components/schemas/NullableDate'
guestCount:
type:
- integer
- 'null'
minimum: 0
maximum: 99999999999
inquiryDate:
$ref: '#/components/schemas/NullableDate'
jobTypeId:
$ref: '#/components/schemas/NullableId'
jobTypeName:
type:
- string
- 'null'
readOnly: true
lastClientActivity:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDateTime'
leadConfidence:
type:
- string
- 'null'
enum:
- low
- medium
- high
- null
leadDecisionExpectedByDate:
$ref: '#/components/schemas/NullableDate'
leadMaxBudget:
title: Numeric representing an amount in the studio's currency
type:
- integer
- 'null'
minimum: -99999999999
maximum: 99999999999
leadNotes:
type:
- string
- 'null'
maxLength: 1000000000
leadRating:
type:
- integer
- 'null'
minimum: 1
maximum: 5
leadSourceId:
$ref: '#/components/schemas/NullableId'
leadSourceName:
type:
- string
- 'null'
readOnly: true
leadStatusId:
$ref: '#/components/schemas/NullableId'
leadStatusName:
type:
- string
- 'null'
readOnly: true
leadStatusChangedAt:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDateTime'
name:
description: Name of the job that will override the title.
type:
- string
- 'null'
nextInteractionDate:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDate'
nextInteractionItem:
type:
- string
- 'null'
format: uri
readOnly: true
pinned:
$ref: '#/components/schemas/Pinned'
primarySessionId:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableId'
previousInteractionDate:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDate'
previousInteractionItem:
type:
- string
- 'null'
format: uri
readOnly: true
sample:
description: Whether or not the lead or job is a sample job.
type: boolean
example: false
readOnly: true
stage:
description: Specifies the stage that the job is in.
type: string
enum:
- lead
- booked
- fulfillment
- completed
example: booked
staleDate:
allOf:
- readOnly: true
- $ref: '#/components/schemas/NullableDate'
title:
description: Generated title of the job
type:
- string
- 'null'
readOnly: true
totalCost:
allOf:
- readOnly: true
- $ref: '#/components/schemas/MoneyAmount'
totalProfit:
allOf:
- readOnly: true
- $ref: '#/components/schemas/MoneyAmount'
totalRevenue:
allOf:
- readOnly: true
- $ref: '#/components/schemas/MoneyAmount'
webLead:
description: Whether or not the lead or job came from a contact form.
type: boolean
default: false
example: false
workflowId:
$ref: '#/components/schemas/NullableId'
workflowName:
type:
- string
- 'null'
readOnly: true
parameters:
externalMappingId:
name: externalMappingId
in: query
description: Filter objects by an external id for this provider.
schema:
type: string
maxLength: 64
default: null
jobIdInPath:
name: jobId
in: path
schema:
$ref: '#/components/schemas/Id'
page:
name: page
in: query
description: The page of results to return.
schema:
type: integer
default: 1
minimum: 1
includeClosed:
name: includeClosed
in: query
description: Include jobs that have been closed
schema:
type: boolean
default: false
example: false
idInPath:
name: id
in: path
description: ULID to perform an action on.
schema:
$ref: '#/components/schemas/Id'
pageSize:
name: pageSize
in: query
description: Number of results per page to return in the collection.
schema:
type: integer
minimum: 10
maximum: 100
default: 100
responses:
deleteSuccess:
description: The resource was successfully deleted.
tooManyRequestsError:
description: Exceeded request quota, see Retry-After header
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
validationError:
description: 'Validation error response. Check the `info.errors` property in the
response for more details.'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorValidation'
securitySchemes:
ApiKeyAuth:
type: a
# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vsco/refs/heads/main/openapi/vsco-jobs-api-openapi.yml