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

    API-key requests are also validated against your allowed domains list (Settings โ†’ API): calls originating from a domain not on the list are rejected with 401. Every keyed request additionally passes the per-client rate limiter (see Rate limits below).

    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

    Deliver an Analytics event

    Records one idempotent Analytics v2 event from the supported taxonomy: page_view, property_view, contact_click, calculator_use, or search. Reuse the same event_id and occurred_at only when retrying the same logical action.

    ๐Ÿ”’ API key required. Tenant, allowed-domain, rate-limit, and tenant-owned property checks apply.

    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 '{ "contract_version": 2, "event_id": "11111111-1111-4111-8111-111111111111", "occurred_at": "2026-09-05T14:30:00.000Z", "event_type": "page_view", "page_url": "https://example.com/" }'
    GET/api/v1/analytics/stats

    Get aggregated analytics statistics

    Returns the canonical tenant Analytics v2 snapshot with tenant-local period boundaries, metric-specific comparisons, property scope, data-quality evidence, and read-only v1 aliases under the non-colliding legacy namespace.

    ๐Ÿ”’ API key or authenticated CRM session required. One concrete tenant is always required; property_id, when supplied, must belong to that tenant. Supply start_date and end_date together (maximum 365 tenant-local calendar dates).

    Example request

    curl "https://app.webgrowly.com/api/v1/analytics/stats?start_date=2026-08-01&end_date=2026-08-30" \
      -H "x-api-key: YOUR_API_KEY"
    POST/api/v1/analytics/insights

    Generate AI-powered marketing insights

    Requests evidence-bound recommendations for tenant-local dates. The server loads canonical tenant Analytics and profile data; browser-supplied analyticsData and periodLabel are rejected.

    ๐Ÿ”’ API key or authenticated CRM session required, with one concrete tenant. AI consent, the 10/min recommendation limit, monthly AI cap, and an exact 8,192-byte request-body limit apply.

    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 '{ "firstLocalDate": "2026-08-01", "lastLocalDate": "2026-08-30", "propertyId": null, "locale": "en", "outputLocale": "es" }'

    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 (analytics/insights has an exact 8,192-byte ceiling).

    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)