VSCO Workspace integration
VSCO Workspace (formerly Tave) is a studio management CRM for photographers and other creative businesses. Manage jobs and leads, address book contacts, events, galleries, notes, files, quotes (create, email and book them), orders, payments, products, discounts and taxes, configure brands, job types and roles, lead sources and statuses, custom fields and users, read job mail messages and contracts, search studio records, and subscribe REST hooks to new contacts, jobs, booked orders and payments. Left out: switching the studio to read-only mode, deleting users (the API refuses it), the client-access scheduler address route, and file types (listed in the vendor spec but not served by the live API). Authentication is a studio API key, created in VSCO Workspace under Settings, API, and sent in the X-API-KEY header.
Say what should happen.
The workflow builds itself.
What you can do with VSCO Workspace
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Payment, 5 operations
create_paymentCreate paymentPOSTRecords a payment on a job (jobId and amount required; amount is an integer amount in the studio currency). Returns the payment with its id; attach it to an order with apply_payment_to_order.delete_paymentDelete paymentDELETEDeletes a payment by its id (from list_payments).get_paymentGet paymentGETReturns one payment by its id (from list_payments): job, payer, payment method, status, amount, refunded amount, memo, processor references and allocations to orders.list_job_paymentsList job paymentsGETLists the payments of one job (id from list_jobs): amount, status, payer, method, refunds and allocations to orders.list_paymentsList paymentsGETLists the studio payments, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count.
Address book, 4 operations
create_contactCreate contactPOSTCreates a contact in the studio (required: kind). Returns the new contact with its id.delete_contactDelete contactDELETEDeletes a contact by its id (from list_contacts).get_contactGet contactGETReturns one contact by its id (from list_contacts): kind (person, company, location or employee), names, email, phones, mailing address, balances and privacy flags.list_contactsList contactsGETLists the studio contacts, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. Filter by email (results ranked best match first).
Brand, 4 operations
create_brandCreate brandPOSTCreates a brand in the studio. Returns the new brand with its id.delete_brandDelete brandDELETEDeletes a brand by its id (from list_brands).get_brandGet brandGETReturns one brand by its id (from list_brands): name, shortName, phones, reply-to and forwarding addresses, custom domain and theme colors.list_brandsList brandsGETLists the studio brands, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Custom field, 4 operations
create_custom_fieldCreate custom fieldPOSTCreates a custom field in the studio. Returns the new custom field with its id.delete_custom_fieldDelete custom fieldDELETEDeletes a custom field by its id (from list_custom_fields).get_custom_fieldGet custom fieldGETReturns one custom field by its id (from list_custom_fields): name, kind, what it applies to (Job or Contact), choices, client access and template token.list_custom_fieldsList custom fieldsGETLists all the studio custom fields in one response; sort with sortBy.
Discount, 4 operations
create_discountCreate discountPOSTCreates a discount in the studio (required: typeId, name and price). Returns the new discount with its id.delete_discountDelete discountDELETEDeletes a discount by its id (from list_discounts).get_discountGet discountGETReturns one discount by its id (from list_discounts): name, kind (Amount or Percent), price, sku, discount type and rebate flag.list_discountsList discountsGETLists all the studio discounts in one response; sort with sortBy.
Discount type, 4 operations
create_discount_typeCreate discount typePOSTCreates a discount type in the studio. Returns the new discount type with its id.delete_discount_typeDelete discount typeDELETEDeletes a discount type by its id (from list_discount_types).get_discount_typeGet discount typeGETReturns one discount type by its id (from list_discount_types): name and parent type.list_discount_typesList discount typesGETLists all the studio discount types in one response; sort with sortBy.
Event, 4 operations
create_eventCreate eventPOSTCreates an event in the studio. Returns the new event with its id.delete_eventDelete eventDELETEDeletes an event by its id (from list_events).get_eventGet eventGETReturns one event by its id (from list_events): name, type, job, start and end (local and UTC), channel, location, phone or virtual URL and confirmation.list_eventsList eventsGETLists the studio events, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. Filter by jobId.
Event type, 4 operations
create_event_typeCreate event typePOSTCreates an event type in the studio (required: name and tokenPrefix). Returns the new event type with its id.delete_event_typeDelete event typeDELETEDeletes an event type by its id (from list_event_types).get_event_typeGet event typeGETReturns one event type by its id (from list_event_types): name, kind, color, default duration, default attendees and token prefix.list_event_typesList event typesGETLists the studio event types, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
File, 4 operations
create_fileCreate filePOSTCreates a file in the studio (required: filename). Returns the new file with its id.delete_fileDelete fileDELETEDeletes a file by its id (from list_files).get_fileGet fileGETReturns one file by its id (from list_files): name, filename, MIME type, size, URL, file type and the records it is attached to.list_filesList filesGETLists the studio files, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. Filter by jobId or contactId.
Gallery, 4 operations
create_galleryCreate galleryPOSTCreates a gallery in the studio (required: name, clientUrl and adminUrl). Returns the new gallery with its id.delete_galleryDelete galleryDELETEDeletes a gallery by its id (from list_galleries).get_galleryGet galleryGETReturns one gallery by its id (from list_galleries): name, status, job and event, client and admin URLs, dates, counts and passcode settings.list_galleriesList galleriesGETLists the studio galleries, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Job, 4 operations
create_jobCreate jobPOSTCreates a job in the studio. Returns the new job with its id.delete_jobDelete jobDELETEDeletes a job by its id (from list_jobs).get_jobGet jobGETReturns one job by its id (from list_jobs): title, stage, job type, lead status and source, key dates, balances, totals and custom fields.list_jobsList jobsGETLists the studio jobs, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Closed jobs are left out unless includeClosed is true.
Job closed reason, 4 operations
create_job_closed_reasonCreate job closed reasonPOSTCreates a job closed reason in the studio (required: name). Returns the new job closed reason with its id.delete_job_closed_reasonDelete job closed reasonDELETEDeletes a job closed reason by its id (from list_job_closed_reasons).get_job_closed_reasonGet job closed reasonGETReturns one job closed reason by its id (from list_job_closed_reasons): name, description and whether it counts in reports.list_job_closed_reasonsList job closed reasonsGETLists the studio job closed reasons, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Job contact, 4 operations
create_job_contactCreate job contactPOSTCreates a job contact in the studio (required: contactId and jobId). Returns the new job contact with its id.delete_job_contactDelete job contactDELETEDeletes a job contact by its id (from list_job_contacts).get_job_contactGet job contactGETReturns one job contact by its id (from list_job_contacts): the job, the contact, its job roles and whether it is a client.list_job_contactsList job contactsGETLists the studio job contacts, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. Filter by jobId or contactId.
Job role, 4 operations
create_job_roleCreate job rolePOSTCreates a job role in the studio (required: name and tokenPrefix). Returns the new job role with its id.delete_job_roleDelete job roleDELETEDeletes a job role by its id (from list_job_roles).get_job_roleGet job roleGETReturns one job role by its id (from list_job_roles): name, kind (customer, subject, team or vendor), position and token prefix.list_job_rolesList job rolesGETLists the studio job roles, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Job type, 4 operations
create_job_typeCreate job typePOSTCreates a job type in the studio (required: name). Returns the new job type with its id.delete_job_typeDelete job typeDELETEDeletes a job type by its id (from list_job_types).get_job_typeGet job typeGETReturns one job type by its id (from list_job_types): name, default roles and events, workflow, profit center and initial lead status.list_job_typesList job typesGETLists the studio job types, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Lead source, 4 operations
create_lead_sourceCreate lead sourcePOSTCreates a lead source in the studio (required: name). Returns the new lead source with its id.delete_lead_sourceDelete lead sourceDELETEDeletes a lead source by its id (from list_lead_sources).get_lead_sourceGet lead sourceGETReturns one lead source by its id (from list_lead_sources): name and parent source.list_lead_sourcesList lead sourcesGETLists the studio lead sources, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Lead status, 4 operations
create_lead_statusCreate lead statusPOSTCreates a lead status in the studio (required: name). Returns the new lead status with its id.delete_lead_statusDelete lead statusDELETEDeletes a lead status by its id (from list_lead_statuses).get_lead_statusGet lead statusGETReturns one lead status by its id (from list_lead_statuses): name, kind, color, position and automatic transition rules.list_lead_statusesList lead statusesGETLists the studio lead statuses, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Note, 4 operations
create_noteCreate notePOSTCreates a note in the studio (required: contentHtml). Returns the new note with its id.delete_noteDelete noteDELETEDeletes a note by its id (from list_notes).get_noteGet noteGETReturns one note by its id (from list_notes): HTML content, date, author, contact and job.list_notesList notesGETLists the studio notes, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. Filter by jobId.
Order, 4 operations
create_job_orderCreate job orderPOSTCreates an order on a job (jobId from list_jobs) with its line items, tax group, recipient and payment terms; a dueDate creates a single invoice for it. Returns the order with computed totals.get_orderGet orderGETReturns one order by its id (from list_orders): line items, discounts, taxes, subtotal, total, balance, status, booking details, payments applied and invoices.list_job_ordersList job ordersGETLists the orders of one job (jobId from list_jobs): line items, totals, balance, status and invoices.list_ordersList ordersGETLists the studio orders, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count.
Product, 4 operations
create_productCreate productPOSTCreates a product in the studio. Returns the new product with its id.delete_productDelete productDELETEDeletes a product by its id (from list_products).get_productGet productGETReturns one product by its id (from list_products): name, product type, price, sku, taxable and deliverable flags and expenses.list_productsList productsGETLists all the studio products in one response; sort with sortBy.
Product type, 4 operations
create_product_typeCreate product typePOSTCreates a product type in the studio (required: name). Returns the new product type with its id.delete_product_typeDelete product typeDELETEDeletes a product type by its id (from list_product_types).get_product_typeGet product typeGETReturns one product type by its id (from list_product_types): name, kind and parent type.list_product_typesList product typesGETLists all the studio product types in one response; sort with sortBy.
Profit center, 4 operations
create_profit_centerCreate profit centerPOSTCreates a profit center in the studio (required: name). Returns the new profit center with its id.delete_profit_centerDelete profit centerDELETEDeletes a profit center by its id (from list_profit_centers).get_profit_centerGet profit centerGETReturns one profit center by its id (from list_profit_centers): name and external mappings.list_profit_centersList profit centersGETLists the studio profit centers, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Rest hook, 4 operations
create_rest_hookCreate rest hookPOSTSubscribes a URL to a studio event: contact.created, job.created, order.booked or payment.created, optionally limited with limitTo. No signing secret is provided, so deliveries cannot be verified. Returns the subscription.delete_rest_hookDelete rest hookDELETEUnsubscribes and deletes a REST hook subscription by its id (from list_rest_hooks).get_rest_hookGet rest hookGETReturns one REST hook subscription by its id (from list_rest_hooks): event, target url and limitTo filters.list_rest_hooksList rest hooksGETLists the studio REST hook subscriptions, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Tax group, 4 operations
create_tax_groupCreate tax groupPOSTCreates a tax group in the studio. Returns the new tax group with its id.delete_tax_groupDelete tax groupDELETEDeletes a tax group by its id (from list_tax_groups).get_tax_groupGet tax groupGETReturns one tax group by its id (from list_tax_groups): name, tax rates, compounding and default flags.list_tax_groupsList tax groupsGETLists all the studio tax groups in one response; sort with sortBy.
Tax rate, 4 operations
create_tax_rateCreate tax ratePOSTCreates a tax rate in the studio. Returns the new tax rate with its id.delete_tax_rateDelete tax rateDELETEDeletes a tax rate by its id (from list_tax_rates).get_tax_rateGet tax rateGETReturns one tax rate by its id (from list_tax_rates): name, rate and whether prices include it.list_tax_ratesList tax ratesGETLists all the studio tax rates in one response; sort with sortBy.
Quote, 3 operations
create_job_quoteCreate job quotePOSTCreates a quote with priced options on a job (jobId from list_jobs); a simple quote has exactly one option, and recipients are required when the job has no client contacts. Email it with send_quote.get_quoteGet quoteGETReturns one quote by its id (from list_quotes): job, kind, name, introduction, status, expiration, recipients (with client URLs and last sent and viewed times) and priced options.list_quotesList quotesGETLists the studio quotes, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count.
User, 3 operations
create_userCreate userPOSTCreates a user in the studio, linked to a contact (contactId), with the email they sign in with and the admin, billing contact and beta flags. Returns the user.get_userGet userGETReturns one user by its id (from list_users): contact, username (email), admin, billing contact and beta flags.list_usersList usersGETLists the studio users, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true.
Contract, 2 operations
create_job_contractCreate job contractPOSTCreates a contract on a job (jobId from list_jobs): name, HTML body, client signature labels (one per line), countersignature label, recipient and order. Returns the contract with its status and client URL.get_contractGet contractGETReturns one job contract by id: name, HTML body, signature labels, recipient, order, signing status and the client signing URL. A deleted contract stays readable with hidden true.
Mail message, 2 operations
get_mail_messageGet mail messageGETReturns one mail message by its id (from list_mail_messages): direction, send and read status, subject, sender, recipients, HTML and text body and delivery, open and click times.list_mail_messagesList mail messagesGETLists the studio mail messages, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Hidden (deleted) ones are left out unless includeHidden is true. jobId is required; filter by kind, sendStatus or threadId.
Payment method, 2 operations
get_payment_methodGet payment methodGETReturns one payment method by its id (from list_payment_methods): name and kind (Google, PayPal, CreditCard, Check, Cash or EFT).list_payment_methodsList payment methodsGETLists all the studio payment methods in one response; sort with sortBy.
Timezone, 2 operations
get_timezoneGet timezoneGETReturns one timezone by its id (from list_timezones): name, display name, code, daylight code, city, country and region.list_timezonesList timezonesGETLists the studio timezones, one page at a time (page, pageSize 10 to 100); meta.totalPages gives the page count. Filter with search (name, code, country).
Worksheet, 2 operations
create_job_from_worksheetCreate job from worksheetPOSTCreates a job together with its events and contacts in one request; if any part fails, nothing is created (the whole request is rolled back). Returns the job worksheet with the new ids.get_job_worksheetGet job worksheetGETReturns one job (jobId from list_jobs) together with its events and contacts, in the same shape create_job_from_worksheet accepts.
Apply, 1 operation
apply_payment_to_orderApply payment to orderPOSTApplies a recorded payment (id from list_payments) to an order: orderId and amount (an integer amount in the studio currency) are required. Returns the updated payment with its allocations.
Book, 1 operation
book_quoteBook quotePOSTBooks an open quote (id from list_quotes) as an order. optionId is needed only when the quote has several options, recipientId only when it has several recipients; soldAt defaults to today. Returns the booked order.
Me, 1 operation
get_my_studioGet my studioGETReturns the studio the API key belongs to: name, email, owner name, currency, date, time and number formats, week start, plan and read-only state.
Showing the first 120 of 147 endpoints. The rest are in the product, searchable from the workflow builder and from chat.
Use VSCO Workspace from Claude Code, Cursor or Codex
Connect VSCO Workspace in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its VSCO Workspace operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect VSCO Workspace
- Create your workspace
Sign up free. Nothing to install.
- Connect VSCO Workspace once
Add your VSCO Workspace connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
VSCO Workspace integration FAQ
What can you do with the VSCO Workspace integration?
LiveContext exposes 147 operations on VSCO Workspace, covering payment, address book, brand and custom field.
