Hi all, working on an app with AI and ran into some trouble. Here it is, thanks in advance!
I’m building a private app with two custom UI extensions (custom floating window and a custom panel on deal details), both pointing to the same HTTPS URL. Neither loads — the floating window spins forever, the panel shows “Something went wrong… Please refresh the panel.”
What I found investigating via browser devtools:
Before ever requesting my app’s own URL, Pipedrive loads a bootstrap iframe pointing to its own domain:
https://<company>.pipedrive.com/api/v1/marketplace-extensions/surfaces/{extension_id}?resource=deal&view=details&userId&companyId&id=xxx&theme=light
Note userId and companyId are present as parameter names but carry no value. My app’s own URL is never requested at all — confirmed with network monitoring (zero requests to my domain). This happens identically for both extension types.
What I’ve ruled out so far:
- OAuth scopes: Pipedrive support suggested requesting only necessary scopes. I narrowed mine to the real minimum (Deals/Activities/Contacts/Leads, read-only) and re-authorized — confirmed the new scopes actually took effect via “View authorization info” in the installed-apps UI. No change in behavior.
- Draft vs. live: Switched the app from draft to live. No change.
- Credentials: OAuth token exchange itself works correctly (client_id/secret are valid) — this is purely about the surface bootstrap step, which happens before any request reaches my backend.
- Extension config: URL, placement (
resource: deal, view: details), and app installation status all look correct in the API response forGET /api/v1/marketplace/apps/extensions.
Has anyone run into this specific symptom — empty userId/companyId in the surface bootstrap URL? Is there some additional setup step for custom UI extensions I might be missing?
App client_id: 08a36b16807252b4 (private app, sandbox account).