
What's new with Custom Objects in Zendesk
Zendesk’s Custom Objects just got more practical with small but powerful updates: sortable views, renamable fields, auto-naming, event logs, and image support. These fill key gaps from the initial launch, making the feature far more usable in real-world workflows.
Subscribers to this newsletter might have noticed that Zendesk has two kinds of releases. Some releases are giant updates. The new Action Builder, Procedures for AI Agents or the release of Omnichannel Routing and queues.
These kind of releases allow for a complete rethinking of the way your Zendesk instance is setup. They make entirely new flows and processes possible, but require time and careful planning to deploy them well.
Omnichannel Routing was one of these releases that completely changed the way you route tickets to agents and moved from group assignment towards agent assignment.
Similarly when Zendesk released Custom Objects it allowed for entire new flows and you could replace dump drop-down fields with rich lookup fields that provide a lot more context to the agent.

But where these giant releases move the platform forward with giant leaps, they often miss those small settings and details that make them fit perfectly within your processes.
Some customers try out the new platform releases and quickly run into blockers that prevent them from using them day one. But where the day one release might not be a fit, overtime Zendesk often releases tons of small tweaks and updates that move these features forward with small steps until they are a fit.
Omnichannel Routing was such a release where Zendesk launched a solid v1, and overtime they released dozens of options impacting assignment, capacity release, automatic status updates, e.a.

I rounded up all those small Omnichannel Routing releases in a catchup article last year, and this time I'll do the same for Custom Objects.
Update to the List view
One of the main reasons to use Custom Objects and Lookup fields over regular dropdown is the ability to add rich data to your object records. An object that stores Store locations can contain an address, manager, store types, opening hours and plenty of other elements.
When looking at the records in the Objects overview Zendesk shows a couple of default columns like name, update date e.a. While these are useful, sometimes the actual relevant info might be hidden in custom fields.
It's now possible to change the order of the fields in the Custom objects, which will impact the overview of records in the Agent Workspace. The first three ticket fields will shown up as columns in the overview, giving Agents a relevant overview of all objects in the list.

In addition to sorting the columns, you can also sort the objects by name or update date.


Before and after
Event Log
Records stored in Custom Objects can be updated. An object that stores laptops and other IT devices might get updated to assign them to a user. Or an object that stores facility items like fire extinguishers or vending machines might have their "last inspected" field updated.
These changes can now be tracked in a dedicated Events tab, giving you a clear overview of who made changes to your records. The data in these records is not exportable (yet?) but you can leverage Custom Object triggers if you want to send out changes to e.g. Zapier and a Google sheet for external logging.

