Verida AI Docs
  • Welcome
  • Getting Started
    • How it works
    • Developer Console
    • Get an API key
    • Authentication
    • Scopes
    • API Requests
    • Connectors
      • Build a Connector
    • Example Apps
  • Integrations
    • PersonalAgentKit
    • LangGraph
    • NEAR Protocol
    • Nillion Network
  • Data APIs
    • Overview
    • Data Types
    • API Endpoints
      • Queries
      • Search
      • AI Prompts
      • Actions
      • Other Endpoints
    • API Performance
    • Data examples
    • API Reference
  • Resources
    • Tutorials
      • Accessing User Data (Telegram)
    • Learn
      • Anatomy of an AI Agent
      • Dynamic Loading of Data for Realtime AI
      • Data Privacy Issues
      • Web3 & DePIN solves AI's privacy problems
      • Privacy Preserving AI Tech Stack
      • Confidential Compute Litepaper
    • AI Use Cases
    • Verida Vault
    • Privacy & Security
    • Pricing
    • Grants
    • Support
Powered by GitBook
On this page
  • Getting started
  • Making an API requests
  • Fetching Telegram Data
  • List the user's Telegram groups
  • List the user's Telegram messages
  • Counting messages or groups
  • User information
Export as PDF
  1. Resources
  2. Tutorials

Accessing User Data (Telegram)

PreviousTutorialsNextLearn

Last updated 2 months ago

This tutorial will walk through how to use Verida API's to access user data, with a focus on accessing Telegram data.

Getting started

If you haven't already, register a Verida Account, sign into the Developer Console and obtain an Auth token so you can make API requests.

Making an API requests

Once you have an auth token, you must include it in your API requests.

Here are some examples of API requests to the AI agent endpoint.

Command line (via curl):

curl -X POST -H "Authorization: Bearer <authToken>" "https://api.verida.ai/api/rest/v1/llm/agent" \
  -H "Content-Type: application/json" \
  -d '{}'

Node.js:

const axios = require('axios');

axios({
  method: 'POST',
  url: 'https://api.verida.ai/api/rest/v1/llm/agent',
  data: {},
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <authToken>'
  }
})
.then(res => {
  console.log(res.data)
})
.catch(err => {
  console.error(err)
})

Useful resources:

Fetching Telegram Data

When a user connects their Telegram account, their groups and messages are syncronized and the data is normalized into common data types. See Data Types to learn more.

Telegram populates two data schemas:

List the user's Telegram groups

Let's start with an example to fetch all the Telegram chat groups a user is in. We need to make an API request to the /ds/queryendpoint (https://api.verida.ai/api/rest/v1/ds/query/).

Node.js example:

const axios = require('axios');

const schemaUrl = 'https://common.schemas.verida.io/social/chat/group/v0.1.0/schema.json';
const schemaUrlEncoded = bvoa(schemaUrl);

axios({
  method: 'POST',
  url: `https://api.verida.ai/api/rest/v1/ds/query/${schemaUrlEncoded}`,
  data: {
  "options": {
    "sort": [
      {
        "_id": "desc"
      }
    ],
    "limit": 20
  }
},
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <authToken>'
  }
})
.then(res => {
  console.log(res.data)
})
.catch(err => {
  console.error(err)
})

List the user's Telegram messages

Let's now fetch all of a user's Telegram messages. Instead of querying the Chat Group datastore, we need to query the Chat Message datastore.

We also want to fetch only telegram messages, so apply a filter:

const axios = require('axios');

const schemaUrl = 'https://common.schemas.verida.io/social/chat/message/v0.1.0/schema.json';
const schemaUrlEncoded = bvoa(schemaUrl);

axios({
  method: 'POST',
  url: `https://api.verida.ai/api/rest/v1/ds/query/${schemaUrlEncoded}`,
  data: {
  "query": {
    "sourceApplication": "https://telegram.com"
  },
  "options": {
    "sort": [
      {
        "_id": "desc"
      }
    ],
    "limit": 20
  }
},
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <authToken>'
  }
})
.then(res => {
  console.log(res.data)
})
.catch(err => {
  console.error(err)
})

We can update the queryto restrict to only include results from:

  • A particular group

  • Messages sent by me

  • Messages sent after Jan 1st 2025

{
    "sourceApplication": "https://telegram.com",
    "groupId": "telegram-456049390--579961374",
    "type": "send",
    "sentAt": {
        "$gte": "2025-01-01"
    }
}

Counting messages or groups

You may want to make requests such as:

  1. How many messages sent by a user?

  2. How many groups is a user part of?

It is possible to use the /query API endpoint and loop through all the pages of data to count, but that is highly inefficient.

This functionality will be coming very shortly with a new /count endpoint.

User information

You may want to learn more about a user's profile on Telegram, for example:

  1. Is the account verified?

  2. Phone number

  3. Username

  4. Profile pic

This data is currently syncronized, but not available via the API.

This functionality will be coming very shortly with a new /profile endpoint

Make example requests with the

Social Chat Group ()

Social Chat Message ()

We need to query these schemas using the API endpoint.

This endpoint takes a schema, in our case we want the social chat group schema (), however we don't send the actual schema URL, we base64 encoded it.

.

.

Developer Console Sandbox
API requests documentation
Overview of all API endpoints
API Reference Documentation
view data schema
view data schema
https://common.schemas.verida.io/social/chat/group/v0.1.0/schema.json
4. Query a Datastore
View the example JSON response of a chat group
View the example JSON response for a chat message