> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intermezzo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect to an existing NEST employer

> Connects the organisation to an employer already registered with NEST, by its employer reference. Nothing is created in NEST: the employer's groups and payment sources are read and recorded. The employer must have granted Intermezzo delegate access in NEST. Returns 202 with a submission ID; poll /nest/status for the outcome.



## OpenAPI

````yaml /api-reference/preview.json post /gb/organizations/{organization_id}/pension/nest/link
openapi: 3.2.0
info:
  title: Intermezzo Global Payroll
  summary: Global Payroll Platform
  description: Intermezzo's global payroll apis, organized by country
  version: '2026-10-07'
  x-logo:
    url: /static/icon.svg
servers:
  - url: https://preview.intermezzo.ai
    description: Preview
security: []
paths:
  /gb/organizations/{organization_id}/pension/nest/link:
    post:
      tags:
        - Great Britain
        - Pension
        - NEST
      summary: Connect to an existing NEST employer
      description: >-
        Connects the organisation to an employer already registered with NEST,
        by its employer reference. Nothing is created in NEST: the employer's
        groups and payment sources are read and recorded. The employer must have
        granted Intermezzo delegate access in NEST. Returns 202 with a
        submission ID; poll /nest/status for the outcome.
      operationId: nest_link_gb_organizations__organization_id__pension_nest_link_post
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            title: Organization Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NestLinkEmployerRequest'
      responses:
        '202':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NestOperationAccepted'
        '409':
          description: >-
            - `NEST_EMPLOYER_REFERENCE_MISMATCH`: Raised when link names a NEST
            employer other than the one the organisation is connected to.

            - `NEST_EMPLOYER_REFERENCE_TAKEN`: Raised when a NEST employer is
            already connected to another organisation.

            - `NEST_SETUP_IN_PROGRESS`: Raised when a NEST operation is
            requested while another is in flight for the organisation.
          content:
            application/json:
              examples:
                NEST_EMPLOYER_REFERENCE_MISMATCH:
                  summary: >-
                    Raised when link names a NEST employer other than the one
                    the organisation is connected to.
                  value:
                    errors:
                      - code: NEST_EMPLOYER_REFERENCE_MISMATCH
                        message: >-
                          Raised when link names a NEST employer other than the
                          one the organisation is connected to.
                NEST_EMPLOYER_REFERENCE_TAKEN:
                  summary: >-
                    Raised when a NEST employer is already connected to another
                    organisation.
                  value:
                    errors:
                      - code: NEST_EMPLOYER_REFERENCE_TAKEN
                        message: >-
                          Raised when a NEST employer is already connected to
                          another organisation.
                NEST_SETUP_IN_PROGRESS:
                  summary: >-
                    Raised when a NEST operation is requested while another is
                    in flight for the organisation.
                  value:
                    errors:
                      - code: NEST_SETUP_IN_PROGRESS
                        message: >-
                          Raised when a NEST operation is requested while
                          another is in flight for the organisation.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: >-
            The request failed validation. Type and format errors use the
            generic FIELD_* codes.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: >-
            - `NEST_NOT_CONFIGURED`: Raised when NEST delegate credentials are
            missing from settings.
          content:
            application/json:
              examples:
                NEST_NOT_CONFIGURED:
                  summary: >-
                    Raised when NEST delegate credentials are missing from
                    settings.
                  value:
                    errors:
                      - code: NEST_NOT_CONFIGURED
                        message: >-
                          Raised when NEST delegate credentials are missing from
                          settings.
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - BearerToken: []
components:
  schemas:
    NestLinkEmployerRequest:
      properties:
        employer_reference_number:
          type: string
          pattern: ^EMP\d{9}$
          title: Employer Reference Number
          description: >-
            The employer's existing NEST reference number (EMP followed by 9
            digits)
      type: object
      required:
        - employer_reference_number
      title: NestLinkEmployerRequest
    NestOperationAccepted:
      properties:
        submission_id:
          type: string
          title: Submission Id
        status:
          type: string
          const: PENDING
          title: Status
          default: PENDING
      type: object
      required:
        - submission_id
      title: NestOperationAccepted
    ErrorResponse:
      properties:
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
          title: Errors
          description: Errors that occurred
      additionalProperties: false
      type: object
      required:
        - errors
      title: ErrorResponse
      description: >-
        Body of every error response: PayrollExceptions and request validation
        errors.
    ErrorDetail:
      properties:
        code:
          anyOf:
            - $ref: '#/components/schemas/ErrorCode'
            - $ref: '#/components/schemas/PydanticErrorCode'
          title: Code
          description: Unique error code for i18n lookup
        message:
          type: string
          title: Message
          description: English fallback error message
        field:
          anyOf:
            - type: string
            - type: 'null'
          title: Field
          description: Field that caused the error
        params:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Params
          description: Parameters for translation interpolation
      additionalProperties: false
      type: object
      required:
        - code
        - message
      title: ErrorDetail
      description: |-
        Represents an error that occurred during processing.

        Designed for client-side i18n:
        - code: Use this to look up translation (e.g., "ORG_NOT_FOUND")
        - message: English fallback if translation not available
        - field: Field name for form validation highlighting
        - params: Dynamic values for translation interpolation
    ErrorCode:
      type: string
      enum:
        - ADDRESS_NOT_FOUND
        - ADDRESS_CREATION_ERROR
        - ADDRESS_UPDATING_ERROR
        - ADDRESS_COUNTRY_CODE_MISMATCH
        - ORG_NOT_FOUND
        - ORG_DUPLICATE_EXTERNAL_REF
        - ORG_HAS_ACTIVE_EMPLOYEES
        - ORG_ALREADY_SHUTDOWN
        - ORG_COUNTRY_CHANGE_NOT_ALLOWED
        - ORG_BELONGS_TO_A_DIFFERENT_COUNTRY
        - COUNTRY_NOT_SUPPORTED
        - CONTACT_NOT_FOUND
        - CONTACT_ACCESS_DENIED
        - WORKSITE_NOT_FOUND
        - BANK_ACCOUNT_NOT_FOUND
        - BANK_ACCOUNT_MISSING_SWIFT
        - BANK_ACCOUNT_MISSING_IBAN
        - BANK_ACCOUNT_INVALID_COMBINATION
        - BANK_ACCOUNT_NOT_ASSOCIATED_WITH_ORG
        - EMPLOYEE_NOT_FOUND
        - EMPLOYEE_ACCESS_DENIED
        - EMPLOYEES_ACCESS_DENIED
        - EMPLOYEES_DO_NOT_BELONG_TO_PAY_GROUP
        - EMPLOYEES_ASSIGNED_TO_PAY_GROUP
        - EMPLOYEE_IN_OPEN_PAYROLL
        - DUPLICATE_EMPLOYEE_IDS
        - PAYROLL_STATUS_NOT_FOUND
        - TASK_STATUS_CHECKER_NOT_FOUND
        - PAYROLL_TASK_INVALID_STATUS
        - CALCULATION_TASK_NOT_FOUND_IN_PAYROLL
        - PAYRUN_ALREADY_EXISTS
        - PAYRUN_NOT_FOUND
        - PAYRUN_NOT_IN_DRAFT_STATUS
        - PAYRUN_NOT_APPROVED
        - PAYRUN_STILL_PROCESSING
        - PAYRUN_MISSING_PAYSLIPS
        - PAYRUN_OPERATION_FAILED
        - PAYRUN_CONTAINS_EMPLOYEES_NOT_IN_PAY_GROUP
        - PAYRUN_EMPTY_PAY_DETAILS
        - PAYRUN_NMW_VIOLATIONS
        - SACRIFICE_NOT_ALLOWED
        - PAY_GROUP_NOT_FOUND
        - ONE_OR_MORE_PAY_GROUP_NOT_FOUND
        - PAY_GROUP_IS_IN_RUNNING_PAYROLL
        - PAY_CALENDAR_NOT_FOUND
        - PAY_PERIOD_UNRESOLVED
        - GB_PRORATION_BASIS_MALFORMED
        - INSURANCE_DATA_NOT_FOUND
        - INSURANCE_OPERATION_FAILED
        - PREFERENCES_NOT_FOUND
        - TAX_IDENTIFIER_NOT_FOUND
        - TAX_DATA_REQUIRED
        - PAYSLIP_OPERATION_FAILED
        - PAYSLIP_PDF_GENERATION_FAILED
        - PAYSLIP_FPS_VALIDATION_FAILED
        - PAYSLIP_FPS_SUBMISSION_FAILED
        - PAYSLIP_FPS_POLLING_FAILED
        - PAYSLIP_NOT_FOUND
        - DOCUMENT_NOT_FOUND
        - DOCUMENT_ACCESS_DENIED
        - DOCUMENT_UPLOAD_FAILED
        - DOCUMENT_DOWNLOAD_FAILED
        - DOCUMENT_DELETION_FAILED
        - DOCUMENT_OPERATION_FAILED
        - DOCUMENT_INVALID_TYPE
        - DOCUMENT_SIZE_EXCEEDED
        - DOCUMENT_UNSUPPORTED_FILE_TYPE
        - DOCUMENT_RATE_LIMIT_EXCEEDED
        - DOCUMENT_TEMPLATE_NOT_FOUND
        - DOCUMENT_TEMPLATE_INVALID_SYNTAX
        - DOCUMENT_TEMPLATE_ALREADY_ACTIVE
        - DOCUMENT_TEMPLATE_OPERATION_FAILED
        - WAGE_TYPE_NOT_FOUND
        - WAGE_TYPE_ALREADY_EXISTS
        - WAGE_TYPE_DRAFT_EXISTS
        - WAGE_TYPE_INVALID_DATE
        - COMPENSATION_EFFECTIVE_DATE_TOO_OLD
        - COMPENSATION_PAY_GROUP_READ_ONLY
        - PENSION_SCHEME_NOT_FOUND
        - PENSION_SCHEME_ALREADY_EXISTS
        - PENSION_SCHEME_INVALID_VALID_FROM
        - PENSION_MEMBERSHIP_NOT_FOUND
        - PENSION_MEMBERSHIP_ALREADY_ACTIVE
        - PENSION_MEMBERSHIP_NOT_ACTIVE
        - PENSION_MEMBERSHIP_INVALID_VALID_FROM
        - PENSION_WAGE_TYPE_OVERRIDE_INCOMPLETE
        - PENSION_WAGE_TYPE_MISMATCH
        - PENSION_RATE_BELOW_MINIMUM
        - PENSION_INVALID_ENTRY_ROUTE
        - PENSION_OPT_IN_TOO_SOON
        - PENSION_JOIN_NOT_ENTITLED
        - PENSION_NO_FUTURE_PAY_PERIOD
        - PENSION_FIXED_AMOUNT_RATE_EXCLUSIVE
        - PENSION_INVALID_STATE_TRANSITION
        - NEST_ALREADY_CONNECTED
        - NEST_EMPLOYER_REFERENCE_MISMATCH
        - NEST_EMPLOYER_REFERENCE_TAKEN
        - NEST_NOT_CONNECTED
        - NEST_SETUP_IN_PROGRESS
        - NEST_SCHEME_NOT_NEST_PROVIDER
        - NEST_SCHEME_MISSING_CONFIG
        - NEST_SCHEME_NOT_API_SUBMISSION
        - NEST_NOT_CONFIGURED
        - NEST_PROVIDER_CONFIG_INVALID
        - NEST_PROVIDER_CONFIG_LOCKED
        - NEST_SETUP_MISSING_DATA
        - NEST_SETUP_UNSUPPORTED
        - NEST_FIRST_EPED_IN_PAST
        - P32_EA_INELIGIBLE
        - P32_RECORD_NOT_FOUND
        - P32_NO_SURPLUS
        - P32_REPAYMENT_EXCEEDS_SURPLUS
        - HMRC_STATUS_NOT_FOUND
        - HMRC_INVALID_STATE_TRANSITION
        - EPS_NOT_FOUND
        - FPS_SUBMISSION_NOT_FOUND
        - FPS_PAYMENT_AFTER_LEAVING_WITHOUT_LEAVING_DATE
        - EPS_DATE_SCHEME_CEASED_IN_FUTURE
        - EPS_FINAL_SUBMISSION_NO_TYPE
        - EPS_DATE_SCHEME_CEASED_WITHOUT_SCHEME_CEASED
        - EPS_RECOVERABLE_AMOUNTS_NO_FIELDS
        - EPS_NO_SECTIONS_PROVIDED
        - P11D_INVALID_TAX_YEAR
        - P11D_OUTSIDE_FILING_WINDOW
        - P11D_NOT_FOUND
        - P11D_DELETE_BLOCKED
        - BACS_SUN_NOT_CONFIGURED
        - BACS_FILE_NOT_FOUND
        - BACS_TASK_NOT_SCHEDULED
        - BACS_TASK_IN_PROGRESS
        - BACS_TASK_FAILED
        - BACS_NO_PAYMENTS
        - BACS_FILE_LATE
        - GB_RTI_ID_DUPLICATE
        - GB_RTI_ID_REUSED_IN_TAX_YEAR
        - GB_PAYROLL_CALCULATION_RESULTS_NOT_READY
        - GB_VALUED_GROUP_NOT_DECLARED
        - GB_PRORATION_INPUT_ERROR
        - GB_UNCLAIMED_SEGMENT
        - GB_SMP_TOP_UP_BASIS_MISSING
        - GB_PRIOR_SLICE_WITHOUT_CURRENT_LINE
        - GB_PRESENCE_FACTOR_NOT_SET
        - GB_CONFLICTING_PRESENCE_FACTOR
        - GB_PENSION_EARNINGS_DEFINITION_UNHANDLED
        - GB_EARNINGS_HISTORY_GAP
        - GB_EARNINGS_HISTORY_MIGRATION_INVALID
        - GB_EARNINGS_HISTORY_RANGE_INVALID
        - GB_AWE_PAY_DAY_COUNT_MISMATCH
        - GB_PERIOD_FIGURES_INCOMPLETE
        - GB_WAGE_TYPE_NIC_CLASS_CONFLICT
        - GB_GROSSUP_FLOW_ORDER
        - REPORT_NOT_FOUND
        - REPORT_ALREADY_EXISTS
        - REPORT_DOCUMENT_MISSING
        - GTN_NO_APPROVED_PAYSLIPS
        - YTD_NO_PAYSLIPS
        - REPORT_EMPLOYEE_DATA_MISSING
        - VARIANCE_REPORT_NOT_FOUND
        - ORG_SCOPED_REPORT_SCOPE_MISMATCH
        - EMPLOYEE_SCOPED_REPORT_SCOPE_MISMATCH
        - FPS_SUMMARY_NO_PAYRUNS
        - P45_NOT_GENERATED
        - P45_EMPLOYEE_NOT_LEAVER
        - P45_MISSING_EMPLOYER_TAX_IDENTIFIER
        - P60_NO_QUALIFYING_EMPLOYEES
        - P60_NOT_GENERATED
        - P60_MISSING_EMPLOYER_TAX_IDENTIFIER
        - P60_NI_CATEGORY_MISMATCH
        - EXB_SUBMISSION_ALREADY_EXISTS
        - EXB_SUBMISSION_NOT_FOUND
        - EXB_OUTSIDE_FILING_WINDOW
        - EXB_INVALID_TAX_YEAR
        - P46_CAR_NOT_FOUND
        - P46_CAR_LOCKED
        - PENSION_REPORT_NOT_FOUND
        - PAYROLL_LIABILITY_REPORT_NO_DATA
        - PAYROLL_LIABILITY_PAY_DATE_TAX_PERIOD_UNRESOLVED
        - ABSENCE_NOT_FOUND
        - ABSENCE_CANCELLED
        - GB_ABSENCE_OVERLAP
        - GB_ABSENCE_COMPULSORY_LEAVE
        - GB_ABSENCE_DUPLICATE_KIT_DAY
        - GB_ABSENCE_EMPLOYEE_COUNTRY_MISMATCH
        - GB_ABSENCE_FACTS_OMITTED
        - GB_ABSENCE_CONTENT_MALFORMED
        - GB_ABSENCE_WRITE_WITHOUT_LOCK
        - GB_ABSENCE_SCHEME_NOT_FOUND
        - GB_ABSENCE_SCHEME_REGIME_IMMUTABLE
        - GB_ABSENCE_SCHEME_TERMS_MALFORMED
        - GB_ABSENCE_SCHEME_TOP_UP_WAGE_TYPE_INVALID
        - GB_ABSENCE_SCHEME_EDITION_BACKDATED
        - GB_ABSENCE_SCHEME_IN_USE
        - GB_ABSENCE_SCHEME_ASSIGNMENT_NOT_FOUND
        - GB_ABSENCE_SCHEME_ASSIGNMENT_UNKNOWN_SCHEME
        - GB_ABSENCE_SCHEME_ASSIGNMENT_REGIME_MISMATCH
        - GB_ABSENCE_SCHEME_ASSIGNMENT_BACKDATED
        - GB_ABSENCE_SCHEME_ASSIGNMENT_INVALID_END
        - GB_ABSENCE_SCHEME_ASSIGNMENT_TARGET_INVALID
        - GB_ABSENCE_SCHEME_NO_TERMS_IN_FORCE
        - GB_ABSENCE_SCHEME_REGIME_MISMATCH
        - GB_SMP_PRESCRIBED_RATE_UNKNOWN
        - GB_SMP_START_TOO_EARLY
        - GB_SMP_EVIDENCE_MISSING
        - GB_SMP_CLAIM_ANCHOR_MISMATCH
        - GB_SMP_STATUTORY_WAGE_TYPE_MISSING
        - GB_SMP_ALLOCATION_PREFERENCE_MALFORMED
        - GB_SMP_PAY_CALENDAR_INCONSISTENT
        - GB_SMP_CURSOR_MALFORMED
        - GB_SMP_TOP_UP_WAGE_TYPE_MISSING
        - GB_SMP_ALLOCATION_MODE_CHANGED
        - GB_SMP_DEFERRED_TOP_UP_STAMPED
        - GB_SMP_PERIOD_GRID_AMBIGUOUS
        - GB_SMP_LINE_META_VERSION_UNKNOWN
        - DEFINITION_EDITION_MISSING
        - DEFINITION_EDITION_GAP
        - HUB_NOT_FOUND
        - HUB_CLOSED
        - HUB_DUPLICATE_EXTERNAL_REF
        - EDITION_MISMATCH
        - PRECONDITION_REQUIRED
        - PRECONDITION_MALFORMED
        - RANGE_CROSSES_EDITION
        - VALUE_OUT_OF_RANGE
        - SATELLITE_INCOMPLETE
      title: ErrorCode
      description: |-
        Centralized error codes for i18n translation.

        Naming convention: {RESOURCE}_{ERROR_TYPE}
        - ORG_NOT_FOUND - Organization not found
    PydanticErrorCode:
      type: string
      enum:
        - FIELD_REQUIRED
        - FIELD_INVALID_TYPE_STRING
        - FIELD_INVALID_TYPE_INT
        - FIELD_INVALID_TYPE_FLOAT
        - FIELD_INVALID_TYPE_BOOL
        - FIELD_INVALID_TYPE_DICT
        - FIELD_INVALID_TYPE_LIST
        - FIELD_STRING_TOO_SHORT
        - FIELD_STRING_TOO_LONG
        - FIELD_STRING_PATTERN_MISMATCH
        - FIELD_VALUE_TOO_SMALL
        - FIELD_VALUE_TOO_LARGE
        - FIELD_INVALID_DATE
        - FIELD_INVALID_DATETIME
        - FIELD_INVALID_TIME
        - FIELD_INVALID_DATE_FORMAT
        - FIELD_INVALID_DATETIME_FORMAT
        - FIELD_INVALID_ENUM_VALUE
        - FIELD_INVALID_EMAIL
        - FIELD_INVALID_URL
        - FIELD_LIST_TOO_SHORT
        - FIELD_LIST_TOO_LONG
        - FIELD_UNKNOWN
        - FIELD_VALIDATION_ERROR
      title: PydanticErrorCode
      description: |-
        Error codes for Pydantic validation errors.

        Maps Pydantic error types to our error codes for i18n.
  securitySchemes:
    BearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Get token from Auth0 and paste it here

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.