AlterLabAlterLab
PricingComparePlaygroundBlogDocsChangelog
    AlterLabAlterLab
    PricingComparePlaygroundBlogDocsChangelog
    IntroductionQuickstartInstallationYour First Request
    REST APICrawl APIMap APISearch APIExtract APIJob PollingAPI KeysSessions APINew
    OverviewPythonNode.js
    JavaScript RenderingOutput FormatsPDF & OCRCachingWebhooksJSON Schema FilteringWebSocket Real-TimeBring Your Own ProxyProAuthenticated ScrapingNewHTTP Methods & BodiesNewStructured ExtractionAIWeb SearchSite MappingWeb CrawlingBatch ScrapingSchedulerChange DetectionCloud Storage ExportSpend LimitsOrganizations & TeamsAlerts & NotificationsOAuth2 Machine-to-MachineSupport & Tickets
    Structured ExtractionAIE-commerce ScrapingNews MonitoringPrice MonitoringMulti-Page CrawlingMonitoring DashboardAI Agent / MCPMCPAI Research AgentAISite CrawlingData Pipeline to Cloud
    PricingRate LimitsError CodesChangelogVersioning
    From FirecrawlFrom ApifyFrom ScrapingBee / ScraperAPIFrom Crawl4AIFrom SpiderFirecrawl v0 API ReferenceLegacy
    PlaygroundPricingStatus
    Guide

    Support & Ticket System

    Create support tickets, reply with attachments, search the knowledge base, and manage how you get notified about updates — all via the dashboard or the API.

    Dashboard Access

    All ticket operations are available in your dashboard under Support. The API endpoints below are for programmatic access and automation. Authentication uses your session JWT (dashboard) or API key.

    Creating Tickets

    There are two ways to create a ticket: authenticated (requires login) for users with an AlterLab account, and a public endpoint for the contact form.

    Authenticated Ticket

    POST
    /api/v1/support/tickets

    Creates a ticket linked to your account. Automatically enriches the ticket with your account details and usage context.

    Bash
    curl -X POST https://api.alterlab.io/api/v1/support/tickets \
      -H "Authorization: Bearer YOUR_SESSION_JWT" \
      -H "Content-Type: application/json" \
      -d '{
        "subject": "Scrape returning empty content for JavaScript-heavy site",
        "body": "I am scraping https://example.com but getting empty content...",
        "category_slug": "technical-issue",
        "priority": "medium"
      }'

    Response:

    JSON
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "readable_id": "ALT-1042",
      "subject": "Scrape returning empty content for JavaScript-heavy site",
      "status": "open",
      "priority": "medium",
      "category": "Technical Issue",
      "created_at": "2026-05-18T10:23:00Z",
      "updated_at": "2026-05-18T10:23:00Z"
    }
    FieldRequiredDescription
    subjectYesBrief description (max 255 chars)
    bodyYesDetailed description of the issue
    category_slugNoCategory slug (see Categories). Auto-categorized if omitted.
    priorityNolow, medium, high, or urgent (default: medium)
    metadataNoKey-value pairs for additional context (e.g. affected URL, job ID)

    Public / Contact Form

    POST
    /api/v1/support/tickets/public

    Unauthenticated endpoint for the contact form at /contact. No login required — submit name, email, and message. Includes a honeypot field to block bot submissions.

    Bash
    curl -X POST https://api.alterlab.io/api/v1/support/tickets/public \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Jane Smith",
        "email": "[email protected]",
        "subject": "Question about pricing",
        "body": "I would like to know more about the Pro plan features...",
        "honeypot": ""
      }'

    Rate limited

    The public endpoint is limited to 3 requests per hour per IP address. Authenticated ticket creation allows 5 per hour per user.

    Viewing Your Tickets

    List Tickets

    GET
    /api/v1/support/tickets
    Bash
    # All open tickets
    curl "https://api.alterlab.io/api/v1/support/tickets?status=open" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"
    
    # Filter by category, search by keyword
    curl "https://api.alterlab.io/api/v1/support/tickets?status=open&category=technical-issue&q=scrape" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"

    Query params: status (open, closed, pending), category, q (full-text search), page, per_page

    Get a Single Ticket

    GET
    /api/v1/support/tickets/{ticket_id}
    Bash
    curl "https://api.alterlab.io/api/v1/support/tickets/550e8400-e29b-41d4-a716-446655440000" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"

    Replying to Tickets

    POST
    /api/v1/support/tickets/{ticket_id}/replies

    Add a reply to an existing ticket. Automatically re-opens a closed ticket. Rate limited to 30 replies per hour per user.

    Bash
    curl -X POST "https://api.alterlab.io/api/v1/support/tickets/{ticket_id}/replies" \
      -H "Authorization: Bearer YOUR_SESSION_JWT" \
      -H "Content-Type: application/json" \
      -d '{
        "body": "I tried enabling JavaScript rendering (tier 3) and it works now. Thank you!"
      }'

    Attachments

    To attach files to a reply, first upload them using the support attachments API (POST /api/v1/support/attachments), then include the returned attachment IDs in the reply body as markdown links.

    Closing & Reopening

    POST
    /api/v1/support/tickets/{id}/close
    Bash
    curl -X POST "https://api.alterlab.io/api/v1/support/tickets/{id}/close" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"
    POST
    /api/v1/support/tickets/{id}/reopen
    Bash
    curl -X POST "https://api.alterlab.io/api/v1/support/tickets/{id}/reopen" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"

    Reopening a ticket notifies the support team. Adding a reply to a closed ticket also automatically reopens it.

    CSAT Rating

    After a ticket is resolved, you can submit a satisfaction rating. Ratings help the support team identify areas for improvement.

    POST
    /api/v1/support/tickets/{ticket_id}/satisfaction
    Bash
    curl -X POST "https://api.alterlab.io/api/v1/support/tickets/{ticket_id}/satisfaction" \
      -H "Authorization: Bearer YOUR_SESSION_JWT" \
      -H "Content-Type: application/json" \
      -d '{
        "rating": 5,
        "comment": "Fast response and clear explanation. Very helpful!"
      }'
    FieldRequiredDescription
    ratingYesInteger 1–5 (1 = terrible, 5 = great)
    commentNoOptional written feedback
    CSAT ratings can only be submitted once per ticket. Attempting to rate the same ticket twice returns a 409 Conflict.

    Knowledge Base Search

    Search published knowledge base articles before creating a ticket. The KB covers common issues, how-tos, and troubleshooting guides.

    GET
    /api/v1/support/kb/search
    Bash
    # Search for articles about JavaScript rendering
    curl "https://api.alterlab.io/api/v1/support/kb/search?q=javascript+rendering&limit=5"

    Response:

    JSON
    {
      "articles": [
        {
          "id": "660f9511-...",
          "slug": "javascript-rendering-guide",
          "title": "How to scrape JavaScript-heavy sites",
          "summary": "Use tier 3 (Playwright) or tier 4 for sites that require JavaScript execution...",
          "helpful_count": 42,
          "not_helpful_count": 3
        }
      ],
      "total": 1,
      "query": "javascript rendering"
    }

    Get a full article by slug:

    Bash
    curl "https://api.alterlab.io/api/v1/support/kb/javascript-rendering-guide"

    Mark an article as helpful or not helpful:

    Bash
    curl -X POST "https://api.alterlab.io/api/v1/support/kb/javascript-rendering-guide/helpful" \
      -H "Content-Type: application/json" \
      -d '{"helpful": true}'

    Notification Preferences

    Control which support events trigger email notifications to you.

    GET
    /api/v1/support/preferences
    Bash
    curl "https://api.alterlab.io/api/v1/support/preferences" \
      -H "Authorization: Bearer YOUR_SESSION_JWT"

    Response:

    JSON
    {
      "notify_on_reply": true,
      "notify_on_close": true,
      "notify_on_status_change": false,
      "email_digest": false
    }

    Update preferences:

    PATCH
    /api/v1/support/preferences
    Bash
    curl -X PATCH "https://api.alterlab.io/api/v1/support/preferences" \
      -H "Authorization: Bearer YOUR_SESSION_JWT" \
      -H "Content-Type: application/json" \
      -d '{
        "notify_on_reply": true,
        "notify_on_close": false
      }'

    Mute notifications for a specific ticket:

    PATCH
    /api/v1/support/tickets/{id}/mute
    Bash
    curl -X PATCH "https://api.alterlab.io/api/v1/support/tickets/{id}/mute" \
      -H "Authorization: Bearer YOUR_SESSION_JWT" \
      -H "Content-Type: application/json" \
      -d '{"muted": true}'

    Ticket Categories

    List available ticket categories to use as category_slug when creating tickets.

    GET
    /api/v1/support/categories
    Bash
    curl "https://api.alterlab.io/api/v1/support/categories"

    Response:

    JSON
    {
      "categories": [
        { "slug": "technical-issue", "name": "Technical Issue", "description": "Bugs, errors, unexpected behavior" },
        { "slug": "billing", "name": "Billing", "description": "Charges, invoices, plan changes" },
        { "slug": "feature-request", "name": "Feature Request", "description": "Suggestions and new capabilities" },
        { "slug": "account", "name": "Account", "description": "Login, API keys, team management" },
        { "slug": "general", "name": "General", "description": "Other questions" }
      ]
    }

    Auto-categorization

    If you omit category_slug when creating a ticket, AlterLab automatically classifies it based on your subject and body. You can still change the category later via the dashboard.

    Rate Limits

    EndpointLimitWindow
    POST /support/tickets (authenticated)5Per user, per hour
    POST /support/tickets/public3Per IP, per hour
    POST /support/tickets/{id}/replies30Per user, per hour

    Rate limit errors return HTTP 429 with a Retry-After header indicating when the limit resets.

    OAuth2 Machine-to-MachineStructured Extraction
    Last updated: March 2026

    On this page