openapi: 3.1.0 info: title: Endpoints subpackage_reports API version: 1.0.0 servers: - url: https://api.letsdeel.com/rest/v2 - url: https://api-staging.letsdeel.com/rest/v2 tags: - name: subpackage_reports paths: /gp/reports/{id}/gross_to_net/csv: get: operationId: get-gp-report-gross-to-net-csv summary: Download gross to net report description: "Download global payroll reports detailing gross-to-net calculations.\n **Token scopes**: `global-payroll:read`" tags: - subpackage_reports parameters: - name: id in: path description: Id of the gp payroll report. required: true schema: type: string - name: currency in: query description: Currency to be used in the report calculation. required: false 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: type: object properties: {} '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' /gp/reports/{id}/gross_to_net: get: operationId: get-gp-report-gross-to-net summary: List gross-to-net report. description: "Get a list of global payroll reports detailing gross-to-net calculations. Supports pagination through limit and offset query parameters.\n **Token scopes**: `global-payroll:read`" tags: - subpackage_reports parameters: - name: id in: path description: Id of the gp payroll report. required: true schema: type: string - name: currency in: query description: Currency to be used in the report calculation. required: false schema: type: string - name: limit in: query description: Maximum number of records to return. required: false schema: type: number format: double - name: offset in: query description: Offset/index of record for the next page of records to return. required: false schema: type: number format: double - 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/reports_getGPReportGrossToNet_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ListGrossToNetReportRequestBadRequestError' '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' /gp/legal-entities/{legal_entity_id}/reports: get: operationId: get-gp-legal-entity-reports summary: List payroll events by legal entity description: "Use this endpoint to retrieve payroll events for a specific legal entity when preparing payroll reports or auditing pay cycles. This operation is read-only and does not modify any data.\n **Token scopes**: `global-payroll:read`" tags: - subpackage_reports parameters: - name: legal_entity_id in: path description: Unique identifier for the legal entity. 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/reports_getGPLegalEntityReports_Response_200' '400': description: Operation failed. content: application/json: schema: $ref: '#/components/schemas/ListPayrollEventsByLegalEntityRequestBadRequestError' '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' /reports/payroll/cycles/{cycle_id}/gross-to-net: get: operationId: gets-g-2-n-report-data-for-a-given-payroll-cycle-by-its-id-v-2026-01-01 summary: Gets G2N report data for a given payroll cycle by it's ID. description: "This endpoint gets categorized G2N data (including category group, category, sub-category and label) for each contract within a given payroll cycle for the provided id.\n **Token scopes**: `payslips:read`" tags: - subpackage_reports parameters: - name: cycle_id in: path description: The unique identifier for the payroll event. required: true schema: type: string format: uuid - name: limit in: query description: Maximum number of items to return. Defaults to 20. required: false schema: type: integer default: 20 - name: cursor in: query description: Cursor for pagination of results. required: false 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/Reports_getsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01_Response_200' '400': description: Bad Request. content: application/json: schema: $ref: '#/components/schemas/GetsG2NReportDataForAGivenPayrollCycleByItsId-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: Resource not found. content: application/json: schema: $ref: '#/components/schemas/GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestNotFoundError' '500': description: Internal Server Error. content: application/json: schema: $ref: '#/components/schemas/GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestInternalServerError' components: schemas: GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems: 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: GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems ListPayrollEventsByLegalEntityRequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaErrorsItems' request: $ref: '#/components/schemas/GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaRequest' title: ListPayrollEventsByLegalEntityRequestBadRequestError GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaPage: type: object properties: limit: type: number format: double description: Maximum number of rows returned per page. offset: type: number format: double description: Zero-based offset of the first returned row. total_rows: type: number format: double description: Total number of rows available across all pages. required: - limit - offset - total_rows description: Pagination metadata for the report rows. title: GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaPage ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems: type: object properties: code: type: string description: Machine-readable error code. message: type: string description: Human-readable explanation of the server error. title: ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItemsCategoryGroup: type: string enum: - ADDITIONS - DEDUCTIONS - BENEFITS - INFOS - CONTRIBUTIONS - TOTALS description: Category group for the reporting label. title: ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItemsCategoryGroup reports_getGPReportGrossToNet_Response_200: type: object properties: data: type: array items: type: object additionalProperties: $ref: '#/components/schemas/GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems' description: List of report rows (summary rows are filtered out). Each row contains dynamic column keys mapped to cell objects. page: $ref: '#/components/schemas/GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaPage' description: Pagination metadata for the report rows. required: - data - page title: reports_getGPReportGrossToNet_Response_200 reports_getGPLegalEntityReports_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaDataItems' required: - data title: reports_getGPLegalEntityReports_Response_200 GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: type: type: string description: Cell type used for rendering/formatting. label: type: string description: Human-readable label of the column for this cell. compareValue: description: Raw value for the comparison period, if applicable. currentValue: description: Raw value for the current period. Type varies by column (string/number/null/etc). percentageDiff: description: Percentage difference between current and comparison values, if applicable. formattedCurrentValue: description: Formatted value for display purposes. required: - type - label description: A cell value object for a given column. title: GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestInternalServerError: type: object properties: errors: type: array items: $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems' title: GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestInternalServerError GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaRequest: 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: GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaRequest Reports_getsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01_Response_200: type: object properties: data: type: array items: $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems' description: List of contracts associated with the payroll event. has_more: type: boolean description: Indicates whether more pages are available. created_at: type: string format: date-time description: Timestamp when the report was generated updated_at: type: string format: date-time description: Timestamp when the report was updated next_cursor: type: - string - 'null' description: Pagination cursor to fetch the next page of results. items_per_page: type: integer description: The number of items per page. required: - data - has_more - created_at - updated_at - next_cursor - items_per_page title: Reports_getsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01_Response_200 GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: id: type: string description: Unique identifier for the payroll event. status: type: string description: Status of the payroll event (e.g., OPEN, CLOSED). end_date: type: string format: date-time description: End date of the payroll event in ISO-8601 format. lock_date: type: - string - 'null' format: date-time description: Date when the payroll event is locked, in ISO-8601 format. start_date: type: string format: date-time description: Start date of the payroll event in ISO-8601 format. required: - id - status - end_date - start_date title: GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaDataItems GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaRequest: 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: GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaRequest 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 ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItems: type: object properties: label: type: string description: Label of the payroll item. value: type: number format: double description: Value associated with the payroll item. category: type: string description: Category of the item. sub_category: type: string description: Sub-category of the item. category_group: $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItemsCategoryGroup' description: Category group for the reporting label. title: ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItems ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems: type: object properties: items: type: array items: $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsItemsItems' description: List of payroll-related items. currency: type: string description: Currency associated with the payroll event. contract_oid: type: string description: Unique identifier for the contract. payment_data: oneOf: - $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsPaymentData' - type: 'null' description: Payment details associated with the payroll event. Null if no payment data is available. title: ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItems GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestNotFoundError: type: object properties: code: type: string description: Machine-readable error code. message: type: string description: Error message explaining the resource was not found. title: GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestNotFoundError ApiErrorContainer: type: object properties: request: $ref: '#/components/schemas/ApiErrorRequest' errors: type: array items: $ref: '#/components/schemas/ApiError' title: ApiErrorContainer GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems' title: GetsG2NReportDataForAGivenPayrollCycleByItsId-v2026-01-01RequestBadRequestError ListGrossToNetReportRequestBadRequestError: type: object properties: errors: type: array items: $ref: '#/components/schemas/GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaErrorsItems' request: $ref: '#/components/schemas/GpReportsIdGrossToNetGetResponsesContentApplicationJsonSchemaRequest' title: ListGrossToNetReportRequestBadRequestError GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaErrorsItems: 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: GpLegalEntitiesLegalEntityIdReportsGetResponsesContentApplicationJsonSchemaErrorsItems 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 ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsPaymentData: type: object properties: conversion_rate: type: string description: Conversion rate applied between the payroll currency and the payment currency. payment_currency: type: string description: Currency in which the payment is made. description: Payment details associated with the payroll event. Null if no payment data is available. title: ReportsPayrollCyclesCycleIdGrossToNetGetResponsesContentApplicationJsonSchemaDataItemsPaymentData 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/