Frequently Asked Questions

These FAQs are specific to the API and not to the Infusionsoft interface.

API

Why is my package key in “Waiting” status?

We automatically approve the 1st API key a developer creates, but we need to manually approve the 2nd one. We GENERALLY only approve 2 keys per developer (one for testing, one for production), but exceptions are made to this, in which case the developer needs to submit a ticket in order for us to review and enable their package key.

What timezones do Contact calls accept?

When creating a Contact through the Keap REST API you can supply a Timezone for the Contact, but it is limited to a non-comprehensive list of valid entries. You can find the list of acceptable values below.

Contact Timezones
Pacific/Pago_Pago
Pacific/Honolulu
America/Adak
Pacific/Marquesas
America/Anchorage
Pacific/Gambier
America/Los_Angeles
America/Santa_Isabel
Pacific/Pitcairn
America/Denver
America/Mazatlan
America/Phoenix
America/Mexico_City
America/Chicago
America/Guatemala
Pacific/Easter
America/Bogota
America/Havana
America/New_York
America/Caracas
America/Campo_Grande
America/Halifax
America/Goose_Bay
America/Santo_Domingo
America/Santiago
Atlantic/Stanley
America/Asuncion
America/St_Johns
America/Argentina/Buenos_Aires
America/Sao_Paulo
America/Miquelon
America/Montevideo
America/Godthab
America/Noronha
Atlantic/Azores
Atlantic/Cape_Verde
Europe/London
UTC
Europe/Berlin
Africa/Windhoek
Africa/Lagos
Asia/Damascus
Europe/Istanbul
Asia/Beirut
Asia/Gaza
Africa/Cairo
Asia/Jerusalem
Africa/Johannesburg
Asia/Baghdad
Europe/Minsk
Asia/Tehran
Asia/Yerevan
Asia/Baku
Asia/Dubai
Europe/Moscow
Asia/Kabul
Asia/Karachi
Asia/Kolkata
Asia/Kathmandu
Asia/Dhaka
Asia/Yekaterinburg
Asia/Rangoon
Asia/Omsk
Asia/Jakarta
Asia/Shanghai
Asia/Krasnoyarsk
Australia/Eucla
Asia/Irkutsk
Asia/Tokyo
Australia/Darwin
Australia/Adelaide
Australia/Brisbane
Australia/Sydney
Asia/Yakutsk
Australia/Lord_Howe
Pacific/Noumea
Asia/Vladivostok
Pacific/Norfolk
Pacific/Fiji
Pacific/Tarawa
Pacific/Majuro
Pacific/Auckland
Asia/Kamchatka
Pacific/Chatham
Pacific/Tongatapu
Pacific/Apia
Pacific/Kiritimati

Can I use an API Key?

Keap uses OAuth 2.0 as the authentication standard for the API and is a requirement for all marketplace listings.

What is OAuth 2.0?


OAuth 2.0
 future-proofs your app and yields a number of benefits, which are explained below.

OAuth 2.0 API Access – This is the standard authentication method for Keap apps. OAuth 2.0 is the standard used by most modern APIs including Facebook, Google, Stripe, Shopify and countless others. OAuth will provide a streamlined authentication process for our customers, allow customers to view/revoke access for specific apps/integrations and provide developers with a simplified authentication method as well as more metrics about the applications you create.

API Throttling

By using OAuth 2.0, your apps are throttle independently of one another. When you use OAuth, your apps are throttled at the application level and we are able to modify this throttle on a per app or per developer basis. To accomplish this we are using an API Proxy service that, in addition to providing fine-grained throttling controls, also offers robust reporting tools for API usage.

» Read more about using OAuth2 with Keap in our documentation.

» If you haven’t done so already, register with the Developer Center to create API keys for your apps.

What is the REST API?

Our REST API is based on industry-standard RESTful principles allowing you to make half as many API calls as you were with the XML-RPC API.

The new REST endpoints are available through the existing OAuth 2.0 authentication. View REST Documentation

Many of the endpoints support a new Sync token feature that makes it easier for your application to keep data in sync with your users’ Keap Applications.

Still have questions? Check out REST API

How does throttling work?

Throttling depends on the authentication method you are using:

OAuth2

Each key/secret pair has the following limitations across all Keap applications they are used to access:

  • 1500 Queries per Minute
  • 150000 Queries per Day (This daily quota resets at 12:00 AM UTC each day)

We return Headers on every call you make to keep you up-to-date on exactly where your quota and throttles stand. You can find details and code examples for making us of the information at API Token Quota and Usage Measurements.

Personal Access Tokens or Service Account Keys

Each key has the following limitations and may only access it’s single authorized Keap application:

  • 10 Queries per Second
  • 240 Queries per Minute
  • 30000 Queries per Day (This daily quota resets at 12:00 AM UTC each day)

We return Headers on every call you make to keep you up-to-date on exactly where your quota and throttles stand. You can find details and code examples for making us of the information at API Token Quota and Usage Measurements.

Legacy API Key

Each key has the following limitations and may only access it’s single authorized Keap application:

  • A theoretical maximum of 160000 Queries per Day

Details:

The throttling system is setup like a bank account. You have so many dollars (will be called tokens) in that account you can use. Every Keap Application has a bank of 10,000 tokens. For every API call that is made, 1 token gets removed from that bank. However, for every 500ms that there is not an API call, you get one token back in the bank, up to the max of 10,000 tokens.

When you run out of tokens, your API call gets delayed 500ms until you get a new token. For instance, you are out of tokens and you have 4 API calls come in at the same time. The first one will be delayed 500ms, the next one 1 second then 1.5 seconds and finally 2 seconds.

Once you hit 4 threads being throttled, you will then start to receive an error stating you have been throttled. The only way to become un-throttled is to cease all API calls. It takes approximately 1.5 hours of no API calls to regenerate all 10,000 tokens. You will receive the following error:

Server returned a fault exception: [500] Server encountered exception: com.infusionsoft.throttle.ThrottlingException: Maximum number of threads throttled