openapi: 3.1.0 info: title: Endpoints subpackage_plans401K API version: 1.0.0 servers: - url: https://api.letsdeel.com/rest/v2 - url: https://api-staging.letsdeel.com/rest/v2 tags: - name: subpackage_plans401K paths: /benefits/legal-entities/{id}/benefits/401k/activate: post: operationId: activate-the-401-k-integration-for-the-legal-entity-v-2026-01-01 summary: Activate the 401k integration for the legal entity description: "Activate the 401k integration for the legal entity\n **Token scopes**: `benefits:write`" tags: - subpackage_plans401K parameters: - name: id in: path description: Id from the legal entity to activate 401k integration 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 operation. content: application/json: schema: $ref: '#/components/schemas/Plans 401K_activateThe401KIntegrationForTheLegalEntity-v2026-01-01_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' /benefits/legal-entities/{id}/401k/plans/clean-up: post: operationId: clean-up-plan-for-a-given-legal-entity-v-2026-01-01 summary: Clean up plan for a given legal entity description: "Clean up plan for a given legal entity\n **Token scopes**: `benefits:write`" tags: - subpackage_plans401K parameters: - name: id in: path description: Id from the legal entity to clean up 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: '202': description: Request accepted, processing asynchronously. content: application/json: schema: $ref: '#/components/schemas/Plans 401K_cleanUpPlanForAGivenLegalEntity-v2026-01-01_Response_202' '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' /benefits/legal-entities/{legal_entity_id}/401k/plans: post: operationId: create-401-k-plan-for-legal-entity-v-2026-01-01 summary: Create 401k plan for legal entity description: "Create a new 401k plan for existing provider to legal entity\n **Token scopes**: `benefits:write`" tags: - subpackage_plans401K parameters: - name: legal_entity_id in: path description: Id from the legal entity to receive a new 401k plan 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 operation. content: application/json: schema: $ref: '#/components/schemas/Plans 401K_create401KPlanForLegalEntity-v2026-01-01_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' requestBody: content: application/json: schema: type: object properties: name: type: string description: Name of the 401K plan. details: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaDetails' description: Object containing additional information about the 401K plan. start_date: type: string format: date description: Start date of the plan. contribution_type: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionType' description: Type of contribution for the 401K plan. contribution_value: type: number format: double description: Value of the contribution if type is percent or amount. contribution_value_for_match_rate: type: array items: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionValueForMatchRateItems' description: Array of objects containing limits and rates for match rate contribution type. required: - name - start_date - contribution_type /benefits/legal-entities/{id}/401k/plans: get: operationId: get-401-k-plans-for-legal-entity-v-2026-01-01 summary: Get 401k plans for legal entity description: "Get 401k plans legal entity\n **Token scopes**: `benefits:read`" tags: - subpackage_plans401K parameters: - name: id in: path description: Id from the legal entity to fetch 401k plans 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 operation. content: application/json: schema: $ref: '#/components/schemas/Plans 401K_get401KPlansForLegalEntity-v2026-01-01_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' /benefits/legal-entities/{legal_entity_id}/401k/plans/{plan_id}: put: operationId: update-401-k-plan-v-2026-01-01 summary: Update 401k plan description: "Update 401k plan\n **Token scopes**: `benefits:write`" tags: - subpackage_plans401K parameters: - name: legal_entity_id in: path description: Id from the legal entity to update a 401k plan required: true schema: type: string - name: plan_id in: path description: 401K plan 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 operation. content: application/json: schema: $ref: '#/components/schemas/Plans 401K_update401KPlan-v2026-01-01_Response_200' '400': description: Bad Request - Invalid input parameters or validation error. content: application/json: schema: $ref: '#/components/schemas/Update401KPlan-v2026-01-01RequestBadRequestError' '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 - The specified plan or legal entity was not found. content: application/json: schema: $ref: '#/components/schemas/Update401KPlan-v2026-01-01RequestNotFoundError' '500': description: Internal Server Error - An unexpected error occurred on the server. content: application/json: schema: $ref: '#/components/schemas/Update401KPlan-v2026-01-01RequestInternalServerError' requestBody: content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaData' description: Schema for the 401K Guideline Plan request body. required: - data components: schemas: Update401KPlan-v2026-01-01RequestBadRequestError: type: object properties: error: type: string description: Error message describing what went wrong with the request. required: - error title: Update401KPlan-v2026-01-01RequestBadRequestError BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionType: type: string enum: - PERCENTAGE - NEC_PERCENTAGE - NEC_FIXED_AMOUNT - FIXED_AMOUNT - MATCH description: Type of contribution for the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionType BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataDetails: type: object properties: {} description: Object containing additional information about the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataDetails BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionValueForMatchRateItems: type: object properties: rate: type: number format: double description: Rate of matching contribution. limit: type: number format: double description: Limit up to which the match rate is applicable. required: - rate - limit description: Contribution values for match rate type. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionValueForMatchRateItems Update401KPlan-v2026-01-01RequestNotFoundError: type: object properties: error: type: string description: Error message indicating the requested resource was not found. required: - error title: Update401KPlan-v2026-01-01RequestNotFoundError Plans 401K_cleanUpPlanForAGivenLegalEntity-v2026-01-01_Response_202: type: object properties: {} title: Plans 401K_cleanUpPlanForAGivenLegalEntity-v2026-01-01_Response_202 Update401KPlan-v2026-01-01RequestInternalServerError: type: object properties: error: type: string description: Error message indicating an internal server error occurred. required: - error title: Update401KPlan-v2026-01-01RequestInternalServerError ? BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems : type: object properties: rate: type: - number - 'null' format: double description: Rate of matching contribution. limit: type: - number - 'null' format: double description: Limit up to which the match rate is applicable. description: Contribution values for match rate type. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaData: type: object properties: id: type: string description: ID of the 401K plan. name: type: string description: Name of the 401K plan. details: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataDetails' description: Object containing additional information about the 401K plan. currency: type: string description: Currency for the contributions in ISO 4217 format. start_date: type: string format: date-time description: Start date of the plan. contribution_type: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionType' description: Type of contribution for the 401K plan. contribution_limit: type: number format: double description: Limit of the contribution. contribution_value: type: number format: double description: Value of the contribution if type is percent or amount. contribution_value_for_match_rate: type: array items: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems' description: Array of objects containing limits and rates for match rate contribution type. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaData Plans 401K_update401KPlan-v2026-01-01_Response_200: type: object properties: data: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaData' description: Plan object for non PEO legal entity. required: - data title: Plans 401K_update401KPlan-v2026-01-01_Response_200 BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsDetails: type: object properties: {} description: Object containing additional information about the 401K plan. title: BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsDetails 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 BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaDetails: type: object properties: key: type: string description: A key-value pair providing additional details about the plan. description: Object containing additional information about the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaDetails BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaData: type: object properties: name: type: string description: Name of the 401K plan. details: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataDetails' description: Object containing additional information about the 401K plan. end_date: type: string format: date description: End date of the plan. start_date: type: string format: date description: Start date of the plan. contribution_type: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionType' description: Type of contribution for the 401K plan. contribution_value: type: number format: double description: Value of the contribution if type is percent or amount. contribution_value_for_match_rate: type: array items: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionValueForMatchRateItems' description: Array of objects containing limits and rates for match rate contribution type. required: - name - start_date - contribution_type description: Schema for the 401K Guideline Plan request body. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaData Plans 401K_create401KPlanForLegalEntity-v2026-01-01_Response_200: type: object properties: data: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaData' title: Plans 401K_create401KPlanForLegalEntity-v2026-01-01_Response_200 ? BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionValueForMatchRateItems : type: object properties: rate: type: number format: double description: Rate of matching contribution. limit: type: number format: double description: Limit up to which the match rate is applicable. required: - rate - limit description: Contribution values for match rate type. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionValueForMatchRateItems BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionType: type: string enum: - PERCENTAGE - FIXED_AMOUNT - MATCH - NEC_FIXED_AMOUNT - NEC_PERCENTAGE description: Type of contribution for the 401K plan. title: BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionType ApiErrorContainer: type: object properties: request: $ref: '#/components/schemas/ApiErrorRequest' errors: type: array items: $ref: '#/components/schemas/ApiError' title: ApiErrorContainer BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems: type: object properties: rate: type: number format: double description: Rate of matching contribution. limit: type: number format: double description: Limit up to which the match rate is applicable. required: - rate - limit description: Contribution values for match rate type. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems Plans 401K_get401KPlansForLegalEntity-v2026-01-01_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItems' description: List of plans title: Plans 401K_get401KPlansForLegalEntity-v2026-01-01_Response_200 BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string description: ID of the 401K plan. name: type: string description: Name of the 401K plan. details: $ref: '#/components/schemas/BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsDetails' description: Object containing additional information about the 401K plan. end_date: type: string description: End date of the plan. start_date: type: - string - 'null' description: Start date of the plan. contribution_type: $ref: '#/components/schemas/BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionType' description: Type of contribution for the 401K plan. contribution_value: type: number format: double description: Value of the contribution if type is percent or amount. contribution_value_for_match_rate: type: - array - 'null' items: $ref: '#/components/schemas/BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionValueForMatchRateItems' description: Array of objects containing limits and rates for match rate contribution type. title: BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItems BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionType: type: string enum: - NEC_PERCENTAGE - NEC_FIXED_AMOUNT - PERCENTAGE - FIXED_AMOUNT - MATCH description: Type of contribution for the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutRequestBodyContentApplicationJsonSchemaDataContributionType BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaData: type: object properties: id: type: string description: ID of the 401K plan. name: type: string description: Name of the 401K plan. details: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataDetails' description: Object containing additional information about the 401K plan. end_date: type: string description: End date of the plan. start_date: type: string description: Start date of the plan. contribution_type: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionType' description: Type of contribution for the 401K plan. contribution_limit: type: number format: double description: Limit of the contribution. contribution_value: type: number format: double description: Value of the contribution if type is percent or amount. contribution_value_for_match_rate: type: array items: $ref: '#/components/schemas/BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionValueForMatchRateItems' description: Array of objects containing limits and rates for match rate contribution type. required: - name - start_date - contribution_type description: Plan object for non PEO legal entity. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaData BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataDetails: type: object properties: key: type: string description: A key-value pair providing additional details about the plan. description: Object containing additional information about the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostResponsesContentApplicationJsonSchemaDataDetails BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionType: type: string enum: - NEC_PERCENTAGE - NEC_FIXED_AMOUNT - PERCENTAGE - FIXED_AMOUNT - MATCH description: Type of contribution for the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataContributionType BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataDetails: type: object properties: {} description: Object containing additional information about the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPlanIdPutResponsesContentApplicationJsonSchemaDataDetails BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionValueForMatchRateItems: type: object properties: rate: type: - number - 'null' format: double description: Rate of matching contribution. limit: type: - number - 'null' format: double description: Limit up to which the match rate is applicable. title: BenefitsLegalEntitiesId401KPlansGetResponsesContentApplicationJsonSchemaDataItemsContributionValueForMatchRateItems BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionType: type: string enum: - PERCENTAGE - NEC_PERCENTAGE - NEC_FIXED_AMOUNT - FIXED_AMOUNT - MATCH description: Type of contribution for the 401K plan. title: BenefitsLegalEntitiesLegalEntityId401KPlansPostRequestBodyContentApplicationJsonSchemaContributionType Plans 401K_activateThe401KIntegrationForTheLegalEntity-v2026-01-01_Response_200: type: object properties: isActive: type: boolean description: Whether the 401k integration has been activated or not. title: Plans 401K_activateThe401KIntegrationForTheLegalEntity-v2026-01-01_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/