Skip to main content

Troubleshooting Guide

Common issues and solutions for the backend system.

Table of Contents​


API Issues​

Error: missing_api_key​

Symptom: API returns 401 with missing_api_key error code

Causes:

  • Missing X-API-Key header in request
  • API key not configured in Firebase

Solutions:

# Check if API keys exist for user
firebase firestore:get users/USER_ID/apiKeys

# Create API key via Firebase console or admin script
# Key should be stored at: users/{uid}/apiKeys/{keyId}

Error: invalid_api_key​

Symptom: API returns 401 with invalid_api_key error code

Causes:

  • API key has been deleted or revoked
  • API key belongs to different user
  • API key format is incorrect

Solutions:

  1. Verify API key exists in Firestore: users/{uid}/apiKeys/{keyId}
  2. Check key hasn't expired or been revoked
  3. Generate new API key for user

Error: missing_integrations​

Symptom: API returns 400 with missing_integrations error code

Causes:

  • User hasn't connected required platform(s)
  • Integration was disconnected/revoked
  • Platform is specified but not connected

Solutions:

  1. Check user has connected the platform: users/\{uid\}/integrations/\{platform\}/\{accountId\}
  2. Verify accessToken exists and hasn't been revoked
  3. Have user reconnect the platform via OAuth flow

Prevention:

  • Validate connected platforms before allowing post submission
  • Implement UI to show connected vs. disconnected platforms
  • Handle platform disconnections gracefully

Error: missing_account​

Symptom: API returns 400 with missing_account error code

Message: "Multiple {platform} accounts connected. Please specify accountId."

Causes:

  • User has multiple accounts for a platform
  • Request didn't include required accountId parameter

Solutions:

// Include accountId in request
{
"post": {
"content": {
"text": "Hello world",
"platforms": ["instagram"]
},
"accounts": {
"instagram": "ACCOUNT_ID_HERE"
}
}
}

Finding accountId:

# List all accounts for a platform
firebase firestore:get users/USER_ID/integrations/instagram
# Each document ID is an accountId

Authentication & Authorization​

Firebase ID Token Expired​

Symptom: Requests fail with "Token expired" or authentication errors

Causes:

  • Firebase ID token has expired (1 hour lifetime)
  • Client not refreshing token automatically

Solutions:

  1. Implement automatic token refresh in client:
// Firebase SDK automatically refreshes tokens
firebase.auth().currentUser.getIdToken(true) // force refresh
  1. Handle 401 responses by refreshing token and retrying

Insufficient Permissions​

Symptom: Firestore operations fail with "Permission denied"

Causes:

  • Firestore Security Rules blocking access
  • User not authenticated
  • Trying to access another user's data

Solutions:

  1. Check Firestore Security Rules match your access patterns
  2. Verify user is authenticated: firebase.auth().currentUser
  3. Check document path matches user's UID

Debug Security Rules:

// Test rules in Firebase Console > Firestore > Rules > Simulator
// Or check function logs for permission errors

Publishing Failures​

Post Stuck in orchestrating Status​

Symptom: Post submission never completes, status stays orchestrating

Causes:

  • Cloud Tasks queue doesn't exist
  • Orchestrator function failed
  • Network issues enqueuing tasks

Solutions:

  1. Check orchestrator function logs:
firebase functions:log --only publishOrchestrator
  1. Verify Cloud Tasks queues exist:
gcloud tasks queues list --location=us-central1
  1. Check post submission document:
firebase firestore:get postSubmissions/SUBMISSION_ID
# Look for error field or targets array

Post Stuck in dispatched Status​

Symptom: Post dispatched but individual platform runs never complete

Causes:

  • Platform publish function failing
  • Cloud Tasks queue paused
  • Platform API issues

Solutions:

  1. Check platform function logs:
firebase functions:log --only publishInstagram
  1. Check run status:
firebase firestore:get postSubmissions/SUBMISSION_ID/runs/PLATFORM_ACCOUNTID
# Look for status and error fields
  1. Check Cloud Tasks queue isn't paused:
gcloud tasks queues describe publish-instagram --location=us-central1

Platform Publish Fails with invalid_token​

Symptom: Run status is failed with "Invalid token" or "Token expired" error

