Claude-code-plugins algolia-common-errors
git clone https://github.com/jeremylongshore/claude-code-plugins-plus-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/jeremylongshore/claude-code-plugins-plus-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/saas-packs/algolia-pack/skills/algolia-common-errors" ~/.claude/skills/jeremylongshore-claude-code-plugins-algolia-common-errors && rm -rf "$T"
plugins/saas-packs/algolia-pack/skills/algolia-common-errors/SKILL.mdAlgolia Common Errors
Overview
Quick reference for the most common Algolia errors, their root causes, and fixes. All examples use
algoliasearch v5 client error types.
Error Reference
1. Invalid Application-ID or API key (403)
ApiError: Invalid Application-ID or API key
Cause: App ID or API key is wrong, expired, or deleted.
Fix:
# Verify your env vars are set echo "APP_ID: $ALGOLIA_APP_ID" echo "KEY set: ${ALGOLIA_ADMIN_KEY:+yes}" # Test with curl curl -s "https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes" \ -H "X-Algolia-Application-Id: ${ALGOLIA_APP_ID}" \ -H "X-Algolia-API-Key: ${ALGOLIA_ADMIN_KEY}" | head -c 200
Get fresh keys: dashboard.algolia.com > Settings > API Keys.
2. Method not allowed with this API key (403)
ApiError: Method not allowed with this API key
Cause: Using a Search-Only key for a write operation (saveObjects, setSettings, etc.).
Fix: Use the Admin API key for write operations. Search-Only keys only permit
search ACL.
// Wrong: search-only key for indexing const client = algoliasearch(appId, searchOnlyKey); await client.saveObjects({ ... }); // 403 // Right: admin key for indexing const client = algoliasearch(appId, adminKey); await client.saveObjects({ ... }); // Works
3. Index does not exist (404)
ApiError: Index products_staging does not exist
Cause: Searching an index that hasn't been created yet. Algolia creates indices lazily on first
saveObjects.
Fix: Index some data first, or check the index name for typos:
# List all indices in your app curl -s "https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes" \ -H "X-Algolia-Application-Id: ${ALGOLIA_APP_ID}" \ -H "X-Algolia-API-Key: ${ALGOLIA_ADMIN_KEY}" | jq '.items[].name'
4. Rate limit exceeded (429)
ApiError: Too Many Requests
Cause: API key's
maxQueriesPerIPPerHour exceeded, or server-side indexing rate limit hit.
Fix:
// Algolia's built-in retry handles transient 429s. // For sustained rate limits: // 1. Reduce batch frequency const BATCH_SIZE = 500; // Down from 1000 // 2. Add delay between batches for (const batch of chunks) { await client.saveObjects({ indexName: 'products', objects: batch }); await new Promise(r => setTimeout(r, 200)); // 200ms pause between batches } // 3. Check/increase key rate limit // Dashboard > Settings > API Keys > Edit key > Rate limit
5. Record is too big (400)
ApiError: Record at the position 0 is too big size=15234 bytes. Contact us if you need a higher quota.
Cause: Single record exceeds 10KB (free/Build plan) or 100KB (paid plans).
Fix:
// Strip unnecessary fields before indexing function trimForAlgolia(record: any) { const { full_html, raw_content, internal_notes, ...searchable } = record; return searchable; } // Or split long text into chunks function truncateDescription(record: any, maxChars = 5000) { return { ...record, description: record.description?.substring(0, maxChars), }; }
6. Attribute not valid for filtering (400)
ApiError: Attribute "price" is not in attributesForFaceting
Cause: Using
filters or facetFilters on an attribute not configured for faceting.
Fix:
await client.setSettings({ indexName: 'products', indexSettings: { attributesForFaceting: ['category', 'brand', 'filterOnly(price)', 'filterOnly(in_stock)'], }, }); // Wait for settings to propagate
7. RetryError: Unreachable hosts
RetryError: Unreachable hosts - yourass might not be connected to the internet
Cause: Network/DNS issue. Can't reach
*.algolia.net or *.algolianet.com.
Fix:
# Test DNS resolution nslookup ${ALGOLIA_APP_ID}-dsn.algolia.net # Test HTTPS connectivity curl -v "https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes" 2>&1 | grep "Connected to" # Check firewall — Algolia needs outbound HTTPS (443) to: # ${APP_ID}.algolia.net # ${APP_ID}-1.algolianet.com # ${APP_ID}-2.algolianet.com # ${APP_ID}-3.algolianet.com
8. Invalid filter syntax (400)
ApiError: Invalid syntax for filter: 'price > AND < 100'
Fix: Algolia filter syntax reference:
# Correct syntax price > 50 AND price < 100 # Numeric range category:shoes # String equality NOT category:sandals # Negation (brand:Nike OR brand:Adidas) # Grouped OR in_stock = true # Boolean (stored as 0/1) _tags:featured # Tag filter
Quick Diagnostic Script
#!/bin/bash echo "=== Algolia Diagnostics ===" echo "App ID: ${ALGOLIA_APP_ID:-NOT SET}" echo "Admin key: ${ALGOLIA_ADMIN_KEY:+SET (${#ALGOLIA_ADMIN_KEY} chars)}" echo "" echo "=== Connectivity ===" curl -s -o /dev/null -w "HTTP %{http_code} in %{time_total}s" \ "https://${ALGOLIA_APP_ID}-dsn.algolia.net/1/indexes" \ -H "X-Algolia-Application-Id: ${ALGOLIA_APP_ID}" \ -H "X-Algolia-API-Key: ${ALGOLIA_ADMIN_KEY}" echo "" echo "=== SDK Version ===" npm list algoliasearch 2>/dev/null || echo "Not installed" echo "=== Algolia Status ===" curl -s https://status.algolia.com/api/v2/status.json | jq -r '.status.description' 2>/dev/null
Escalation Path
- Check status.algolia.com first
- Collect debug info with
skillalgolia-debug-bundle - Search Algolia Support articles
- Open support ticket with request ID from error response
Resources
Next Steps
For comprehensive debugging, see
algolia-debug-bundle.