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

# Update a SIPL person

> Amend a person by your clientPersonId.

<Note>
  In a submission this edits the not-yet-reported person in place. In a correction it amends the already-reported one; amending a person the tax authority has never seen is rejected, so add new persons with [POST](/regulatory/rrc/api/mai55/sipl/push-sipl-persons) instead. This replaces the person, so send all their accounts every time, not just the ones that changed.
</Note>


## OpenAPI

````yaml put /reports/mai55/v1/submissions/{submissionId}/sipl/persons/{clientPersonId}
openapi: 3.1.0
info:
  title: MAI55 REST API
  description: >
    <p>REST API for reporting MAI55 data to the Lithuanian State Tax
    Inspectorate. Open a submission for a

    reporting year, push the reportable persons under its id, then submit it to
    the tax authority.</p>


    <p>A submission carries exactly one sub-report, chosen with
    <code>type</code>: <strong>SIPL</strong> (account

    incomes), <strong>SLIK</strong> (account balances) or <strong>SKIS</strong>
    (outstanding debt

    agreements).</p>
  version: 0.0.1
servers:
  - url: https://api.rrc.dev.finventi.com
    description: Development
  - url: https://api.rrc.finventi.com
    description: Production
security:
  - bearer-jwt: []
tags:
  - name: Submissions
  - name: SLIK
  - name: SKIS
  - name: SIPL
paths:
  /reports/mai55/v1/submissions/{submissionId}/sipl/persons/{clientPersonId}:
    put:
      tags:
        - SIPL
      summary: Update a SIPL person
      description: >-
        Updates a person by your `clientPersonId`. In a submission it edits the
        not-yet-reported person in place; in a correction it amends the
        already-reported one. Because MAI55 carries its document reference on
        the person, the person is replaced whole -- send every account you paid
        income into, not only the changed ones. Amending a person the tax
        authority has never seen is rejected; new persons are added with POST.
      operationId: putSiplPerson
      parameters:
        - name: submissionId
          in: path
          required: true
          schema:
            type: string
        - name: clientPersonId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SiplPerson'
            examples:
              PutSiplPersonRequest:
                $ref: '#/components/examples/PutSiplPersonRequest'
        required: true
      responses:
        '200':
          description: Person updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResult'
              examples:
                PutSiplPerson200:
                  $ref: '#/components/examples/PutSiplPerson200'
        '400':
          description: Person rejected
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonResult'
              examples:
                PutSiplPerson400:
                  $ref: '#/components/examples/PutSiplPerson400'
