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

# Sincronizar colaboradores

> Cria ou atualiza um colaborador.

Este endpoint recebe um snapshot dos dados do colaborador e cria ou atualiza o colaborador na plataforma Salvy.

* O snapshot enviado fica armazenado de forma separada das outras fontes de informação (como edições manuais) e novos envios sobreescrevem o snapshot anterior desse colaborador.
* A Salvy faz a conciliação entre as integrações ativas (priorizando a mais recente) e as edições manuais (prioridade máxima) para determinar quais dados exibir ao usuário final.

## Junção automática com colaboradores existentes

Ao utilizar o endpoint de `sync` pela primeira vez para um colaborador, tentamos juntá-lo a um colaborador já existente na plataforma. Por exemplo, um colaborador criado manualmente ou via planilha.

Buscamos colaboradores já existentes por uma ordem de prioridade, nesta sequência:

1. `integrationId` igual
2. `cpf` igual (se fornecido)
3. `workEmail` igual (se fornecido)
4. `fullName` igual, e:
   a. Se `workEmail` for fornecido, e o colaborador existente não possuir `workEmail` (para permitir cadastro de `workEmail` por este endpoint)
   b. Se `workEmail` não for fornecido
5. Caso não seja encontrado, criamos um novo colaborador

Portanto, ao utilizar este endpoint para o mesmo colaborador numa segunda vez, deve-se preservar o mesmo `integrationId` para garantir que o colaborador correto seja atualizado.

## Exemplo de conciliação de fontes

Edição manual:

```json theme={null}
{
  "fullName": "João da Silva",
  "workEmail": "joaosilva@empresa.com.br",
  "status": "active"
}
```

Snapshot via API:

```json theme={null}
{
  "fullName": "João da Silva Santos",
  "workEmail": "joaosilva@empresa.com.br",
  "personalEmail": "joao04@gmail.com",
  "status": "active"
}
```

Resultado:

```json theme={null}
{
  "fullName": "João da Silva",
  "workEmail": "joaosilva@empresa.com.br",
  "personalEmail": "joao04@gmail.com",
  "status": "active"
}
```


## OpenAPI

````yaml POST /api/v1/employees/sync
openapi: 3.1.0
info:
  version: 1.0.0
  title: Salvy API
  x-logo:
    url: web/logo.png
servers:
  - url: https://api.salvy.com.br
    description: Salvy API URL
security:
  - bearerAuth: []
tags:
  - name: Public API
  - name: Outgoing Webhooks
