NAV
shell python

Introduction

Welcome to the Pyrra Search API! You can use our API to access various Pyrra Search API endpoints, which can give you targeted results from our database.

Our API accepts requests in any programming language provided the appropriate headers and parameters are sent with the request. You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs up top.

The API does impose rate limits to protect performance and availability for all users, and these limitations are subject to change without notice. Note that these rate limits are negotiable. By default:

  1. Every endpoint may be queried up to 5 times every 60 seconds
  2. The limit (in terms of rows of data) that can be requested at one time is 1000, effectively meaning the amount of data is limited to 5000 rows per minute

Trial customers of the API, or users with an R&D key, are subject to stricter limits. The rate limits associated with these customers are as follows:

  1. Every endpoint may be queried up to 3 times every 60 seconds
  2. The limit (in terms of rows of data) that can be requested at one time is 100, effectively meaning the amount of data is limited to 300 rows per minute

Each endpoint returns multiple fields, including status codes, record counts, and other metadata. The results of a query will always be contained in the "records" field of the response.

Authentication

To authorize, you just send your API key in your request headers. You'll receive your API key from Pyrra once you've subscribed. For security purposes, you can't access the key elsewhere and will need to email Pyrra's help line for a new key should you lose it.

import requests

response = requests.get("https://api.pyrratech.com/v1/{TARGET_ENDPOINT}", headers={
  "pyrra-api-key": "API_KEY"
})
# With shell, you can just pass the correct header with each request
curl "https://api.pyrratech.com/v1/{TARGET_ENDPOINT}" \
  -H "pyrra-api-key: API_KEY"

Pyrra uses API keys to allow access to the API and expects for the API key to be included in all API requests to the server in a header that looks like the following:

pyrra-api-key: API_KEY

Admin Endpoints

(NEW) Check API Usage

import requests

response = requests.get("https://api.pyrratech.com/v1/api-usage-request-count?startDate=2023-10-15T21:53:36Z&endDate=2023-11-14T21:53:21Z", headers={
  "pyrra-api-key": "API_KEY"
})
curl "https://api.pyrratech.com/v1/api-usage-request-count?startDate={start_date}&endDate={end_date}" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

[
  {
    "endPoint": "/v1/list-platforms", 
    "requestCount": 7
  }, 
  {
    "endPoint": "/v1/preview", 
    "requestCount": 107
  }, 
  {
    "endPoint": "/v1/search", 
    "requestCount": 338
  }, 
  {
    "endPoint": "/v1/search-users", 
    "requestCount": 22
  }
]

This endpoint allows users access their usage, per endpoint, for a specified timeframe. Note that, for usage based contracts, these are the numbers that Pyrra uses for billing purposes.

HTTP Request

GET https://api.pyrratech.com/v1/api-usage-request-count?startDate={START_DATE}&endDate={END_DATE}

URL Parameters

Parameter Description
startDate An ISO8601 UTC string indicating the earliest date after which you want limit results
endDate An ISO8601 UTC string indicating the latest date before which you want to limit results

(NEW) Request Telegram channels

import requests

response = requests.get("https://api.pyrratech.com/v1/request-telegram-channel?channelName={CHANNEL_NAME}", headers={
  "pyrra-api-key": "API_KEY"
})
curl "https://api.pyrratech.com/v1/request-telegram-channel?channelName=ResistorNewswire" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

{
  "status": "success"
}

This endpoint allows users to submit requests for the addition of a specific Telegram channel to our collection queue. Note that these requests are reviewed and the addition of a channel is not automatic.

HTTP Request

GET https://api.pyrratech.com/v1/request-telegram-channel?channelName={CHANNEL_NAME}

URL Parameters

Parameter Description
channelName REQUIRED The name of the channel that you would like added to Pyrra's collection queue

Get Available Platforms

import requests

response = requests.get("https://api.pyrratech.com/v1/list-platforms", headers={
  "pyrra-api-key": "API_KEY"
})
curl "https://api.pyrratech.com/v1/list-platforms" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

