> ## 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 Sponsor Image

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

Upload a sponsor's logo or cover image, replacing the current one. Set imageType to LOGO (JPEG/PNG, at least 320x160 px) or COVER (JPEG/PNG/GIF, at least 1080x360 px); both are capped at 4 MB and the pixel data is fully decoded, so anything corrupt or truncated 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 logo.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 imageUrl.

**Same as Public API:** [Upload a sponsor's logo or cover image](/api-reference/sponsors/upload-a-sponsors-logo-or-cover-image) (`POST /v1/events/{eventId}/sponsors/{sponsorId}/image`)



## OpenAPI

````yaml https://api.prod.zuddl.com/api/v3/api-docs/mcp-tools post /tools/v1_upload_sponsor_image
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_sponsor_image:
    post:
      tags:
        - Sponsors
      summary: Upload Sponsor Image
      description: >-
        **Tool name:** `v1_upload_sponsor_image` · **Behaviour:** ✏️ Write


        Upload a sponsor's logo or cover image, replacing the current one. Set
        imageType to LOGO (JPEG/PNG, at least 320x160 px) or COVER
        (JPEG/PNG/GIF, at least 1080x360 px); both are capped at 4 MB and the
        pixel data is fully decoded, so anything corrupt or truncated 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 logo.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 imageUrl.


        **Same as Public API:** [Upload a sponsor's logo or cover
        image](/api-reference/sponsors/upload-a-sponsors-logo-or-cover-image)
        (`POST /v1/events/{eventId}/sponsors/{sponsorId}/image`)
      operationId: v1_upload_sponsor_image
      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
                sponsorId:
                  type: string
                  description: Unique identifier of the sponsor
                imageType:
                  type: string
                  description: 'Which image to replace: LOGO (320x160) or COVER (1080x360).'
                  enum:
                    - LOGO
                    - COVER
                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.
                imageBase64:
                  type: string
                  description: >-
                    Base64 of the image file's real bytes — only if you can run
                    an encoder over a file on disk.
              required:
                - eventId
                - imageType
                - sponsorId
        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.