> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://developer.deel.com/api/stable/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Assign agreement to a new worker

POST https://api.letsdeel.com/rest/it/agreements/{agreement_id}/reassign
Content-Type: application/json

Use this when a worker leaves and their rented device should pass to a new joiner rather than return to Deel. Reassigns a rental agreement to a new HRIS profile via store-and-reuse. The caller picks a `variant_id` from `actions.reuse.details.reusable_variants` on `GET /rest/it/agreements/{agreement_id}` and supplies the new holder's delivery address. Transitions `store_and_reuse.status` from `READY` to `IN_PROGRESS` and returns the updated agreement.

**Token scopes**: `it-service-requests:write`

**Beta**: this version requires the `X-Beta: true` request header and its contract may change before it is promoted to stable. It is scheduled to become stable on 2026-12-17.

Reference: https://developer.deel.com/api/deel-it/endpoints/it-agreements/reassign-it-agreement-v-2026-09-17

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Path parameters

- `agreement_id` (string, required) — Unique identifier of the agreement

### Headers

- `X-Beta` (enum, required, default: true) — Opts in to the beta version of this endpoint. Must be `true`.
  - Allowed values: `true`

### Body (application/json)

This endpoint expects an object.

- `data` (ItAgreementsAgreementIdReassignPostRequestBodyContentApplicationJsonSchemaData, required) — Reassignment payload.

## Response

### 200

OK

- `data` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

Bad Request

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 401 Unauthorized Error

Unauthorized

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 403 Forbidden Error

Forbidden

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 404 Not Found Error

Not Found

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 409 Conflict Error

Conflict

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 500 Internal Server Error

Internal Server Error

- `errors` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems, required)

## Types

### ItAgreementsAgreementIdReassignPostRequestBodyContentApplicationJsonSchemaData

Reassignment payload.

- `variant_id` (string, required) — Product variant to reassign the agreement to. Must be one of the variants returned in `actions.reuse.details.reusable_variants` on `GET /agreements/{agreement_id}`.
- `hris_profile_id` (string, required) — HRIS profile identifier of the new holder.
- `delivery_address` (ItAgreementsAgreementIdReassignPostRequestBodyContentApplicationJsonSchemaDataDeliveryAddress, required) — Delivery address for the new holder. Country must appear in `actions.reuse.details.reassignable_in`.
- `is_express_delivery_requested` (boolean, optional) — Charges the express-delivery fee when the destination country supports it. Defaults to `false`.

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaData

- `id` (string, required) — Unique identifier of the agreement.
- `type` (enum, required) — Agreement type.
  - Allowed values: `MANAGEMENT`, `PURCHASE`, `RENTAL`
- `status` (enum, required) — Normalised agreement status.
  - Allowed values: `ACTIVE`, `CANCELED`, `ENDED`, `PENDING`
- `actions` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActions, required) — Snapshot of which agreement-level actions are currently callable on this agreement.
- `product` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataProduct, required) — The product this agreement is for.
- `end_date` (string, required, nullable) — Agreement end date. `null` while the agreement is open.
- `public_id` (string, required) — Public identifier of the agreement.
- `created_at` (string, required) — When the agreement was created.
- `start_date` (string, required, nullable) — Agreement start date.
- `updated_at` (string, required) — When the agreement was last updated.
- `variant_id` (string, required) — The currently-assigned product variant.
- `store_and_reuse` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataStoreAndReuse, required, nullable) — Store-and-reuse block. Present only when the agreement is a rental with store-and-reuse enabled.
- `billing_entity_id` (string, required, nullable) — ID of the billing entity that pays for this agreement. `null` when the billing entity is no longer active.
- `assigned_hris_profile` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataAssignedHrisProfile, required, nullable) — Current holder of the agreement, if any. `null` while the agreement is between users (e.g. after POST /assets/\{id}/store).

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, required) — Error code of the handler which produced the returned error
- `field` (string, required, nullable) — The field name where input validation failed
- `message` (string, required) — Description of the returned error

### ItAgreementsAgreementIdReassignPostRequestBodyContentApplicationJsonSchemaDataDeliveryAddress

Delivery address for the new holder. Country must appear in `actions.reuse.details.reassignable_in`.