[
  {
    "name": "4chan",
    "current": true,
  },
  {
    "name": "Truth Social",
    "current": true,
  },
  {
    "name": "Dissenter",
    "current": false
  }
]

This endpoint retrieves all platforms currently available via Pyrra's API.

HTTP Request

GET "https://api.pyrratech.com/v1/list-platforms"

Query Parameters (all optional)

Parameter Default Description
current false If set to true, the result will only include platforms with ongoing collection.

Search Endpoints

import requests

response = requests.get("https://api.pyrratech.com/v1/search?searchTerm=washington&enriched=true&includeRaw=true", headers={
  "pyrra-api-key": "API_KEY"
})

print(response.json()["results"])
curl "https://api.pyrratech.com/v1/search?searchTerm=washington&enriched=true&includeRaw=true" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

[
{
    "id": "ga-111410069563043411",
    "username": "Thisnametooktolong",
    "user_id": "1217616",
    "text": "@AlienTom  HAHAHAHHAHA.  Before 911, I used a radioshack analog cell phone all the time in my plane at 8,000 or 9000 feet. It had a max power of 3 watts. Today cell phones only power at about 250 milliwatts, and work just fine.  Several people made phone calls from the FLight 93 plane.  The idea those planes loaded with people and cargo greased those planes to 40,000 feet is bullshit.  They also do not publish the flight levels of post-hijacking 911 planes.  Magazines etc make all kinds of claims. Watching the 911 Wild cat video, you do not see a plane diving in. It just cruises along at about 700-1000 ft.     I can also see you are not a vet. It takes about 10 minutes to get a pre-checked nuclear B52 bomber off the ground. I would say Israel getting the tanks rolling in 5 hrs would be amazingly fast on a Saturday. The problem is Israel, keeps allowing the F tard Muslims to govern themselves with no troops inside Gaza.  Where does Gaza get the money from? Obama and Biden. Every single time the US gives Iran money, Israeel starts the stopwatch.  Guess what FJB did in September 2023? He gave Iran 6 billion dollars for 5 Hostages.  I highly suggest you Walmart shoppers avoid busy times. One of those places has a good shot at going poof in the next year. It's what sandniggers do. You also couldn't catch me dead on or in the Lincoln Tunnel or Washington bridge",
    "timestamp": "2023-11-14 17:25:50",
    "url": "https://gab.com/Thisnametooktolong/posts/111410069563043411",
    "conversation": "ga-111409772046873953",
    "media": [],
    "mentions": [
        "alientom"
    ],
    "platform": "Gab",
    "hashtags": [],
    "language_code": "en",
    "link_references": [],
    "record_type": "post",
    "subforum": {
        "subforum_id": "40",
        "subforum_name": "Libertarians of Gab"
    },
    "score_positive": 0.0016436213627457619,
    "score_negative": 0.9983564019203186,
    "score_offensive": 0.42866018414497375,
    "score_hateful": 0.756874144077301,
    "score_violent": 0.22298574447631836,
    "date_references": [],
    "location_references": [
        {
            "word": "State of Israel",
            "country_predicted": "ISR",
            "country_conf": 1
        },
        {
            "word": "Gaza",
            "country_predicted": "PSE",
            "country_conf": 0.9999971389770508
        },
        {
            "word": "United States",
            "country_predicted": "USA",
            "country_conf": 1
        },
        {
            "word": "Islamic Republic of Iran",
            "country_predicted": "IRN",
            "country_conf": 0.9999985694885254
        },
        {
            "word": "Washington",
            "country_predicted": "USA",
            "country_conf": 0.9999998807907104
        }
    ],
    "entities": [
        {
            "entity_group": "LOC",
            "score": 0.9998216032981873,
            "word": "Israel"
        },
        {
            "entity_group": "MISC",
            "score": 0.9783456921577454,
            "word": "Muslims"
        },
        {
            "entity_group": "LOC",
            "score": 0.9997766613960266,
            "word": "Gaza"
        },
        {
            "entity_group": "PER",
            "score": 0.9912506341934204,
            "word": "Obama"
        },
        {
            "entity_group": "PER",
            "score": 0.9630134701728821,
            "word": "Biden"
        },
        {
            "entity_group": "LOC",
            "score": 0.9994662404060364,
            "word": "US"
        },
        {
            "entity_group": "LOC",
            "score": 0.9997840523719788,
            "word": "Iran"
        },
        {
            "entity_group": "LOC",
            "score": 0.9997302889823914,
            "word": "Iran"
        },
        {
            "entity_group": "LOC",
            "score": 0.9949215054512024,
            "word": "Lincoln Tunnel"
        },
        {
            "entity_group": "LOC",
            "score": 0.9995162487030029,
            "word": "Washington"
        }
    ],
    "translation": null,
    "engagement_rate": 0,
    "raw": {
        "id": "111410069563043411",
        "created_at": "2023-11-14T17:25:50.903Z",
        "revised_at": null,
        "in_reply_to_id": "111409772046873953",
        "in_reply_to_account_id": "1965028",
        "sensitive": false,
        "spoiler_text": "",
        "visibility": "public",
        "language": "en",
        "uri": "/Thisnametooktolong/posts/111410069563043411",
        "url": "https://gab.com/Thisnametooktolong/posts/111410069563043411",
        "direct_replies_count": 0,
        "replies_count": 0,
        "reblogs_count": 0,
        "pinnable": false,
        "pinnable_by_group": true,
        "favourites_count": 0,
        "quote_of_id": null,
        "expires_at": null,
        "has_quote": false,
        "bookmark_collection_id": null,
        "quotes_count": 0,
        "reaction_id": null,
        "reactions_counts": {},
        "is_reply": true,
        "account_id": "1217616",
        "media_attachment_ids": [],
        "conversation_id": "11063738189412068",
        "analytics": null,
        "reblog_of_id": null,
        "group_id": "40",
        "status_context_id": null,
        "preview_card_id": null,
        "poll_id": null,
        "content": "<a href=\"https://gab.com/AlienTom\" class=\"mention\" rel=\"nofollow noopener\" target=\"_blank\">@AlienTom</a>  HAHAHAHHAHA.  Before 911, I used a radioshack analog cell phone all the time in my plane at 8,000 or 9000 feet. It had a max power of 3 watts. Today cell phones only power at about 250 milliwatts, and work just fine.  Several people made phone calls from the FLight 93 plane.  The idea those planes loaded with people and cargo greased those planes to 40,000 feet is bullshit.  They also do not publish the flight levels of post-hijacking 911 planes.  Magazines etc make all kinds of claims. Watching the 911 Wild cat video, you do not see a plane diving in. It just cruises along at about 700-1000 ft. <br />    I can also see you are not a vet. It takes about 10 minutes to get a pre-checked nuclear B52 bomber off the ground. I would say Israel getting the tanks rolling in 5 hrs would be amazingly fast on a Saturday. The problem is Israel, keeps allowing the F tard Muslims to govern themselves with no troops inside Gaza.  Where does Gaza get the money from? Obama and Biden. Every single time the US gives Iran money, Israeel starts the stopwatch.  Guess what FJB did in September 2023? He gave Iran 6 billion dollars for 5 Hostages.  I highly suggest you Walmart shoppers avoid busy times. One of those places has a good shot at going poof in the next year. It's what sandniggers do. You also couldn't catch me dead on or in the Lincoln Tunnel or Washington bridge",
        "media_attachments": [],
        "reblog": null,
        "quote": null,
        "account": {
            "id": "1217616",
            "username": "Thisnametooktolong",
            "acct": "Thisnametooktolong",
            "display_name": "",
            "locked": false,
            "created_at": "2019-07-31T13:13:40.180Z",
            "note": "<p>I was born more than a 1/2 century ago,  Date women less than 1/2 my age (over 25). I would like to thank all the empowered single Feminazi mothers for making that possible. I am convinced, the entire world has lost its mind,  The U.S.A  transformation to a totalitarian socialist government with the election of F.D.R.  Only a small percentage of people are now noticing their vote does not count, so they bitch on social media. When they should take action.</p>",
            "url": "https://gab.com/Thisnametooktolong",
            "avatar": "https://gab.com/avatars/original/missing.png",
            "avatar_static": "https://gab.com/avatars/original/missing.png",
            "avatar_small": "https://gab.com/cdn-cgi/image/width=40,fit=scale-down/avatars/original/missing.png",
            "avatar_static_small": "https://gab.com/cdn-cgi/image/width=40,fit=scale-down/avatars/original/missing.png",
            "header": "https://gab.com/headers/original/missing.png",
            "header_static": "https://gab.com/headers/original/missing.png",
            "is_spam": false,
            "followers_count": 111,
            "following_count": 16,
            "statuses_count": 14161,
            "is_pro": false,
            "is_verified": false,
            "is_donor": false,
            "is_investor": false,
            "show_pro_life": false,
            "is_parody": null,
            "emojis": [],
            "fields": []
        },
        "group": {
            "id": "40",
            "title": "Libertarians of Gab",
            "description": "A group for libertarians to discuss ideas and grow our community!Rules1. Stay on topic: please make sure things stay relevant to growing libertarianism or debating what we disagree on.2. Be kind: please keep all debates and discussions civil.3. Do not SPAM!!! ",
            "description_html": "<p>A group for libertarians to discuss ideas and grow our community!Rules1. Stay on topic: please make sure things stay relevant to growing libertarianism or debating what we disagree on.2. Be kind: please keep all debates and discussions civil.3. Do not SPAM!!! </p>",
            "cover_image_url": "https://gab.com/media/user/group-5aef13215d79e.jpeg",
            "cover_image_thumbnail_url": "https://gab.com/media/user/group-5aef13215d79e.jpeg",
            "cover_image_medium_url": "https://gab.com/media/user/group-5aef13215d79e.jpeg",
            "is_archived": false,
            "member_count": 203369,
            "is_verified": false,
            "is_moderated": true,
            "created_at": "2018-05-05T17:51:28.000Z",
            "is_private": false,
            "is_visible": true,
            "slug": null,
            "url": "https://gab.com/groups/40",
            "group_category": {
                "id": 3,
                "created_at": "2020-08-08T15:47:39.761Z",
                "updated_at": "2020-08-08T15:47:39.761Z",
                "text": "Politics"
            },
            "password": null,
            "has_password": false,
            "is_paused": false,
            "theme_color": null,
            "rules": null,
            "is_admins_visible": false,
            "is_members_visible": false,
            "is_media_visible": true,
            "is_links_visible": false,
            "allow_quotes": false
        },
        "status_context": null,
        "mentions": [
            {
                "id": "1965028",
                "username": "AlienTom",
                "url": "https://gab.com/AlienTom",
                "acct": "AlienTom"
            }
        ],
        "tags": [],
        "emojis": [],
        "card": null,
        "poll": null
    }
  } 
]

