---
title: "Move a service"
method: PATCH
path: "/api/v2/services/{id}/move"
tags: ["Services"]
---

# Move a service

`PATCH /api/v2/services/{id}/move`

## Request

- Base URL: `https://developer.productive.io` (the document declares no server; this is the origin it was published from)
- URL: `https://developer.productive.io/api/v2/services/{id}/move`
- Auth: none declared

Moves the service, with its expenses, to another deal or budget.

## Path parameters

- `id` string, required

## Request body

- object
  - `data` object
    - `attributes` object
      - `target_id` integer, required: The ID of the deal or budget the service moves to.

## Response `200`

Single service

- object: JSON:API response envelope for a single service.
  - `data` object: The JSON:API data object for the returned service resource.
    - `attributes` object: Attributes of the service.
      - `billable` Billable (unresolved $ref)
      - `billable_time` BillableTime (unresolved $ref)
      - `billing_type_id` BillingTypeId (unresolved $ref)
      - `booked_time` BookedTime (unresolved $ref)
      - `booking_tracking_enabled` BookingTrackingEnabled (unresolved $ref)
      - `budget_cap_enabled` BudgetCapEnabled (unresolved $ref)
      - `budget_total` BudgetTotal (unresolved $ref)
      - `budget_total_default` BudgetTotalDefault (unresolved $ref)
      - `budget_total_normalized` BudgetTotalNormalized (unresolved $ref)
      - `budget_used` BudgetUsed (unresolved $ref)
      - `budget_used_default` BudgetUsedDefault (unresolved $ref)
      - `budget_used_normalized` BudgetUsedNormalized (unresolved $ref)
      - `budgeted_time` BudgetedTime (unresolved $ref)
      - `cost` Cost (unresolved $ref)
      - `cost_default` CostDefault (unresolved $ref)
      - `cost_normalized` CostNormalized (unresolved $ref)
      - `currency` Currency (unresolved $ref)
      - `currency_default` CurrencyDefault (unresolved $ref)
      - `currency_normalized` CurrencyNormalized (unresolved $ref)
      - `custom_fields` CustomFields (unresolved $ref)
      - `deleted_at` DeletedAt (unresolved $ref)
      - `discount` union: Discount amount subtracted from the service price.
        - Discount (unresolved $ref)
        - string
      - `discount_amount` DiscountAmount (unresolved $ref)
      - `discount_amount_default` DiscountAmountDefault (unresolved $ref)
      - `discount_amount_normalized` DiscountAmountNormalized (unresolved $ref)
      - `editor_config` EditorConfig (unresolved $ref)
      - `estimated_cost` EstimatedCost (unresolved $ref)
      - `estimated_cost_default` EstimatedCostDefault (unresolved $ref)
      - `estimated_cost_normalized` EstimatedCostNormalized (unresolved $ref)
      - `estimated_time` EstimatedTime (unresolved $ref)
      - `expense_amount` ExpenseAmount (unresolved $ref)
      - `expense_amount_default` ExpenseAmountDefault (unresolved $ref)
      - `expense_amount_normalized` ExpenseAmountNormalized (unresolved $ref)
      - `expense_billable_amount` ExpenseBillableAmount (unresolved $ref)
      - `expense_billable_amount_default` ExpenseBillableAmountDefault (unresolved $ref)
      - `expense_billable_amount_normalized` ExpenseBillableAmountNormalized (unresolved $ref)
      - `expense_tracking_enabled` ExpenseTrackingEnabled (unresolved $ref)
      - `future_booked_time` FutureBookedTime (unresolved $ref)
      - `future_budget_used` FutureBudgetUsed (unresolved $ref)
      - `future_budget_used_default` FutureBudgetUsedDefault (unresolved $ref)
      - `future_budget_used_normalized` FutureBudgetUsedNormalized (unresolved $ref)
      - `future_cost` FutureCost (unresolved $ref)
      - `future_cost_default` FutureCostDefault (unresolved $ref)
      - `future_cost_normalized` FutureCostNormalized (unresolved $ref)
      - `future_revenue` FutureRevenue (unresolved $ref)
      - `future_revenue_default` FutureRevenueDefault (unresolved $ref)
      - `future_revenue_normalized` FutureRevenueNormalized (unresolved $ref)
      - `initial_service_id` InitialServiceId (unresolved $ref)
      - `limitation_type` LimitationType (unresolved $ref)
      - `markup` union: Markup amount added to the service price.
        - Markup (unresolved $ref)
        - string
      - `markup_amount` MarkupAmount (unresolved $ref)
      - `markup_amount_default` MarkupAmountDefault (unresolved $ref)
      - `markup_amount_normalized` MarkupAmountNormalized (unresolved $ref)
      - `name` Name (unresolved $ref)
      - `origin_service_id` OriginServiceId (unresolved $ref)
      - `position` Position (unresolved $ref)
      - `price` Price (unresolved $ref)
      - `price_default` PriceDefault (unresolved $ref)
      - `price_normalized` PriceNormalized (unresolved $ref)
      - `profit` Profit (unresolved $ref)
      - `profit_default` ProfitDefault (unresolved $ref)
      - `profit_margin` union: Profit as a percentage of revenue.
        - ProfitMargin (unresolved $ref)
        - string
      - `profit_normalized` ProfitNormalized (unresolved $ref)
      - `projected_revenue` ProjectedRevenue (unresolved $ref)
      - `projected_revenue_default` ProjectedRevenueDefault (unresolved $ref)
      - `projected_revenue_normalized` ProjectedRevenueNormalized (unresolved $ref)
      - `quantity` union: Number of units (hours, days, or pieces) for this service.
        - Quantity (unresolved $ref)
        - string
      - `revenue` Revenue (unresolved $ref)
      - `revenue_default` RevenueDefault (unresolved $ref)
      - `revenue_normalized` RevenueNormalized (unresolved $ref)
      - `rolled_over_time` RolledOverTime (unresolved $ref)
      - `time_tracking_enabled` TimeTrackingEnabled (unresolved $ref)
      - `unapproved_time` UnapprovedTime (unresolved $ref)
      - `unit_id` UnitId (unresolved $ref)
      - `work_cost` WorkCost (unresolved $ref)
      - `work_cost_default` WorkCostDefault (unresolved $ref)
      - `work_cost_normalized` WorkCostNormalized (unresolved $ref)
      - `worked_time` WorkedTime (unresolved $ref)
      - `overtime_time` OvertimeTime (unresolved $ref)
      - `discount_type` DiscountType (unresolved $ref)
    - `relationships` object: Relationships of the service.
      - `custom_field_attachments` union: A JSON:API collection relationship — links to zero or more related resources.
        - CollectionLinkage
          - `data` Resource[], required
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `custom_field_people` union: A JSON:API collection relationship — links to zero or more related resources.
        - CollectionLinkage
          - `data` Resource[], required
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `deal` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `organization` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `person` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `section` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `service_type` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
      - `import` union: A JSON:API single relationship — links to one related resource or `null`.
        - SingleLinkageNullable
          - `data` Resource, required: A JSON:API resource identifier object containing the resource type and ID.
            - `id` string, required: The unique identifier of the resource.
            - `type` string, required: The resource type name (e.g. `tasks`, `people`, `deals`).
        - NotIncluded: Placeholder for a relationship that was not sideloaded in this response.
          - `meta` object, required: Metadata indicating the sideload status of this relationship.
            - `included` false, required: Whether the related resource was included in the sideloaded data. Always `false` for this variant.
  - `included` unknown[]: Included related resources.
    - unknown
  - `meta` Meta: Pagination and response metadata returned with every collection endpoint.
    - `current_page` integer: The current page number in this paginated response (1-based).
    - `max_page_size` integer: Maximum number of records allowed per page for this endpoint.
    - `organization_features` object: Feature flags and capabilities enabled for the current organization, used for UI rendering.
    - `page_size` integer: Number of records returned per page in this response.
    - `settings` object: Organization or user settings relevant to this resource's display.
    - `total_count` integer: Total number of records matching the current query across all pages.
    - `total_pages` integer: Total number of pages available for the current query and page size.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `406`: Not Acceptable
- `408`: Request Timeout
- `415`: Unsupported Media Type
- `422`: Unprocessable Content
- `423`: Locked
- `429`: Too Many Requests
- `500`: Internal Server Error

## Changes

- **2026-11-02** `fa3060fd0144`: 3 warning, 10 info
  - added the new `bad_decimal_format` enum value to the `errors/items/code` response property for the response status `422`
  - added the new `non_finite_number` enum value to the `errors/items/code` response property for the response status `422`
  - added the new `null_bytes_in_params` enum value to the `errors/items/code` response property for the response status `422`
  - added the non-success response with the status `400`
  - …9 more

[Operation history](https://skmtc.dev/productive/apis/api-documentation/changes/api/v2/services/:id/move/patch.md)

---

[API](https://skmtc.dev/productive/apis/api-documentation.md) - [All operations](https://skmtc.dev/productive/apis/api-documentation/llms.txt) - [OpenAPI document](https://skmtc.dev/productive/apis/api-documentation/revisions/e7bdfdf6cba3?raw)