Causes:

  • Platform access token expired
  • Platform access token revoked by user
  • OAuth refresh failed

Solutions:

  1. Check token expiry:
firebase firestore:get users/USER_ID/integrations/PLATFORM/ACCOUNT_ID
# Check expiresAt field
  1. Try refreshing token (if refreshToken exists):
# X and YouTube have refresh endpoints
# Call platform-specific refresh function
  1. Have user reconnect platform if refresh fails

Platform Integration Issues​

Facebook: No Pages Available​

Symptom: Facebook OAuth completes but no pages are connected

Causes:

  • User didn't grant page permissions
  • User has no pages
  • App doesn't have page access approved

Solutions:

  1. Check app has page permissions approved in Facebook App Review
  2. Use auth_type=rerequest to force permissions dialog
  3. Verify user actually manages a page

Instagram: Container Creation Failed​

Symptom: Instagram publish fails at container creation step

Causes:

  • Media URL not publicly accessible
  • Media format not supported
  • Caption too long or contains invalid characters

Solutions:

  1. Verify media URL is publicly accessible:
curl -I MEDIA_URL
# Should return 200 OK
  1. Check media format:

    • Images: JPEG, PNG
    • Videos: MP4, MOV (H.264 codec)
    • Max size: 8MB images, 100MB videos
  2. Validate caption:

    • Max 2,200 characters
    • Remove invalid characters

X: Media Upload Requires OAuth 1.0a​

Symptom: X publish fails with x_media_requires_oauth1_or_mediaIds error

Causes:

  • Trying to post media without OAuth 1.0a tokens
  • X API v2 requires separate media upload

Solutions:

  1. Complete OAuth 1.0a flow for media upload:

    • User must consent to OAuth 1.0a separately
    • Requires X_CONSUMER_KEY and X_CONSUMER_SECRET env vars
  2. Or upload media separately and provide mediaIds:

{
"post": {
"content": {
"text": "Check this out!",
"platforms": ["x"],
"mediaIds": ["MEDIA_ID_HERE"]
}
}
}

TikTok: Profile Fields Missing​

Symptom: TikTok integration connected but profile incomplete

Causes:

  • Missing required scopes
  • TikTok API rate limiting
  • User info endpoint failed

Solutions:

  1. Ensure scopes include:

    • user.info.basic
    • user.info.profile
  2. Check function logs for API errors:

firebase functions:log --only ttAuthCallback
  1. Retry profile fetch via refresh endpoint

YouTube: Wrong Channel Connected​

Symptom: User's brand account channel not showing

Causes:

  • User has multiple channels (personal + brand)
  • OAuth returns default channel only
  • Channel selection not implemented

Solutions:

  1. Use prompt=select_account in OAuth URL to force channel selection
  2. Implement channel picker if multiple channels detected
  3. Check extra.channel field for full channel data

Cloud Functions Issues​

Function Deployment Fails​

Symptom: firebase deploy --only functions fails

Common errors:

"Billing must be enabled":

  • Solution: Upgrade to Blaze plan in Firebase Console

"Function size exceeds 100MB":

  • Solution: Remove unnecessary dependencies, check node_modules size
  • Exclude dev dependencies from deployment

"Deployment timeout":

  • Solution: Deploy functions individually: firebase deploy --only functions:api
  • Check network connectivity
  • Retry deployment

Function Crashes on Startup​

Symptom: Function deploys but immediately fails on invocation

Causes:

  • Missing environment variables
  • Syntax errors in code
  • Dependency issues

Solutions:

  1. Check function logs immediately after deployment:
firebase functions:log --only FUNCTION_NAME
  1. Verify all environment variables are set:
firebase functions:config:get
  1. Test function locally:
cd apps/functions
npm run dev
# Test endpoints locally

Function Timeout​

Symptom: Function exceeds time limit (60s default, 540s max)

Causes:

  • Long-running operations
  • Waiting for external API calls
  • Inefficient queries

Solutions:

  1. Increase timeout in firebase.json:
{
"functions": [
{
"source": "apps/functions",
"codebase": "functions",
"runtime": "nodejs22",
"timeoutSeconds": 300
}
]
}
  1. Optimize slow operations:

    • Use Cloud Tasks for async work
    • Batch Firestore operations
    • Add timeouts to external API calls
  2. Check function logs for slow operations