This endpoint retrieves posts that match specific search criteria.

HTTP Request

GET https://api.pyrratech.com/v1/search?searchTerm={SEARCH_TERM}&platform={PLATFORM},{PLATFORM}&username={USERNAME},{USERNAME}

URL Parameters (all optional)

Parameter Description
limit The number of records to return, defaults to 1000.
searchTerm The searchTerm that each returned post should contain. A searchTerm must be at least 2 characters long. More detail on what is supported in this parameter below.
platform The platform (or platforms, comma delimited) to which you want to limit results. Platform names are case-sensitive.
(NEW) excludePlatform The platform (or platforms, comma delimited) which you want to ignore. Platform names are case-sensitive.
username The username (or usernames, comma delimited) to which you want to limit results. Usernames are not case-sensitive.
startDate An ISO8601 UTC string indicating the earliest date after which you want limit results.
endDate An ISO8601 UTC string indicating the latest date before which you want to limit results.
(NEW) subforumName The source platform convention (subreddit, channel, board, etc) to which you want to limit results.
(NEW) conversation The ID value, assigned by Pyrra, that represents the context (e.g. thread, video, or comment chain) related to a specific post.
(NEW) includeLanguage The language code (or language codes, comma delimited) representing the languages to which you want to limit results.
(NEW) excludeLanguage The language code (or language codes, comma delimited) representing the languages you want to ignore.
(NEW) scoreSentimentPositive The minimum positive sentiment score - between 0 and 1 - to which you want to limit your search results.
(NEW) scoreSentimentNegative The minimum negative sentiment score - between 0 and 1 - to which you want to limit your search results.
(NEW) scoreOffensive The minimum offensive language score - between 0 and 1 - to which you want to limit your search results.
(NEW) scoreHateful The minimum hate speech score - between 0 and 1 - to which you want to limit your search results.
(NEW) scoreViolent The minimum violent language score - between 0 and 1 - to which you want to limit your search results.
sanitized A boolean (True/False) indicating whether or not to hide PII (username and user_id). Note that if this setting is True, the includeRaw parameter will automatically be set to False.
enriched (Standard) A boolean (True/False) indicating whether or not to include model outputs and other analytics.
includeRaw (Premium) A boolean (True/False) indicating whether or not to include the raw data associated with each result. This field varies from platform to platform and is not standardized, but structured exactly as it is received from the target platform.

