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

# Upload Speaker Picture

> **Tool name:** `v1_upload_speaker_pic` · **Behaviour:** ✏️ Write

Upload a profile picture for a speaker, replacing the current one. The image must be JPEG or PNG, at most 4 MB, and at least 80x80 px (300x300 recommended); its pixel data is fully decoded and anything incomplete or corrupt is rejected with IMAGE_CORRUPT. Provide exactly ONE source, in this order of preference: (1) imageFile — for an image the user attached in this conversation. Hosts that support file inputs fill this in themselves; you cannot construct it. (2) imageUrl — a publicly reachable https URL of the image. Redirects are not followed, and invalid, private or unresolvable URLs are rejected (INVALID_URL / PRIVATE_ADDRESS / UNRESOLVABLE). (3) imageBase64 — ONLY when you can run a real encoder over a real file on disk (e.g. `base64 -i photo.png`); send the output verbatim, uncompressed, unresized, not re-encoded and not truncated. NEVER hand-write, reconstruct, guess or abbreviate base64, and never try to encode an image you were merely shown in the conversation — you do not have its bytes and the result will be rejected. If the user attached an image and imageFile is unavailable, ask them for a URL instead. Returns the new picUrl.

**Same as Public API:** [Upload a speaker's profile picture](/api-reference/speakers/upload-a-speakers-profile-picture) (`POST /v1/events/{eventId}/speakers/{speakerId}/pic`)



## OpenAPI

````yaml https://api.prod.zuddl.com/api/v3/api-docs/mcp-tools post /tools/v1_upload_speaker_pic
openapi: 3.1.0
info:
  title: Zuddl MCP Tools Reference
  description: >-
    The Zuddl MCP server lets AI assistants such as Claude and ChatGPT work with
    your Zuddl organization through the [Model Context
    Protocol](https://modelcontextprotocol.io). This reference lists every tool
    the server offers. It is generated from the live server, so it always
    matches what your assistant sees.


    # Connecting


    Add `https://setup.zuddl.com/api/mcp` as a remote MCP server in your
    assistant. It signs you in to Zuddl with OAuth and then calls tools on your
    behalf, with your permissions. AI features must be enabled for your
    organization.


    # Calling a tool


    Assistants call a tool with a JSON-RPC `tools/call` request whose `name` is
    the tool name and whose `arguments` match the request body documented on the
    tool's page. The `/tools/<name>` paths in this reference identify tools;
    they are not HTTP endpoints.


    # Behaviour labels


    | Label | Meaning |

    | --- | --- |

    | 🔒 Read-only | Reads data and changes nothing. |

    | ✏️ Write | Creates or updates data, but does not delete it. |

    | ⚠️ Destructive | Deletes or removes data. Most assistants ask you to
    approve these calls. |

    | 🔁 Idempotent | Calling it again with the same arguments has no further
    effect. |


    A tool that mirrors a Public API endpoint links to that endpoint's page.
    MCP-only tools have no Public API equivalent.
  version: 1.0.0
servers:
  - url: https://setup.zuddl.com/api/mcp
    description: Zuddl MCP server
security:
  - oauth: []
tags:
  - name: Events
  - name: Attendees
  - name: Sessions
  - name: Speakers
  - name: Sponsors
  - name: Locations
  - name: Teams
  - name: Brand Kits
  - name: Registration flows & tickets
  - name: Analytics
paths:
  /tools/v1_upload_speaker_pic:
    post:
      tags:
        - Speakers
      summary: Upload Speaker Picture
      description: >-
        **Tool name:** `v1_upload_speaker_pic` · **Behaviour:** ✏️ Write


        Upload a profile picture for a speaker, replacing the current one. The
        image must be JPEG or PNG, at most 4 MB, and at least 80x80 px (300x300
        recommended); its pixel data is fully decoded and anything incomplete or
        corrupt is rejected with IMAGE_CORRUPT. Provide exactly ONE source, in
        this order of preference: (1) imageFile — for an image the user attached
        in this conversation. Hosts that support file inputs fill this in
        themselves; you cannot construct it. (2) imageUrl — a publicly reachable
        https URL of the image. Redirects are not followed, and invalid, private
        or unresolvable URLs are rejected (INVALID_URL / PRIVATE_ADDRESS /
        UNRESOLVABLE). (3) imageBase64 — ONLY when you can run a real encoder
        over a real file on disk (e.g. `base64 -i photo.png`); send the output
        verbatim, uncompressed, unresized, not re-encoded and not truncated.
        NEVER hand-write, reconstruct, guess or abbreviate base64, and never try
        to encode an image you were merely shown in the conversation — you do
        not have its bytes and the result will be rejected. If the user attached
        an image and imageFile is unavailable, ask them for a URL instead.
        Returns the new picUrl.


        **Same as Public API:** [Upload a speaker's profile
        picture](/api-reference/speakers/upload-a-speakers-profile-picture)
        (`POST /v1/events/{eventId}/speakers/{speakerId}/pic`)
      operationId: v1_upload_speaker_pic
      requestBody:
        description: The tool's `arguments`, as sent in a JSON-RPC `tools/call` request.
        content:
          application/json:
            schema:
              type: object
              properties:
                eventId:
                  type: string
                  description: Unique identifier of the event
                speakerId:
                  type: string
                  description: Unique identifier of the speaker
                imageFile:
                  type: object
                  description: >-
                    An image the user attached in this conversation. The host
                    fills this in for file inputs — do not construct or invent
                    it. Preferred source when available.
                  properties:
                    download_url:
                      type: string
                      description: Short-lived URL the server downloads the image from
                    file_id:
                      type: string
                      description: Host's identifier for the uploaded file
                    file_name:
                      type: string
                      description: Original file name, if the host sends one
                    mime_type:
                      type: string
                      description: >-
                        Declared MIME type; advisory only, the format is sniffed
                        from the bytes
                imageUrl:
                  type: string
                  description: >-
                    Publicly reachable https URL of the image (JPEG/PNG, max 4
                    MB, min 80x80 px).
                imageBase64:
                  type: string
                  description: >-
                    Base64 of the image FILE's raw bytes, produced by an actual
                    encoder (e.g. `base64 -i photo.png`) and pasted verbatim —
                    uncompressed, unresized, not re-encoded, not truncated. A
                    data: URI prefix is allowed. Only usable when you can read a
                    real file; never for an image you were only shown in the
                    conversation.
              required:
                - eventId
                - speakerId
        required: true
      responses:
        '200':
          description: A JSON-RPC `tools/call` result. The tool's output is in `content`.
components:
  securitySchemes:
    oauth:
      type: http
      description: >-
        OAuth 2.1 access token. MCP clients obtain it themselves (dynamic client
        registration + PKCE) when you connect them to the server URL above.
      scheme: bearer

````

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