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

# Update EMP identity

> Updates the details of one of your roaming identities — things like its label or its contact information. Its ID and its status are managed by Spirii and can't be changed here. As with registering, you include a one-off reference (an "idempotency key") so a repeated request isn't applied twice.



## OpenAPI

````yaml /openapi/emsp-tenant/openapi.yaml put /emsp/v1/tenant/emp-identities/{emp_identity_id}
openapi: 3.0.0
info:
  title: Spirii EMSP - Tenant Management API
  description: 'Manages the EMSP tenant aggregate: tenant profile, EMP-Identities.'
  version: v1
  contact: {}
servers:
  - url: https://api.spirii.com
    description: Production
security: []
tags:
  - name: Tenant
    description: Tenant profile and published-network priority order
  - name: EMP Identity
    description: Register and manage a tenant’s EMP identities
paths:
  /emsp/v1/tenant/emp-identities/{emp_identity_id}:
    put:
      tags:
        - EMP Identity
      summary: Update EMP identity
      description: >-
        Updates the details of one of your roaming identities — things like its
        label or its contact information. Its ID and its status are managed by
        Spirii and can't be changed here. As with registering, you include a
        one-off reference (an "idempotency key") so a repeated request isn't
        applied twice.
      operationId: tenant_update_emp_identity
      parameters:
        - name: emp_identity_id
          required: true
          in: path
          schema:
            type: string
        - name: Idempotency-Key
          in: header
          description: >-
            Client-generated unique key per operation intent (UUID). Same key +
            identical body replays the original response; same key + different
            body returns 409.
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEmpIdentityRequestDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmpIdentityDto'
        '400':
          description: Request validation failed
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
        '404':
          description: EMP identity not found
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetailDto'
components:
  schemas:
    UpdateEmpIdentityRequestDto:
      type: object
      properties:
        label:
          type: string
          nullable: true
          maxLength: 255
        contact_email:
          type: string
          format: email
        contact_phone:
          type: string
          nullable: true
          maxLength: 20
        default_network_access:
          type: boolean
    EmpIdentityDto:
      type: object
      properties:
        emp_identity_id:
          type: string
          format: uuid
          description: Platform-assigned stable identifier
        country_code:
          type: string
          pattern: ^[A-Z]{2}$
          example: DK
          description: ISO 3166-1 alpha-2 country code
        party_id:
          type: string
          pattern: ^[A-Z0-9]{3}$
          example: SPR
          description: OCPI party_id (3-character code)
        protocol:
          type: array
          items:
            type: string
            enum:
              - OCPI
              - OICP
        label:
          type: string
          nullable: true
          maxLength: 255
          description: Optional human-readable label
        contact_email:
          type: string
          format: email
        contact_phone:
          type: string
          nullable: true
          maxLength: 20
        default_network_access:
          type: boolean
          default: true
          description: >-
            Whether this identity grants visibility into all Published Base
            Networks
        status:
          type: string
          enum:
            - ACTIVE
            - SUSPENDED
        created_at:
          type: string
          format: date-time
      required:
        - emp_identity_id
        - country_code
        - party_id
        - status
        - created_at
    ProblemDetailDto:
      type: object
      properties:
        type:
          type: string
          example: about:blank
          description: >-
            URI identifying the problem type (about:blank until the docs site is
            live)
        title:
          type: string
          example: Tenant not found
        status:
          type: number
          example: 404
        detail:
          type: string
          example: No tenant exists with id 0192...c3.
        instance:
          type: string
          example: /v1/tenant/profile
        code:
          type: string
          example: tenant_not_found
          description: Stable machine-readable error code
        trace_id:
          type: string
          example: abc123def456
          description: Correlation id; matches dd.trace_id in Datadog
        timestamp:
          type: string
          example: '2026-06-10T09:30:00.000Z'
          format: date-time
        errors:
          description: Field-level validation errors (validation failures only)
          type: array
          items:
            $ref: '#/components/schemas/ProblemFieldErrorDto'
      required:
        - type
        - title
        - status
        - detail
        - instance
        - code
        - trace_id
        - timestamp
    ProblemFieldErrorDto:
      type: object
      properties:
        field:
          type: string
          example: workspace_id
        code:
          type: string
          example: is_uuid
        message:
          type: string
          example: workspace_id must be a UUID
      required:
        - field
        - code
        - message

````