- `country` (enum, required) — Country code (ISO 3166 alpha-2).
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `IC`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XK`, `YE`, `YT`, `ZA`, `ZM`, `ZW`
- `city` (string, optional) — City name.
- `line1` (string, optional) — Address line 1.
- `line2` (string, optional) — Address line 2.
- `state` (string, optional) — State or region name.
- `post_code` (string, optional) — Post code.
- `phone_number` (string, optional) — Phone number in E.164 format.
- `date_of_birth` (string, optional) — Date of birth.
- `tax_id_number` (string, optional) — Tax ID number.
- `passport_number` (string, optional) — Passport number.
- `delivery_instructions` (string, optional) — Delivery instructions for the courier.

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActions

Snapshot of which agreement-level actions are currently callable on this agreement.

- `reuse` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuse, required) — Backs POST /agreements/\{agreement\_id}/reassign.

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataProduct

The product this agreement is for.

- `id` (string, required) — Unique identifier of the product
- `name` (string, required) — Product name
- `brand` (string, required) — Product brand
- `category` (enum, required) — Product category
  - Allowed values: `ADAPTER`, `CABLE`, `CHAIR`, `CHARGER`, `COMPACT_DESKTOP`, `DESK`, `DESKTOP`, `DESK_RISER`, `DESK_TIDY`, `DOCKING_STATION`, `DONGLE`, `FOOTREST`, `HEADSET`, `KEYBOARD`, `LAPTOP`, `LAPTOP_STAND`, `MICE_TRACKPAD`, `MOBILE_DEVICE`, `MONITOR`, `MONITOR_ARM`, `OTHER`, `PRINTER`, `SHREDDER`, `STANDING_MAT`, `TABLET`, `TASK_LIGHT`, `WEBCAM`, `WELCOME_PACK`, `WIFI_RANGE_EXTENDER`

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataStoreAndReuse

Store-and-reuse block. Present only when the agreement is a rental with store-and-reuse enabled.

- `status` (enum, required) — Current state of the store-and-reuse lifecycle for this rental contract.
  - Allowed values: `COMPLETED`, `IN_PROGRESS`, `READY`

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataAssignedHrisProfile

Current holder of the agreement, if any. `null` while the agreement is between users (e.g. after POST /assets/\{id}/store).

- `emails` (list of string, required) — Array of user email addresses
- `last_name` (string, required) — Last name of the user
- `first_name` (string, required) — First name of the user
- `hris_profile_id` (string, required) — The unique identifier of the HRIS profile of the assigned user

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuse

Backs POST /agreements/\{agreement\_id}/reassign.

- `details` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetails, required, nullable) — Populated when `enabled = true` and the action has caller-relevant context to surface (see per-slot documentation). Null otherwise.
- `is_enabled` (boolean, required) — Whether the action is currently callable on this agreement.
- `disabled_reason` (enum, required, nullable) — Populated when `is_enabled = false`; the single reason code the storefront gave for the disabled state. Not a list — matches V2 action-slot semantics.
  - Allowed values: `CONTRACT_HAS_ACTIVE_ASSIGNMENT`, `CONTRACT_IS_NOT_ACTIVE`, `CONTRACT_IS_NOT_RENTAL`, `CONTRACT_IS_NOT_REUSE_ENABLED`, `CONTRACT_TYPE_NOT_ALLOWED`, `ORGANIZATION_NOT_ACTIVE`

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetails

Populated when `enabled = true` and the action has caller-relevant context to surface (see per-slot documentation). Null otherwise.

- `reassignable_in` (list of enum, required) — Countries the contract can currently be reassigned to (customs / entity constraints).
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `IC`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XK`, `YE`, `YT`, `ZA`, `ZM`, `ZW`
- `reusable_variants` (list of ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetailsReusableVariantsItems, required) — The subset of the parent product's variants that can be reassigned via store-and-reuse. The original contract variant is appended as a fallback when the store-and-reuse filter returns none.

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetailsReusableVariantsItems

- `id` (string, required) — Unique identifier of the variant
- `sku` (string, required, nullable) — SKU of the variant
- `size` (string, required, nullable) — Physical size or dimension label — style + size together uniquely identify a variant within a product
- `image` (ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetailsReusableVariantsItemsImage, required, nullable) — Image of this variant, null when the variant has no image
- `style` (string, required, nullable) — Marketing style (colour, tier, etc.) — style + size together uniquely identify a variant within a product
- `public_id` (string, required) — Public identifier of the variant
- `keyboard_layout` (enum, required, nullable) — Physical keyboard layout (laptops only)
  - Allowed values: `BELGIAN_AZERTY`, `CANADIAN_MULTILINGUAL_STANDARD_QWERTY`, `CZECH_QWERTY`, `DANISH_QWERTY`, `DUTCH_QWERTY`, `EGYPTIAN_LOCAL`, `ENGLISH_RUSSIAN_QWERTY`, `EU_STANDARD_QWERTY`, `FRENCH_AZERTY`, `GERMAN_QWERTZ`, `INDIAN_QWERTY`, `INTERNATIONAL_ENGLISH_QWERTY`, `ITALIAN_QWERTY`, `JAPANESE_QWERTY`, `KOREAN_QWERTY`, `LATAM_QWERTY`, `NORWEGIAN_QWERTY`, `PORTUGUESE_QWERTY`, `SPANISH_QWERTY`, `SWEDISH_QWERTY`, `SWISS_FRENCH_QWERTZ`, `SWISS_GERMAN_QWERTZ`, `TURKISH_QWERTY`, `UK_ENGLISH_QWERTY`, `UNKNOWN`, `US_ENGLISH_QWERTY`
- `operating_system` (enum, required, nullable) — Operating system installed on this variant (devices only)
  - Allowed values: `ANDROID_PHONE`, `ANDROID_TABLET`, `CHROME_OS`, `IOS_PHONE`, `IOS_TABLET`, `LINUX`, `MACOS`, `WINDOWS`