Function Cold Start Latency​

Symptom: First request to function takes 3-5 seconds

Causes:

  • Function not kept warm
  • Large function size
  • Many dependencies

Solutions:

  1. Enable minimum instances (costs more):
{
"functions": [
{
"source": "apps/functions",
"minInstances": 1
}
]
}
  1. Reduce function size:

    • Split large functions
    • Remove unused dependencies
    • Use dynamic imports
  2. Implement keep-alive ping (not recommended, wastes invocations)


Firestore Issues​

Index Not Found​

Symptom: Query fails with "Index not found" error

Causes:

  • Composite index not created
  • Index still building
  • Query doesn't match any index

Solutions:

  1. Deploy indexes:
firebase deploy --only firestore:indexes
  1. Check index status:
firebase firestore:indexes
# Wait for "READY" status
  1. Follow error message link to create index automatically

Document Too Large​

Symptom: Write fails with "Document size exceeds 1MB"

Causes:

  • Storing large arrays or nested data
  • Accumulated data over time

Solutions:

  1. Split data into subcollections:
// Instead of large array in document
users/\{uid\}/integrations/\{platform\}/\{accountId\}

// Use subcollection
users/\{uid\}/posts/\{postId\}/runs/\{platform\}
  1. Use Cloud Storage for large data (media, files)

  2. Paginate large arrays

Write Conflicts / Transaction Failures​

Symptom: Transactions fail with "Transaction failed" or "Contention" errors

Causes:

  • Multiple writes to same document
  • High concurrency
  • Long-running transactions

Solutions:

  1. Reduce transaction scope
  2. Use batched writes instead of transactions when possible
  3. Implement retry logic with exponential backoff
  4. Consider distributed counters for high-traffic documents

Cloud Tasks Issues​

Tasks Not Being Dispatched​

Symptom: Tasks enqueued but never execute

Causes:

  • Queue is paused
  • Queue doesn't exist
  • Function URL incorrect
  • Authentication issues

Solutions:

  1. Check queue status:
gcloud tasks queues describe QUEUE_NAME --location=us-central1
  1. Resume paused queue:
gcloud tasks queues resume QUEUE_NAME --location=us-central1
  1. Verify function URL is accessible:
curl -X POST FUNCTION_URL
# Should return 401 (unauthorized) not 404

Tasks Failing with 401 Unauthorized​

Symptom: Tasks repeatedly fail with 401 error

Causes:

  • Function requires authentication
  • Service account doesn't have permissions

Solutions:

  1. If functions should be public, remove auth requirement
  2. Add OIDC token to task:
const task = {
httpRequest: {
url: functionUrl,
httpMethod: 'POST',
body: Buffer.from(JSON.stringify(payload)).toString('base64'),
oidcToken: {
serviceAccountEmail: 'SERVICE_ACCOUNT_EMAIL'
}
}
};
  1. Grant Cloud Functions Invoker role to service account

Tasks Retrying Forever​

Symptom: Tasks keep retrying and never succeed

Causes:

  • Function returns 5xx error (retriable)
  • Infinite loop in retry logic
  • No max attempts configured

Solutions:

  1. Configure max attempts on queue:
gcloud tasks queues update QUEUE_NAME \
--max-attempts=5 \
--location=us-central1
  1. Fix function to return 4xx (non-retriable) for permanent failures

  2. Implement exponential backoff:

gcloud tasks queues update QUEUE_NAME \
--min-backoff=10s \
--max-backoff=600s \
--location=us-central1

Credit System Issues​

Credits Not Deducted​

Symptom: AI operation completes but credits remain unchanged

Causes:

  • Credit consumption logic not called
  • Transaction failed
  • Function crashed before credit update

Solutions:

  1. Check function logs for credit deduction:
firebase functions:log | grep "credits"
  1. Verify credit transaction was created:
firebase firestore:get users/USER_ID/creditTransactions
# Look for recent transaction
  1. Manually adjust credits if necessary:
firebase firestore:update users/USER_ID '{"credits": 50}'

