BUSINESS · CRM & SUPPORT
Customers, tickets, invoices, and inventory in that shop’s own account.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
repairshopr_delete_appointment_types_by_idWRITEDeletes an Appointment Type by ID -- Required permission: Global Admin via DELETE /appointment_types/{id}
repairshopr_delete_appointments_by_idWRITEDeletes an Appointment by ID -- No special permissions required. via DELETE /appointments/{id}
repairshopr_delete_canned_responses_by_idWRITEDeletes a Canned Response -- Required permission: Ticket Canned Responses - Manage via DELETE /canned_responses/{id}
repairshopr_delete_contacts_by_idWRITEDeletes a Contact -- Required permission: Customers - Edit Single-Customer Users can only access own contacts. via DELETE /contacts/{id}
repairshopr_delete_contracts_by_idWRITEDeletes a Contract by ID -- Required permission: Contracts - Delete via DELETE /contracts/{id}
repairshopr_delete_customers_by_customer_id_payment_profiles_by_idWRITEDeletes a Payment Profile via DELETE /customers/{customer_id}/payment_profiles/{id}
repairshopr_delete_customers_by_customer_id_phones_by_idWRITEDeletes a Phone by ID -- Required permission: Customers - Edit Single-Customer Users can only access own. via DELETE /customers/{customer_id}/phones/{id}
repairshopr_delete_customers_by_idWRITEDeletes a Customer by ID -- Required permission: Customers - Delete via DELETE /customers/{id}
repairshopr_delete_estimates_by_idWRITEDeletes an Estimate by ID -- Required permission: Estimates - Delete via DELETE /estimates/{id}
repairshopr_delete_estimates_by_id_line_items_by_line_item_idWRITEDeletes a Line Item -- Required permission: Estimates - Edit via DELETE /estimates/{id}/line_items/{line_item_id}
repairshopr_delete_invoices_by_idWRITEDeletes an invoice by ID -- Returns 200 even if the delete fails via DELETE /invoices/{id}
repairshopr_delete_invoices_by_id_line_items_by_line_item_idWRITEDeletes an a line item of an invoice by ID -- This deletes an existing Invoice's line item via DELETE /invoices/{id}/line_items/{line_item_id}
repairshopr_delete_portal_users_by_idWRITEDeletes a Portal User by ID -- Required permission: Global Admin via DELETE /portal_users/{id}
repairshopr_delete_products_by_id_delete_imageWRITEDeletes a Product Image via DELETE /products/{id}/delete_image
repairshopr_delete_products_by_product_id_product_skus_by_idWRITEDeletes a Product SKU by ID -- Required permission: Products - Edit via DELETE /products/{product_id}/product_skus/{id}
repairshopr_delete_rmm_alerts_by_idWRITEDeletes/Clears an RMM Alert by ID -- Required permission: RMM Alerts - Delete Single-Customer Users can only access own RMM Alerts. via DELETE /rmm_alerts/{id}
repairshopr_delete_schedules_by_idWRITEDeletes a Schedule by ID -- Required permission: Recurring Invoices - Delete via DELETE /schedules/{id}
repairshopr_delete_schedules_by_id_line_items_by_schedule_line_item_idWRITERemoves a Line Item from an Invoice Schedule -- Required permission: Recurring Invoices - Edit `POST /schedules/{id}/remove_line_item` is an older alias for this endpoint and behaves identically. via DELETE /schedules/{id}/line_items/{schedule_line_item_id}
repairshopr_delete_tickets_by_idWRITEDeletes a Ticket by ID -- Required permission: Tickets - Delete Single-Customer Users can only access own tickets. via DELETE /tickets/{id}
repairshopr_delete_tickets_by_ticket_id_worksheet_results_by_idWRITEDeletes a Worksheet Result -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. via DELETE /tickets/{ticket_id}/worksheet_results/{id}
repairshopr_delete_wiki_pages_by_idWRITEDeletes a Wiki Page by ID -- Required permission: Documentation - Delete via DELETE /wiki_pages/{id}
repairshopr_get_appointment_typesREADReturns a paginated list of Appointment Types -- Required permission: Global Admin via GET /appointment_types
repairshopr_get_appointment_types_by_idREADRetrieves an Appointment Type by ID -- Required permission: Global Admin via GET /appointment_types/{id}
repairshopr_get_appointmentsREADReturns a paginated list of Appointments -- Required permission: Appointments - View All (see-own never restricted) via GET /appointments
repairshopr_get_appointments_by_idREADRetrieves an Appointment by ID -- No special permissions required. via GET /appointments/{id}
repairshopr_get_calleridREADGet Caller ID via GET /callerid
repairshopr_get_canned_responsesREADReturns a list of Canned Responses with a query -- Required permission: Ticket Canned Responses - Manage via GET /canned_responses
repairshopr_get_canned_responses_settingsREADReturns the settings for Canned Responses -- Required permission: Ticket Canned Responses - Manage Single-Customer Users can only access own canned responses. via GET /canned_responses/settings
repairshopr_get_contactsREADReturns a paginated list of Contacts -- Required permission: Customers - View Detail Single-Customer Users can only access own contacts. via GET /contacts
repairshopr_get_contacts_by_idREADRetrieves a Contact by ID -- Required permission: Customers - View Detail Single-Customer Users can only access own contacts. via GET /contacts/{id}
repairshopr_get_contractsREADReturns a paginated list of Contracts -- Required permission: Contracts - List/Search Every contract in the list carries the same covered-item fields as `GET /contracts/{id}`. Covered items are part of the contract payload: * `product_price_overrides` — the covered products with their contracted rate (`price_retail_cents` or `discount_percentage`) and their block-list status (`blacklisted`, meaning the product is billed separately from the contract). * `non_billable_product_ids` — products covered by the contract and therefore not billed on their own. * `schedule_ids` — the recurring invoice schedules this contract governs. Link a schedule to a contract by sending `contract_id` to the Schedule endpoints. via GET /contracts
repairshopr_get_contracts_by_idREADRetrieves a Contract by ID -- Required permission: Contracts - Edit Covered items are part of the contract payload: * `product_price_overrides` — the covered products with their contracted rate (`price_retail_cents` or `discount_percentage`) and their block-list status (`blacklisted`, meaning the product is billed separately from the contract). * `non_billable_product_ids` — products covered by the contract and therefore not billed on their own. * `schedule_ids` — the recurring invoice schedules this contract governs. Link a schedule to a contract by sending `contract_id` to the Schedule endpoints. via GET /contracts/{id}
repairshopr_get_customer_assetsREADReturns a paginated list of Assets -- Required permission: Assets - List/Search Single-Customer Users can only access own assets. via GET /customer_assets
repairshopr_get_customer_assets_assets_by_contact_by_contact_idREADReturns a list of Assets for a specific contact -- Required permission: Assets - List/Search Returns a list of assets associated with a specific contact ID. via GET /customer_assets/assets_by_contact/{contact_id}
repairshopr_get_customer_assets_by_idREADRetrieves an Asset by ID -- Required permission: Assets - View Details Single-Customer Users can only access own assets. via GET /customer_assets/{id}
repairshopr_get_customer_assets_by_id_installed_applicationsREADRetrieves installed applications for an Asset -- Required permission: Assets - List/Search Single-Customer Users can only access own assets. Returns a paginated list of software installed on the asset. The `installed_at` date falls back to `created_at` when no explicit installation date is recorded. via GET /customer_assets/{id}/installed_applications
repairshopr_get_customer_assets_by_id_patchesREADRetrieves Windows patch data for an Asset -- Required permission: Assets - List/Search Single-Customer Users can only access own assets. via GET /customer_assets/{id}/patches
repairshopr_get_customer_assets_chat_information_by_idsREADRetrieves Assets by ID -- Required permission: Assets - List/Search Single-Customer Users can only access own assets. via GET /customer_assets/chat_information_by_ids
repairshopr_get_customersREADReturns a paginated list of customers -- Required permission: Customers - List/Search Single-Customer Users can only access own customer (self). via GET /customers
repairshopr_get_customers_autocompleteREADReturns a paginated list of customers for autocomplete query via GET /customers/autocomplete
repairshopr_get_customers_by_customer_id_payment_profilesREADReturns a paginated list of Payment Profiles via GET /customers/{customer_id}/payment_profiles
repairshopr_get_customers_by_customer_id_payment_profiles_by_idREADRetrieves a Payment Profile by ID via GET /customers/{customer_id}/payment_profiles/{id}
repairshopr_get_customers_by_customer_id_phonesREADReturns a paginated list of Phones -- Required permission: Customers - View Detail Single-Customer Users can only access own. via GET /customers/{customer_id}/phones
repairshopr_get_customers_by_idREADRetrieves a Customer by ID -- Required permission: Customers - View Detail Single-Customer Users can only access own customer (self). via GET /customers/{id}
repairshopr_get_customers_latestREADReturns latest Customer -- Required permission: Customers - Edit Single-Customer Users can only access own customer (self). via GET /customers/latest
repairshopr_get_estimatesREADReturns a paginated list of Estimates -- Required permission: Estimates - List/Search via GET /estimates
repairshopr_get_estimates_by_idREADRetrieves an Estimate by ID or number -- Required permission: Estimates - View Details via GET /estimates/{id}
repairshopr_get_invoicesREADReturns a paginated list of Invoices -- Required permission: Invoices - List/Search via GET /invoices
repairshopr_get_invoices_by_idREADRetrieves an Invoice by ID or Number -- Required permission: Invoices - View Details via GET /invoices/{id}
repairshopr_get_invoices_by_id_ticketREADReturns the associated ticket for an invoice -- Required permissions: "Invoices - View Details" and "Tickets - View Details" via GET /invoices/{id}/ticket
repairshopr_get_itemsREADReturns a paginated list of Part Orders -- Required permission: Parts Orders - List/Search via GET /items
repairshopr_get_leadsREADReturns a paginated list of Leads -- Required permission: Leads - List/Search via GET /leads
repairshopr_get_leads_by_idREADRetrieves a Lead by ID -- Required permission: Leads - List/Search via GET /leads/{id}
repairshopr_get_line_itemsREADReturns a paginated list of Line Items -- Required permission: Global Admin via GET /line_items
repairshopr_get_meREADReturns the current user via GET /me
repairshopr_get_new_ticket_formsREADReturns a paginated list of Ticket Forms -- Required permission: Ticket Workflows - Manage via GET /new_ticket_forms
repairshopr_get_new_ticket_forms_by_idREADRetrieves a Ticket Form -- Required permission: Tickets - Create via GET /new_ticket_forms/{id}
repairshopr_get_payment_methodsREADReturns a paginated list of Payment Methods -- All Users except Co-Managed Support Users may use this action. via GET /payment_methods
repairshopr_get_paymentsREADReturns a paginated list of Payments -- Required permission: Payments - View List via GET /payments
repairshopr_get_payments_by_idREADRetrieves a Payment by ID -- Required permission: Payments - View List via GET /payments/{id}
repairshopr_get_portal_usersREADReturns a paginated list of Portal Users -- Required permission: Global Admin via GET /portal_users
repairshopr_get_productsREADReturns a paginated list of Products -- Required permission: Products - List/Search via GET /products
repairshopr_get_products_barcodeREADReturns a Product by Barcode -- Required permission: Products - List/Search via GET /products/barcode
repairshopr_get_products_by_idREADRetrieves a Product by ID -- Required permission: Products - List/Search via GET /products/{id}
repairshopr_get_products_by_product_id_product_serialsREADReturns a paginated list of Product_serials -- Required permission: Products - List/Search via GET /products/{product_id}/product_serials
repairshopr_get_products_by_product_id_product_skusREADReturns a list of Product SKUs -- Required permission: Products - List/Search via GET /products/{product_id}/product_skus
repairshopr_get_products_categoriesREADReturns a paginated list of Product Categories -- Required permission: Products - List/Search via GET /products/categories
repairshopr_get_purchase_ordersREADReturns a paginated list of Purchase Orders -- Required permission: Purchase Orders - List/Search via GET /purchase_orders
repairshopr_get_purchase_orders_by_idREADRetrieves a Purchase Order by ID -- Required permission: Purchase Orders - View Details via GET /purchase_orders/{id}
repairshopr_get_rmm_alertsREADReturns a paginated list of RMM Alerts -- Required permission: RMM Alerts - List Single-Customer Users can only access own RMM Alerts. via GET /rmm_alerts
repairshopr_get_rmm_alerts_by_idREADRetrieves an RMM Alert by ID -- Required permission: RMM Alerts - List Single-Customer Users can only access own RMM Alerts. via GET /rmm_alerts/{id}
repairshopr_get_schedulesREADReturns a paginated list of Invoice Schedules -- Required permission: Recurring Invoices - List via GET /schedules
repairshopr_get_schedules_by_idREADRetrieves a Schedule by ID -- Required permission: Recurring Invoices - List via GET /schedules/{id}
repairshopr_get_searchREADSearch all the things -- Additional permissions required depending on search results type: - Customer, Contact, Asset: "Customers - List/Search" - Lead: Leads - List/Search - Invoice: Invoices - List/Search - Estimate: Estimates - List/Search - Ticket: Tickets - List/Search - Product: Products - List/Search - Purchase Order, Vendor: Purchase Orders - List/Search - Report: Reports - View - Wiki: Documentation - Allow Usage via GET /search
repairshopr_get_settingsREADReturns a list of Account Settings with rollout via GET /settings
repairshopr_get_settings_printingREADReturns Printing Settings via GET /settings/printing
repairshopr_get_settings_tabsREADReturns Tabs Settings via GET /settings/tabs
repairshopr_get_ticket_blueprintsREADReturns a paginated list of Ticket Blueprints -- Required permission: Ticket Blueprints - Manage Returns only blueprints available for ticket creation (hidden_for_ticket_creation: false). via GET /ticket_blueprints
repairshopr_get_ticket_commentsREADReturns a paginated flat list of comments across multiple tickets -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Returns a flat, paginated list of comments across multiple tickets sorted by ticket_id ASC, created_at DESC. All comments for a given ticket are adjacent in the response, with the newest comments first within each ticket. Comments can be scoped to specific tickets using a saved Ticket View (ticket_search_id) and/or direct ticket filters such as customer_id, status, etc. Comment-level date filters use the `comment_` prefix to distinguish them from the ticket-level date filters that share similar names (e.g. created_after). Single-Customer Users can only access comments for their own tickets. via GET /ticket_comments
repairshopr_get_ticket_timersREADReturns a paginated list of Ticket Timers -- Required permission: Ticket Timers - Overview via GET /ticket_timers
repairshopr_get_ticketsREADReturns a paginated list of Tickets -- Required permission: Tickets - List/Search Single-Customer Users can only access own tickets. via GET /tickets
repairshopr_get_tickets_by_idREADRetrieves a Ticket by ID -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. via GET /tickets/{id}
repairshopr_get_tickets_by_id_commentsREADReturns Comments for a Ticket -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access comments for their own tickets. via GET /tickets/{id}/comments
repairshopr_get_tickets_by_ticket_id_worksheet_resultsREADReturns a paginated list of Worksheet Results -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. via GET /tickets/{ticket_id}/worksheet_results
repairshopr_get_tickets_by_ticket_id_worksheet_results_by_idREADRetrieves a Worksheet Result by ID -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. via GET /tickets/{ticket_id}/worksheet_results/{id}
repairshopr_get_tickets_settingsREADReturns Tickets Settings via GET /tickets/settings
repairshopr_get_timelogsREADReturns a paginated list of Timelogs -- Users with permission "Timelogs - Manage" may see timelogs for any/all users. Otherwise, results scoped to current user. via GET /timelogs
repairshopr_get_timelogs_lastREADReturns last Timelog -- Users with permission "Timelogs - Manage" may see timelogs for any/all users. Otherwise, results scoped to current user. via GET /timelogs/last
repairshopr_get_user_devices_by_idREADRetrieves an existing User Device by UUID via GET /user_devices/{id}
repairshopr_get_usersREADReturns a paginated list of Users via GET /users
repairshopr_get_users_by_idREADRetrieves an existing User by ID via GET /users/{id}
repairshopr_get_vendorsREADReturns a paginated list of Vendors -- Required permission: Vendors - List via GET /vendors
repairshopr_get_vendors_by_idREADRetrieves a Vendor Page -- Required permission: Vendors - View Details via GET /vendors/{id}
repairshopr_get_wiki_pagesREADReturns a paginated list of Wiki Pages -- Required permission: Documentation - Allow Usage via GET /wiki_pages
repairshopr_get_wiki_pages_by_idREADRetrieves a Wiki Page -- Required permission: Documentation - Allow Usage via GET /wiki_pages/{id}
repairshopr_patch_canned_responses_by_idWRITEUpdates a Canned Response -- Required permission: Ticket Canned Responses - Manage via PATCH /canned_responses/{id}
repairshopr_patch_ticket_timers_by_idWRITEUpdates an existing Ticket Timer by ID -- Required permission: Ticket Timers - Overview via PATCH /ticket_timers/{id}
repairshopr_post_appointment_typesWRITECreates an Appointment Type -- Required permission: Global Admin via POST /appointment_types
repairshopr_post_appointmentsWRITECreates an Appointment -- No special permissions required. via POST /appointments
repairshopr_post_canned_responsesWRITECreates a new Canned Response -- Required permission: Ticket Canned Responses - Manage via POST /canned_responses
repairshopr_post_contactsWRITECreates a Contact -- Required permission: Customers - Edit Single-Customer Users can only access own contacts. via POST /contacts
repairshopr_post_contractsWRITECreates a Contract -- Required permission: Contracts - Edit A complete contract — top-level attributes, covered items with their contracted rates, the block-list and the non-billable products — is created in this one call. Covered items are part of the contract payload: * `product_price_overrides` — the covered products with their contracted rate (`price_retail_cents` or `discount_percentage`) and their block-list status (`blacklisted`, meaning the product is billed separately from the contract). * `non_billable_product_ids` — products covered by the contract and therefore not billed on their own. * `schedule_ids` — the recurring invoice schedules this contract governs. Link a schedule to a contract by sending `contract_id` to the Schedule endpoints. via POST /contracts
repairshopr_post_customer_assetsWRITECreates an Asset -- Required permission: Assets - Create Single-Customer Users can only access own assets. via POST /customer_assets
repairshopr_post_customersWRITECreates a Customer -- Required permission: Customers - Create via POST /customers
repairshopr_post_customers_by_customer_id_payment_profilesWRITECreates a Payment Profile via POST /customers/{customer_id}/payment_profiles
repairshopr_post_customers_by_customer_id_phonesWRITECreates a Phone -- Required permission: Customers - Edit Single-Customer Users can only access own. via POST /customers/{customer_id}/phones
repairshopr_post_estimatesWRITECreates an Estimate -- Required permission: Estimates - Create via POST /estimates
repairshopr_post_estimates_by_id_convert_to_invoiceWRITEConvert an Estimate to an Invoice -- Required permissions: "Estimates - View Details" and "Invoices - Create" via POST /estimates/{id}/convert_to_invoice
repairshopr_post_estimates_by_id_emailWRITESends an Estimate to a Customer -- Required permission: Estimates - View Details via POST /estimates/{id}/email
repairshopr_post_estimates_by_id_line_itemsWRITEAdds a Line Item to an Estimate -- Required permission: Estimates - Edit via POST /estimates/{id}/line_items
repairshopr_post_estimates_by_id_printWRITEQueues a print job for an Estimate -- Required permission: Estimates - View Details via POST /estimates/{id}/print
repairshopr_post_invoicesWRITECreates an Invoice -- Required permission: Invoices - Create `subtotal`, `total`, `tax`, `balance_due`, `is_paid`, `verified_paid`, `tech_marked_paid`, `pdf_url`, `customer_business_then_name` and `hardwarecost` are computed from the line items and payments. They are returned on every response but ignored in a request; this endpoint has never accepted them. via POST /invoices
repairshopr_post_invoices_by_id_emailWRITESends invoice to customer -- Required permission: Invoices - View Details via POST /invoices/{id}/email
repairshopr_post_invoices_by_id_line_itemsWRITECreates a new line item -- Required permission: Invoices - Edit via POST /invoices/{id}/line_items
repairshopr_post_invoices_by_id_printWRITEQueues a print job for an invoice -- Required permission: Invoices - View Details via POST /invoices/{id}/print
repairshopr_post_leadsWRITECreates a Lead -- Required permission: None via POST /leads
repairshopr_post_new_ticket_forms_by_id_process_formWRITECreates a new Ticket for a Ticket Form -- Required permission: Tickets - Create via POST /new_ticket_forms/{id}/process_form
repairshopr_post_otp_loginWRITEAuthorize a User with One Time Password via POST /otp_login
repairshopr_post_paymentsWRITECreates a Payment -- Required permission: Payments - Create via POST /payments
repairshopr_post_portal_usersWRITECreates a Portal User -- Required permission: Global Admin via POST /portal_users
repairshopr_post_portal_users_create_invitationWRITECreates an Invitation for a Portal User -- Required permission: Global Admin via POST /portal_users/create_invitation
repairshopr_post_productsWRITECreates a Product -- Required permission: Products - Create via POST /products
repairshopr_post_products_by_id_add_imagesWRITECreates a Product Image -- Required permission: Products - Edit via POST /products/{id}/add_images
repairshopr_post_products_by_product_id_product_serialsWRITECreates a Product Serial -- Required permission: Products - Edit via POST /products/{product_id}/product_serials
repairshopr_post_products_by_product_id_product_serials_attach_to_line_itemWRITEAdds Product Serials to a Line Item -- Required permission: Products - List/Search Additional permissions required depending on "record_type": - LineItem: "Invoices - Edit" or "Estimates - Edit" - TicketLineItem: Tickets - Edit via POST /products/{product_id}/product_serials/attach_to_line_item
repairshopr_post_products_by_product_id_product_skusWRITECreates a Product SKU -- Required permission: Products - Edit via POST /products/{product_id}/product_skus
repairshopr_post_purchase_ordersWRITECreates a Purchase Order -- Required permission: Purchase Orders - Edit via POST /purchase_orders
repairshopr_post_purchase_orders_by_id_create_po_line_itemWRITEAdds a Product to a Purchase Order -- Required permission: Purchase Orders - Edit via POST /purchase_orders/{id}/create_po_line_item
repairshopr_post_purchase_orders_by_id_receiveWRITEreceive purchase_order -- Required permission: Purchase Orders - Edit via POST /purchase_orders/{id}/receive
repairshopr_post_rmm_alertsWRITECreates an RMM Alert -- Required permission: RMM Alerts - Create Single-Customer Users can only access own RMM Alerts. via POST /rmm_alerts
repairshopr_post_rmm_alerts_by_id_muteWRITEMutes an RMM Alert by ID -- Required permission: RMM Alerts - Clear/Manage Single-Customer Users can only access own RMM Alerts. via POST /rmm_alerts/{id}/mute
repairshopr_post_rmm_public_scripts_by_asset_id_scheduleWRITESchedules a Script on an Asset -- Required permission: Scripts - Execute Single-Customer Users can only access own assets. via POST /rmm/public_scripts/{asset_id}/schedule
repairshopr_post_schedulesWRITECreates an Invoice Schedule -- Required permission: Recurring Invoices - New Accepts every settable field on a schedule, so a schedule can be fully configured in one call. Add its line items afterwards with `POST /schedules/{id}/line_items`, or seed them from an existing invoice by passing `invoice_id`. `id`, `account_id`, `created_at`, `updated_at` and `last_run` are read-only. So are `subscription_status` and `recurring_type_id`, which are maintained for you: the first is recomputed from the linked contract and the unpaid invoice count on every run, and the second is what selects the billing engine for the whole schedule. Every id in the request is checked against your account before anything is written, so a rejected request changes nothing. Errors come back as `{"error": ["Location can't be found", ...]}` with status 422. via POST /schedules
repairshopr_post_schedules_by_id_add_line_itemWRITEAdds a Line Item to an Invoice Schedule (deprecated) -- Required permission: Recurring Invoices - Edit **Deprecated.** Identical to `POST /schedules/{id}/line_items`, which matches the Invoice and Estimate APIs. Kept for existing integrations; use the nested route instead. via POST /schedules/{id}/add_line_item
repairshopr_post_schedules_by_id_line_itemsWRITEAdds a Line Item to an Invoice Schedule -- Required permission: Recurring Invoices - Edit Most fields only apply to one kind of line, chosen with `recurring_type_id`; the descriptions say which. `POST /schedules/{id}/add_line_item` is an older alias for this endpoint and behaves identically. via POST /schedules/{id}/line_items
repairshopr_post_schedules_by_id_remove_line_itemWRITERemoves a Line Item from an Invoice Schedule (deprecated) -- Required permission: Recurring Invoices - Edit **Deprecated.** Identical to `DELETE /schedules/{id}/line_items/{schedule_line_item_id}`, which matches the Invoice and Estimate APIs. Kept for existing integrations; use the nested route instead. via POST /schedules/{id}/remove_line_item
repairshopr_post_ticket_blueprints_by_id_applyWRITECreates tickets from a Blueprint -- Required permission: Ticket Blueprints - Create Ticket From Blueprint Creates a parent ticket and child tickets from the blueprint, assigned to the given customer. Returns the parent ticket ID and array of child ticket IDs. via POST /ticket_blueprints/{id}/apply
repairshopr_post_ticket_timersWRITECreates a Ticket Timer that starts running -- Required permission: Ticket Timers - Overview Creates a Ticket Timer that starts directly in status_running (start_time is set to now, end_time is left unset). The timer always belongs to the authenticated technician — any client-supplied user_id is ignored. A technician holds at most one active timer per ticket. If they already have a running or paused timer on the ticket it is resumed and returned with a 200 rather than a second timer being created, and the request body is ignored. An omitted or null `billable` resolves to the account's "time is non-billable by default" setting, matching the Web App. via POST /ticket_timers
repairshopr_post_ticket_timers_by_id_pauseWRITEPauses a running Ticket Timer -- Required permission: Ticket Timers - Overview Pauses a running Ticket Timer. Returns a 422 if the timer is not currently running. via POST /ticket_timers/{id}/pause
repairshopr_post_ticket_timers_by_id_startWRITEStarts (or resumes a paused) Ticket Timer -- Required permission: Ticket Timers - Overview Starts a Ticket Timer that has never been started, or resumes a paused one. Returns a 422 if the timer is already running or has been stopped. via POST /ticket_timers/{id}/start
repairshopr_post_ticket_timers_by_id_stopWRITEStops a running or paused Ticket Timer -- Required permission: Ticket Timers - Overview Stops a running or paused Ticket Timer. Returns a 422 if the timer is already stopped. If the account has `ticket_timer_charge_by_default` enabled, this also creates the ticket line item for the charged time. via POST /ticket_timers/{id}/stop
repairshopr_post_ticketsWRITECreates a Ticket -- Required permission: Tickets - Create Sending `parent_id` additionally requires: Ticket Parent-Child - Edit. Requests that send it without that permission, or on an account without parent/child tickets enabled, are rejected with 403. Single-Customer Users can only access own tickets. via POST /tickets
repairshopr_post_tickets_by_id_add_line_itemWRITECreates a Ticket Line Item -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via POST /tickets/{id}/add_line_item
repairshopr_post_tickets_by_id_attach_file_urlWRITEAttach a file to a Ticket -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via POST /tickets/{id}/attach_file_url
repairshopr_post_tickets_by_id_charge_timer_entryWRITECharges a Ticket Timer -- Required permission: Ticket Timers - Overview via POST /tickets/{id}/charge_timer_entry
repairshopr_post_tickets_by_id_commentWRITEAdds a Comment to a Ticket -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via POST /tickets/{id}/comment
repairshopr_post_tickets_by_id_delete_attachmentWRITEDeletes a Ticket Attachment -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via POST /tickets/{id}/delete_attachment
repairshopr_post_tickets_by_id_delete_timer_entryWRITEDeletes a Ticket Timer -- Required permission: Ticket Timers - Overview via POST /tickets/{id}/delete_timer_entry
repairshopr_post_tickets_by_id_printWRITEPrints a Ticket by ID -- Required permission: Tickets - View Details Single-Customer Users can only access own tickets. via POST /tickets/{id}/print
repairshopr_post_tickets_by_id_remove_line_itemWRITEDeletes a Ticket Line Item -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via POST /tickets/{id}/remove_line_item
repairshopr_post_tickets_by_id_timer_entryWRITECreate a Ticket Timer for a Ticket -- Required permission: Ticket Timers - Overview via POST /tickets/{id}/timer_entry
repairshopr_post_tickets_by_ticket_id_worksheet_resultsWRITECreates Worksheet Result -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. via POST /tickets/{ticket_id}/worksheet_results
repairshopr_post_user_devicesWRITECreates a User Device via POST /user_devices
repairshopr_post_vendorsWRITECreates a Vendor -- Required permission: Vendors - New via POST /vendors
repairshopr_post_wiki_pagesWRITECreates a Wiki Page -- Required permission: Documentation - Create via POST /wiki_pages
repairshopr_put_appointment_types_by_idWRITEUpdates an existing Appointment Type by ID -- Required permission: Global Admin via PUT /appointment_types/{id}
repairshopr_put_appointments_by_idWRITEUpdates an existing Appointment by ID -- No special permissions required. via PUT /appointments/{id}
repairshopr_put_contacts_by_idWRITEUpdates an existing Contact -- Required permission: Customers - Edit Single-Customer Users can only access own contacts. via PUT /contacts/{id}
repairshopr_put_contracts_by_idWRITEUpdates an existing Contract by ID -- Required permission: Contracts - Edit Covered items are part of the contract payload: * `product_price_overrides` — the covered products with their contracted rate (`price_retail_cents` or `discount_percentage`) and their block-list status (`blacklisted`, meaning the product is billed separately from the contract). * `non_billable_product_ids` — products covered by the contract and therefore not billed on their own. * `schedule_ids` — the recurring invoice schedules this contract governs. Link a schedule to a contract by sending `contract_id` to the Schedule endpoints. via PUT /contracts/{id}
repairshopr_put_customer_assets_by_idWRITEUpdates an existing Asset by ID -- Required permission: Assets - Edit Single-Customer Users can only access own assets. via PUT /customer_assets/{id}
repairshopr_put_customers_by_customer_id_payment_profiles_by_idWRITEUpdates a Payment Profile via PUT /customers/{customer_id}/payment_profiles/{id}
repairshopr_put_customers_by_customer_id_phones_by_idWRITEUpdates an existing Phone by ID -- Required permission: Customers - Edit Single-Customer Users can only access own. via PUT /customers/{customer_id}/phones/{id}
repairshopr_put_customers_by_idWRITEUpdates an existing Customer by ID -- Required permission: Customers - Edit Single-Customer Users can only access own customer (self). via PUT /customers/{id}
repairshopr_put_estimates_by_idWRITEUpdates an existing Estimate by ID -- Required permission: Estimates - Edit via PUT /estimates/{id}
repairshopr_put_estimates_by_id_line_items_by_line_item_idWRITEUpdates a Line Item -- Required permission: Estimates - Edit via PUT /estimates/{id}/line_items/{line_item_id}
repairshopr_put_invoices_by_idWRITEUpdates an existing invoice by ID -- This updates an existing Invoice, all parameters overwrite existing params via PUT /invoices/{id}
repairshopr_put_invoices_by_id_line_items_by_line_item_idWRITEUpdates an a line item of an invoice by ID -- This updates an existing Invoice's line item, all parameters overwrite existing params via PUT /invoices/{id}/line_items/{line_item_id}
repairshopr_put_leads_by_idWRITEUpdates an existing Lead by ID -- Required permission: None via PUT /leads/{id}
repairshopr_put_portal_users_by_idWRITEUpdates an existing Portal User by ID -- Required permission: Global Admin via PUT /portal_users/{id}
repairshopr_put_products_by_idWRITEUpdates an existing Product by ID -- Required permission: Products - Edit via PUT /products/{id}
repairshopr_put_products_by_id_location_quantitiesWRITEUpdates a Location Quantity -- Required permission: Products - Edit Quantities via PUT /products/{id}/location_quantities
repairshopr_put_products_by_product_id_product_serials_by_idWRITEUpdates an existing Product Serial by ID -- Required permission: Products - Edit via PUT /products/{product_id}/product_serials/{id}
repairshopr_put_products_by_product_id_product_skus_by_idWRITEUpdates an existing Product SKU by ID -- Required permission: Products - Edit via PUT /products/{product_id}/product_skus/{id}
repairshopr_put_purchase_orders_by_idWRITEUpdates a Purchase Order -- Required permission: Purchase Orders - Edit Updates allowed fields on a Purchase Order. Only the following fields may be modified: `status`, `general_notes`, `shipping_cents`, `delivery_tracking`, `vendor_id`. via PUT /purchase_orders/{id}
repairshopr_put_schedules_by_idWRITEUpdates an existing Invoice Schedule by ID -- Required permission: Recurring Invoices - Edit Accepts the same fields as `POST /schedules`. Only the fields you send are changed; omitted fields are left alone. Changing `customer_id` on a schedule that already has a `contract_id` or a `payment_id` requires sending a matching one too, or an empty one to unlink — otherwise the schedule would keep pointing at another customer's contract or card. `id`, `account_id`, `created_at`, `updated_at` and `last_run` are read-only. So are `subscription_status` and `recurring_type_id`, which are maintained for you: the first is recomputed from the linked contract and the unpaid invoice count on every run, and the second is what selects the billing engine for the whole schedule. Every id in the request is checked against your account before anything is written, so a rejected request changes nothing. Errors come back as `{"error": ["Location can't be found", ...]}` with status 422. via PUT /schedules/{id}
repairshopr_put_schedules_by_id_line_items_by_schedule_line_item_idWRITEUpdates a Line Item -- Required permission: Recurring Invoices - Edit Accepts the same fields as adding one. Only the fields you send are changed. via PUT /schedules/{id}/line_items/{schedule_line_item_id}
repairshopr_put_tickets_by_idWRITEUpdates an existing Ticket by ID -- Required permission: Tickets - Edit Sending `parent_id` additionally requires: Ticket Parent-Child - Edit. Requests that send it without that permission, or on an account without parent/child tickets enabled, are rejected with 403. Send an empty `parent_id` to unlink the Ticket from its parent. Single-Customer Users can only access own tickets. via PUT /tickets/{id}
repairshopr_put_tickets_by_id_update_line_itemWRITEUpdates an existing Ticket Line Item -- Required permission: Tickets - Edit Single-Customer Users can only access own tickets. via PUT /tickets/{id}/update_line_item
repairshopr_put_tickets_by_id_update_timer_entryWRITEUpdates an existing Ticket Timer -- Required permission: Ticket Timers - Overview via PUT /tickets/{id}/update_timer_entry
repairshopr_put_tickets_by_ticket_id_worksheet_results_by_idWRITEUpdates a Worksheet Result -- Required permissions: "Tickets - View Details" or "Tickets - View 'Their Ticket' Details (assigned to them)" Single-Customer Users can only access own tickets. The `answers` object accepts one or more field updates. Each key should be the field's slug, and the value should be an object containing `value` (the new field value) and optionally `user` (who made the change). If `user` is not provided, it defaults to the API token owner. via PUT /tickets/{ticket_id}/worksheet_results/{id}
repairshopr_put_timelogsWRITEUpdates a Timelog -- Users with permission "Timelogs - Manage" may see timelogs for any/all users. Otherwise, results scoped to current user. via PUT /timelogs
repairshopr_put_user_devices_by_idWRITEUpdates an existing User Device by UUID via PUT /user_devices/{id}
repairshopr_put_vendors_by_idWRITEUpdates an existing Vendor page by ID -- Required permission: Vendors - Edit via PUT /vendors/{id}
repairshopr_put_wiki_pages_by_idWRITEUpdates an existing Wiki Page by ID -- Required permission: Documentation - Edit via PUT /wiki_pages/{id}
Put RepairShopr behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.