Pyrra's /search endpoint supports the following operators/methods in a searchTerm. A maximum of six (6) operators (#1, #2, #3) can be used in a single query.

  1. Wildcards (both for a single character ? and indefinite *) with two conditions: we do not support leading wildcards (e.g. *emo will be rejected) and we only support trailing wildcards if they are preceded by at least 3 characters (e.g. dem* is fine but de* is not and will be rejected). A single query can contain no more than three (3) wildcard operators.

  2. Fuzzy queries (~) - e.g. demo~. A single query can contain no more than three (3) fuzzy operators.

  3. Proximity queries - e.g. "primary election"~5. A single query can contain no more than three (3) operators and the maximum distance between terms that can be searched is six (6).

  4. Boolean syntax AND OR NOT and grouped queries - e.g. ((primary AND election) OR (democratic AND candidate) OR biden) AND NOT trump

  5. Exact match or phrase queries - e.g. "lets go biden" - are supported by wrapping the searchTerm in double quotes.

Pagination

To support pagination, Pyrra returns results in descending order based on the timestamp of the post, and enables users to define the endDate of their query. With this in mind, users can simply step backwards thru their search results, updating the endDate to reflect the oldest timestamp of the previous API response. For example, if an initial request made to https://api.pyrratech.com/v1/search?searchTerm=trump&limit=100 returns 100 results, the oldest of which was posted at 2023-11-14T21:27:09Z, the user can then make a second request to https://api.pyrratech.com/v1/search?searchTerm=trump&limit=100&endDate=2023-11-14T21:27:09Z to access the next 100 results, and so on.