Insufficient Credits Error But User Has Credits​

Symptom: User gets insufficient_credits error despite having credits

Causes:

  • Race condition (multiple requests)
  • Stale credit balance
  • Cache issue

Solutions:

  1. Check actual credit balance:
firebase firestore:get users/USER_ID
# Look at credits field
  1. Check for concurrent operations:
firebase firestore:get users/USER_ID/creditTransactions --limit=10
# Look for multiple rapid transactions
  1. Implement proper transaction isolation in credit operations

Rate Limiting Issues​

User Hit Rate Limit Unexpectedly​

Symptom: User gets 429 error but hasn't made many requests

Causes:

  • Old requests still in sliding window
  • Rate limit window duration shorter than expected
  • Multiple devices/sessions

Solutions:

  1. Check rate limit document:
firebase firestore:get rateLimits/rateLimit:USER_ID:/v1/posts
# Look at window array timestamps
  1. Explain sliding window to user:

    • Free: 5 requests per 15 minutes
    • Pro: 10 requests per 1 minute
  2. User can wait for oldest request to age out (check X-RateLimit-Reset header)

Rate Limit Not Working​

Symptom: User exceeds rate limit but not blocked

Causes:

  • Rate limit middleware not applied
  • Staff member (has higher limits)
  • Rate limit document not found/created

Solutions:

  1. Verify rate limit middleware is active on endpoint
  2. Check if user is staff:
firebase firestore:get users/USER_ID
# Look for isStaff: true
  1. Check rate limit document exists after first request

Performance Issues​

Slow API Response Times​

Symptom: API requests take >2 seconds

Causes:

  • Cold start latency
  • Slow Firestore queries
  • External API calls blocking
  • Unoptimized code

Solutions:

  1. Check function execution time in logs:
firebase functions:log --only api
# Look for execution time
  1. Optimize Firestore queries:

    • Add indexes
    • Reduce document reads
    • Use limit() on queries
  2. Move slow operations to Cloud Tasks (async)

  3. Cache frequently accessed data

High Firestore Read/Write Costs​

Symptom: Unexpected Firebase bill

Causes:

  • Inefficient queries
  • Reading large documents
  • High traffic
  • Missing indexes (full collection scans)

Solutions:

  1. Review Firestore usage in console

  2. Identify expensive queries:

    • Use Firestore query profiler
    • Check for missing indexes
  3. Optimize data model:

    • Denormalize for read efficiency
    • Use subcollections
    • Implement pagination
  4. Add caching layer (carefully, can cause stale data)

Function Memory Exceeded​

Symptom: Function crashes with "Memory limit exceeded"

Causes:

  • Large media processing
  • Memory leaks
  • Too many concurrent operations

Solutions:

  1. Increase memory allocation:
{
"functions": [
{
"source": "apps/functions",
"memory": 1024
}
]
}
  1. Process large files in chunks
  2. Clean up resources (close connections, clear buffers)
  3. Use Cloud Storage for large files instead of memory

Debugging Tools​

View Function Logs​

# All logs
firebase functions:log

# Specific function
firebase functions:log --only functionName

# Follow logs in real-time
firebase functions:log --only functionName --follow

# Filter by severity
firebase functions:log --only functionName | grep ERROR

Query Firestore​

# Get specific document
firebase firestore:get users/USER_ID

# Get collection
firebase firestore:get users

# Run query
# (Use Firebase Console > Firestore > Query)

Test Cloud Tasks​

# List tasks in queue
gcloud tasks list --queue=QUEUE_NAME --location=us-central1

# Delete specific task
gcloud tasks delete TASK_ID --queue=QUEUE_NAME --location=us-central1

# Purge all tasks in queue
gcloud tasks queues purge QUEUE_NAME --location=us-central1

Check Platform API Status​


Getting Help​

Check Documentation​

Enable Debug Logging​

Set DEBUG environment variable in functions:

firebase functions:config:set debug.enabled=true

Contact Support​

When reporting issues, include:

  • Error message and code
  • Function logs (sanitized)
  • Steps to reproduce
  • Environment (staging/production)
  • Affected user ID (if applicable)
  • Timestamp of issue

Community Resources​