Vendasta Vanalytics API

The VAnalytics service on the gRPC gateway, exposing Vendasta platform analytics data.

OpenAPI Specification

vendasta-vanalytics-openapi.json Raw ↑
{
  "components": {
    "schemas": {
      "protobufAny": {
        "additionalProperties": {},
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "rpcStatus": {
        "properties": {
          "code": {
            "format": "int32",
            "type": "integer"
          },
          "details": {
            "items": {
              "$ref": "#/components/schemas/protobufAny"
            },
            "type": "array"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1BusinessMetric": {
        "description": "A business identifier, label, and one or more data points for analytics reporting.",
        "properties": {
          "businessId": {
            "title": "Required. Business ID (Account ID). Format: AG-XXXXXXXX",
            "type": "string"
          },
          "label": {
            "title": "Required. Label identifying the metric type. Example: \"click\", \"NetSyncGoogleMapViews\"",
            "type": "string"
          },
          "points": {
            "description": "Required. Data points to be collected and aggregated.",
            "items": {
              "$ref": "#/components/schemas/v1Point"
            },
            "type": "array"
          }
        },
        "required": [
          "businessId",
          "label",
          "points"
        ],
        "title": "BusinessMetric",
        "type": "object"
      },
      "v1DateRange": {
        "description": "A date range filter with inclusive start and end dates.",
        "properties": {
          "endDate": {
            "format": "date-time",
            "title": "Required. End date. Format: YYYY-MM-DDTHH:MM:SSZ",
            "type": "string"
          },
          "startDate": {
            "format": "date-time",
            "title": "Required. Start date. Format: YYYY-MM-DDTHH:MM:SSZ",
            "type": "string"
          }
        },
        "required": [
          "startDate",
          "endDate"
        ],
        "title": "DateRange",
        "type": "object"
      },
      "v1DeleteBusinessMetricRequest": {
        "description": "Request to soft delete a metric point by its unique identifier.",
        "properties": {
          "id": {
            "description": "Required. Unique identifier (UUID) of the metric point to delete.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "DeleteBusinessMetricRequest",
        "type": "object"
      },
      "v1DeleteBusinessMetricResponse": {
        "description": "Result of a single metric point deletion, indicating success or failure.",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/v1Error"
          },
          "id": {
            "description": "Output only. UUID of the processed metric point.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "DeleteBusinessMetricResponse",
        "type": "object"
      },
      "v1DeleteMultiBusinessMetricsRequest": {
        "description": "Request to soft delete multiple metric points in a single call.",
        "properties": {
          "businessMetrics": {
            "description": "Required. List of metric point IDs to delete.",
            "items": {
              "$ref": "#/components/schemas/v1DeleteBusinessMetricRequest"
            },
            "type": "array"
          }
        },
        "required": [
          "businessMetrics"
        ],
        "title": "DeleteMultiBusinessMetricsRequest",
        "type": "object"
      },
      "v1DeleteMultiBusinessMetricsResponse": {
        "description": "Response containing results for each deletion attempt in a batch delete.",
        "properties": {
          "businessMetrics": {
            "description": "Output only. Deletion results. Successfully deleted points have no error field.",
            "items": {
              "$ref": "#/components/schemas/v1DeleteBusinessMetricResponse"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "DeleteMultiBusinessMetricsResponse",
        "type": "object"
      },
      "v1Error": {
        "description": "Error details for a failed operation.",
        "properties": {
          "code": {
            "description": "Output only. Error code. Code 1: point does not exist or is already deleted.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "message": {
            "description": "Output only. Human-readable error message.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Error",
        "type": "object"
      },
      "v1GetBusinessMetricPointRequest": {
        "description": "Request to retrieve a single metric point by its unique identifier.",
        "properties": {
          "id": {
            "description": "Required. Unique identifier (UUID) of the metric point to retrieve.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "title": "GetBusinessMetricPointRequest",
        "type": "object"
      },
      "v1GetBusinessMetricPointResponse": {
        "description": "Complete details for a single metric point including source, value, and timestamps.",
        "properties": {
          "aggregationKey": {
            "description": "Output only. Aggregation key used to group this point with others.",
            "readOnly": true,
            "type": "string"
          },
          "businessId": {
            "readOnly": true,
            "title": "Output only. Business ID (Account ID). Format: AG-XXXXXXXX",
            "type": "string"
          },
          "created": {
            "format": "date-time",
            "readOnly": true,
            "title": "Output only. When this point was created. Format: YYYY-MM-DDTHH:MM:SSZ",
            "type": "string"
          },
          "dateHappened": {
            "format": "date-time",
            "readOnly": true,
            "title": "Output only. When the measurement occurred. Format: YYYY-MM-DDTHH:MM:SSZ",
            "type": "string"
          },
          "dateHappenedKey": {
            "description": "Output only. Internal date key for indexing (Unix timestamp in nanoseconds).",
            "readOnly": true,
            "type": "string"
          },
          "deleted": {
            "description": "Output only. Whether this point has been soft-deleted.",
            "readOnly": true,
            "type": "boolean"
          },
          "id": {
            "description": "Output only. Unique identifier (UUID).",
            "readOnly": true,
            "type": "string"
          },
          "label": {
            "readOnly": true,
            "title": "Output only. Metric label. Example: \"NetSyncGoogleMapViews\", \"click\"",
            "type": "string"
          },
          "source": {
            "description": "Output only. Source identifier (typically the user identifier or service account) that submitted the point.",
            "readOnly": true,
            "type": "string"
          },
          "value": {
            "description": "Output only. Integer value of the metric point.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "GetBusinessMetricPointResponse",
        "type": "object"
      },
      "v1GetBusinessMetricRequest": {
        "description": "Request to retrieve metric points for a business, filtered by label and date range.",
        "properties": {
          "businessId": {
            "title": "Required. Business ID (Account ID). Format: AG-XXXXXXXX",
            "type": "string"
          },
          "cursor": {
            "description": "Optional. Pagination cursor from previous response. Leave empty for initial request.",
            "type": "string"
          },
          "dateRange": {
            "$ref": "#/components/schemas/v1DateRange"
          },
          "label": {
            "description": "Required. Label identifying the metric type. Must match the label used when pushing data.",
            "type": "string"
          },
          "pageSize": {
            "description": "Optional. Maximum number of points to return per page.",
            "format": "int64",
            "type": "string"
          }
        },
        "required": [
          "businessId",
          "label",
          "dateRange"
        ],
        "title": "GetBusinessMetricRequest",
        "type": "object"
      },
      "v1GetBusinessMetricResponse": {
        "description": "Response containing paginated metric points for a business.",
        "properties": {
          "cursor": {
            "description": "Output only. Pagination cursor for next page. Empty if no more results.",
            "readOnly": true,
            "type": "string"
          },
          "metric": {
            "$ref": "#/components/schemas/v1BusinessMetric"
          }
        },
        "title": "GetBusinessMetricResponse",
        "type": "object"
      },
      "v1Point": {
        "description": "A single measurement or event at a specific time. Points with the same aggregation_key are grouped together.",
        "properties": {
          "aggregationKey": {
            "title": "Required. Tag used to group points for aggregation. Example: \"web\", \"mobile\", \"organic\"",
            "type": "string"
          },
          "dateHappened": {
            "format": "date-time",
            "title": "Required. When the measurement occurred. Format: YYYY-MM-DDTHH:MM:SSZ",
            "type": "string"
          },
          "id": {
            "description": "Output only. Unique identifier assigned by the system. Leave empty when creating new points.",
            "readOnly": true,
            "type": "string"
          },
          "intval": {
            "format": "int64",
            "title": "Optional. Integer value (counts, metrics, etc.)",
            "type": "string"
          },
          "strval": {
            "title": "Optional. String value (coming soon)",
            "type": "string"
          }
        },
        "required": [
          "dateHappened",
          "aggregationKey"
        ],
        "title": "Point",
        "type": "object"
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://sso-api-prod.apigateway.co/oauth2/auth",
            "scopes": {
              "business": "Allows the application to manage your business profiles",
              "business.metrics": "Allows the application to manage business metrics",
              "business:read": "Allows the application view-only access to your business profiles"
            },
            "tokenUrl": "https://sso-api-prod.apigateway.co/oauth2/token"
          }
        },
        "type": "oauth2"
      }
    }
  },
  "info": {
    "title": "Vanalytics",
    "version": "0.5.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/v1/business-metrics": {
      "post": {
        "description": "Submit one or more data points grouped by aggregation_key. Points with the same\naggregation_key will be aggregated together when building report cards.\n\n**Limitations:**\n- Only integer values (intval) are currently supported; strval support coming soon\n- For fractions: submit numerator and denominator as separate points with different aggregation keys\n- For decimals: submit as integers (multiply by 10 or 100) and note in submission\n\n**Date Format:** YYYY-MM-DDTHH:MM:SSZ (e.g., \"2020-02-05T15:04:05Z\")",
        "operationId": "VAnalytics_PushBusinessMetric",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1BusinessMetric"
              }
            }
          },
          "description": "A business identifier, label, and one or more data points for analytics reporting.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business",
              "business.metrics"
            ]
          }
        ],
        "summary": "Push Business Metric",
        "tags": [
          "VAnalytics"
        ]
      }
    },
    "/v1/business-metrics/delete": {
      "post": {
        "description": "The point is marked as deleted but not permanently removed. Returns 404 if already deleted\nor does not exist.",
        "operationId": "VAnalytics_DeleteBusinessMetric",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1DeleteBusinessMetricRequest"
              }
            }
          },
          "description": "Request to soft delete a metric point by its unique identifier.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business",
              "business.metrics"
            ]
          }
        ],
        "summary": "Delete Business Metric",
        "tags": [
          "VAnalytics"
        ]
      }
    },
    "/v1/business-metrics/delete-multi": {
      "post": {
        "description": "Each point is processed individually. The response includes successfully deleted points\n(no error field) and failed deletions with error details. Error code 1 indicates the\npoint does not exist or is already deleted.",
        "operationId": "VAnalytics_DeleteMultiBusinessMetrics",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1DeleteMultiBusinessMetricsRequest"
              }
            }
          },
          "description": "Request to soft delete multiple metric points in a single call.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1DeleteMultiBusinessMetricsResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business",
              "business.metrics"
            ]
          }
        ],
        "summary": "Delete Multiple Business Metrics",
        "tags": [
          "VAnalytics"
        ]
      }
    },
    "/v1/business-metrics/get": {
      "post": {
        "description": "Returns paginated results. Use the cursor from the response to retrieve additional pages.\nLeave cursor empty for the initial request.",
        "operationId": "VAnalytics_GetBusinessMetric",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetBusinessMetricRequest"
              }
            }
          },
          "description": "Request to retrieve metric points for a business, filtered by label and date range.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetBusinessMetricResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business",
              "business:read",
              "business.metrics"
            ]
          }
        ],
        "summary": "Get Business Metric",
        "tags": [
          "VAnalytics"
        ]
      }
    },
    "/v1/business-metrics/point/get": {
      "post": {
        "description": "Returns complete details including source, business_id, label, value, timestamps,\naggregation_key, and deletion status.",
        "operationId": "VAnalytics_GetBusinessMetricPoint",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetBusinessMetricPointRequest"
              }
            }
          },
          "description": "Request to retrieve a single metric point by its unique identifier.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetBusinessMetricPointResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business",
              "business:read",
              "business.metrics"
            ]
          }
        ],
        "summary": "Get Business Metric Point",
        "tags": [
          "VAnalytics"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Production",
      "url": "https://prod.apigateway.co/grpc"
    }
  ],
  "tags": [
    {
      "name": "VAnalytics"
    }
  ]
}