openapi: 3.0.1 info: title: Propel GraphQL API description: HTTP modeling of the Propel customer-facing analytics platform. Propel exposes a single GraphQL endpoint (POST /graphql) for both its Query APIs (Counter, Time Series, Leaderboard analytics over Data Pools) and its Admin APIs (Data Sources, Data Pools, Metrics, Applications, Policies), plus an OAuth2 client-credentials token endpoint that issues the Bearer access tokens used to call the GraphQL API. termsOfService: https://www.propeldata.com/legal/terms contact: name: Propel Support url: https://www.propeldata.com/docs version: '1.0' servers: - url: https://api.us-east-2.propeldata.com description: Propel GraphQL API (us-east-2 region) - url: https://auth.us-east-2.propeldata.com description: Propel OAuth2 token service (us-east-2 region) tags: - name: GraphQL paths: /graphql: post: operationId: postGraphql tags: - GraphQL summary: Execute a GraphQL query or mutation. description: Single GraphQL-over-HTTP endpoint. Send a JSON body containing a `query` string and optional `variables`. Used for Metric queries (counter, timeSeries, leaderboard) and Admin operations (Data Sources, Data Pools, Metrics, Applications, Policies). Requires a Bearer access token from /oauth2/token. servers: - url: https://api.us-east-2.propeldata.com security: - bearerAuth: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GraphQLRequest' examples: counter: summary: Counter metric query value: query: 'query Counter($input: CounterInput!) { counter(input: $input) { value } }' variables: input: metricName: total_sales timeRange: relative: LAST_N_DAYS n: 30 timeSeries: summary: Time Series metric query value: query: 'query TimeSeries($input: TimeSeriesInput!) { timeSeries(input: $input) { labels values } }' variables: input: metricName: total_sales granularity: DAY timeRange: relative: LAST_N_DAYS n: 90 leaderboard: summary: Leaderboard metric query value: query: 'query Leaderboard($input: LeaderboardInput!) { leaderboard(input: $input) { headers rows } }' variables: input: metricName: total_sales dimensions: - columnName: salesperson sort: DESC rowLimit: 10 timeRange: relative: LAST_N_DAYS n: 30 responses: '200': description: GraphQL response. Note that GraphQL returns HTTP 200 even when the `errors` array is populated. content: application/json: schema: $ref: '#/components/schemas/GraphQLResponse' '401': description: Missing or invalid Bearer access token. components: schemas: GraphQLRequest: type: object required: - query properties: query: type: string description: The GraphQL query or mutation document. operationName: type: string variables: type: object additionalProperties: true GraphQLResponse: type: object properties: data: type: object additionalProperties: true nullable: true errors: type: array items: type: object properties: message: type: string path: type: array items: type: string extensions: type: object additionalProperties: true securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: OAuth2 client-credentials access token obtained from POST https://auth.us-east-2.propeldata.com/oauth2/token.