auth_requestLink
Email a one-time sign-in link. Always answers ok, so it never reveals whether an email has an account.
email必填
work.doingwork由 doingwork.work 發布官方發布者v1.0.1更新於 Nov 3, 2026
無頭現場服務軟體。你的AI代理負責執行工單、排程、報價、發票和付款。
AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。
Headless field service software. Your AI agent runs jobs, schedules, quotes, invoices and payments.
發布方自己的服務:Home Service Quotes by Doing Work
Field Service Business Platform by Doing Work 的託管 MCP 服務(doingwork.work),由 doingwork.work 發布;無需登入;Streamable HTTP;200 個工具。
暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/work.doingwork%2Fshop/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"field-service-business-platform-by-doing": {
"type": "http",
"url": "https://doingwork.work/mcp"
}
}
}Email a one-time sign-in link. Always answers ok, so it never reveals whether an email has an account.
email必填Email a person a one-time sign-in link that opens a named Doing Work screen after they sign in, so an agent can hand its person straight to the page that needs a human (brand, terms, job photos and so on). The screen comes from a fixed list: today, prices, brand, payments, resume, terms, transfer, close, capture, subcontractors, claim, card, hub, board, override, start. Shop screens take shop_id; capture and subcontractors take job_id; claim is refused here, because the agent connect flow sends its own link; board takes shop_id and an optional date; override takes kind (job or visit) and id; card and hub take the key from their link. To send a page to a named member of your shop with role and assignment checks, use members.sendPage. The link works once, in any browser, and expires in 15 minutes. Always answers ok, so it never reveals whether an email has an account. The page still checks that the person may see it.
email必填paramsscreen必填Register an OAuth client (RFC 7591 dynamic registration). Public clients only: PKCE, no secret. Redirects must be https, or http on loopback.
scopetos_uricontactslogo_uriclient_uripolicy_uriclient_namegrant_typessoftware_idredirect_uris必填response_typessoftware_version另有 1 個A signed-in person approves an agent client. Returns the redirect with a one-time code (PKCE S256). Needs a browser session, not an agent token. `resource` (RFC 8707) binds the token to this server's MCP endpoint.
scopestateshop_idresourceclient_id必填redirect_uri必填response_typecode_challenge必填code_challenge_method必填Exchange an authorization code and PKCE verifier, or a refresh token, for a short-lived agent access token and a new refresh token. Refresh tokens rotate: each works once, and reusing one revokes the whole chain. With grant_type urn:workos:agent-auth:grant-type:claim and your claim_token (auth.md), poll until the owner approves: errors are authorization_pending, slow_down, expired_token and access_denied; success hands over a named agent key once (no refresh token, it does not expire until revoked).
codescoperesourceclient_idgrant_type必填claim_tokenredirect_uricode_verifierrefresh_tokenThe signed-in person.
無需輸入參數。
Create a shop. The caller becomes its one owner. On the sign-up page the person also agrees to the Terms of Service (accept_terms_version), recorded with the version, time, IP address and browser; an agent cannot agree for them.
name必填jurisdiction必填accept_terms_versionInvite a person by email as office or field. Owners and office can invite. The invite link works once.
role必填email必填shop_id必填Email an open invite again with a new link, for a worker or office member who lost it or let it expire. The old invite is revoked and a new one is made with the same email and role: use the invite_id this returns from now on. The new link works once for 14 days. Owners and office only. Accepted or revoked invites are refused.
invite_id必填Email a current member of your shop a one-time sign-in link that opens one page: board (the day board, for owner or office), override (mark a job or visit done anyway, owner only), or capture (job photos, for anyone on the job; a field worker must be assigned to a visit on it). Owners and office only. The member is named by membership_id, so the link only goes to someone in the shop. The link works once and expires in 15 minutes. The page still checks access when it opens.
paramsscreen必填shop_id必填membership_id必填Accept an invite as the signed-in person. The invite email must match yours.
token必填Current members of a shop with role and start date.
shop_id必填include_endedEnd a membership: the owner removes a worker, or a worker leaves. Shop tokens end with it. The owner cannot leave; ownership moves only by transfer.
membership_id必填Owner changes a worker between office and field. The old membership ends and a new one starts, so history keeps both.
role必填membership_id必填Start a job at a home (the home is found or created from the address).
address必填shop_id必填summarycustomer_idJobs of a shop, newest first. Optional status filter.
limitstatusshop_id必填One job with its home address.
job_id必填Get a signed upload URL for a job photo or video. Before you call this, look at the file and say what it shows in summary: plain words, findings, any text you can read (model and serial plates), measurements, and for video a transcript, key moments and the length. If you cannot look at it, send summary.unable_to_analyze with a reason and the media is listed by media.needsSummary. Summaries stay inside the shop and are searchable with media.list q and search.global. Photos: JPEG, PNG, WebP, HEIC or TIFF (HEIC and TIFF are kept as sent, with a JPEG copy for viewing). Video: MP4, MOV or WebM, kept as sent, at most 100 MB and 10 minutes, never shared outside the shop. Declare the sha256 of the bytes you will send; the upload is rejected if they differ. Taken time, GPS location, heading and camera details are read from photos and kept for your shop. Copies shared outside the shop (share links, quote pages, PDFs) have that metadata removed.
kindstage必填job_id必填sha256必填summary必填shows_interiorList the photos and videos you are allowed to see, with what the agent said each shows (summary), taken time, GPS location, heading and camera details. Filter by job, kind, words in the summary or transcript (q), summary status, distance from a point, taken time, or whether it has a location.
qkindsortlimitjob_idshop_idnear_latnear_lngradius_mtaken_afterhas_locationtaken_before另有 1 個Photos with a GPS location as a GeoJSON FeatureCollection (points in longitude, latitude order), ready for a map. Takes the same filters as media.list.
qkindsortlimitjob_idshop_idnear_latnear_lngradius_mtaken_afterhas_locationtaken_before另有 1 個One photo or video's details, including its full summary (findings, readable text, measurements, transcript and key moments), taken time, location, camera fields and the full metadata read from the file. Set include_content to get the stored bytes as base64 (metadata included), or include_original to get the original HEIC or TIFF when the photo was converted.
media_id必填include_contentinclude_originalGet a single-use link the customer opens to confirm the work was done (or flag a problem).
job_id必填Write or correct what a photo or video shows. Use it to fix a summary, to fill in one marked needs_summary (older photos and browser captures have none), or after a person edits the words. Each change keeps the earlier wording. Workers on the shop can edit; the summary is never shown to customers.
summary必填media_id必填edited_by_personPhotos and videos with no summary yet: older uploads, browser captures, and uploads whose agent could not look at the file. Open each with media.get include_content, look at it, then send media.setSummary.
kindlimitjob_idshop_id必填Create a quote from lines the worker wrote. Lines are never filled in by AI. Optional: good, better, best options and optional lines the customer picks when signing.
lines必填job_id必填optionstax_rate_idLock the quote and get a single-use signing link for the customer.
quote_id必填email_customerReplace an unsigned quote with a new version. Earlier signing links stop working; send it again for a new link.
lines必填optionsquote_id必填tax_rate_idWithdraw a draft or sent quote the customer has not signed, with an optional reason. Signing links stop working and follow-ups stop. A withdrawn quote cannot be reopened; create a new quote if needed.
reasonquote_id必填The Idaho 45-525(3) subcontractor and supplier statement for a job: the latest signed one, any prepared draft, and whether final payment needs one.
job_id必填Prepare the Idaho 45-525(3) statement for the shop to sign: a list of subcontractors, materialmen and rental equipment providers over $500, or none_attestation "yes" for "No subcontractors or suppliers over $500 on this job". Does not sign.
job_id必填entriesnone_attestationOwner only: the link to the shop's payment setup page. Give it to the owner; they open it, sign in, and press one button to set up card and bank payments with Stripe. Nothing starts until they do. status is none, onboarding, active, restricted or settling_only.
shop_id必填Create an invoice for a signed quote, for the total of the option and optional lines the customer picked.
quote_id必填deposit_minorSend an invoice (or the next part of it) and get a single-use pay link. Earlier pay links stop working. Refused with conflict on a Doing Work deposit invoice whose booking ended (shop cancel or no-show). payments_ready false means the shop has no active payments account yet (after a hand-off, connect one with payments.connectStart); the link shows payment isn't available until it does.
percentinvoice_id必填amount_minoremail_customerRecord that the customer paid an invoice outside Doing Work (check, cash, financing, insurance or other). Owner or office, or their agent. Closes the invoice, and the job too unless its checklists still block done (job_status says which; finish them and call jobs.complete). The job record says "Paid outside Doing Work", is never marked paid or verified, and no Doing Work receipt goes to the customer. There is no limit on jobs paid outside Doing Work and no fee on them. Agents can record these too unless the owner turned that off with shops.setAgentMoney.
notemethod必填paid_on必填invoice_id必填Refund part or all of a payment (owner or office, or their agent). The refund shows up once the processor confirms it. An agent refund above the shop's agent refund cap (shops.setAgentMoney, $250 unless the owner changed it) does not run: it waits for the owner's OK and the reply says approval_required.
charge_id必填amount_minor必填Doing Work's fee schedule: one stepped rate on each shop's calendar month of card and bank payments, taken out of the payments. No plans, no monthly fee, no card on file. Every shop gets every feature and unlimited workers.
無需輸入參數。
What Doing Work would take on a payment of this size right now, the effective rate on it, the month's volume so far (all locations under the same owner), and how far the shop is from the next, cheaper band (owner or office). Leave out amount_minor for just the month picture and the next band line.
shop_id必填amount_minorA month's Doing Work fees for a shop: card and bank volume, fees by kind, the effective rate, each line, and how far the shop is from the next band this month (owner or office).
month必填shop_id必填Public keys that verify signed job records.
無需輸入參數。
The latest signed record for a job and its level (logged, paid, verified).
job_id必填Add a webhook endpoint for a shop (owner or office, or their agent). The url must be https on a public internet address. Returns the signing secret once; it is never shown again.
url必填eventsshop_id必填List a shop's webhook endpoints and their recent delivery counts. Secrets are not returned.
shop_id必填Remove a webhook endpoint. Pending deliveries to it stop.
endpoint_id必填Read a shop's audit log, newest first (owner only).
limitshop_id必填before_idCreate a developer platform account (private beta). The caller owns it.
name必填terms_version必填List the platform accounts you own and the shops each one manages.
無需輸入參數。
Stop a platform from managing this shop. Shop owner only.
grant_id必填Add a customer to a shop, with kind, company, email, phone, billing address, lead source, tags and notes in one call.
kindname必填tagsemailnotesphoneshop_id必填lead_sourcecompany_namebilling_addressOne customer with contacts, properties, custom fields and open balance.
customer_id必填Customers of a shop, newest first, filtered by tag, lead source or archived.
taglimitcursorshop_id必填archivedlead_sourceFind customers by name, company, email, phone or property address.
q必填limitshop_id必填include_archivedChange a customer's name, kind, company, email, phone, billing address, lead source, tags or notes.
kindnametagsemailnotesphonecustomer_id必填lead_sourcecompany_namebilling_addressArchive a customer (hidden from lists, history kept) or bring one back.
archivedcustomer_id必填Likely duplicate customers in a shop: same email, same phone digits, or same name.
shop_id必填customer_idMerge a duplicate customer into another: jobs, requests, contacts, properties and fields move over.
from_customer_id必填into_customer_id必填Add a contact person to a customer (tenant, manager, billing, spouse).
name必填roleemailphoneis_primarycustomer_id必填Change or remove one contact of a customer.
nameroleemailphoneremovedcontact_id必填is_primaryAdd a service address to a customer, with optional label and access notes.
labeladdress必填customer_id必填access_notesService addresses of a customer, or every property of a shop.
limitcursorshop_idcustomer_idinclude_archivedChange a property's label or access notes, or archive it.
labelarchivedproperty_id必填access_notesRecord equipment at a property: kind, make, model, serial, install date and warranty.
kind必填makemodelnotesserialproperty_id必填install_datewarranty_untilEquipment at a property, or warranties ending soon across a shop.
shop_idproperty_idinclude_archivedwarranty_ends_within_daysChange or archive an equipment record.
kindmakemodelnotesserialarchivedequipment_id必填install_datewarranty_untilSet the tags and lead source on a job.
tagsjob_id必填lead_sourceEverything that happened with a customer, newest first: requests, jobs, quotes, signatures, invoices and payments.
limitcursorcustomer_id必填A customer's account statement: every invoice with total, paid and balance, and the total owed.
customer_id必填Everything the shop holds about one customer, as one JSON document, for a privacy request.
customer_id必填Add a custom field to customers, properties, jobs, quotes or invoices for a shop.
key必填piitype必填labeltarget必填optionsshop_id必填requiredshared_with_homeownerCustom fields a shop has defined, optionally for one kind of record.
targetshop_id必填Set one custom field value on a customer, property, job, quote or invoice.
key必填value必填target必填shop_id必填currencyobject_id必填Custom field values on one record, with any required fields still empty.
target必填shop_id必填object_id必填Log a request for work from a customer or a new lead.
tagstitle必填sourceaddressdetailsshop_id必填customer_idlead_sourceproperty_idcontact_namecontact_emailcontact_phone另有 1 個Requests of a shop, newest first, filtered by stage, customer or tag.
taglimitstagecursorshop_id必填customer_idinclude_archivedHow many open requests a shop has in each stage, and how many were won or lost in the last 30 days.
shop_id必填One request with its customer and the job it became.
request_id必填Move a request to another stage or change its details, customer or property.
tagsstagetitledetailsarchivedrequest_id必填customer_idlead_sourcelost_reasonproperty_idpreferred_timesTurn a request into a job at its property or address; the worker then writes the quote or books a visit.
addresssummaryrequest_id必填customer_idTurn on the shop's public request form and get its key. Making a new one turns off the old key.
shop_id必填Send a shop a request through its public form. No sign-in; needs the form key.
name必填emailphonetitle必填addressdetailsform_key必填preferred_timesBook a repeating visit (daily, weekly or monthly, every n) for a job. All visits are booked now, up to 104. Times repeat in the shop's local time zone. Overlaps and unavailable workers come back as warnings, never blocks.
freq必填everynotestitleuntiljob_id必填ends_at必填starts_at必填occurrencesassignee_idsarrival_window_minutesCancel the visits of a repeating series that have not started yet, from a time onward (default now). Past, started and done visits stay.
fromreasonseries_id必填Mark a visit started (from scheduled, on the way, or arrived). The worker on the visit (or the office) can do this.
visit_id必填Mark a visit done, with an optional note. The worker on the visit (or the office) can do this. A visit not yet started is started too. Refused with checklist_open while a checklist on the visit has required items open or a sign-off missing; the owner, signed in on the hosted override page (/p/checklist/override), may pass override_reason to mark it done anyway (recorded and audited). Agents, keys and office staff cannot override.
notevisit_id必填override_reasonBook a visit to a job at a time, optionally with the workers going (assignee_ids, a saved crew_id, or both). Overlaps for those workers come back in conflicts.
notestitlejob_id必填crew_idends_at必填prioritystarts_at必填assignee_idsarrival_window_minutesMove a visit or change its title, notes or arrival window. Overlaps for its workers come back in conflicts. Moving it re-plans the appointment reminder.
notestitleends_atvisit_id必填starts_atarrival_window_minutesSet who is going on a visit: person_ids, a saved crew_id, or both. The list replaces the current one; an empty person_ids with no crew leaves it unassigned.
crew_idvisit_id必填person_idsCancel a visit that is scheduled, on the way, or arrived. It stays on record with the reason, and customer notices not yet sent for it are dropped.
reasonvisit_id必填Set a visit's priority: normal, urgent or emergency. Sends visit.priority_set. For urgent or emergency, call dispatch.suggest for who could go.
reasonpriority必填visit_id必填Read only: for an urgent or emergency visit, the shop's field workers and owners ranked by who is free (no overlapping visit, not on time off, inside their hours) and then by the fewest visits that day. Suggestions only; assign with visits.assign.
limitvisit_id必填One visit with its job and workers.
visit_id必填A shop's visits that overlap a time window, earliest first. Filter by worker, job, or only mine. Field workers only ever see their own.
to必填from必填minejob_idshop_id必填person_idunassignedinclude_cancelledSave the map point for a job's address, so routes.day can give it to you with each stop (owner or office). Look the address up with your own maps tools, or have a person type it in. Doing Work does not look addresses up. The point is kept for this shop's jobs at the same address.
lat必填lng必填job_idsourcevisit_idSave where a worker starts the day (their home or a yard), or with no person_id the shop's yard, used when a worker has none. Owner or office for anyone; a worker for themselves. A worker's own start is seen only by them and the owner or office.
lat必填lng必填label必填sourceshop_id必填person_idOne day's stops for planning a route, per worker in visit time order: each worker's start point (their own, else the shop yard), and for each stop the address, map point (null until you save one with routes.setLocation; source says where it came from), time, length, arrival window, priority, and locked when the worker is already on the way, there, or done. Visits with no worker come back in unassigned. Owner and office see everyone; a field worker sees only their own day. Plan the order with your own tools, then write it back with routes.apply.
date必填shop_id必填person_idsWrite a planned route back: new times, and optionally new workers, for up to 100 visits at once (owner or office). All or nothing: if any visit is not scheduled (already on the way, there, started, done or cancelled), not this shop's, or the plan leaves a worker with overlapping visits, nothing changes and the problems come back in conflicts. Pass allow_overlaps true to save overlaps anyway, or dry_run true to check without saving. Each moved visit gets its appointment reminder planned again once.
changes必填dry_runshop_id必填allow_overlapsAdd a supplier the shop buys parts from. Owner or office.
name必填noteemailphoneshop_id必填account_numberChange a supplier's name, contact details or note, or archive it (archived: true). Owner or office.
namenoteemailphonearchivedvendor_id必填account_numberList the shop's suppliers (archived ones only with include_archived). Owner or office.
shop_id必填include_archivedStart a purchase order (draft) for parts for a job from a supplier. Nothing counts as job cost until po.receive. Owner or office.
notelines必填job_id必填vendor_id必填Change a draft purchase order's supplier, note or lines (lines replace all lines). Owner or office.
notelinespo_id必填vendor_idA purchase order with its lines, what was received (in job cost) and the supplier's bill. Owner or office.
po_id必填List purchase orders for the shop, or for one job or supplier, newest first. Owner or office.
limitjob_idshop_id必填vendor_idMark a draft purchase order as sent to the supplier (the agent or a person sends it). Owner or office.
po_id必填Record parts that arrived. Each received line becomes a material on the job at the line's cost (this is the only way a purchase order reaches job cost; do not also add an expense for it). Leave lines out to receive everything left. Owner or office.
linespo_id必填visit_idTake back a received material from a purchase order (wrong part, returned). It leaves job cost and the line can be received again. Owner or office.
reasonmaterial_id必填Cancel a purchase order that has nothing received (undo receipts first). Owner or office.
po_id必填Record the supplier's bill for a purchase order, for paying the supplier. It is never added to job cost or expenses (the received materials already are); the difference from what was received is shown. Owner or office.
po_id必填bill_refbill_minor必填Make a calendar feed link (.ics) of one worker's visits that a calendar app subscribes to (read only). Leave person_id out for your own; owner or office can make one for any current member. A new feed turns that person's old one off. The link is shown once.
shop_id必填person_idCalendar feeds in a shop, newest first, with whether each is active and how often it was fetched. Field workers see only their own. The link is not shown again.
shop_id必填person_idTurn a calendar feed off now. Calendar apps that fetch it after this get 410 and stop showing new visits.
feed_id必填Set a worker's weekly hours, replacing what was there. Days are 0 (Sunday) to 6, times are shop local HH:MM. An empty list means no set hours (always available).
hours必填shop_id必填person_idAdd time off for a worker (vacation, sick, appointment).
reasonends_at必填shop_id必填person_idstarts_at必填Remove a time-off entry.
time_off_id必填A worker's weekly hours, time off, and booked visits in a window (at most 62 days). Defaults to me.
to必填from必填shop_id必填person_idThe shop's scheduling setup: time zone, booking hours (or the default when none are set), arrival window, travel buffer, reminder lead time, whether on the way notices go out, and whether arrival times are shown. on_my_way_notices covers both the on the way and the arrived notice. arrival_notices is off unless the shop turns it on. When on, an on the way message includes an arrival time when one is known (a stored route estimate, or the time the worker entered; no drive time is looked up). On the way and arrived each go by text and by email. Any worker in the shop can read it.
shop_id必填Set the shop's booking hours, replacing what was there (owner or office). Days are 0 (Sunday) to 6, times are shop local HH:MM, several blocks a day are fine. An empty list clears them, and find-a-time falls back to Monday to Friday 08:00 to 17:00. Visits outside these hours are still allowed and come back with outside_shop_hours.
hours必填shop_id必填Change the shop's scheduling rules (owner or office; the time zone is owner only). arrival_window_minutes is the default window customers are told for new visits (0 means an exact time). buffer_minutes is travel and setup time find-a-time keeps clear around booked visits. reminder_hours is how long before a visit the customer gets an appointment reminder (0 turns reminders off). on_my_way_notices tells the customer by text and by email when a worker says they are on the way. Text is the main one. The email goes whenever the customer has an email address, even if the text does not. arrival_notices (off by default) adds an arrival time to that message when one is known (a stored route estimate, or the time the worker entered; route data has no drive time, so with no worker time there is no arrival line). The arrived text and email follow on_my_way_notices, the same setting as the on the way message. A do-not-email address is not emailed. Only the fields you send change. Visits already booked keep their window and reminder.
shop_id必填time_zonebuffer_minutesreminder_hoursarrival_noticeson_my_way_noticesarrival_window_minutesFind open times for a visit of a given length. Looks inside shop hours (or Monday to Friday 08:00 to 17:00 when none are set), skips worker time off and times outside a worker's own hours, and keeps the shop's travel buffer clear around booked visits. Give person_ids or a saved crew_id (or both) to check those workers (together: all of them free at once, the default; or any one of them). Leave it out to check every worker in the shop and get back who is free. Field workers can only check themselves. Nothing is booked; call visits.create with a slot.
tofromlimitcrew_idshop_id必填togetherperson_idsstep_minutesduration_minutes必填Mark that the worker is on the way to a visit, with an optional ETA (eta_at, or eta_minutes from now). The worker on the visit (or the office) can do this. When the shop has on the way notices on, the customer gets a text and an email. Text is the main one. The email goes whenever the customer has an email address, even if the text is blocked, refused, or does not go through. When arrival notices are also on, the message includes an arrival time: a route estimate when the visit already has one, otherwise the time the worker entered, otherwise no arrival line. Route data stores the booked start and the arrival window, not a drive time. Doing Work does not look up a drive time.
eta_atvisit_id必填eta_minutesMark that the worker arrived at a visit. The worker on the visit (or the office) can do this. Any on the way message not yet sent is dropped. When on the way notices are on, the customer gets one arrived text and one arrived email. Text is the main one. The email goes whenever the customer has an email address, even if the text does not. A do-not-email address is not emailed. Once only.
visit_id必填Mark that the worker is on the way to a visit when they tell their agent, for example on my way, there by 2. eta is that time in their words and can be left out. A worker may call this only for a visit they are assigned to. The owner or office may call it for any visit in the shop. When on the way notices are on, the customer gets a text and an email. Text is the main one. The email goes whenever the customer has an email address, even if the text is blocked, refused, or does not go through. When arrival notices are also on, the message includes the time the worker gave. A repeat call does not send again.
etavisit_id必填Mark that the worker has arrived at a visit when they tell their agent, for example I am here. A worker may call this only for a visit they are assigned to. The owner or office may call it for any visit in the shop. When on the way notices are on, the customer gets one arrived text and one arrived email. Text is the main one. The email goes whenever the customer has an email address, even if the text does not. A do-not-email address is not emailed. When on the way notices are off, this sends nothing. A repeat call does not send again.
visit_id必填Customer notices planned or handled for a visit (appointment reminder, on the way, arrived), with status pending, queued (handed to text, email, or both), cancelled or skipped and why. Owner or office.
visit_id必填Times the shop marked open for its voice agent to book (upcoming only), and which are booked. Any worker in the shop can read it.
shop_id必填Mark times open for the shop's voice agent to book callers into (owner or office). The agent books them only when phone.setVoiceAi has book_open_slots true, which is off by default. Each slot is at most 12 hours and in the future. A booked slot becomes a request with that time for the office.
slots必填shop_id必填Take back an open time that is not booked yet (owner or office).
shop_id必填slot_id必填Turn the automatic unpaid-invoice reminder on or off for the whole shop (owner only). When on, a customer gets one friendly email reminder a set number of days (default 1) after an invoice or deposit request is sent if it is still unpaid. Mail comes from a doingwork.work address on the shop's behalf, with replies going to the owner.
enabled必填shop_id必填delay_daysSet the phone and email customers see when they open a canceled invoice or quote link (owner only). Leave a field out or send null to fall back to the owner's own email and phone.
emailphoneshop_id必填Let field workers in the shop see job costs (labor cost, material cost, expenses others entered, price book cost), or hide them again (owner only). Off by default. A worker whose own see_costs is off still does not see costs.
enabled必填shop_id必填Turn the customer hub link in quote and invoice emails on or off for the whole shop (owner only). On by default: each quote or invoice email the customer gets from Doing Work ends with a link to their hub, where they see their quotes, invoices and visits with you.
enabled必填shop_id必填Turn the automatic unpaid reminder on or off for one invoice (owner or office).
enabled必填invoice_id必填Add a price book item, or change one when item_id is given (owner or office). Items are a pick list for quote lines that workers write; they are never filled into a quote automatically.
kindnameunitpartsitem_idshop_id必填taxablecategorytask_codecost_minordescriptionest_minutes另有 4 個List the shop's price book items, by name. Filter by category or text; archived items are left out unless asked for. cost_minor is null for a worker the owner has not let see costs.
qshop_id必填categoryinclude_archivedArchive a price book item, or bring it back with archived false (owner or office). Quotes that used it keep their lines.
item_id必填archivedSave a quote template: worker-written lines (and good, better, best options) to start quotes from. Give template_id to replace one (owner or office).
name必填lines必填optionsshop_id必填template_idList the shop's saved quote templates with their lines. To use one, pass its lines and options to quotes.create, changed as the worker says.
shop_id必填include_archivedArchive a quote template, or bring it back with archived false (owner or office).
archivedtemplate_id必填What the customer has done with a quote: when each version was first opened and how often, and any decline or change request with its note.
quote_id必填Set how many days after a quote is sent the customer gets one friendly follow-up email if they have not answered (owner only). 0 turns it off. Default 3.
days必填shop_id必填Create an invoice without a quote, from lines the worker wrote (never filled in by AI). Optional due date, memo and deposit. Send it with invoices.send.
memolines必填due_onjob_id必填tax_rate_iddeposit_minorCreate many invoices at once (up to 100), each from a job and the lines the worker wrote. All or nothing. With send=true each is sent and its pay link returned.
senditems必填shop_id必填One invoice with its lines, what has been paid, the balance, the due date, and whether a bank payment is still clearing. display_status is payment_pending while a bank payment clears (3 to 5 business days), otherwise the invoice status. last_bank_payment_failed_at is set when the latest bank payment failed and the customer can pay again.
invoice_id必填The invoice as a PDF (base64), with shop, customer, lines, paid so far and balance. Attach it to email or save it.
invoice_id必填Accounts receivable aging: every open invoice's balance by how late it is (current, 1-30, 31-60, 61-90, over 90 days past due), with totals per customer (owner or office). An invoice with no due date is due when sent.
as_ofshop_id必填Turn tips on or off on this shop's invoice pay page (owner only). Off by default. A tip is paid with the invoice, never counts toward the invoice total, and shows in tips.report.
enabled必填shop_id必填Set the review link (for example your Google review page, https only) and how many days after an invoice is paid the customer gets one email asking for a review (owner only). No link means no email. Default 1 day; 0 turns it off. Review emails show the shop name and mailing_address in the footer, so a link can only be set once the shop has a mailing address (send it here).
daysshop_id必填review_urlmailing_addressTips customers paid, by invoice and in total, between two dates (owner or office). Tips are kept apart from invoice totals. Refunds of a payment are not split out from its tip.
to必填from必填shop_id必填How this shop's quotes and invoices look: accent color, license number, footer text, logo size, and whether "Sent with Doing Work" shows.
shop_id必填Set how this shop's quotes, invoices and emails to customers look, on the customer's page, in the PDF and in every email (owner only). The owner can also change it on the brand page at /p/shop/brand. Send only what changes; null clears a field. accent_color is "#rrggbb" and must reach 4.5 to 1 contrast on white (the default is #1f4fd1). logo_base64 is a PNG or JPEG of up to 5 MB, stored as a JPEG of at most 600 pixels on its long side. sent_with_doing_work (on by default) prints "Sent with Doing Work" in the PDF footer, on the page and at the bottom of emails.
footershop_id必填logo_base64accent_colorlicense_numbersent_with_doing_workA quote as a PDF (base64) in the shop's brand: logo, accent color, license number, lines, options and total. Financing links use the signed total once the customer has signed, and the lowest option until then. The latest version unless version is given. Attach it to email or save it.
versionquote_id必填Get a secure page where the customer saves a card with the shop's payment processor (owner or office). Send the link to the customer; Doing Work never sees the card number. Saving a new card replaces the old one.
customer_id必填The card a customer has on file (brand, last 4, expiry) and whether auto-pay is on (owner or office).
customer_id必填Remove a customer's saved card (owner or office). Auto-pay turns off with it.
customer_id必填Turn auto-pay on or off for a customer (owner or office). On needs a saved card. With auto-pay on, each invoice sent to them is charged to the card on its due date (or the day it is sent if it has none). A failed charge is not retried; you get an email and the pay link still works.
enabled必填customer_id必填Start a maintenance plan for a job's customer (owner or office). You write the priced lines for one term (never filled in by AI). The first term's invoice is created now (and sent if send_first is true). When a term ends, the next term's invoice is created automatically and sent if auto_send is on. With visits_per_term, each term also gets that many service due dates (see services.listDue), so the shop knows when each covered visit is due; schedule the actual visit with visits.create as usual.
name必填lines必填job_id必填auto_sendstarts_onsend_firsttax_rate_idterm_months必填visit_titlevisits_per_termOne maintenance plan: price per term, current term, renewal date, each term's invoice, and this term's covered visits with the next one due.
plan_id必填A shop's maintenance plans, optionally for one customer or by status, soonest renewal first.
statusshop_id必填customer_idReplace a plan's priced lines (owner or office; you write them, never AI), and optionally its tax rate. Applies from the next term's invoice; invoices already made keep their price.
lines必填plan_id必填tax_rate_idChange how many visits a plan covers each term, and what they are called (owner or office). Applies from the next term. Pass this_term true to also add them now to the current term when it has none yet.
plan_id必填this_termvisit_titlevisits_per_term必填Cancel a maintenance plan (owner or office). No more renewal invoices. Invoices already sent stay as they are. The plan's open visit due dates are cancelled.
plan_id必填Add or change a sales tax rate the shop charges in one jurisdiction (owner or office). You enter the rate; Doing Work never looks it up. rate_bps is hundredths of a percent (600 = 6%). Changing a rate applies to new quotes and invoices only. is_default makes it the rate used when a quote or invoice does not name one.
name必填shop_id必填rate_bps必填is_defaulttax_rate_idjurisdiction必填The shop's tax rates. Archived (replaced or removed) rates are left out unless include_archived is true.
shop_id必填include_archivedStop using a tax rate (owner or office). Quotes and invoices that already used it keep it.
tax_rate_id必填Choose how the sales tax report counts a period (owner only). accrual (default): invoices sent in the period. cash: money collected in the period, after refunds. Pick the one your state files on.
basis必填shop_id必填Sales tax report for a period (owner or office), shop local dates, from and to inclusive. Uses the shop's basis (shops.setTaxReportBasis) unless basis is given. accrual: invoices sent in the period, with sales, taxable sales, tax billed, and tax collected so far. cash: money collected in the period through Doing Work (payments minus refunds, tips left out), with the tax share of it. Grouped by the tax name, jurisdiction and rate on each invoice. Untaxed sales are one row with no rate. Void invoices are left out. For filing, check the numbers against your own records.
to必填from必填basisshop_id必填Show an uploaded photo or file of the same job with a quote, with an optional caption. Upload it first with the media ops. The customer sees it on the quote page.
captionmedia_id必填quote_id必填Take a photo or file off a quote. The media item itself stays on the job.
attachment_id必填Photos and files shown with a quote, in order.
quote_id必填Add or remove tags on a photo (for example: leak, panel, permit). Tags are lower case; returns the photo's tags.
addremovemedia_id必填Every tag used in the shop, with how many photos and jobs carry it.
shop_id必填Find photos across the shop that carry all the given tags. Narrow by job, stage, or upload dates (shop time zone). Newest first, up to 200.
tofromtagslimitstagejob_idshop_id必填Jobs in the shop that carry all the given tags (set with jobs.setTags), newest first, up to 200.
tags必填shop_id必填Save markup over a photo as a new layer version: arrows, lines, boxes, circles, text and freehand strokes in 0..1 photo coordinates (0,0 is top left). The photo is never changed; earlier versions are kept. An empty list clears the markup.
shapes必填media_id必填A photo's markup: the latest version unless one is named, with an SVG overlay to lay over the original photo. Also lists all versions.
versionmedia_id必填Make a link to a gallery of a job's photos that anyone with the link can open without signing in. Name the photos, or leave media_ids out to share every photo on the job (including ones added later). Expires after days (1 to 90, default 14); revoke it any time. Markup shows over the photos unless include_markup is false. Set include_daily_log to also show the job's daily log entries (off by default; names of who wrote them are not shown). The url is shown once.
daystitlejob_id必填media_idsinclude_markupinclude_daily_logPhoto share links on a job, newest first, with whether each is still active and how often it was opened. The link itself is not shown again.
job_id必填Turn a photo share link off now. Anyone opening it after this sees that it is no longer available.
share_id必填Write a daily log entry on a job: what happened on site that day, in the worker's own words. Any shop member can add one. log_date defaults to today in the shop's time zone. Attach photos already on the job with media_ids.
body必填job_id必填log_datemedia_idsDaily log entries on a job, oldest first, optionally between two dates (inclusive). Removed entries are left out.
tofromjob_id必填Take a daily log entry out of the log. Only the worker who wrote it or the owner can. It stays in history and in any PDF already made.
entry_id必填Render a photo report PDF for a job: a title and the worker's own notes, then the job's photos in time order with stage and tags. Name photos with media_ids or leave it out for every photo on the job. Core stores the PDF with its sha256 and returns it (base64).
notestitlejob_id必填media_idsRender the daily log for a job as a PDF: each day's entries in the workers' own words with who wrote them, and the photos they attached. Optional from and to dates (inclusive). Core stores the PDF with its sha256 and returns it (base64).
tofromjob_id必填include_photosPDF documents core made for a job (photo reports, daily logs and submitted forms), newest first, with each file's sha256.
job_id必填One stored job PDF (base64) with its sha256, byte for byte as it was made.
document_id必填Record money a worker spent on a job, with the receipt photo. Parts received on a purchase order are already job cost; when the vendor matches a received purchase order on the job, possible_po_duplicates lists it so you can ask before keeping both. The worker types the amount and tax from the receipt; core never reads or fills in amounts. spent_on defaults to today in the shop's time zone.
notejob_id必填vendorcategoryspent_ontax_minoramount_minor必填receipt_media_idChange an expense: date, vendor, category, amount, tax, receipt photo or note. Amounts are still typed by a worker. The worker who entered it, the owner or office can change it.
notevendorcategoryspent_ontax_minorexpense_id必填amount_minorreceipt_media_idTake an expense off the books (kept in history). The worker who entered it, the owner or office can.
expense_id必填Expenses on a job, or across the shop between dates, with totals by category. Owner and office see every expense; a field worker sees the ones they entered.
tofromjob_idshop_idcategorySearch one shop for customers (name, email, phone), properties (address), jobs (summary), requests (title), notes (words, on any record) and photos and videos (what the agent said they show, readable text such as serial numbers, video transcripts). Case-insensitive; you see only what your role can read.
q必填limitshop_id必填Every event a webhook can receive, with its payload keys and types. Approved agent actions add requested_by_token_id to any event.
無需輸入參數。
List deliveries to one webhook endpoint, newest first, with event, status, attempts and last HTTP status.
limitstatusbefore_idendpoint_id必填Send a failed or dead delivery again from attempt 0 (owner or office).
delivery_id必填The customer import fields and the built-in presets (jobber, housecall_pro, companycam) with the export column each reads.
無需輸入參數。
Dry run of a customer CSV import. Writes nothing. Returns the headers, a suggested mapping (from a preset or the header names), and for every row the customer it would create or the problems found. Show the mapping to the owner before imports.run.
csv必填presetsourcemappingshop_id必填on_matchOwner only: import customers (and one service address each) from a CSV with the mapping the owner confirmed. mode all_or_nothing (default) writes nothing if any row fails; per_row writes the good rows and reports the rest. dry_run true checks without writing.
csv必填modesourcedry_runmapping必填shop_id必填on_matchpreview_hashFields for importing history from another system (jobs with visit history, open quotes, unpaid invoices, price book, equipment, maintenance plans as service-due reminders, payment history as read-only records) and the jobber and housecall_pro presets per kind.
無需輸入參數。
Dry run of a history import (kind jobs, quotes, invoices, pricebook, equipment, maintenance_plans, payments or flat_rate). Writes nothing. Returns a suggested mapping, what each record would do (create, update, skip, skip_blank, skip_closed or error) with how its customer matched, and a preview_hash. Show it to the owner; imports.historyRun needs the same hash.
csv必填kind必填presetsourcemappingshop_id必填on_matchplans_asequipment_kindOwner only: write a history import the owner confirmed in imports.historyPreview (send its preview_hash, plus the same csv, kind, source, on_match and mapping). Records already imported are matched by old id and skipped or updated, never duplicated. Imported quotes and invoices are drafts and are not sent. Maintenance plans become service-due reminders (no invoice, no charge), or with plans_as billed, maintenance plans at the confirmed price with auto_send off and no invoice until the next due date; payments become read-only history records (no charge, no fee, no invoice change). flat_rate rows become price book tasks, matched by old id, then task code, then name. mode all_or_nothing (default) or per_row.
csv必填kind必填modesourcemapping必填shop_id必填on_matchplans_aspreview_hash必填equipment_kindOwner or office: payments imported from another system (read-only history; never charged, never counted toward Doing Work fees). Filter by customer_id.
limitshop_id必填customer_idOwner only: everything the shop holds as one ZIP: data/<table>.csv and data/<table>.json for every shop table, files/ with job photos (and the original HEIC or TIFF file next to its JPEG copy) and PDFs, and manifest.json. Signing secrets and token hashes are left out. By default you get download_url, a link that works for 60 minutes and up to 5 downloads; anyone with the link can download, so do not share it. delivery "inline" returns zip_base64 instead, only for exports up to 10 MB. Large shops: pass include_files false for data only.
shop_id必填deliverylink_minutesinclude_files已滿足適用檢查項的 83%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請宣告包含 README 的 GitHub 儲存庫,或在 OAuth 受保護資源後設資料中提供 resource_documentation。
託管服務按其提供方的條款使用,因此這裡不要求授權條款。此檢查項不計入百分比。