- `available_countries` (list of enum, required) — ISO 3166 alpha-2 country codes where this variant can be ordered
  - Allowed values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `IC`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `XK`, `YE`, `YT`, `ZA`, `ZM`, `ZW`
- `allowed_rental_terms` (list of enum, required) — Rental terms permitted for this variant. Empty for non-rental variants.
  - Allowed values: `MONTH_12`, `MONTH_24`
- `allowed_acquisition_types` (list of enum, required) — Acquisition types allowed for this variant
  - Allowed values: `PURCHASE`, `RENTAL`, `REUSE`

### ItAgreementsAgreementIdReassignPostResponsesContentApplicationJsonSchemaDataActionsReuseDetailsReusableVariantsItemsImage

Image of this variant, null when the variant has no image

- `id` (string, required) — Unique identifier of the image
- `url` (string, required) — Public URL of the image

## Examples

**Request**

```json
{
  "data": {
    "variant_id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
    "hris_profile_id": "6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71",
    "delivery_address": {
      "country": "GB"
    }
  }
}
```

**Response**

```json
{
  "data": {
    "id": "3b1a0000-0000-0000-0000-000000000000",
    "type": "RENTAL",
    "status": "ACTIVE",
    "actions": {
      "reuse": {
        "details": {
          "reassignable_in": [
            "GB",
            "IE",
            "FR",
            "DE"
          ],
          "reusable_variants": [
            {
              "id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
              "sku": "MBP16-M3P-SPACE-UK",
              "size": "16-inch",
              "image": {
                "id": "b1c3d5e7-8a9b-4c2d-9e0f-1a2b3c4d5e6f",
                "url": "https://cdn.deel.com/products/mbp16-space-black.png"
              },
              "style": "Space Black",
              "public_id": "VAR-2f4e",
              "keyboard_layout": "UK_ENGLISH_QWERTY",
              "operating_system": "MACOS",
              "available_countries": [
                "AD"
              ],
              "allowed_rental_terms": [
                "MONTH_12"
              ],
              "allowed_acquisition_types": [
                "PURCHASE"
              ]
            }
          ]
        },
        "is_enabled": true,
        "disabled_reason": "CONTRACT_IS_NOT_REUSE_ENABLED"
      }
    },
    "product": {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "MacBook Pro",
      "brand": "Apple",
      "category": "LAPTOP"
    },
    "end_date": "2026-11-15",
    "public_id": "CTR-3b1a",
    "created_at": "2024-11-01T09:00:00Z",
    "start_date": "2024-11-15",
    "updated_at": "2026-07-14T10:00:00Z",
    "variant_id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
    "store_and_reuse": {
      "status": "READY"
    },
    "billing_entity_id": "550e8400-e29b-41d4-a716-446655440000",
    "assigned_hris_profile": {
      "emails": [
        "bruce.wayne@wayne-enterprise.com",
        "batman@gotham.com"
      ],
      "last_name": "Wayne",
      "first_name": "Bruce",
      "hris_profile_id": "550e8400-e29b-41d4-a716-446655440000"
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign"

payload = { "data": {
        "variant_id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
        "hris_profile_id": "6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71",
        "delivery_address": { "country": "GB" }
    } }
headers = {
    "X-Beta": "true",
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign';
const options = {
  method: 'POST',
  headers: {
    'X-Beta': 'true',
    Authorization: 'Bearer <token>',
    'Content-Type': 'application/json'
  },
  body: '{"data":{"variant_id":"2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab","hris_profile_id":"6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71","delivery_address":{"country":"GB"}}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign"

	payload := strings.NewReader("{\n  \"data\": {\n    \"variant_id\": \"2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab\",\n    \"hris_profile_id\": \"6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71\",\n    \"delivery_address\": {\n      \"country\": \"GB\"\n    }\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("X-Beta", "true")
	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["X-Beta"] = 'true'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"data\": {\n    \"variant_id\": \"2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab\",\n    \"hris_profile_id\": \"6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71\",\n    \"delivery_address\": {\n      \"country\": \"GB\"\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign")
  .header("X-Beta", "true")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"variant_id\": \"2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab\",\n    \"hris_profile_id\": \"6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71\",\n    \"delivery_address\": {\n      \"country\": \"GB\"\n    }\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign', [
  'body' => '{
  "data": {
    "variant_id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
    "hris_profile_id": "6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71",
    "delivery_address": {
      "country": "GB"
    }
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
    'X-Beta' => 'true',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign");
var request = new RestRequest(Method.POST);
request.AddHeader("X-Beta", "true");
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"data\": {\n    \"variant_id\": \"2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab\",\n    \"hris_profile_id\": \"6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71\",\n    \"delivery_address\": {\n      \"country\": \"GB\"\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "X-Beta": "true",
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["data": [
    "variant_id": "2f4e7ab1-9d3c-4b1f-9e34-6dfb0d6a12ab",
    "hris_profile_id": "6ad9f0f0-6e2a-4f9a-a3f8-2a9f5f2d6b71",
    "delivery_address": ["country": "GB"]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/it/agreements/3b1a0000-0000-0000-0000-000000000000/reassign")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```