openapi: 3.1.0 info: title: Endpoints subpackage_customFieldsContracts API version: 1.0.0 servers: - url: https://api.letsdeel.com/rest/v2 - url: https://api-staging.letsdeel.com/rest/v2 tags: - name: subpackage_customFieldsContracts paths: /contracts/{contract_id}/custom_fields/{id}: delete: operationId: delete-contract-custom-field summary: Delete Contract custom field by Id description: "Removes the custom field value from the contract custom field.\n **Token scopes**: `contracts:write`" tags: - subpackage_customFieldsContracts parameters: - name: id in: path description: Custom field id. required: true schema: type: string format: uuid - name: contract_id in: path description: Contract id. required: true schema: type: string format: uuid - name: Authorization in: header description: "## Authentication\nThe 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.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n" required: true schema: type: string responses: '204': description: Successful response content: application/json: schema: $ref: '#/components/schemas/custom-fields-contracts_deleteContractCustomField_Response_204' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '500': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' /contracts/custom_fields/{id}: get: operationId: get-custom-field summary: Get custom fields from contracts description: "Get custom field from contract by id\n **Token scopes**: `contracts:read`" tags: - subpackage_customFieldsContracts parameters: - name: id in: path description: Custom field id. required: true schema: type: string format: uuid - name: Authorization in: header description: "## Authentication\nThe 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.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n" required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/custom-fields-contracts_getCustomField_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/GetCustomFieldsFromContractsRequestInternalServerError' /contracts/custom_fields: get: operationId: get-contract-custom-fields summary: List all custom fields description: "Use this endpoint to retrieve all custom fields defined for contracts. Use it when building contract creation or edit flows that need to display field options and requirements. This operation is read-only and non-destructive.\n **Token scopes**: `contracts:read`" tags: - subpackage_customFieldsContracts parameters: - name: Authorization in: header description: "## Authentication\nThe 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.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n" required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/custom-fields-contracts_getContractCustomFields_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '500': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' /contracts/{contract_id}/custom_fields: put: operationId: put-contract-custom-field summary: Update custom field value description: "Update custom field value.\n **Token scopes**: `contracts:write`" tags: - subpackage_customFieldsContracts parameters: - name: contract_id in: path description: Contract id. required: true schema: type: string - name: Authorization in: header description: "## Authentication\nThe 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.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n" required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/custom-fields-contracts_putContractCustomField_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: Not found content: application/json: schema: description: Any type '500': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' requestBody: content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaData' required: - data components: schemas: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData1: type: object properties: value: type: number format: double description: Number type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData1 ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf0Name: type: string enum: - text - number - date - percentage description: Simple types title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf0Name ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccess: type: object properties: provided_by: oneOf: - $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccessProvidedBy' - type: 'null' description: Entity providing access to the custom field is_sensitive: type: boolean description: Whether the custom field is sensitive group_permission_set: type: - string - 'null' description: Permission set identifier for the custom field required: - is_sensitive description: Access settings for the custom field title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccess ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData3: type: object properties: value: type: number format: double description: Percentage type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData3 ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsWorkerTypesItems: type: string enum: - eor - contractor - hris_direct_employee - direct_employee title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsWorkerTypesItems ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf0Name: type: string enum: - text - number - date - percentage description: Simple field type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf0Name ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettings: type: object properties: access: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccess' description: Access control settings required: type: boolean description: Whether the field is mandatory countries: type: array items: type: string description: Countries where the field applies is_enabled: type: boolean description: Whether the field is enabled worker_types: type: array items: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsWorkerTypesItems' description: Applicable worker types description: Configuration settings for the custom field title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettings ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf1Name: type: string enum: - currency description: Currency type title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf1Name ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaData: type: object properties: id: type: string format: uuid description: Custom field id name: type: string description: Name of the custom field type: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType' description: Type definition of the custom field settings: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettings' description: Configuration settings for the custom field placement: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataPlacement' description: Where the custom field is displayed created_at: type: string format: date-time description: Creation timestamp description: type: - string - 'null' description: Optional description of the custom field description: Custom field object title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaData ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf2Name: type: string enum: - list - multiselect description: List field type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf2Name ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccessProvidedBy: type: string enum: - organization - worker description: Entity providing access to the custom field title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccessProvidedBy ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData4: type: object properties: amount: type: number format: double currency: type: string description: 'Important: When currency type is fixed, the currency field is ignored. ' description: Currency type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData4 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType2: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf2Name' description: List field type options: type: array items: type: string description: Available options for the list field description: List or multiselect custom field type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType2 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf1Name: type: string enum: - currency description: Currency field type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf1Name ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccessProvidedBy: type: string enum: - organization - worker description: Entity providing access title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccessProvidedBy custom-fields-contracts_putContractCustomField_Response_200: type: object properties: {} description: Empty response body title: custom-fields-contracts_putContractCustomField_Response_200 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsWorkerTypesItems: type: string enum: - eor - contractor - hris_direct_employee - direct_employee description: Worker type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsWorkerTypesItems ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType1: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf1Name' description: Currency type currency: type: - string - 'null' description: Currency code (null when is_fixed is false) is_fixed: type: boolean description: When currency is fixed, only the amount can be edited by the users required: - name - is_fixed title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType1 ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData5: type: object properties: option: type: string description: List type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData5 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType: oneOf: - $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType0' - $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType1' - $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType2' description: Type definition of the custom field title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaError: type: object properties: code: type: string description: Error code identifying the type of error. details: type: - string - 'null' description: Additional details about the error. message: type: string description: Error message describing what went wrong. required: - code - message title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaError custom-fields-contracts_getContractCustomFields_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItems' required: - data title: custom-fields-contracts_getContractCustomFields_Response_200 ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData2: type: object properties: value: type: string format: date description: 'Date type: YYYY-MM-DD' title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData2 ApiError: type: object properties: message: type: string description: A description of the returned error path: type: string description: The JSON path where input validation failed title: ApiError ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType0: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf0Name' description: Simple types required: - name title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType0 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccess: type: object properties: provided_by: oneOf: - $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccessProvidedBy' - type: 'null' description: Entity providing access is_sensitive: type: boolean description: Whether the field contains sensitive data description: Access control settings title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataSettingsAccess ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData0: type: object properties: value: type: string description: Text type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData0 ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettings: type: object properties: access: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsAccess' description: Access settings for the custom field required: type: boolean description: Whether the custom field is required countries: type: array items: type: string description: Countries for which the custom field is applicable. Omitted when applicable to all. is_enabled: type: boolean description: Whether the custom field is enabled worker_types: type: array items: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettingsWorkerTypesItems' description: Worker types for which the custom field is applicable. Omitted when applicable to all. required: - access - required - is_enabled description: Configuration settings for the custom field including requirements, visibility, and access controls title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettings ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string format: uuid description: Unique identifier of the custom field name: type: string description: Name of the custom field type: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType' description: Type configuration of the custom field including its data type and type-specific properties settings: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsSettings' description: Configuration settings for the custom field including requirements, visibility, and access controls placement: oneOf: - $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsPlacement' - type: 'null' description: Valid placements for custom field created_at: type: string format: date-time description: Creation date of the custom field description: type: - string - 'null' description: Description of the custom field required: - id - name - type - settings - created_at title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItems ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType: oneOf: - $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType0' - $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType1' - $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType2' description: Type configuration of the custom field including its data type and type-specific properties title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType ApiErrorContainer: type: object properties: request: $ref: '#/components/schemas/ApiErrorRequest' errors: type: array items: $ref: '#/components/schemas/ApiError' title: ApiErrorContainer ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType1: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf1Name' description: Currency field type currency: type: string description: ISO currency code is_fixed: type: boolean description: Whether the currency is fixed description: Currency custom field type title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType1 ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaData: type: object properties: id: type: string format: uuid description: UUID for the custom field value data: $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData' required: - id - data title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaData ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData6: type: object properties: options: type: array items: type: string description: Multiselect type title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData6 ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataPlacement: type: string enum: - profile - contract description: Where the custom field is displayed title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataPlacement ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType0: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataTypeOneOf0Name' description: Simple field type description: Simple custom field types title: ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaDataType0 GetCustomFieldsFromContractsRequestInternalServerError: type: object properties: error: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaError' required: - error title: GetCustomFieldsFromContractsRequestInternalServerError ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType2: type: object properties: name: $ref: '#/components/schemas/ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf2Name' description: List types options: type: array items: type: string description: List of options for the custom field required: - name - options title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsType2 ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsPlacement: type: string enum: - profile - contract description: Valid placements for custom field title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsPlacement ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf2Name: type: string enum: - list - multiselect description: List types title: ContractsCustomFieldsGetResponsesContentApplicationJsonSchemaDataItemsTypeOneOf2Name custom-fields-contracts_deleteContractCustomField_Response_204: type: object properties: {} description: Empty response body title: custom-fields-contracts_deleteContractCustomField_Response_204 ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData: oneOf: - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData0' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData1' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData2' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData3' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData4' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData5' - $ref: '#/components/schemas/ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData6' title: ContractsContractIdCustomFieldsPutRequestBodyContentApplicationJsonSchemaDataData custom-fields-contracts_getCustomField_Response_200: type: object properties: data: $ref: '#/components/schemas/ContractsCustomFieldsIdGetResponsesContentApplicationJsonSchemaData' description: Custom field object required: - data description: Response wrapper object title: custom-fields-contracts_getCustomField_Response_200 ApiErrorRequest: type: object properties: method: type: string description: The HTTP method of the failed request url: type: string description: The relative URL of the failed request status: type: number format: double description: The status code of the response api_req_id: type: string description: The request ID of the failed request docs: type: string description: A link to the official documentation for the requested endpoint resource source: type: string description: The source handler which produced the returned error code: type: number format: double description: The code of the source handler which produced the returned error title: ApiErrorRequest securitySchemes: deelToken: type: http scheme: bearer description: "## Authentication\nThe 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.\n\n```curl\ncurl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \\\n -H 'Authorization: Bearer YOUR-TOKEN-HERE'\n```\n\n[Learn more about authentication](/api/authentication)\n" oauth2: type: http scheme: bearer description: Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/