openapi: 3.1.0 info: title: Endpoints subpackage_organizations API version: 1.0.0 servers: - url: https://api.letsdeel.com/rest/v2 - url: https://api-staging.letsdeel.com/rest/v2 tags: - name: subpackage_organizations paths: /organizations/children: post: operationId: create-organization-child summary: Create child organization description: "Creates a new organization along with:\n\n- An API token scoped to the new organization. This token can be used to perform API operations on behalf of the new organization.\n- A default group for the organization.\n- A hierarchy linking the authenticated organization (the Parent Organization) with the new one (the Child Organization).\n- A user from the parent organization who will be assigned to the child organization.\n\nThis endpoint sets up the bare minimum required for the new organization to be operational immediately after creation.\n **Token scopes**: `organizations:write`" tags: - subpackage_organizations 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: '201': description: Operation successful. The child organization was created successfully. content: application/json: schema: $ref: '#/components/schemas/organizations_createOrganizationChild_Response_201' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/CreateChildOrganizationRequestBadRequestError' '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: data: $ref: '#/components/schemas/OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaData' description: The request payload. required: - data /organizations: get: operationId: get-organizations summary: Get Current Organization description: "Retrieve details of the current organization associated with the authenticated user. The organization is automatically detected based on the authentication token provided in the request.\n **Token scopes**: `organizations:read`" tags: - subpackage_organizations 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 retrieval of the organization details. content: application/json: schema: $ref: '#/components/schemas/organizations_getOrganizations_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Unauthorized. The request is missing authentication credentials or the credentials provided are invalid. content: application/json: schema: $ref: '#/components/schemas/GetOrganizationsRequestUnauthorizedError' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: Organization not found. The current organization associated with the authentication token could not be found. content: application/json: schema: $ref: '#/components/schemas/GetOrganizationsRequestNotFoundError' '500': description: Internal server error. An error occurred on the server while processing the request. content: application/json: schema: $ref: '#/components/schemas/GetOrganizationsRequestInternalServerError' /roles: post: operationId: create-organization-role summary: Create organization custom role. description: "Create organization custom role.\n **Token scopes**: `organizations:write`" tags: - subpackage_organizations 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 operation content: application/json: schema: $ref: '#/components/schemas/Organizations_CreateOrganizationRole_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: data: $ref: '#/components/schemas/RolesPostRequestBodyContentApplicationJsonSchemaData' get: operationId: get-the-roles-of-the-current-organization-v-2026-01-01 summary: Get the roles of the current organization. description: "Retrieve a list of roles assigned within the current organization. Each role has a unique identifier, name, scope, and optional HRIS structure ID. This helps determine the types of roles within the organization and their corresponding access levels.\n **Token scopes**: `organizations:read`" tags: - subpackage_organizations 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 retrieval of the organization roles. content: application/json: schema: $ref: '#/components/schemas/Organizations_getTheRolesOfTheCurrentOrganization-v2026-01-01_Response_200' '400': description: Bad request. The request was malformed or missing required parameters. content: application/json: schema: $ref: '#/components/schemas/GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestBadRequestError' '401': description: Unauthorized. The request is missing authentication credentials or the credentials provided are invalid. content: application/json: schema: $ref: '#/components/schemas/GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestUnauthorizedError' '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. An error occurred while processing the request. content: application/json: schema: $ref: '#/components/schemas/GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestInternalServerError' /teams: get: operationId: get-teams summary: Get Team List description: "Retrieve a list of teams within the organization associated with the authenticated user. This list provides basic details about each team, including the team ID and name.\n **Token scopes**: `organizations:read`" tags: - subpackage_organizations 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 retrieval of the teams in the organization. content: application/json: schema: $ref: '#/components/schemas/Organizations_getTeams_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Unauthorized. The request is missing authentication credentials or the credentials provided are invalid. content: application/json: schema: $ref: '#/components/schemas/GetTeamsRequestUnauthorizedError' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: No teams found. There are no teams associated with the current organization. content: application/json: schema: $ref: '#/components/schemas/GetTeamsRequestNotFoundError' '500': description: Internal server error. An error occurred on the server while processing the request. content: application/json: schema: $ref: '#/components/schemas/GetTeamsRequestInternalServerError' /departments: get: operationId: get-departments summary: Retrieve Departments description: "Retrieve a list of departments within the organization associated with the authenticated user. Each department contains its unique identifier, name, and optionally, the parent department if applicable.\n **Token scopes**: `organizations:read`" tags: - subpackage_organizations 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 retrieval of the list of departments. content: application/json: schema: $ref: '#/components/schemas/Organizations_GetDepartments_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Unauthorized. The request is missing authentication credentials or the credentials provided are invalid. content: application/json: schema: $ref: '#/components/schemas/GetDepartmentsRequestUnauthorizedError' '403': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '404': description: No departments found. There are no departments associated with the current organization. content: application/json: schema: $ref: '#/components/schemas/GetDepartmentsRequestNotFoundError' '500': description: Internal server error. An error occurred on the server while processing the request. content: application/json: schema: $ref: '#/components/schemas/GetDepartmentsRequestInternalServerError' /working-locations: get: operationId: retrieve-working-locations summary: Retrieve working locations description: "Retrieves the list of available work location labels configured in the HRIS system for the organization.\n **Token scopes**: `organizations:read`" tags: - subpackage_organizations 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 operation. content: application/json: schema: $ref: '#/components/schemas/Organizations_retrieveWorkingLocations_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' /roles/{roleId}: patch: operationId: update-organization-role summary: Update organization custom role description: "undefined\n **Token scopes**: `organizations:write`" tags: - subpackage_organizations parameters: - name: roleId in: path description: ID of the role 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/Organizations_UpdateOrganizationRole_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: data: $ref: '#/components/schemas/RolesRoleIdPatchRequestBodyContentApplicationJsonSchemaData' components: schemas: Organizations_GetDepartments_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/DepartmentsGetResponsesContentApplicationJsonSchemaDataItems' title: Organizations_GetDepartments_Response_200 Organizations_UpdateOrganizationRole_Response_200: type: object properties: id: type: number format: double description: ID of the role name: type: string description: Name of the role scope: type: string description: Scope of the role description: type: string description: Description of the role permissionSets: type: array items: type: string title: Organizations_UpdateOrganizationRole_Response_200 OrganizationsChildrenPostResponsesContentApplicationJsonSchemaErrorsItems: type: object properties: path: type: string description: The JSON path where input validation failed message: type: string description: A description of the returned error title: OrganizationsChildrenPostResponsesContentApplicationJsonSchemaErrorsItems OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataParentOrganization: type: object properties: admin_email: type: string description: The email of one of the managers of the parent organization that will be used to create an user for the child organization, it should exists on the parent organization. description: The object that contains the information related to the parent_organization. title: OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataParentOrganization organizations_getOrganizations_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/OrganizationsGetResponsesContentApplicationJsonSchemaDataItems' title: organizations_getOrganizations_Response_200 RolesPostRequestBodyContentApplicationJsonSchemaData: type: object properties: name: type: string description: Organization role name scope: type: string description: Organization role scope description: type: string description: Organization role description permissionSets: type: array items: type: string hrisOrgStructureId: type: string description: HRIS organization structure id required: - name - scope - description - permissionSets title: RolesPostRequestBodyContentApplicationJsonSchemaData Organizations_getTheRolesOfTheCurrentOrganization-v2026-01-01_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/RolesGetResponsesContentApplicationJsonSchemaDataItems' required: - data title: Organizations_getTheRolesOfTheCurrentOrganization-v2026-01-01_Response_200 GetDepartmentsRequestNotFoundError: type: object properties: error: type: string description: An error message indicating that no departments were found. title: GetDepartmentsRequestNotFoundError GetTeamsRequestInternalServerError: type: object properties: error: type: string description: A general error message indicating that the server encountered an unexpected issue. title: GetTeamsRequestInternalServerError GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestBadRequestError: type: object properties: error: type: string title: GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestBadRequestError Organizations_retrieveWorkingLocations_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/WorkingLocationsGetResponsesContentApplicationJsonSchemaDataItems' required: - data title: Organizations_retrieveWorkingLocations_Response_200 OrganizationsChildrenPostResponsesContentApplicationJsonSchemaRequest: type: object properties: url: type: string description: The relative URL of the failed request code: type: number format: double description: The code of the source handler which produced the returned error docs: type: string description: A link to the official documentation for the requested endpoint resource method: type: string description: The HTTP method of the failed request source: type: string description: The source handler which produced the returned error 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 title: OrganizationsChildrenPostResponsesContentApplicationJsonSchemaRequest OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataChildOrganization: type: object properties: name: type: string description: The organization's name. department: type: string description: The department's name where the manager will be added is_api_enabled: type: boolean description: The flag that enables the public API for the child organization. workforce_size: type: integer description: The workforce size of the child organization. headquarters_country: type: string description: The 2-letter country code of the organization's headquarters. required: - name description: The object that contains all the information related to the child organization that will be created. title: OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataChildOrganization GetDepartmentsRequestUnauthorizedError: type: object properties: error: type: string description: An error message indicating that the authentication failed. title: GetDepartmentsRequestUnauthorizedError GetOrganizationsRequestNotFoundError: type: object properties: error: type: string description: An error message indicating that no organization was found for the authenticated user. title: GetOrganizationsRequestNotFoundError GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestUnauthorizedError: type: object properties: error: type: string title: GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestUnauthorizedError organizations_createOrganizationChild_Response_201: type: object properties: data: $ref: '#/components/schemas/OrganizationsChildrenPostResponsesContentApplicationJsonSchemaData' required: - data title: organizations_createOrganizationChild_Response_201 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 RolesRoleIdPatchRequestBodyContentApplicationJsonSchemaData: type: object properties: name: type: string description: Name of the role description: type: string description: Description of the role permissionSets: type: array items: type: string title: RolesRoleIdPatchRequestBodyContentApplicationJsonSchemaData ApiErrorContainer: type: object properties: request: $ref: '#/components/schemas/ApiErrorRequest' errors: type: array items: $ref: '#/components/schemas/ApiError' title: ApiErrorContainer Organizations_CreateOrganizationRole_Response_200: type: object properties: id: type: number format: double description: Organization role id name: type: string description: Organization role name scope: type: string description: Organization role scope description: type: string description: Organization role description permissionSets: type: array items: type: string hrisOrgStructureId: type: string description: HRIS organization structure id title: Organizations_CreateOrganizationRole_Response_200 GetTeamsRequestUnauthorizedError: type: object properties: error: type: string description: An error message indicating that the authentication failed. title: GetTeamsRequestUnauthorizedError Organizations_getTeams_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/TeamsGetResponsesContentApplicationJsonSchemaDataItems' required: - data title: Organizations_getTeams_Response_200 TeamsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string format: uuid description: The unique identifier of the team within the organization. name: type: string description: The name of the team. required: - id - name title: TeamsGetResponsesContentApplicationJsonSchemaDataItems DepartmentsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string format: uuid description: The unique identifier for the department. name: type: string description: The name of the department. parent: type: - string - 'null' description: The ID of the parent department, if applicable. required: - id - name title: DepartmentsGetResponsesContentApplicationJsonSchemaDataItems GetDepartmentsRequestInternalServerError: type: object properties: error: type: string description: A general error message indicating that the server encountered an unexpected issue. title: GetDepartmentsRequestInternalServerError GetTeamsRequestNotFoundError: type: object properties: error: type: string description: An error message indicating that no teams were found. title: GetTeamsRequestNotFoundError OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaData: type: object properties: child_organization: $ref: '#/components/schemas/OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataChildOrganization' description: The object that contains all the information related to the child organization that will be created. parent_organization: $ref: '#/components/schemas/OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaDataParentOrganization' description: The object that contains the information related to the parent_organization. required: - child_organization - parent_organization description: The request payload. title: OrganizationsChildrenPostRequestBodyContentApplicationJsonSchemaData WorkingLocationsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: number format: double description: Unique identifier of this resource. name: type: string required: - id - name title: WorkingLocationsGetResponsesContentApplicationJsonSchemaDataItems RolesGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: number format: double description: The unique identifier for the role. name: type: string description: The name of the role. scope: type: string description: The scope of the role, which can define the level of access. For example, 'ORGANIZATION' represents a global role within the organization. hrisOrgStructureId: type: - string - 'null' description: The HRIS (Human Resource Information System) organization structure ID associated with the role, if applicable. required: - id - name - scope title: RolesGetResponsesContentApplicationJsonSchemaDataItems GetOrganizationsRequestInternalServerError: type: object properties: error: type: string description: A general error message indicating that the server encountered an unexpected issue. title: GetOrganizationsRequestInternalServerError GetOrganizationsRequestUnauthorizedError: type: object properties: error: type: string description: An error message indicating that the authentication failed. title: GetOrganizationsRequestUnauthorizedError OrganizationsChildrenPostResponsesContentApplicationJsonSchemaData: type: object properties: id: type: string description: The unique identifier of the created child organization. token: type: string description: The API token generated for the created child organization created_at: type: string format: date-time description: When the created child organization was created (ISO 8601 format) updated_at: type: string format: date-time description: When the created child organization was updated for the last time (ISO 8601 format) required: - id - token - created_at - updated_at title: OrganizationsChildrenPostResponsesContentApplicationJsonSchemaData GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestInternalServerError: type: object properties: error: type: string title: GetTheRolesOfTheCurrentOrganization-v2026-01-01RequestInternalServerError OrganizationsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string format: uuid description: The unique identifier of the organization. name: type: string description: The name of the organization. required: - id - name title: OrganizationsGetResponsesContentApplicationJsonSchemaDataItems 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 CreateChildOrganizationRequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/OrganizationsChildrenPostResponsesContentApplicationJsonSchemaErrorsItems' request: $ref: '#/components/schemas/OrganizationsChildrenPostResponsesContentApplicationJsonSchemaRequest' title: CreateChildOrganizationRequestBadRequestError 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/