openapi: 3.1.0 info: title: Endpoints subpackage_eorWorkerCompliance API version: 1.0.0 servers: - url: https://api.letsdeel.com/rest/v2 - url: https://api-staging.letsdeel.com/rest/v2 tags: - name: subpackage_eorWorkerCompliance paths: /eor/workers/compliance-documents/{document_id}/acknowledgement: post: operationId: create-compliance-document-acknowledgement summary: Acknowledge a compliance document description: "API endpoint to submit consent for compliance documents that require acknowledgement.\n **Token scopes**: `worker:write`" tags: - subpackage_eorWorkerCompliance parameters: - name: document_id in: path description: The unique identifier of the compliance document. 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: '204': description: Document was acknowledged successfully content: application/json: schema: $ref: '#/components/schemas/eor-worker-compliance_createComplianceDocumentAcknowledgement_Response_204' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/AcknowledgeAComplianceDocumentRequestBadRequestError' '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/AcknowledgeAComplianceDocumentRequestInternalServerError' /eor/workers/compliance-documents/{document_id}/templates/download: get: operationId: download-compliance-document-template summary: Download employee compliance document template description: "Get the download link for an employee compliance document template, if it exists.\n **Token scopes**: `worker:read`" tags: - subpackage_eorWorkerCompliance parameters: - name: document_id in: path description: Unique identifier for a compliance document in Deel. 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/eor-worker-compliance_downloadComplianceDocumentTemplate_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' /eor/workers/compliance-documents/{document_id}/download: get: operationId: download-compliance-document summary: Download submitted compliance document description: "Get the download link for an employee's submitted compliance document.\n **Token scopes**: `worker:read`" tags: - subpackage_eorWorkerCompliance parameters: - name: document_id in: path description: Unique identifier for a compliance document in Deel. 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/eor-worker-compliance_downloadComplianceDocument_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/DownloadSubmittedComplianceDocumentRequestBadRequestError' '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' /eor/workers/compliance-documents: get: operationId: get-eor-worker-compliance-documents summary: List of employee compliance documents description: "Get a list of employee compliance documents.\n **Token scopes**: `worker:read`" tags: - subpackage_eorWorkerCompliance 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/eor-worker-compliance_getEORWorkerComplianceDocuments_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '401': description: Authentication failed. The access token is missing, expired, or invalid. content: application/json: schema: $ref: '#/components/schemas/ListOfEmployeeComplianceDocuments-v2026-01-01RequestUnauthorizedError' '403': description: Access denied. The authenticated user does not have the required worker:read scope or is not an employee profile. content: application/json: schema: $ref: '#/components/schemas/ListOfEmployeeComplianceDocuments-v2026-01-01RequestForbiddenError' '404': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ApiErrorContainer' '500': description: Internal server error. content: application/json: schema: $ref: '#/components/schemas/ListOfEmployeeComplianceDocuments-v2026-01-01RequestInternalServerError' /eor/workers/compliance-documents/{document_id}: post: operationId: upload-eor-worker-compliance-document summary: Upload employee compliance document description: "Upload compliance document for an EOR employee.\n **Token scopes**: `worker:write`" tags: - subpackage_eorWorkerCompliance parameters: - name: document_id in: path description: Unique identifier for a compliance document in Deel. 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 operation. content: application/json: schema: $ref: '#/components/schemas/eor-worker-compliance_uploadEORWorkerComplianceDocument_Response_200' '400': description: Bad request. The file is missing or the document_id format is invalid. content: application/json: schema: $ref: '#/components/schemas/UploadEmployeeComplianceDocument-v2026-01-01RequestBadRequestError' '401': description: Authentication failed. Bearer token is missing, expired, or invalid. content: application/json: schema: $ref: '#/components/schemas/UploadEmployeeComplianceDocument-v2026-01-01RequestUnauthorizedError' '403': description: Forbidden. The worker does not have permission to upload to this compliance document, the document cannot be submitted in its current state, or the requirement is obsolete. content: application/json: schema: $ref: '#/components/schemas/UploadEmployeeComplianceDocument-v2026-01-01RequestForbiddenError' '404': description: The compliance document specified by document_id was not found. content: application/json: schema: $ref: '#/components/schemas/UploadEmployeeComplianceDocument-v2026-01-01RequestNotFoundError' '500': description: Internal server error. The file upload failed or an unexpected error occurred. content: application/json: schema: $ref: '#/components/schemas/UploadEmployeeComplianceDocument-v2026-01-01RequestInternalServerError' requestBody: description: The employee compliance document data to upload content: multipart/form-data: schema: type: object properties: file: type: string format: binary description: 'The employee compliance document to upload. Accepted formats: PNG, JPG, JPEG, HEIC, PDF.' components: schemas: EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaErrorsItems: type: object properties: code: type: string field: type: - string - 'null' message: type: string required: - code - message title: EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaErrorsItems UploadEmployeeComplianceDocument-v2026-01-01RequestUnauthorizedError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems' title: UploadEmployeeComplianceDocument-v2026-01-01RequestUnauthorizedError eor-worker-compliance_uploadEORWorkerComplianceDocument_Response_200: type: object properties: data: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaData' required: - data title: eor-worker-compliance_uploadEORWorkerComplianceDocument_Response_200 DownloadSubmittedComplianceDocumentRequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaErrorsItems' request: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaRequest' title: DownloadSubmittedComplianceDocumentRequestBadRequestError ListOfEmployeeComplianceDocuments-v2026-01-01RequestInternalServerError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaErrorsItems' required: - errors title: ListOfEmployeeComplianceDocuments-v2026-01-01RequestInternalServerError eor-worker-compliance_getEORWorkerComplianceDocuments_Response_200: type: object properties: data: $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaData' required: - data title: eor-worker-compliance_getEORWorkerComplianceDocuments_Response_200 EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaData: type: object properties: url: type: string description: The URL for the requested compliance document. expires_at: type: string format: date-time description: Expiration date time of download URL. title: EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaData UploadEmployeeComplianceDocument-v2026-01-01RequestNotFoundError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems' title: UploadEmployeeComplianceDocument-v2026-01-01RequestNotFoundError EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus: type: string enum: - AWAITING_EX_REVIEW - AWAITING_EXTERNAL_REVIEW - REJECTED - APPROVED - ON_HOLD description: Review status of the uploaded document, null if no document has been uploaded yet. title: EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaData: type: object properties: documents: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItems' description: List of compliance documents required for the worker. required: - documents title: EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaData eor-worker-compliance_downloadComplianceDocument_Response_200: type: object properties: data: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaData' required: - data title: eor-worker-compliance_downloadComplianceDocument_Response_200 ListOfEmployeeComplianceDocuments-v2026-01-01RequestUnauthorizedError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaErrorsItems' required: - errors title: ListOfEmployeeComplianceDocuments-v2026-01-01RequestUnauthorizedError EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaErrorsItems: 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: EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaErrorsItems ListOfEmployeeComplianceDocuments-v2026-01-01RequestForbiddenError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaErrorsItems' required: - errors title: ListOfEmployeeComplianceDocuments-v2026-01-01RequestForbiddenError AcknowledgeAComplianceDocumentRequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdAcknowledgementPostResponsesContentApplicationJsonSchemaErrorsItems' title: AcknowledgeAComplianceDocumentRequestBadRequestError eor-worker-compliance_createComplianceDocumentAcknowledgement_Response_204: type: object properties: {} description: Empty response body title: eor-worker-compliance_createComplianceDocumentAcknowledgement_Response_204 UploadEmployeeComplianceDocument-v2026-01-01RequestForbiddenError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems' title: UploadEmployeeComplianceDocument-v2026-01-01RequestForbiddenError 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 ApiErrorContainer: type: object properties: request: $ref: '#/components/schemas/ApiErrorRequest' errors: type: array items: $ref: '#/components/schemas/ApiError' title: ApiErrorContainer AcknowledgeAComplianceDocumentRequestInternalServerError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdAcknowledgementPostResponsesContentApplicationJsonSchemaErrorsItems' title: AcknowledgeAComplianceDocumentRequestInternalServerError UploadEmployeeComplianceDocument-v2026-01-01RequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems' title: UploadEmployeeComplianceDocument-v2026-01-01RequestBadRequestError EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems: type: object properties: message: type: string description: Human-readable error message. required: - message title: EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItems: type: object properties: id: type: string format: uuid description: Unique identifier for the compliance document requirement. name: type: string description: Display name of the compliance document. status: oneOf: - $ref: '#/components/schemas/EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItemsStatus' - type: 'null' description: Review status of the uploaded document, null if no document has been uploaded yet. country: type: string description: ISO 3166-1 alpha-2 country code where the document is required. fillable: type: boolean description: Whether the document can be filled through the Deel platform. filenames: type: array items: type: string description: List of uploaded file names. Empty array when no files have been uploaded. description: type: string description: Description of the document requirement. Empty string when no description exists. is_optional: type: boolean description: Whether the document is optional for the worker. Also true when the document is required within 30 days. uploaded_at: type: - string - 'null' format: date-time description: ISO 8601 timestamp when the document was uploaded, null if no document has been uploaded. has_template: type: boolean description: Whether a template is available for this document. rejection_message: type: string description: Plain text message explaining why the document was rejected. Empty string when no rejection message exists. is_consent_required: type: boolean description: Whether consent is required for acknowledgement-only documents. Only present when is_acknowledgement_only_document is true. required_in_30_days: type: boolean description: Whether the document is required within 30 days of employment start. is_acknowledgement_only_document: type: boolean description: Whether this document only requires acknowledgement without file upload. required: - id - name - status - country - fillable - filenames - description - is_optional - uploaded_at - has_template - rejection_message - required_in_30_days - is_acknowledgement_only_document title: EorWorkersComplianceDocumentsGetResponsesContentApplicationJsonSchemaDataDocumentsItems EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaData: type: object properties: success: type: boolean description: Indicates whether the file upload was successful. required: - success title: EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaData UploadEmployeeComplianceDocument-v2026-01-01RequestInternalServerError: type: object properties: errors: type: array items: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdPostResponsesContentApplicationJsonSchemaErrorsItems' title: UploadEmployeeComplianceDocument-v2026-01-01RequestInternalServerError EorWorkersComplianceDocumentsDocumentIdAcknowledgementPostResponsesContentApplicationJsonSchemaErrorsItems: type: object properties: code: type: string description: Machine-readable error code message: type: string description: Human-readable explanation of the error title: EorWorkersComplianceDocumentsDocumentIdAcknowledgementPostResponsesContentApplicationJsonSchemaErrorsItems eor-worker-compliance_downloadComplianceDocumentTemplate_Response_200: type: object properties: data: $ref: '#/components/schemas/EorWorkersComplianceDocumentsDocumentIdTemplatesDownloadGetResponsesContentApplicationJsonSchemaData' required: - data title: eor-worker-compliance_downloadComplianceDocumentTemplate_Response_200 EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaRequest: 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: EorWorkersComplianceDocumentsDocumentIdDownloadGetResponsesContentApplicationJsonSchemaRequest EorWorkersComplianceDocumentsDocumentIdTemplatesDownloadGetResponsesContentApplicationJsonSchemaData: type: object properties: url: type: string description: The URL for the requested compliance document template. expires_at: type: - string - 'null' format: date-time description: Expiration date time of download URL. updated_at: type: string format: date-time description: Last modified date of the template file title: EorWorkersComplianceDocumentsDocumentIdTemplatesDownloadGetResponsesContentApplicationJsonSchemaData 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/