{"templateId":"markdown","versions":[{"version":"1.0","label":"v1.0","link":"/docs/references/1.0/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"1.1","label":"v1.1","link":"/docs/references/1.1/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"1.2","label":"v1.2","link":"/docs/references/1.2/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"1.3","label":"v1.3","link":"/docs/references/1.3/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"1.4","label":"v1.4","link":"/docs/references/1.4/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.0","label":"v2.0","link":"/docs/references/2.0/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.1","label":"v2.1","link":"/docs/references/2.1/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.2","label":"v2.2","link":"/docs/references/2.2/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.3","label":"v2.3","link":"/docs/references/2.3/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.4","label":"v2.4","link":"/docs/references/2.4/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.5","label":"v2.5","link":"/docs/references/2.5/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.6","label":"v2.6","link":"/docs/references/2.6/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.7","label":"v2.7","link":"/docs/references/2.7/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.8","label":"v2.8","link":"/docs/references/2.8/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.9","label":"v2.9","link":"/docs/references/2.9/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.10","label":"v2.10","link":"/docs/references/2.10/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.11","label":"v2.11","link":"/docs/references/2.11/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.12","label":"v2.12","link":"/docs/references/2.12/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.13","label":"v2.13","link":"/docs/references/2.13/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.14","label":"v2.14","link":"/docs/references/2.14/rest-api/errors/rate-limiting","default":false,"active":false,"folderId":"a015c489"},{"version":"2.15","label":"v2.15","link":"/docs/references/rest-api/errors/rate-limiting","default":true,"active":false,"folderId":"a015c489"},{"version":"Preview","label":"Preview","link":"/docs/references/preview/rest-api/errors/rate-limiting","default":false,"active":true,"folderId":"a015c489"}],"sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Rate Limiting","description":"Faster resolutions, higher CSAT, and lighter support volumes with the only platform to combine the power of automation and human customer support.","siteUrl":"https://developers.intercom.com","image":"/assets/og-image.9c9ef3a6cedbceee0e1d52fae2ffcce97f5a189639cf24e473331da9ad02c5f8.b1bff462.png","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"rate-limiting","__idx":0},"children":["Rate Limiting"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"curl","header":{"controls":{"copy":{}}},"source":"# Example with the default rate limit of 1000\n\nHTTP/1.1 200 OK\nContent-Type: application/json\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 100\nX-RateLimit-Reset: 1487332510\n\n# After another request:\nHTTP/1.1 200 OK\nContent-Type: application/json\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 99\nX-RateLimit-Reset: 1487332510\n\n# After window resets\nHTTP/1.1 200 OK\nContent-Type: application/json\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 100\nX-RateLimit-Reset: 1487332520\n\n# If you make more than the allowed requests\nHTTP/1.1 429 Too Many Requests\nContent-Type: application/json\nX-RateLimit-Limit: 100\nX-RateLimit-Remaining: 0\nX-RateLimit-Reset: 1487332520\n","lang":"curl"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"intercom.rate_limit_details\n#=> {:limit=>1000, :remaining=>999, :reset_at=>2019-08-05 14:59:00 +0100}\n","lang":"ruby"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["API Rate Limits are in place to protect Intercom from API traffic spikes that could put our databases at risk. We therefore measure the amount of requests sent to the API in order to throttle these when they surpass the amount allowed. We will respond with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["'429 Too Many Requests'"]}," and the following headers:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Header Name"},"children":["Header Name"]},{"$$mdtype":"Tag","name":"th","attributes":{"align":"left","data-label":"Header Description"},"children":["Header Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["X-RateLimit-Limit"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Maximum number of requests allowed for the app."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["X-RateLimit-Remaining"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Number of requests left in the current time."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["X-RateLimit-Reset"]},{"$$mdtype":"Tag","name":"td","attributes":{"align":"left"},"children":["Time when the number of requests will be reset to the maximum limit.",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},"Shown as ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"http://en.wikipedia.org/wiki/Unix_time"},"children":["UNIX timestamp"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"What about Canvas Kit requests?"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Rate Limits only apply to calls to the REST API, not to any webhook requests that are sent as part of the Canvas Kit capabilities."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-is-the-default-amount-of-requests","__idx":1},"children":["What is the default amount of requests?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every app will have default rate limits. The amount we rate limit them by is different for apps which are privately built for your own usage, or for apps that are publicly installed by third-parties."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"private","__idx":2},"children":["Private"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Private apps have a default rate limit of ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["10,000 API calls per minute per app"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["25,000 API calls per minute per workspace"]},". This means that if a workspace has multiple private apps installed, every one contributes towards total number of requests."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"public","__idx":3},"children":["Public"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Public apps have a default rate limit of ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["10,000 API calls per minute for each app"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["25,000 API calls per minute per workspace"]},". This means that if a workspace has multiple public apps installed, each one has its own separate request limit without contributing to the others."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Higher rate limits"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you require higher rate limits than the defaults, you can contact us using the messenger in the bottom right."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"when-does-the-amount-of-requests-reset","__idx":4},"children":["When does the amount of requests reset?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Although the permitted limit of requests lasts for 1 minute, we evenly ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["distribute this into 10 second windows"]},". This means that every 10 seconds, the amount of permitted requests resets. For example, a default rate limit of 1000 per minute means that you can send a maximum of 166 operations per 10 second period (1000/6)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-can-i-handle-rate-limits","__idx":5},"children":["How can I handle rate limits?"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To prevent hitting the rate limits, here are a few options for handling within your code."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"use-the-header-information","__idx":6},"children":["Use the header information"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can find the number of requests allowed in your current window in the Intercom headers, or if you are using the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/intercom/intercom-ruby#rate-limiting"},"children":["Intercom Ruby SDK"]}," you can call your client's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rate_limit_details"]}," which returns a Hash with information about your app's rate limit."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can use the remaining number of requests allowed in your current window and when this is below a certain value you can rest until your rate limit is reset."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the example below the app is restricted to a rate limit of 5 just to show the output returned — note that we’ve also shown what information is available in the Intercom client and the response for your current rate limits using the Ruby SDK."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"require 'intercom'\nrequire 'stringio'\n\nintercom = Intercom::Client.new(token: ENV['YOUR_TOKEN'])\n\nretries = 0\nmax_retries = 3\nbackoff_factor = 2\n\nfor num in 0..20\n  begin\n    puts(\"Request Number #{num+1}\")\n    email = 'contact' + num.to_s + '@example.com'\n    name = 'Mrs ' + num.to_s + \"Example\"\n    # Make a HTTP POST request to Intercom to create/update a user\n    response = intercom.contacts.create(:email => email, :name => name, :signed_up_at => Time.now.to_i)\n    # These are the headers we have access to when making requests\n    puts(\"Rate Limit: #{intercom.rate_limit_details[:limit]} \\n\")\n    puts(\"Remaining: #{intercom.rate_limit_details[:remaining]} \\n\")\n    puts(\"Reset Time: #{intercom.rate_limit_details[:reset_at]} \\n\")\n\n    # Check when request limit is under a certain number\n    if not intercom.rate_limit_details[:remaining].nil? and intercom.rate_limit_details[:remaining] < 2\n      sleep_time = intercom.rate_limit_details[:reset_at].to_i - Time.now.to_i\n      puts(\"Waiting for #{sleep_time} seconds to allow for rate limit to be reset\")\n      sleep sleep_time\n    end\n  rescue => error\n    raise(\"Received a general error so exiting: #{error}\")\n  end\nend\n","lang":"ruby"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The output from the above code is below. You would not need to output all of this data, but this should offer an example of what to expect and how you might approach implementing a rest until the limit is reset."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"Request Number 1\nRate Limit:\nRemaining:\nReset Time:\nRequest Number 2\nRate Limit: 5\nRemaining: 5\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 3\nRate Limit: 5\nRemaining: 4\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 4\nRate Limit: 5\nRemaining: 3\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 5\nRate Limit: 5\nRemaining: 2\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 6\nRate Limit: 5\nRemaining: 1\nReset Time: 2023-12-08 15:19:51 +0000 \nWaiting for 38 seconds to allow for rate limit to be reset\nRequest Number 7\nRate Limit: 5\nRemaining: 5\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 8\nRate Limit: 5\nRemaining: 4\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 9\nRate Limit: 5\nRemaining: 3\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 10\nRate Limit: 5\nRemaining: 2\nReset Time: 2023-12-08 15:19:51 +0000 \nRequest Number 11\nRate Limit: 5\nRemaining: 1\nReset Time: 2016-11-16 16:15:00 +0000\nWaiting for 58 seconds to allow for rate limit to be reset\n"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"use-randomization","__idx":7},"children":["Use randomization"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["While the reset option is one way to deal with rate limiting, you may want more granular control over your rate limit handling. For example, you might have a specific retry timeframe that you want to follow and not wait for the minute window to pass for your entire rate limit to be reset."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you want more control over your rate limiting handling then you can check for the specific rate limit error returned and use some form of randomization in the backoff calculation."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You could change the retry code above to look like this to achieve some randomization:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"require 'intercom'\nrequire 'stringio'\n\nintercom = Intercom::Client.new(token: ENV['YOUR_TOKEN'])\n\nretries = 0\nmax_retries = 3\nbackoff_factor = 2\n\nfor num in 0..20\n  begin\n    puts(\"Request Number #{num+1}\")\n    email = 'contact' + num.to_s + '@example.com'\n    name = 'Mrs ' + num.to_s + \"Example\"\n    # Make a HTTP POST request to Intercom to create/update a user\n    response = intercom.contacts.create(:email => email, :name => name, :signed_up_at => Time.now.to_i)\n  rescue Intercom::RateLimitExceeded => error\n    #At this point we know we have encountered a limit\n    #So lets try for a few times and backoff a little in each case\n    puts(\"Error Msg: #{error.inspect} \\n\")\n    puts(\"http_code: #{error.http_code[:http_code]}\\n\" )\n    puts(\"http_code: #{error.http_code[:application_error_code]}\\n\" )\n    if retries <= max_retries\n      # Lets try it a few more times\n      retries += 1\n      # Set a range from num of retries to backoff and randomly sample from that\n      # You can pick any range you like here, this is just an example\n      backoff = rand(retries..(backoff_factor * retries))\n      puts(\"Backoff for #{backoff} seconds\")\n      sleep backoff\n    else\n      # Rasing error here so you can perform some action based on this event\n      raise(\"No longer retrying since we have retried #{retries} times.\\n\"\\\n              \"The error returned was: '#{error.message}'\")\n    end\n  rescue => error\n    raise(\"Received a general error so exiting: #{error}\")\n  end\nend\n","lang":"ruby"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After running this code, your output would look like this:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"Request Number 1\nRequest Number 2\nRequest Number 3\nRequest Number 4\nRequest Number 5\nRequest Number 6\nRequest Number 7\nError Msg: #<Intercom::RateLimitExceeded: More than 5 requests received in 1 minute>\nhttp_code: 429\nhttp_code: rate_limit_exceeded\nBackoff for 2 seconds\nRequest Number 8\nError Msg: #<Intercom::RateLimitExceeded: More than 5 requests received in 1 minute>\nhttp_code: 429\nhttp_code: rate_limit_exceeded\nBackoff for 3 seconds\nRequest Number 9\nError Msg: #<Intercom::RateLimitExceeded: More than 5 requests received in 1 minute>\nhttp_code: 429\nhttp_code: rate_limit_exceeded\nBackoff for 3 seconds\nRequest Number 10\nError Msg: #<Intercom::RateLimitExceeded: More than 5 requests received in 1 minute>\nhttp_code: 429\nhttp_code: rate_limit_exceeded\nBackoff for 6 seconds\nRequest Number 11\nError Msg: #<Intercom::RateLimitExceeded: More than 5 requests received in 1 minute>\nhttp_code: 429\nhttp_code: rate_limit_exceeded\nadvanced_throttle.rb:32:in `rescue in block in <main>': No longer retrying since we have retried 4 times. (RuntimeError)\nThe error returned was: 'More than 5 requests received in 1 minute'\n\tfrom advanced_throttle.rb:9:in `block in <main>'\n\tfrom advanced_throttle.rb:8:in `each'\n\tfrom advanced_throttle.rb:8:in `<main>'\n"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"use-a-library-for-exponential-backoff","__idx":8},"children":["Use a library for exponential backoff"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To prevent having to implement your own backoff forumlas, you can use a library that will handle this for you. Some examples include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://www.npmjs.com/package/retry"},"children":["retry"]}," for Node.js"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://pypi.org/project/backoff/"},"children":["backoff"]}," for Python"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/ooyala/retries"},"children":["retries"]},", a RubyGem which will be used for the below example"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["With retries, all you specify the number of retries you want and it will handle the rest."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"require 'intercom'\nrequire 'stringio'\nrequire 'retries'\n\nintercom = Intercom::Client.new(token: ENV['YOUR_TOKEN'])\n\nmax_retries = 3\n\nfor num in 0..20\n  handler = Proc.new do |exception, attempt_number, total_delay|\n    puts \"Handler saw a #{exception.class}; retry attempt #{attempt_number}; #{total_delay} seconds have passed.\"\n  end\n  with_retries(:max_tries => max_retries, :handler => handler, :rescue => [Intercom::RateLimitExceeded]) do |attempt|\n    puts(\"Request Number #{num+1}\")\n    # You can check for the max retry number and raise an error so you can take some action based on this event\n    if attempt >= max_retries\n      raise(\"No longer retrying since we have retried #{attempt} time.\\n\"\\\n    \"The error returned was: '#{Intercom::RateLimitExceeded}'\")\n    end\n    puts(\"Request Number #{num+1}\")\n    email = 'contact' + num.to_s + '@example.com'\n    name = 'Mrs ' + num.to_s + \"Example\"\n    # Make a HTTP POST request to Intercom to create/update a user\n    response = intercom.contacts.create(:email => email, :name => name, :signed_up_at => Time.now.to_i)\n  end\nend\n","lang":"ruby"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The is what the output of the above example looks like using retries:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"Request Number 1\nRequest Number 2\nRequest Number 3\nRequest Number 4\nRequest Number 5\nRequest Number 6\nHandler saw a Intercom::RateLimitExceeded; retry attempt 1; 0.328696139 seconds have passed.\nRequest Number 6\nHandler saw a Intercom::RateLimitExceeded; retry attempt 2; 1.194656588 seconds have passed.\nRequest Number 6\nthrottle_retries.rb:14:in `block (2 levels) in <main>': No longer retrying since we have retried 3 times. (RuntimeError)\nThe error returned was: 'Intercom::RateLimitExceeded'\n\tfrom /home/ec2-user/.rvm/gems/ruby-2.3.0/gems/retries-0.0.5/lib/retries.rb:46:in `with_retries'\n\tfrom throttle_retries.rb:11:in `block in <main>'\n\tfrom throttle_retries.rb:7:in `each'\n\tfrom throttle_retries.rb:7:in `<main>'\n[ec2-user@ip-10-0-2-162 ~]$\n"},"children":[]}]},"headings":[{"value":"Rate Limiting","id":"rate-limiting","depth":1},{"value":"What is the default amount of requests?","id":"what-is-the-default-amount-of-requests","depth":2},{"value":"Private","id":"private","depth":3},{"value":"Public","id":"public","depth":3},{"value":"When does the amount of requests reset?","id":"when-does-the-amount-of-requests-reset","depth":2},{"value":"How can I handle rate limits?","id":"how-can-i-handle-rate-limits","depth":2},{"value":"Use the header information","id":"use-the-header-information","depth":3},{"value":"Use randomization","id":"use-randomization","depth":3},{"value":"Use a library for exponential backoff","id":"use-a-library-for-exponential-backoff","depth":3}],"frontmatter":{"seo":{"title":"Rate Limiting"}},"lastModified":"2026-04-10T17:03:45.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/references/preview/rest-api/errors/rate-limiting","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}