WebGrowly Realty โ€” API Documentation

    Public REST API for WebGrowly Realty. Endpoints cover leads, properties, AI chat, analytics, configuration, bulk import, and Schema.org SEO generation.

    ๐Ÿ“„ OpenAPI 3.1 spec (machine-readable)๐Ÿงช Try in Swagger Editor

    Authentication

    All API requests require an API key. Generate or rotate your key from the WebGrowly OS admin panel under Settings โ†’ API.

    API key format:

    agos_[client_id]_[random_hash]

    Pass the key via either method:

    • HTTP header (recommended): x-api-key: YOUR_API_KEY
    • Query parameter (Zapier endpoints only): ?api_key=YOUR_API_KEY

    Base URL: https://app.webgrowly.com

    Zapier Integration Endpoints

    Endpoints used by the official WebGrowly Realty Zapier integration.

    GET/api/zapier/me

    Test authentication

    Validates the API key and returns basic account info. Used by Zapier's auth-check step.

    ๐Ÿ”’ API key required.

    Example request

    curl "https://app.webgrowly.com/api/zapier/me?api_key=YOUR_API_KEY"

    Example response

    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "John Doe",
      "company": "Real Estate Agency",
      "plan": "professional"
    }
    POST/api/zapier/leads

    Create lead (Zapier)

    Zapier-tailored lead creation. Supports automatic deduplication by email.

    ๐Ÿ”’ API key required.

    Example request

    curl -X POST "https://app.webgrowly.com/api/zapier/leads" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Jane Smith",
        "email": "jane@example.com",
        "phone": "+1-305-555-0100",
        "source": "Zapier Integration"
      }'

    Example response

    {
      "id": "lead-uuid",
      "action": "created",
      "lead": { "id": "lead-uuid", "name": "Jane Smith", "email": "jane@example.com" }
    }

    Deduplication: If a lead with the same email exists, the existing lead is updated and the response indicates action: 'updated'.

    Public REST API (v1)

    Stable customer-facing endpoints under /api/v1/*. Full schemas in the OpenAPI spec linked at the top of this page.

    Leads

    POST/api/v1/leads

    Create a lead

    Creates a new lead record and triggers email/SMS notifications based on your settings.

    ๐Ÿ”’ API key required. Subject to monthly lead-volume usage limits.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/leads" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "John Smith",
        "email": "john@example.com",
        "phone": "+1-305-555-0100",
        "message": "Looking for a 2BR condo in Brickell",
        "source": "website_form"
      }'

    Example response

    {
      "success": true,
      "lead": { "id": "550e8400-e29b-41d4-a716-446655440000" }
    }

    AI Chat Widget

    POST/api/v1/chat

    Send a message to the AI assistant

    Sends a conversation history to the AI and returns a streaming text response. The AI extracts lead info from conversations and creates lead records automatically.

    ๐Ÿ”’ API key required. Subject to monthly AI usage limits.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/chat" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "messages": [
          { "role": "user", "content": "Looking for a 2BR condo in Brickell under $800K" }
        ]
      }'

    Example response

    (streaming text/event-stream)
    data: "Hello! I'd be happy to help you find a 2-bedroom..."

    Properties

    GET/api/v1/properties

    List properties

    Returns the authenticated client's properties with filters, pagination, and Schema.org SEO metadata. Filters: status, type (sale/rent), display (mobile/desktop). Supports countOnly=true for count-only queries.

    ๐Ÿ”’ API key required.

    Example request

    curl "https://app.webgrowly.com/api/v1/properties?status=active&type=sale&limit=20" \
      -H "x-api-key: YOUR_API_KEY"
    GET/api/v1/properties/{id}

    Get a property by ID

    Returns a single property with full Schema.org JSON-LD SEO metadata, meta tags, and breadcrumbs.

    ๐Ÿ”’ API key returns the property if it belongs to the authenticated client. Without API key, returns the property only if its status is 'active'.

    Example request

    curl "https://app.webgrowly.com/api/v1/properties/550e8400-e29b-41d4-a716-446655440000" \
      -H "x-api-key: YOUR_API_KEY"
    POST/api/v1/properties

    Create a property

    Creates a new property listing. Required: title, price, address.

    ๐Ÿ”’ API key required.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/properties" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "Luxury 2BR in Brickell",
        "price": 750000,
        "address": "1234 Brickell Ave",
        "city": "Miami",
        "state": "FL",
        "bedrooms": 2,
        "bathrooms": 2,
        "property_type": "condo",
        "listing_type": "sale"
      }'
    PUT/api/v1/properties

    Update a property

    Updates fields on an existing property. Required: id. Only provided fields are modified.

    ๐Ÿ”’ API key required. Property must belong to the authenticated client.

    Example request

    curl -X PUT "https://app.webgrowly.com/api/v1/properties" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "id": "<uuid>", "price": 725000, "status": "pending" }'
    DELETE/api/v1/properties

    Delete a property

    Permanently deletes a property by ID. Use with caution โ€” this action cannot be undone.

    ๐Ÿ”’ API key required. Property must belong to the authenticated client.

    Example request

    curl -X DELETE "https://app.webgrowly.com/api/v1/properties?id=<uuid>" \
      -H "x-api-key: YOUR_API_KEY"

    Bulk Import

    POST/api/v1/import

    Bulk-import properties

    Bulk-creates properties for the authenticated client. Properties whose mls_number already exists for the client are updated rather than duplicated.

    ๐Ÿ”’ API key required. Idempotent on mls_number.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/import" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "properties": [ { "mls_number": "MLS123", "title": "...", "price": 750000, "address": "..." } ] }'

    Example response

    {
      "success": true,
      "imported": 1,
      "updated": 0,
      "results": [{ "action": "created", "id": "<uuid>", "mls_number": "MLS123" }]
    }

    Analytics

    POST/api/v1/analytics/track

    Track a page view or custom event

    Records a page view or event (page_view, contact_click, widget_open, widget_close) with optional UTM params, referrer, and page metadata.

    ๐Ÿ”’ API key required.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/analytics/track" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "event_type": "page_view", "page_url": "https://example.com/", "page_title": "Home" }'
    GET/api/v1/analytics/stats

    Get aggregated analytics statistics

    Returns aggregated traffic, geographic, device, and UTM-source breakdowns for the requested period.

    ๐Ÿ”’ API key required.

    Example request

    curl "https://app.webgrowly.com/api/v1/analytics/stats?period=30d" \
      -H "x-api-key: YOUR_API_KEY"
    POST/api/v1/analytics/insights

    Generate AI-powered marketing insights

    Sends aggregated analytics data to an AI model and returns structured marketing recommendations: best posting times, traffic-source strategy, geographic targeting, content ideas, and a weekly action plan.

    ๐Ÿ”’ API key required. Subject to monthly AI usage limits and rate limit (10/min). Max body size 100 KB.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/analytics/insights" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "analyticsData": { "total_views": 1240, "heatmap": [...], "traffic_sources": [...] }, "periodLabel": "Last 30 days" }'

    Widget Configuration

    GET/api/v1/config

    Get widget configuration

    Returns the public chat widget configuration: theme, primary color, greeting, position, AI assistant name, suggested questions, TTS/STT settings, language.

    ๐Ÿ”’ API key required.

    Example request

    curl "https://app.webgrowly.com/api/v1/config" \
      -H "x-api-key: YOUR_API_KEY"

    SEO & Schema.org

    GET/api/v1/seo

    Generate Schema.org SEO data

    Returns ready-to-use Schema.org JSON-LD and meta tags for a single property (with propertyId) or the full property catalog (with all=true).

    ๐Ÿ”’ API key required.

    Example request

    curl "https://app.webgrowly.com/api/v1/seo?propertyId=<uuid>&includeAgent=true&includeFaq=true" \
      -H "x-api-key: YOUR_API_KEY"
    POST/api/v1/seo

    AI-generate optimized SEO content

    Sends a property to an AI model and returns SEO-optimized meta title, meta description, keywords, image alt-texts, and optionally FAQ Q&A.

    ๐Ÿ”’ API key required. Subject to rate limit (20/min) and monthly AI usage limits.

    Example request

    curl -X POST "https://app.webgrowly.com/api/v1/seo" \
      -H "x-api-key: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{ "propertyId": "<uuid>", "locale": "en-US", "generateFaq": true }'

    Error responses

    All errors return JSON: { error: string, code?: string }.

    400 Bad Request

    Validation failed (missing required field, malformed payload).

    401 Unauthorized

    Missing or invalid API key.

    404 Not Found

    Resource (e.g., property) does not exist or does not belong to the authenticated client.

    413 Payload Too Large

    Request body exceeds endpoint limit (e.g., analytics/insights cap is 100 KB).

    429 Too Many Requests

    Rate limit hit (per-minute) or monthly usage limit exceeded. Response includes Retry-After header where applicable.

    500 Server Error

    Unexpected server error. Retry with exponential backoff.

    Rate limits & usage

    Per-minute rate limits are applied per API key. Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.

    • Most endpoints: 60 requests/minute
    • /api/v1/analytics/insights: 10 requests/minute (AI-bound)
    • /api/v1/seo (POST): 20 requests/minute (AI-bound)
    • Lead creation, AI requests, and similar metered actions are also subject to per-account monthly usage limits per your WebGrowly OS plan.

    Support & resources

    Support email: support@webgrowly.com

    Admin login: app.webgrowly.com/login

    OpenAPI spec: /api/v1/openapi.json (machine-readable, OpenAPI 3.1)