Skip to main content

Rate Limits

Rate limits are applied per account and enforced at the API gateway level. All limits are measured in requests per minute with an additional burst capacity for short spikes.
Burst capacity allows you to exceed the steady-state rate limit for a short period. For example, an endpoint with 50 req/min and burst 3 means you can fire up to 3 requests in rapid succession before the 50 req/min cap is enforced.

Configurations

EndpointRequests/minBurst
POST /create-configuration102
POST /list-configurations503
POST /get-configuration50017
POST /update-configuration503
POST /delete-configuration503

Evaluators

EndpointRequests/minBurst
POST /create-evaluator102
POST /list-evaluators503
POST /get-evaluator50017
POST /update-evaluator50017
POST /delete-evaluator50017

Participants

EndpointRequests/minBurst
POST /create-participant102
POST /list-participants503
POST /get-participant50017
POST /update-participant50017
POST /delete-participant50017

Transcriptions

EndpointRequests/minBurst
POST /submit50017
POST /request-upload-url50017
POST /list-transcriptions50017
POST /get-transcription50017
POST /update-transcription-group50017
POST /delete-transcription50017

Analytics

EndpointRequests/minBurst
POST /analytics52
POST /analytics-evaluator503
POST /analytics-participant503

Quotas

Monthly Analytics Quotas

Analytics endpoints are subject to a monthly call quota in addition to the per-minute rate limit. Quotas reset automatically on the 1st of each calendar month.
EndpointMonthly limit
POST /analytics30 calls
POST /analytics-evaluator500 calls
POST /analytics-participant500 calls
Your current usage and remaining calls are visible in the Sandbox from the user menu (top right).

Resource Limits

The following limits apply to the number of objects you can create per account.
ResourceLimit
Configurations per account20
Extraction fields per configuration10
Evaluators per account20
Criteria per evaluator10
Participants per account200
Team members (sub-users)10
Transcriptions returned by /list-transcriptions20,000
Transcriptions analyzed by /analytics20,000
Max audio duration2 hours (7,200 s)
Max audio file size200 MB
Transcriptions in queue100
Concurrent processing25
Transcription data retention (TTL)1 year

Supported Audio & Video Formats

FormatExtensionDescription
AAC.aacAdvanced Audio Coding
AIFF.aiffAudio Interchange File Format
AMR.amrAdaptive Multi-Rate
ASF.asfAdvanced Systems Format
FLAC.flacFree Lossless Audio Codec
MP3.mp3MPEG Audio Layer 3
OGG.oggOgg Vorbis
WAV.wavWaveform Audio File Format
WebM.webmWebM Audio
M4A.m4aMPEG-4 Audio
MP4.mp4MPEG-4 Video Container

Need higher limits?

Default limits work for most use cases, but if your project requires more — more analytics calls, more participants, or a larger team — we can adjust them for you.

Contact us to increase your limits

Reach out to hola@heify.com and tell us what you need. We’ll get back to you quickly.

Handling 429 Errors

A 429 Too Many Requests response means either a per-minute rate limit or a monthly quota has been exceeded. Implement exponential backoff to retry gracefully:
import requests
import time

def request_with_backoff(url, headers, payload, max_retries=5):
    delay = 1
    for attempt in range(max_retries):
        response = requests.post(url, headers=headers, json=payload)
        if response.status_code != 429:
            return response
        print(f"Rate limited. Retrying in {delay}s...")
        time.sleep(delay)
        delay *= 2
    return response

headers = {
    "Content-Type": "application/json",
    "x-api-key": "YOUR_API_KEY"
}

result = request_with_backoff(
    "https://api.heify.com/list-configurations",
    headers,
    {}
)
print(result.json())