Expand Fin to email is now live on Fin Academy!
Get more out of Intercom using our API and webhooks
Recently active
Hi, We have been using Intercom without any issue. But recently we have started getting following error after the user has logged into our platform. Access to XMLHttpRequest at ‘https://api-iam.intercom.io/messenger/web/embedded/content’ from origin ‘https://portal.product.com’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. When the page is refreshed, the error disappears and status code changes to 200 OK but the user data is not updated in Intercom.What’s the possible solution to this issue?
Hi there I am hoping to create some dashboards based off of our product’s intercom data that surfaces insights about # of tickets created and average conversation rating. High level mockup of the dashboard: Diving into the intercom API, it looks like the only way to get aggregate data is by calling the search APIs and checking the total_count property. This is un-ideal in the case of average satisfaction score where I would need to query 5 times for each satisfaction score value per data bucket. If I have a time series with 12 month buckets, that would mean I would have to query Intercom 70 times per dashboard render. Is there a better alternative to accomplish this? I saw reference of a reporting feature coming to the API at some point: Also, what is intercom’s data retention policy? Can I expect to be able to retrieve all of our intercom data or is there a cut-off?
Having the ability to trigger a reusable workflow via API would be really helpful for making workflow/bot conversations more dynamic. A specific use case I’m working on right now is serving CSAT in conversations where customers interact only with a bot (no team member assigned). Unresponsive triggers only happen with human to human conversations. If a customer goes unresponsive while talking to the bot, the conversation is considered abandoned, not closed. My thought was to use Zapier to trigger closed conversations and filter by convos NOT assigned to a team member, however I have no way of serving CSAT in that conversation via the API. I played around with starting workflows using this non-documented endpoint:curl --request POST \ --url https://app.intercom.io/ember/inbox/workflows/start \ --header 'Accept: application/json' \ --header 'Authorization: Bearer REDACTED \ --header 'Content-Type: application/json' \ --header 'X-Csrf-Token: REDACTED' \ --cookie _intercom_session=RE
Can’t seem to get any contact location data to stick in my requests. What am I doing wrong here? Note that the request does not fail with any sort of validation error but the values do not get updated.For example, here’s the body on an update: {"signed_up_at":1753192392,"external_id":5668,"location":{"type":"location","country":"United States","country_code":"US","city":"San Diego"}}And the response body I get:{"type"=>"contact", "id"=>"redacted", "workspace_id"=>"redacted", "external_id"=>"5668", "role"=>"user", "email"=>"redacted", "phone"=>nil, "name"=>"redacted", "avatar"=>nil, "owner_id"=>nil, "social_profiles"=>{"type"=>"list", "data"=>[]}, "has_hard_bounced"=>false, "marked_email_as_spam"=>false, "unsubscribed_from_emails"=>false, "created_at"=>1753796921, "updated_at"=>1753797193, "signed_up_at"=>1753192392, "last_seen_at"=>nil, "last_replied_at"=>nil, "last_contacted_at"=>nil, "last_email_opened_at"=>nil, "la
Hey there!We’re about to run a script on our side this week to migrate our historical Zendesk Ticket data to Intercom.Has anyone in the community had experience doing this?Curious to know how you prevent email notifications from going out to customers, and if its possible to backdate the conversations when you are creating them.Cheers,Ian
We would like to understand how to suspend or delete an admin within our Intercom setup. Specifically: What are the steps for suspending or deleting an admin? What parameters or conditions can be used to identify these actions? Can we use has_inbox_seat for this purpose? If not, please explain why it cannot be used or if there's an alternative. Additionally, once an admin is suspended or deleted, we would like to: Fetch that updated status or Have that event trigger a webhook so we can sync the admin's status on our side in real time. Please confirm if this is possible and share the best approach to implement it.Looking forward to your guidance on this.
I use the @intercom/messenger-js-sdk in react appshowNewMessage does not insert prePopulatedContent if the intercom chat has not been opened yetshowMessages also doesn't work.showNewMessage just opens a new chat on the first call, then it starts inserting prePopulatedContent. For testing, I'm using a constant as a prePopulatedContent. However, if you open the Intercom widget, the prePopulatedContent is inserted the first time. Versions:"@intercom/messenger-js-sdk": "^0.0.14","react": "18.3.1",
I would like to automate banner messages sent to users. Are there any plans to expose this in the API? My Requirement: When we do an application release, we want to display 3 banners in order:Tell everyone that is logged in that there is about to be a release in X minutesTell everyone that a release is in progressTell everyone that a release is done We are using the user interface to do this, but it is quite a manual process which we would like to streamline using the API.
Hello, currently creating a Desktop Compose app to work as a always on top mini display. I’m running a Ktor http server with the application and generating the users OAuth with a Redirect URL of: localhost:8080/callback which lets me use the rest api.The issue I'm having is when trying to use Webhooks, I don’t see how I would be able to setup an endpoint URL for each user who runs the application. My understanding is I’d have to run a single server that accepts every single users notification and forward correct notifications to the individual users? Looking for solutions as the only option I can see is to poll conversations every few seconds.
Hello, everyone, is there a way to export detailed historical statistics of articles like the screenshot with the API? I found the Retrieve an Article endpoint, but it only returns the current cummulative statistics.
i catn’t use the demo。 https://developers.intercom.com/docs/references/rest-api/api.intercom.io/conversations/listconversations MyTEST:curl -i -X GET \ 'https://api.intercom.io/conversations?per_page=20&starting_after=string' \ -H 'Authorization: <my token>' \ -H 'Intercom-Version: 2.13' curl -i -X GET \ 'https://api.intercom.io/conversations?per_page=20&starting_after=string' \ -H 'Authorization: <name> <my token>' \ -H 'Intercom-Version: 2.13' curl -i -X GET \ 'https://api.intercom.io/conversations?per_page=20&starting_after=string' \ -H 'Authorization: Bearer <my token>' \ -H 'Intercom-Version: 2.13' <name> <toke> from ALL get the ERROR INFO:{"type": "error.list","request_id": "004d2a15vsgn3sc1e320","errors": [{"code": "unauthorized","message": "Access Token Invalid"}]} Question: what’s the right way to get conversation list ?
Hello,It seems there may be an issue with how the Intercom API parses the src attribute of Vimeo <iframe> embeds in Help Center articles.When I try embedding a Vimeo video using a valid and supported format like this:<iframe src="https://player.vimeo.com/video/76979871?autoplay=1&loop=1&amp;autopause=0" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" allowfullscreen="allowfullscreen"></iframe>…the video fails to render in the Help Center and I get this error response:"errors":[{"code":"unsupported_html","message":"Video src is not supported"}]However, this YouTube embed works perfectly in intercom:<iframe title="YouTube video player" src="https://www.youtube.com/embed/R7CC4NYokNI?si=-s_wXnz1orMp-Dn2" width="560" height="315" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen"></
I was trying the List collections endpoint under the Help Centre APIs using PaginationTh Pagination Guide describes List APIs as using cursor based pagination, with the “next” parameter containing the “starting_after” parameter which can be used to fetch the next page of resultsHowever, when I tried the List collections endpoint I got this as the result for the “pages” parameter. The “next” parameter gives a URL, not an object as described in the docs"pages": { "type": "pages", "next": "https://api.intercom.io/help_center/collections?per_page=1&page=2", "page": 1, "per_page": 1, "total_pages": 4 }Here are the headers I used for reference:{“Authorization”: “Bearer <token>“,“Accept”: “application/json”,“Intercom-Version” : “2.13”}Since I’m passing the intercom-version I don’t expect this to be an error with the version. Please explain the correct way to use PaginationI see a related issue here. However I’m unsatisfied with the solution provided. In case the API
I’m using the API to create and manage tickets, and seeing some unexpected things in the auto-email-notification subject lines.The steps I’m following:Create a ticket via the API. Type: Tracker Ticket. It properly appears with my title and description. (Notifications skipped). Assign that ticket via the API. (Notifications skipped). Add a comment to the ticket via the API. For this step I’m not setting skip_notifications to true, so a notification does get dispatched.The problem is that the subject line of that notification is: Re: [Company Name] [Assignee Name]: ''The empty single quotes indicate that it should be possible to get something to appear there. I’d love to be able to display the ticket title, or the contents of the comment that caused the notification, or pretty much anything other than ‘’.
Hi, So I’ve been working on setting up my account and I’m stuck at this for over a week now. I’ve got a lead form and these leads are being sent to Intercom, with custom lead data (attributes) such as event date and event type. This is all sent through zapier and Intercom API. However, when a lead already exists, it’s not updating the lead with these custom attributes. All API work, I get the right 200 response, I do not get duplicated leads and so on. Mapping is all correct and we tested via Postman and via Intercom test enviroment, here it all works, yet sending real data via Zapier to Intercom does not update the lead. We’ve checked with both support teams and lead data is sending through zapier to Intercom. However Intercom support mentioned they do not receive the body call, while the zapier logs show this is being sent correctly. What is going wrong here, is this just a bug? I can’t believe no one is using the API on zapier to update lead profiles. I’ve spent 10 hours + ever
Hi Intercom team,I’m Romain from Ringover, a partner working with clients on Intercom integrations. I’d like to submit a feature request regarding the ability to ⭐ update internal notes ⭐ via your API.Currently, instead of updating the original internal note with new content (e.g. an AI-generated call summary), the API creates multiple separate notes for each update. Since Ringover also sends additional after-call events such as updated notes and tags, this results in a cluttered view within the Intercom workspace.Being able to update an existing note via API would significantly improve clarity and user experience for our shared clients.Could you please forward this request to the product team?Thank you for your collaboration.Best regards,Romain
Noticed an issue with the conversation search API, specifically on boolean fields when coupled with the != operator.For example the below query (even when run from the “Try it” button on the docs page) returns the same exact response as when using the = operator. POST https://api.intercom.io/conversations/searchBody: { "query": { "operator": "AND", "value": [{ "field": "read", "operator": "!=", "value": "true" }] }}I tested with different value types (string, boolean), other boolean fields (ex: open), as well as with “false” values. The behavior is the same.Please assist.
We have a webhook subscription setup for our app that is set to trigger for the event conversation.rating.added. An app user is having issues as it’s only triggering for a bot admin that they’ve setup. When other folks on their team receive a rating, those do not trigger a webhook. Is this the expected outcome? The authenticated user has admin permissions, the assumption was that they’d have visibility over the entire organization.
Hello,I’d like to create a custom data connector. In my business, we sell coding programs with different session dates, and I want users to be able to check upcoming sessions from our database.To retrieve the relevant sessions, I need to collect a few details from the user:- Program of interest- Format- Campus (we have up to 25 campuses)For the campus selection, I don’t want users to type manually — I’d like to display a list of available campuses they can simply click on.Is this possible with a data connector? I see that Fin supports data inputs like text, number, decimal, and boolean — but is there a way to present a list of options (e.g. dropdown or buttons) for users to choose from?Thanks in advance!
Are there any scripts available to migrate CDAs Tags Companies Contacts (Leads + Users) Events & Event Metadata and Articles from US to EU?
Hi, we’re running into an issue with ANRs on our application stemming from the initialize call on the Intercom SDK.We are currently using 15.1.4 of the Android SDK with the following code used for initialization:Intercom.initialize(this, INTERCOM_API_KEY, INTERCOM_APP_ID);I have updated the SDK to 15.5.1 but we haven’t had time to collect data, I am wondering if this will suffice, I didn’t see anything the latest or previous release notes that would indicate so. Below is the exception from firebase : main (runnable):tid=1 systid=3084 at io.intercom.android.sdk.errorreporting.ExceptionParser.<clinit>(ExceptionParser.java:11) at io.intercom.android.sdk.errorreporting.ErrorReporter.create(ErrorReporter.java:18) at io.intercom.android.sdk.Injector.getErrorReporter(Injector.java:319) at io.intercom.android.sdk.Injector.getLifecycleTracker(Injector.java:310) at io.intercom.android.sdk.Injector.initWithAppCredentials(Injector.java:135) at io.interco
My team has run into a roadblock in setting up single sign on for our platform. We use OpenID, and it’s not configurable natively in Intercom. I’ve found some articles stating that some third party partners offer a ‘go between’ workaround for this, but I’d love to hear from the community if anyone has successfully set this up and what the experience was like with the third party they chose.
My context:API version: 2.12API call: search and update contact404 Curl request at 2025-03-31 09:50:33 { "headers": { "content-length": "74", "user-agent": "GuzzleHttp/7", "host": "api.intercom.io", "authorization": "********", "accept": "application/json", "content-type": "application/json" }, "body": "{\"query\":{\"field\":\"external_id\",\"operator\":\"=\",\"value\":\"vegastars_78859\"}}", "url": "https://api.intercom.io/contacts/search", "method": "POST"}Here is the response at 2025-03-31 09:50:33:I have double-checked that the value exists in Intercom. However, the weird thing is that when my server calls the API, it returns an error response. Then, when the request is retried by the queue, it succeeds.I want to make sure that are these response such as 404 and 502, 504 coming from your side ?{ "body": "<html><head><title>404 Not Found</title></head><body><center><h1>404 Not Found</h1></center><
I would like to export the Intercom ID of all users - and the only documentation I can find is to do this via API. I am using Postman for this but I was hoping to find a way to get it as a CSV or something easier to navigate. Can anyone point me in the right direction to get this data?
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.