Skip to content
PUT /organization/{id}/logo/upload/{token}

Step two of the assistant/MCP operation `organization.create_logo_upload`, which returns this URL. No Authorization header: the single-use token in the path is the credential. It expires 5 minutes after it was minted and is spent by the first PUT, whether or not that PUT is accepted. The body is validated exactly as `PUT /organization/{id}/logo` validates it — raw PNG/JPEG/WebP bytes (type sniffed from the bytes, SVG refused), max 2 MiB — and the person who minted the URL must still hold `org:manage` in an organization with an active subscription when it arrives. An unknown, expired, already-used or other-organization token answers `404 logo_upload_url_invalid`.

Path Parameters

idstring
required·

Organization id (org_…) the URL was minted for.

tokenstring
required·

Single-use upload token (64 hex characters), exactly as the URL carries it.

Response Body

bytesinteger
content_typestring
Possible values:
image/pngimage/jpegimage/webp
logostring · uri

Public URL of the new logo image.

organization_idstring
curl -X PUT 'https://api.elaichi.ai/organization/<id>/logo/upload/<token>' \
  -H 'Content-Type: application/json'
const response = await fetch('https://api.elaichi.ai/organization/<id>/logo/upload/<token>', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
  },
});

const data = await response.json();
console.log(data);
import os
import requests

url = "https://api.elaichi.ai/organization/<id>/logo/upload/<token>"
headers = {
    "Content-Type": "application/json",
}

response = requests.put(url, headers=headers)
print(response.json())