(NEW) Preview

import requests

response = requests.get("https://api.pyrratech.com/v1/preview?searchTerm=washington", headers={
  "pyrra-api-key": "API_KEY"
})

print(response.json()["results"])
curl "https://api.pyrratech.com/v1/preview?searchTerm=washington" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

{
    "totalCount": 6575,
    "platformDistribution": [
        {
            "key": "Gab",
            "doc_count": 2342
        },
        {
            "key": "Telegram",
            "doc_count": 2214
        },
        {
            "key": "VKontakte",
            "doc_count": 1664
        },
        {
            "key": "Rumble",
            "doc_count": 355
        }
    ],
    "records": [
        {
            "id": "pos-2YBQcEEL6pCp3vuZ1KoCQrn4KjS",
            "username": "reuters",
            "user_id": "9a80dbb2-8ee1-4626-adfc-6b4179fa8436",
            "text": "WASHINGTON (Reuters) - The U.S. Senate Rules Committee voted along party lines on Tuesday to advance legislation that would clear the way for hundreds of military promotions that one Republican has been delaying to protest Defense Department abortion policy. The panel voted 9-7 to",
            "timestamp": "2023-11-14 21:16:09",
            "url": "https://post.news/@/reuters/2YBQcEEL6pCp3vuZ1KoCQrn4KjS",
            "conversation": "pos-2YBQcEEL6pCp3vuZ1KoCQrn4KjS",
            "media": [],
            "mentions": [],
            "platform": "Post",
            "hashtags": [],
            "language_code": "en",
            "link_references": [],
            "record_type": "post",
            "subforum": {
                "subforum_id": null,
                "subforum_name": null
            },
            "translation": null
        },
        {
            "id": "fc-pol-448717754-448718259",
            "username": "Anonymous",
            "user_id": null,
            "text": ">>448717981 Washington Dc is like 60% jewish who are \"professional activists\" and the rest are their golems.",
            "timestamp": "2023-11-14 20:57:39",
            "url": "https://boards.4chan.org/pol/thread/448717754#p448718259",
            "conversation": "fc-pol-448717754",
            "media": [],
            "mentions": [],
            "platform": "4chan",
            "hashtags": [],
            "language_code": "en",
            "link_references": [],
            "record_type": "reply",
            "subforum": {
                "subforum_id": null,
                "subforum_name": "pol"
            },
            "translation": null
        }
    ]
}