paths:
  /api/v1/employees/sync:
    post:
      tags:
        - Public API
      description: Cria ou atualiza um colaborador.
      operationId: publicSyncEmployee
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                integrationId:
                  type: string
                  description: Identificador único de sua escolha para esse colaborador
                  example: '123'
                forceCreate:
                  description: >-
                    Quando `true`, ignora a busca por colaboradores existentes
                    (por `integrationId`, `cpf`, `workEmail` e `fullName`) e
                    cria um novo colaborador. Útil para cadastrar
                    intencionalmente um colaborador duplicado.
                  example: false
                  type: boolean
                fullName:
                  type: string
                  minLength: 1
                  description: Nome completo
                  example: João da Silva
                socialName:
                  description: Nome social
                  example: João
                  type: string
                status:
                  type: string
                  enum:
                    - active
                    - terminated
                    - on-hold
                  description: Situação do colaborador
                  example: active
                workEmail:
                  description: E-mail profissional
                  example: joaosilva@empresa.com.br
                  type: string
                personalEmail:
                  description: E-mail pessoal
                  example: joaos04@gmail.com
                  type: string
                workPhoneNumber:
                  description: Telefone profissional
                  example: '+5541923456789'
                  type: string
                personalPhoneNumber:
                  description: Telefone pessoal
                  example: '+5541987654321'
                  type: string
                cpf:
                  description: Número do CPF
                  example: 198.099.750-07
                  type: string
                position:
                  description: Cargo do colaborador
                  example: Desenvolvedor
                  type: string
                area:
                  description: Área do colaborador
                  example: Engenharia
                  type: string
                managerFullName:
                  description: Nome do gestor
                  example: Maria dos Santos
                  type: string
                birthDate:
                  description: Data de nascimento
                  example: '1990-04-15'
                  type: string
                admittedAt:
                  description: Data de admissão
                  example: '2020-05-27'
                  type: string
                terminatedAt:
                  description: Data de desligamento
                  example: '2021-01-20'
                  type: string
                address:
                  description: Endereço do colaborador
                  type: object
                  properties:
                    zipCode:
                      description: CEP
                      example: 12345-678
                      type: string
                    streetName:
                      description: Nome da rua
                      example: Rua das Flores
                      type: string
                    streetNumber:
                      description: Número da casa
                      example: '123'
                      type: string
                    complement:
                      description: Complemento do endereço
                      example: Apto 101
                      type: string
                    neighborhood:
                      description: Bairro
                      example: Jardim das Flores
                      type: string
                    city:
                      description: Cidade
                      example: São Paulo
                      type: string
                    state:
                      description: Estado
                      example: SP
                      type: string
                    country:
                      description: País
                      example: Brasil
                      type: string
              required:
                - integrationId
                - fullName
                - status
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  id:
                    description: Identificador do colaborador na plataforma Salvy (UUID)
                    example: 123e4567-e89b-12d3-a456-426614174000
                    title: UUID
                    type: string
                    examples:
                      - 123e4567-e89b-12d3-a456-426614174000
                      - 123e4567-e89b-12d3-a456-426614174001
                  fullName:
                    type: string
                    description: Nome completo
                    example: João da Silva
                  socialName:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Nome social
                    example: João
                  status:
                    type: string
                    enum:
                      - active
                      - terminated
                      - on-hold
                    description: Situação do colaborador
                    example: active
                  workEmail:
                    anyOf:
                      - title: Email
                        type: string
                        description: A valid email address.
                        examples:
                          - user@example.com
                          - admin@domain.org
                          - info@company.net
                      - type: 'null'
                    description: E-mail profissional
                    example: joaosilva@empresa.com.br
                  personalEmail:
                    anyOf:
                      - title: Email
                        type: string
                        description: A valid email address.
                        examples:
                          - user@example.com
                          - admin@domain.org
                          - info@company.net
                      - type: 'null'
                    description: E-mail pessoal
                    example: joaos04@gmail.com
                  workPhoneNumber:
                    anyOf:
                      - title: PhoneNumberE164
                        type: string
                        description: >-
                          Phone number in E.164 format. Supports Brazilian
                          numbers (+55).
                        examples:
                          - '+5511999999999'
                          - '+551139999999'
                      - type: 'null'
                    description: Telefone profissional
                    example: '+5541923456789'
                  personalPhoneNumber:
                    anyOf:
                      - title: PhoneNumberE164
                        type: string
                        description: >-
                          Phone number in E.164 format. Supports Brazilian
                          numbers (+55).
                        examples:
                          - '+5511999999999'
                          - '+551139999999'
                      - type: 'null'
                    description: Telefone pessoal
                    example: '+5541987654321'
                  cpf:
                    anyOf:
                      - title: CPF
                        type: string
                        description: A valid CPF number.
                        examples:
                          - 123.456.789-09
                          - '12345678909'
                      - type: 'null'
                    description: Número do CPF
                    example: 198.099.750-07
                  cnpj:
                    anyOf:
                      - title: CNPJ
                        type: string
                        description: A valid CNPJ number.
                        examples:
                          - 12.345.678/0001-95
                          - '12345678000195'
                      - type: 'null'
                    description: CNPJ do colaborador
                    example: 82.530.339/0001-64
                  rg:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: RG do colaborador
                    example: 12.345.678-9
                  position:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Cargo do colaborador
                    example: Desenvolvedor
                  area:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Área do colaborador
                    example: Engenharia
                  managerFullName:
                    anyOf:
                      - type: string
                      - type: 'null'
                    description: Nome do gestor
                    example: Maria dos Santos
                  birthDate:
                    anyOf:
                      - title: PlainDate
                        type: string
                        description: A date in ISO 8601 format.
                        examples:
                          - '2023-10-05'
                      - type: 'null'
                    description: Data de nascimento
                    example: '1990-04-15'
                  contractType:
                    anyOf:
                      - type: string
                        enum:
                          - pj
                          - clt
                          - intern
                          - apprentice
                          - temporary
                          - third-party
                      - type: 'null'
                    description: Tipo de contrato
                    example: clt
                  contractEndDate:
                    anyOf:
                      - title: PlainDate
                        type: string
                        description: A date in ISO 8601 format.
                        examples:
                          - '2023-10-05'
                      - type: 'null'
                    description: Data de término do contrato
                    example: '2023-12-31'
                  admittedAt:
                    anyOf:
                      - title: PlainDate
                        type: string
                        description: A date in ISO 8601 format.
                        examples:
                          - '2023-10-05'
                      - type: 'null'
                    description: Data de admissão
                    example: '2020-05-27'
                  terminatedAt:
                    anyOf:
                      - title: PlainDate
                        type: string
                        description: A date in ISO 8601 format.
                        examples:
                          - '2023-10-05'
                      - type: 'null'
                    description: Data de desligamento
                    example: '2021-01-30'
                  address:
                    anyOf:
                      - type: object
                        properties:
                          zipCode:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: CEP
                            example: 12345-678
                          streetName:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Nome da rua
                            example: Rua das Flores
                          streetNumber:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Número da casa
                            example: '123'
                          complement:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Complemento do endereço
                            example: Apto 101
                          neighborhood:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Bairro
                            example: Jardim das Flores
                          city:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Cidade
                            example: São Paulo
                          state:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Estado
                            example: SP
                          country:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: País
                            example: Brasil
                        required:
                          - zipCode
                          - streetName
                          - streetNumber
                          - complement
                          - neighborhood
                          - city
                          - state
                          - country
                        additionalProperties: false
                      - type: 'null'
                    description: Endereço do colaborador
                  customFields:
                    type: array
                    items:
                      type: object
                      properties:
                        label:
                          type: string
                        type:
                          type: string
                          enum:
                            - text
                            - select
                        value:
                          type: string
                      required:
                        - label
                        - type
                        - value
                      additionalProperties: false
                    description: Campos personalizados do colaborador
                    example:
                      - label: teste
                        type: text
                        value: teste
                  bankAccount:
                    anyOf:
                      - type: object
                        properties:
                          bank:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Banco
                            example: Banco do Brasil
                          branch:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Agência
                            example: '1234'
                          accountNumber:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Número da conta
                            example: '123456'
                          accountType:
                            anyOf:
                              - type: string
                                enum:
                                  - checking
                                  - savings
                                  - salary
                                  - payment
                              - type: 'null'
                            description: Tipo de conta
                            example: checking
                          pixKey:
                            anyOf:
                              - type: string
                              - type: 'null'
                            description: Chave PIX
                            example: joao04@gmail.com
                        required:
                          - bank
                          - branch
                          - accountNumber
                          - accountType
                          - pixKey
                        additionalProperties: false
                      - type: 'null'
                    description: Dados bancários do colaborador
                  salaryCents:
                    anyOf:
                      - type: number
                      - type: 'null'
                    description: Salário em centavos
                    example: 500000
                  sources:
                    readOnly: true
                    description: Fontes de integração do colaborador
                    example:
                      - id: '123'
                        platform: api
                    type: array
                    items:
                      anyOf:
                        - type: object
                          properties:
                            id:
                              type: string
                              const: manual
                            platform:
                              type: string
                              const: manual
                          required:
                            - id
                            - platform
                          additionalProperties: false
                        - type: object
                          properties:
                            id:
                              type: string
                            platform:
                              type: string
                              const: sheets
                          required:
                            - id
                            - platform
                          additionalProperties: false
                        - type: object
                          properties:
                            id:
                              type: string
                            platform:
                              type: string
                          required:
                            - id
                            - platform
                          additionalProperties: false
                  createdAt:
                    type: string
                    format: date-time
                    pattern: >-
                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    description: Data de criação do colaborador
                    example: '2025-01-01T00:00:00.000Z'
                required:
                  - id
                  - fullName
                  - socialName
                  - status
                  - workEmail
                  - personalEmail
                  - workPhoneNumber
                  - personalPhoneNumber
                  - cpf
                  - cnpj
                  - rg
                  - position
                  - area
                  - managerFullName
                  - birthDate
                  - contractType
                  - contractEndDate
                  - admittedAt
                  - terminatedAt
                  - address
                  - customFields
                  - bankAccount
                  - salaryCents
                  - sources
                  - createdAt
                additionalProperties: false
        '401':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - unauthorized
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
        '403':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - forbidden
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
        '404':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - resource-not-found
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
        '413':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - payload-too-large
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
        '422':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - input-validation-error
                      - unprocessable-entity
                      - company-not-active
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
        '500':
          description: ''
          content:
            application/json:
              schema:
                $schema: https://json-schema.org/draft/2020-12/schema
                type: object
                properties:
                  code:
                    type: string
                    enum:
                      - unknown
                  message:
                    type: string
                  publicDetails:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties:
                      type: string
                required:
                  - code
                  - message
                  - publicDetails
                additionalProperties: false
      deprecated: false
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: key

````