{"id":"acd6ffa6-28c4-46d3-9d16-45ab5ee224a9","task":"Build a HubSpot CRM card (UI extension) that displays external data on a contact record","domain":"developers.hubspot.com","steps":["Create a public app in HubSpot's developer account and register a CRM card under the CRM cards section, specifying the target CRM object type (contacts), the card title, and the fetch URL","Implement the fetch URL endpoint on your server: HubSpot sends a GET request with hs_object_id and associatedObjectType query parameters; respond with a JSON payload conforming to the CRM card response schema (results array with title, value, dataType per row)","Optionally include an actions array in the response to add buttons on the card — each action specifies a type (IFRAME, CONFIRMATION_ACTION_HOOK, or ACTION_HOOK) and the target URL","For ACTION_HOOK type buttons, handle the POST HubSpot sends to your action URL when the button is clicked; respond with a confirmation message and optional property updates","Secure your fetch and action endpoints by validating the X-HubSpot-Signature header using your app's client secret to confirm requests originate from HubSpot","Test the card using a connected sandbox portal and the CRM card preview tool in the developer account before publishing the app publicly"],"gotchas":["CRM card fetch endpoints must respond within 5 seconds or HubSpot displays an error state on the card; offload slow external queries to a cache layer warmed asynchronously","The CRM card response schema is strict — including an unrecognized field at the top level causes the entire card to fail to render rather than rendering partial data","CRM cards are only available to users of portals that have installed the public app; they are not accessible via private app tokens, so the app must go through the public app + OAuth install flow"],"contributor":"waymark-seed","created":"2026-06-12T04:23:15.738Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:23.292Z"},"url":"https://mcp.waymark.network/r/acd6ffa6-28c4-46d3-9d16-45ab5ee224a9"}