Skip to content

Set a legal entity's image

The entities.avatar.set operation: PUT /api/v1/entities/{id}/avatar in the REST API and the entities_avatar_set tool in the MCP server.

PUT/api/v1/entities/{id}/avatar

Uploads a legal entity's image, shown wherever its initials show today: the entity switcher and the entity's pages. Send the image base64-encoded in content: a square PNG, JPEG or WebP image of at most 512 KB and 1024 × 1024 pixels. The type is read from the bytes; SVG and GIF are refused.

The image is private: it is served at its avatar.url only to the organization's members and Ownrecord staff. Uploading the same image again changes nothing. Needs entities:write (organization owners and admins). Dry-run it to check an image without storing it.

At a glance

  • REST: PUT /api/v1/entities/{id}/avatar
  • MCP tool: entities_avatar_set
  • Operation ID: entities.avatar.set
  • Scope: Organization, or one of its legal entities or brands
  • Permission: entities:write
  • Risk tier: write
  • Dry run: Supported (send Ownrecord-Dry-Run: true)
  • Idempotency: Idempotency-Key optional
  • Modes: Test and live
  • Authentication: API key with the entities:write scope
  • Since: M13

Request

Path parameters

FieldTypeDescription
ident_… ID

Body

A JSON object (Content-Type: application/json):

FieldTypeRequiredDescription
contentstringYesThe image's bytes, base64-encoded: a square PNG, JPEG or WebP image of at most 512 KB and 1024 × 1024 pixels (256 × 256 is what the console uploads).

Response

200 OK with a JSON object:

FieldTypeDescription
ident_… ID
object"legal_entity"
orgIdorg_… ID
slugstring
legalNamestring
tradingNamestring or null
avatarobject or null
establishmentobject
establishment.countrystring
establishment.subdivisionstring or null
establishment.addressobject
establishment.address.line1string
establishment.address.line2string or null
establishment.address.citystring
establishment.address.postalCodestring or null
establishment.address.regionstring or null
establishment.address.countrystring
establishment.companyRegistryIdstring
establishment.euVatEstablishedboolean
homeTaxIdobject
homeTaxId.typestring
homeTaxId.valuestring
verificationobject
verification.statusone of unverified, pending_review, verified, rejected
verification.methodone of vies, hmrc, ch_uid, document
verification.checkedAtdate-time or null
defaultCurrencystring
timezonestring
invoiceSettingsobject
invoiceSettings.numberFormatstring
invoiceSettings.sequenceResetYearlyboolean
invoiceSettings.languagestring
invoiceSettings.bilingualstring or null
invoiceSettings.footerTextstring or null
invoiceSettings.bankTransferobject or null
statusone of onboarding, active, suspended, archived
createdAtdate-time
updatedAtdate-time

Examples

Upload the entity's image

HTTP
PUT /api/v1/entities/ent_01m4tx5nj8emwbyf7y9vcf47x2/avatar
Authorization: Bearer or_test_…
Content-Type: application/json

{
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="
}

Response (200):

JSON
{
  "id": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
  "object": "legal_entity",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "slug": "acme-hr",
  "legalName": "Acme Digital d.o.o.",
  "tradingName": null,
  "avatar": {
    "fileId": "file_01m4tx5nj8emwbyf7y9vcf47yc",
    "url": "/media/file_01m4tx5nj8emwbyf7y9vcf47yc/63ef318d96b5d0d0ceba6e04a4e622b1158335cdc67c49e27839132c6f655058.png"
  },
  "establishment": {
    "country": "HR",
    "subdivision": null,
    "address": {
      "line1": "Ilica 1",
      "line2": null,
      "city": "Zagreb",
      "postalCode": "10000",
      "region": null,
      "country": "HR"
    },
    "companyRegistryId": "080000000",
    "euVatEstablished": true
  },
  "homeTaxId": {
    "type": "eu_vat",
    "value": "HR12345678901"
  },
  "verification": {
    "status": "unverified",
    "method": "vies",
    "checkedAt": null
  },
  "defaultCurrency": "EUR",
  "timezone": "Europe/Zagreb",
  "invoiceSettings": {
    "numberFormat": "{series}-{year}-{seq:06}",
    "sequenceResetYearly": true,
    "language": "en",
    "bilingual": null,
    "footerText": null,
    "bankTransfer": null
  },
  "status": "onboarding",
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400content isn't base64, or is far larger than an image may be (param names the field).Fix the fields listed in details.issues and send the request again.
image_type_unsupported400The file isn't a still PNG, JPEG or WebP image (read from its bytes): SVG, GIF and animations are refused.Export the image as PNG, JPEG or WebP (a still image, not an animation) and upload it again. The type is read from the file's bytes, not from its name.
image_too_large400The image is larger than 512 KB.Resize or compress the image to at most 512 KB. Avatars and icons are shown at 256 × 256 pixels and logos within 600 × 200, so a small file loses nothing.
image_dimensions400The image is wider or taller than 1024 pixels, or not square (avatars and icons), or a logo outside 1:1 to 4:1.Use a square image of at most 1024 × 1024 pixels for avatars and icons, and a logo between square and four times as wide as it is tall, at most 1024 pixels a side.
upstream_timeout502The file store didn't answer in time; nothing was recorded. Retry.Retry the request with the same Idempotency-Key after a short wait.
resource_not_found404No entity with this ID is visible to the request.Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.
version_conflict409The entity changed at the same time; retry.Fetch the object again and retry the change.
permission_denied403You can't change legal entities here.Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.