Hey 👋
I've been building a custom Interface Extension using the Extensions SDK and ran into what seems like a significant limitation — I can't find any supported way to let users upload a file/attachment directly from within the extension UI.
What I'm trying to do:
I have a custom extension embedded in an Interface page. The workflow requires users to attach a file (e.g. a PDF or image) to a record — ideally triggered from a button or input inside the extension itself.
What I've tried:
- Using a standard HTML
<input type="file">— the file picker opens, but there's no SDK method to then take that file and write it as an attachment to a record field. - Looking through the
@airtable/blocksSDK docs for something likeupdateRecordAsyncwith an attachment payload — attachment fields require a URL, not a raw file object. There's no upload endpoint exposed through the SDK. - Considered uploading to a third-party storage first (e.g. S3 or Cloudinary), getting a public URL, then writing that URL to the attachment field — this works but feels like a significant workaround for what should be a basic operation.
The core problem:
The SDK's updateRecordAsync for attachment fields only accepts an array of objects with a url property. There is no native method to upload a binary file and get back an Airtable-hosted attachment URL. This means a seemingly simple UX — "click here, pick a file, it attaches to this record" — is essentially impossible without a separate file hosting infrastructure.
My questions:
- Is there something I'm missing in the SDK that allows direct file upload from an extension?
- Is this a known limitation, and is it on the roadmap?
- For those who've solved this — what external upload service are you routing through, and how are you handling auth/CORS within the sandboxed extension environment?
This seems like a pretty common use case for anyone building data-entry or document-management workflows inside Interfaces, so I'd love to understand if there's a pattern the community has converged on.
Thanks in advance!