This endpoint retrieves statistics related to specific search criteria, including the total count of matches and the distribution of these matches across platforms, as well as a slice of the matching search results. The format (and available parameters) of the request are identical to the /search endpoint, except that the number of posts returned is always ten (10).

HTTP Request

GET https://api.pyrratech.com/v1/preview?searchTerm={SEARCH_TERM}&platform={PLATFORM},{PLATFORM}&username={USERNAME},{USERNAME}

URL Parameters (all optional)

Parameter Description
searchTerm The searchTerm that each returned post should contain. A searchTerm must be at least 2 characters long. More detail on what is supported in this parameter below.
platform The platform (or platforms, comma delimited) to which you want to limit results. Platform names are case-sensitive.
excludePlatform The platform (or platforms, comma delimited) which you want to ignore. Platform names are case-sensitive.
username The username (or usernames, comma delimited) to which you want to limit results. Usernames are not case-sensitive.
startDate An ISO8601 UTC string indicating the earliest date after which you want limit results.
endDate An ISO8601 UTC string indicating the latest date before which you want to limit results.
subforumName The source platform convention (subreddit, channel, board, etc) to which you want to limit results.
conversation The ID value, assigned by Pyrra, that represents the context (e.g. thread, video, or comment chain) related to a specific post.
includeLanguage The language code (or language codes, comma delimited) representing the languages to which you want to limit results.
excludeLanguage The language code (or language codes, comma delimited) representing the languages you want to ignore.
scoreSentimentPositive The minimum positive sentiment score - between 0 and 1 - to which you want to limit your search results.
scoreSentimentNegative The minimum negative sentiment score - between 0 and 1 - to which you want to limit your search results.
scoreOffensive The minimum offensive language score - between 0 and 1 - to which you want to limit your search results.
scoreHateful The minimum hate speech score - between 0 and 1 - to which you want to limit your search results.
scoreViolent The minimum violent language score - between 0 and 1 - to which you want to limit your search results.
sanitized A boolean (True/False) indicating whether or not to hide PII (username and user_id). Note that if this setting is True, the includeRaw parameter will automatically be set to False.
enriched (Standard) A boolean (True/False) indicating whether or not to include model outputs and other analytics.
includeRaw (Premium) A boolean (True/False) indicating whether or not to include the raw data associated with each result. This field varies from platform to platform and is not standardized, but structured exactly as it is received from the target platform.