components:
  schemas:
    SiplPerson:
      type: object
      description: >-
        A person reported under SIPL, with every account of theirs you paid
        income into. The person is the unit of reporting: it becomes exactly one
        reportable person entry, and a correction replaces it whole, accounts
        included. SIPL reports legal entities as well as natural persons, so
        send either `individual` or `organisation`. Only persons whose income
        across all their accounts reaches 15000 EUR are reportable; the total is
        summed from the accounts rather than sent.
      properties:
        clientPersonId:
          type: string
          description: >-
            Your own stable id for this person. Identifies them within the
            submission, so it must be unique across the persons you push, and it
            is how you address them on update and delete.
          example: CLIENT-000123
          maxLength: 255
          minLength: 0
        individual:
          $ref: '#/components/schemas/Individual'
          description: The reportable natural person. Given instead of `organisation`.
        organisation:
          $ref: '#/components/schemas/Organisation'
          description: The reportable legal entity. Given instead of `individual`.
        accounts:
          type: array
          description: List of accounts with the income paid into each of them
          items:
            $ref: '#/components/schemas/IncomeAccount'
          maxItems: 1000
          minItems: 1
      required:
        - accounts
        - clientPersonId
    PersonResult:
      type: object
      description: Result of pushing, updating or deleting a single person
      properties:
        status:
          $ref: '#/components/schemas/Status'
        clientPersonId:
          type: string
          description: >-
            Your id for the person, echoed back to correlate this result with
            your record
          example: CLIENT-000123
        errors:
          type: array
          description: Why the person was rejected. Empty when accepted.
          items:
            $ref: '#/components/schemas/FieldError'
      required:
        - errors
        - status
    Individual:
      type: object
      description: >-
        A reportable natural person. Identify them either by Lithuanian personal
        code or, when they have none, by `otherIdentification` -- exactly one of
        the two.
      properties:
        firstName:
          type: string
          example: Jonas
          maxLength: 70
          minLength: 0
        lastName:
          type: string
          example: Jonaitis
          maxLength: 70
          minLength: 0
        personCode:
          type: string
          description: Lithuanian personal code, 11 digits
          example: 39001010000
          pattern: \d{11}
        otherIdentification:
          $ref: '#/components/schemas/OtherIdentification'
          description: Given instead of `personCode`.
      required:
        - firstName
        - lastName
    Organisation:
      type: object
      description: A reportable legal entity. Reportable under SIPL only.
      properties:
        name:
          type: string
          example: UAB Inventi
          maxLength: 240
          minLength: 0
        code:
          type: string
          description: Registration code, 9 or 10 digits when issued in Lithuania
          example: 123456789
          minLength: 1
        issuedBy:
          type: string
          description: >-
            ISO 3166-1 alpha-2 code of the country that issued the registration
            code
          example: LT
      required:
        - code
        - name
    IncomeAccount:
      type: object
      description: >-
        An account of the person, with the income paid into it over the
        reporting year.
      properties:
        accountNumber:
          type: string
          description: >-
            Must be an IBAN for 'CURRENT_ACCOUNT'; any other kind can carry
            other identifier.
          example: LT121000011101001000
          maxLength: 35
          minLength: 0
        accountType:
          type: string
          description: Type of the account
          enum:
            - CURRENT_ACCOUNT
            - DEPOSIT_ACCOUNT
            - LOAN_ACCOUNT
            - SAVINGS_ACCOUNT
            - PAYMENT_CARD_ACCOUNT
            - OTHER_ACCOUNT
            - SECURITIES_ACCOUNT
            - CUSTODY_ACCOUNT
            - SMALL_ENTREPRENEUR_ACCOUNT
            - INVESTMENT_ACCOUNT
            - CRYPTO_ASSET_ACCOUNT
          example: CURRENT_ACCOUNT
        income:
          type: number
          description: >-
            Income paid into the account over the reporting year, in EUR.
            Convert to EUR when the account is denominated in another currency.
          example: 18500
      required:
        - accountNumber
        - accountType
        - income
    Status:
      type: string
      enum:
        - SUCCESS
        - FAILED
    FieldError:
      type: object
      description: Per-item validation/processing error
      properties:
        code:
          type: string
          description: >-
            Validation error code returned by the regulatory authority; only
            present for records that failed authority validation
          example: 51
        fields:
          type: array
          description: >-
            Fields that caused the error; may be empty for errors not tied to a
            single field (e.g. cross-field validation)
          example:
            - iban
          items:
            type: string
        message:
          type: string
          description: Human-readable error message
      required:
        - fields
    OtherIdentification:
      type: object
      description: Identification of a person who has no Lithuanian personal code.
      properties:
        identificationNumber:
          type: string
          description: >-
            The person's code where no Lithuanian personal code has been issued
            to them, or the number of the document identifying them.
          example: LV123456-78901
          maxLength: 50
          minLength: 0
        type:
          type: string
          description: What kind of number `identificationNumber` is.
          enum:
            - PERSON_CODE
            - TAX_PAYER_CODE
            - SOCIAL_SECURITY_NUMBER
            - DOCUMENT_NUMBER
            - OTHER
          example: DOCUMENT_NUMBER
        issuedBy:
          type: string
          description: >-
            ISO 3166-1 alpha-2 code of the country that issued the number or
            document. Give it when you hold it.
          example: LV
        documentType:
          $ref: '#/components/schemas/DocumentType'
          description: The document type the identification was taken from.
          example: LT_ID_CARD
        birthDate:
          type: string
          format: date
          description: >-
            Date of birth. The tax authority expects one whenever
            `identificationNumber` is given.
          example: '1990-01-01'
      required:
        - documentType
        - identificationNumber
        - type
    DocumentType:
      type: string
      enum:
        - UNKNOWN_DOCUMENT
        - LT_PASSPORT
        - BIRTH_CERTIFICATE
        - SOCIAL_INSURANCE_CERTIFICATE
        - DRIVERS_LICENSE
        - PENSIONER_CERTIFICATE
        - DISABILITY_CERTIFICATE
        - HEALTH_INSURANCE_CERTIFICATE
        - OFFICIAL_CERTIFICATE
        - EMPLOYEE_CERTIFICATE
        - LT_PERMANENT_RESIDENCE_PERMIT
        - BIRTH_RECORD
        - TRAVEL_DOCUMENT
        - CITIZENSHIP_RESTORATION_CERTIFICATE
        - LT_TEMPORARY_RESIDENCE_PERMIT
        - ACCREDITATION_CERTIFICATE
        - REFUGEE_TRAVEL_DOCUMENT
        - LT_ID_CARD
        - NON_LT_PASSPORT
        - SERVICE_PASSPORT
        - NATURAL_PERSON_INVITATION
        - VISA
        - FOREIGNER_REGISTRATION_CERTIFICATE
        - RETURN_CERTIFICATE
        - SEAFARER_PASSPORT
  examples:
    PutSiplPersonRequest:
      value:
        clientPersonId: CLIENT-000123
        individual:
          firstName: Jonas
          lastName: Jonaitis-Petraitis
          personCode: '39001010000'
        accounts:
          - accountNumber: LT121000011101001000
            accountType: CURRENT_ACCOUNT
            income: 19100
    PutSiplPerson200:
      value:
        status: SUCCESS
        clientPersonId: CLIENT-000123
        errors: []
    PutSiplPerson400:
      value:
        status: FAILED
        clientPersonId: CLIENT-000123
        errors:
          - fields:
              - clientPersonId
            message: >-
              Person 'CLIENT-000123' is not in this round and has nothing
              reported for 2025 to amend; add it with POST
  securitySchemes:
    bearer-jwt:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: >-
            https://auth.sandbox.finventi.com/realms/sti-connector/protocol/openid-connect/token
          scopes: {}

````