Naming
Another nice updated to Custom objects is related to naming them.
In most scenarios you might import things like products or locations that have a unique name. And by default Custom objects allow for any <string>
of free text to be entered as the name of a record.
The first improvement has to do with the name of the name
field. You can now rename that field to a more fitting name. For example, for my Movies objects I used in previous articles, I renamed the name field to Movie title as a more fitting label. Similarly you can rename yours to Product name, Location, Software Product or another logical name. (That's a lot of names in one paragraph, I know)

But not all record types benefit of having uniquely named strings. If your object tracks orders, assets or work orders, you're more likely looking for incremental naming like order0066 or laptop0042.
When creating a new object you can choose what kind of naming schema you want to use. You can either choose a manual name (with optional required uniqueness), or an outnumbering scheme that combines a fixed prefix with an auto-incrementing number (which is by design unique).
If you choose this outnumbering option, each object record you add to your object, either manually or by importing it as CSV, will get a unique name.
Object image icons
Custom objects support a limited list of custom field types. You've got input fields (text, number, regex, date), select fields (single, multiple or lookup fields) and checkboxes, or multiline text fields.
I'm still hoping we someday get an attachment field to upload images, pdfs or other related material. But for now we'll have to make do with a text field where we can enter a URL. Any URL we enter will be rendered as a clickable link in the record inspector.
For images however we can now attach a single image (or icon) to our records. These show up in the list view in Agent workspace, any lookup field that links to the object, and in the inspector next to tickets.
Adding image icons to an object
Adding an image to an object requires you to first enable the feature in Admin Center > Objects > [your object].

Once enabled you can inspect a record and click edit. In edit mode you an hover over the default icon to upload a new image, similar to how you edit profile pictures for agents. After you upload an image it'll replace the default image. You can upload any format or proportion, but since it centers the image with a fill style, a square image will work best.


The image then shows up in the inspector, the list view and any lookup field that references the custom objects. Lookup fields for end-users on the Help Center do not show these images though.


Images under the hood
When you inspect a custom object via API, you'll notice a new attribute called allows_photos
that matches the checkbox in Admin Center.
{
"custom_object": {
"key": "movie",
"title": "Movie",
"description": "List of movies",
"include_in_list_view": true,
"allows_photos": true
}
}
[GET] https://{{domain}}.zendesk.com/api/v2/custom_objects/movie
And when we inspect a custom object record via API you'll notice either a new photo
object that either returns null
if no image has been uploaded, or an array()
that contains the uploaded image url, name and other metadata.
{
"custom_object_records": [
{
"id": "01J2GBT85TSK1XMJG5ZH0HCM60",
"name": "Pulp Fiction",
"custom_object_key": "movie",
"custom_object_fields": {
"director": "Quentin Tarantino",
"actors": "John Travolta, Uma Thurman, Samuel L. Jackson",
},
"external_id": "6",
"photo": {
"id": "01JWX660HDQ536P1B2PXKYA0K8",
"file_name": "Screenshot_2025-06-04_at_12.00.35.png",
"content_url": "https://d3v-verschoren.zendesk.com/system/record_photos/01JWX660HDQ536P1B2PXKYA0K8/Screenshot_2025-06-04_at_12.00.35.png",
"mapped_content_url": "https://support.verschoren.com/system/record_photos/01JWX660HDQ536P1B2PXKYA0K8/Screenshot_2025-06-04_at_12.00.35.png",
"content_type": "image/png",
"size": 22338,
"width": 80,
"height": 119,
"inline": false,
"deleted": false
}
},
{
"id": "01J2GBT84G8R0Q8FFPQPGATCMD",
"name": "The Matrix",
"custom_object_key": "movie",
"custom_object_fields": {
"director": "Lana Wachowski, Lilly Wachowski",
"actors": "Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss",
},
"external_id": "5",
"photo": null
}
],
"meta": {}
}
[GET] https://{{domain}}.zendesk.com/api/v2/custom_objects/movie/records
Adding images over API
There's no documented method of uploading images yet, but peaking under the hood while uploading them via the browser revealed a working method via PUT
curl --location --request PUT 'https://d3v-verschoren.zendesk.com/api/v2/custom_objects/movie/records/01J2GBT85VTBB00PEXFD9Q4YA8' \
--header 'Authorization: ••••••' \
--form 'custom_object_record[photo][uploaded_data]=@"/Users/thomasverschoren/Documents/schindlerslist.png"'
Curl example which you can copy into Postman
For those doing batch uploading, this might be useful!
Using the images in apps
Although the images are meant to be used in the main Zendesk UI, we can also use these images in other scenarios like custom apps in our instance.
A long time ago I build a Pokédex inside Zendesk to showcase Custom Objects.

That sidebar app loads a custom object linked to my ticket and renders a custom UI for agents to see information on the Pokémon linked to the ticket. One of the items shown was an image of the chosen create, and that image was stored as a URL inside a custom field.
When the app loaded its UI it would reference the value stored in the custom field and use it as the image source as such:
function updateUI(){
var pokemon = pokemon.custom_object_record.custom_object_fields;
var default_image = 'https://internalnote.com/images/pokemon.png'
var image= pokemon.image ? pokemon.image : default_image;
$('#image').attr('src',image);
});
But thanks to the native support for images, we can now attach a photo of each creature to the object records and reference that image directly:
function updateUI(){
var pokemon = pokemon.custom_object_record;
var default_image = 'https://internalnote.com/images/pokemon.png'
var image= pokemon.photo ? pokemon.photo.content_url : default_image;
$('#image').attr('src',image);
});
Which results in the exact same app experience, but without the external hosted images!

Conclusion
Customizable views. Automatic naming. Event logs. Object icons. Four seemingly small updates to custom objects, but if any of these elements prevented you from using custom objects in the past, now it's time to revisit that decision.
Custom objects aren't complete yet though. There's still some feature requests on my wishlist that I hope to see someday:
- A way to import images via CSV (maybe by adding a column with URLS the system can retrieve them from?
- A way to attach other attachments to records
- A way to link multiple objects together in a many to many relationship that does not require an intermediate object
And my biggest request: multiple hops in triggers and placeholders. Let me explain.
Imagine you have a custom object that stores IT assets. Each asset has a supplier. And each supplier has a manager. Those references are linked via Lookup fields.

Inside triggers I can easily create a condition or action that selects a Ticket > Product > Supplier.
But what I can't select is the Manager of that Supplier to use that value in an email trigger, or add him in cc. These kind of second hops are not yet possible.
One can hope...