Pyrra's /preview endpoint supports the following operators/methods in a searchTerm. A maximum of six (6) operators (#1, #2, #3) can be used in a single query.

  1. Wildcards (both for a single character ? and indefinite *) with two conditions: we do not support leading wildcards (e.g. *emo will be rejected) and we only support trailing wildcards if they are preceded by at least 3 characters (e.g. dem* is fine but de* is not and will be rejected). A single query can contain no more than three (3) wildcard operators.

  2. Fuzzy queries (~) - e.g. demo~. A single query can contain no more than three (3) fuzzy operators.

  3. Proximity queries - e.g. "primary election"~5. A single query can contain no more than three (3) operators and the maximum distance between terms that can be searched is six (6).

  4. Boolean syntax AND OR NOT and grouped queries - e.g. ((primary AND election) OR (democratic AND candidate) OR biden) AND NOT trump

  5. Exact match or phrase queries - e.g. "lets go biden" - are supported by wrapping the searchTerm in double quotes.

import requests

response = requests.get("https://api.pyrratech.com/v1/search-users?platform=gab&username=bovinex", headers={
  "pyrra-api-key": "API_KEY"
})

print(response.json()["results"])
curl "https://api.pyrratech.com/v1/search-users?platform=gab&username=bovinex" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

[
  {
    "id": "262032",
    "username": "BovineX",
    "name": "Bovine X",
    "description": "&quot;The people are the government, administering it by their agents; they are the government, the sovereign power.&quot; \u2014 Andrew Jackson",
    "website": "",
    "statuses_count": 199329,
    "following_count": 12711,
    "followers_count": 13776,
    "created_date": 1504741724,
    "url": "https://gab.com/BovineX",
    "btc_address": "",
    "eth_wallet": "",
    "avatar": "https://gab.com/avatars/original/missing.png",
    "social_profiles": [],
    "location": "",
    "platform": "Gab"
  }
]

This endpoint retrieves standardized user data that match specific search criteria.

HTTP Request

GET https://api.pyrratech.com/v1/search-users?platform={PLATFORM}&username={USERNAME

URL Parameters

Parameter Description
username REQUIRED The username (or usernames, comma delimited) to which you want to limit your search results
platform OPTIONAL The platform (or platforms, comma delimited) to which you want to limit your search results

(NEW) Check Telegram Channel

import requests

response = requests.get("https://api.pyrratech.com/v1/check-telegram-channel?channelName=rybar", headers={
  "pyrra-api-key": "API_KEY"
})

print(response.json()["results"])
curl "https://api.pyrratech.com/v1/check-telegram-channel?channelName=rybar" \
  -H "pyrra-api-key: API_KEY"

The above command returns JSON structured like this:

[
  {
    "id": "1573543358",
    "name": "rybar",
    "active": true
  }
]

This endpoint checks Pyrra's collection queue to see if a specified Telegram channel is being actively monitored.

HTTP Request

GET https://api.pyrratech.com/v1/check-telegram-channel?channelName={CHANNEL_NAME}

URL Parameters

Parameter Description
channelName REQUIRED The name of the channel that you want to check against Pyrra's collection queue

Errors

The Pyrra API uses the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- The endpoint requested is hidden for administrators only.
404 Not Found -- The specified endpoint could not be found.
405 Method Not Allowed -- You tried to access an endpoint with an invalid method.
406 Not Acceptable -- You requested a format that isn't json.
410 Gone -- The endpoint requested has been removed from our servers.
418 I'm a teapot.
429 Too Many Requests -- You're making too many requests! Slow down!
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.