Developer
Documentation
Resources
Get Support
Sign in
Developer
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Developer
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Capabilities
Client Library
Color Theme Compliance (Beta)
UI Functions
Last updated Oct 21, 2025

attachment-thumbnail

Sometimes, your Power-Up can provide additional information about an attachment, but it doesn't really require being pulled out into its own section. A great example of this is for files coming from storage services like Google Drive. To Trello, those are just URLs, but the Google Drive Power-Up can get thumbnail images, the real file name, as well as when the file was created, and last modified.

This is perfect for attachment-thumbnail:

In the case of Google Drive, you need to be authenticated before Google Drive can retrieve the additional metadata, so it can include a prompt to get the user to authorize.

Once the user is authorized, Google Drive can return much richer content:

Example Code

1
2
var formatNPSUrl = function (t, url) {
  if (!/^https?:\/\/www\.nps\.gov\/[a-z]{4}\//.test(url)) {
    return null;
  }
  var parkShort = /^https?:\/\/www\.nps\.gov\/([a-z]{4})\//.exec(url)[1];
  if (parkShort && parkMap[parkShort]) {
    return parkMap[parkShort];
  } else {
    return null;
  }
};

window.TrelloPowerUp.initialize({
  'attachment-thumbnail': function (t, options) {
    var parkName = formatNPSUrl(t, options.url);
    if (parkName){
      // return an object with some or all of these properties:
      // title, image, modified (Date), created (Date),
      // createdBy, modifiedBy
      return {
        title: parkName,
        image: {
          url: './images/nps.svg',
          logo: true // false if you are using a thumbnail of the content
        }
      };
    } else {
      throw t.NotHandled();
    }
  }
});

If you need to provide the authorization prompt you can do so like this:

1
2
window.TrelloPowerUp.initialize({
  'attachment-thumbnail': function (t, options) {
    var parkName = formatNPSUrl(t, options.url);
    if (parkName){
      // return an object with some or all of these properties:
      // title, image, modified (Date), created (Date),
      // createdBy, modifiedBy
      return {
         title: parkName,
        image: {
          url: './images/nps.svg',
          logo: true // false if you are using a thumbnail of the content
        },
        initialize: {
          type: 'iframe',
          url: t.signUrl(TrelloPowerUp.util.relativeUrl('authorize-link.html'))
        }
      };
    } else {
      throw t.NotHandled();
    }
  }
});

Where authorize-link.html is just an anchor tag <a> and you can handle the click of that to open an authorization window.

Rate this page: