Upload organization logo to a signed URL
/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
Organization id (org_…) the URL was minted for.
Single-use upload token (64 hex characters), exactly as the URL carries it.
Response Body
image/pngimage/jpegimage/webp
Public URL of the new logo image.
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())