The Courvix Network API is being designed to serve as the backbone of data entry and retrieval for all current and future Courvix Network services & projects. This API serves not only the staff & developers of the network, but also offers public functionality for people who wish to interact with our network for their own applications & projects.
The API is a service in of itself, offering numerous endpoints that developers can integrate into their own projects. We will continue to improve the API and add new endpoints as time passes.
Current Version: v1.0.5
Note: None of the servers on the Courvix Network are currently implementing the /admin/attack API call, so list is empty.
Fetches recent attacks against the VPN servers
{
"name": "New York 2",
"ip_count": 3000,
"network_count": 93,
"ip_address": "198.251.81.136",
"attack_type": "[UDP (97.25%)]",
"mbps": 72.6,
"packets": 8844,
"spoofing": "Yes",
"timestamp": "1633905611"
}
This API call has limits to free users...
Takes a tcpdump/wireshark packet capture file of a DDoS incident and conducts analysis to determine characteristics of the attack
curl -X POST -H "Content-Type: multipart/form-data" -F [email protected] https://api.courvix.com/attack/analyze
import requests
import json
import sys
capture_file = open(sys.argv[1], 'rb')
try:
response = requests.post("https://api.courvix.com/attack/analyze", files={"capture": capture_file}).json()
print(response) # Print the entire response
print(response['attack_type']) # Print just the attack_type value
except Exception as e:
print(f'Exception occured {e}')
{
"code": 200,
"packet_count": 9918,
"ip_count": 2517,
"network_count": 71,
"biggest_sender": "212.103.84.243",
"biggest_target": "194.32.119.159",
"unique_srcports": 1,
"biggest_srcport": 3478,
"unique_dstports": 2,
"biggest_dstport": 48948,
"min_length": 72,
"max_length": 148,
"attack_type": "[UDP (99.18%)] [STUN Reflection (99.18%)]",
"spoofing": "No"
}
tcpdump inbound -i eth0 -n -s0 -c 10000 and ip -w capture.pcap
Return details about the requesting client's IP address
{
"code": 200,
"ip": "13.32.16.70",
"asn": 16509,
"organization": "Amazon.com",
"city": "London",
"region": "England",
"region_code": "ENG",
"country": "United Kingdom",
"timezone": "Europe/London"
}
13.32.16.70
Return the list of Courvix Network VPN servers
[
{
"name": "New York 1",
"url": "https://courvix.com/vpn/configs/NewYorkNFO.ovpn",
"flagurl": "https://www.countryflags.com/wp-content/uploads/united-states-of-america-flag-png-large",
"flagurl_small": "https://www.countryflags.io/us/flat/64.png",
"provider": "NFOServers.com",
"protection": "NFOServers.com",
"countrycode": "US",
"enabled": true,
"down": false
},
{
"name": "New York 2",
"url": "https://courvix.com/vpn/configs/NewYork2_BuyVM.ovpn",
"flagurl": "https://www.countryflags.com/wp-content/uploads/united-states-of-america-flag-png-large",
"flagurl_small": "https://www.countryflags.io/us/flat/64.png",
"provider": "BuyVM",
"protection": "Path Network",
"countrycode": "US",
"enabled": true,
"down": false
}
]
This API call has limits to free users...
Returns text detected in an uploaded image
curl -X POST -H "Content-Type: multipart/form-data" -F [email protected] https://api.courvix.com/image/text
import requests
import json
import sys
image = open(sys.argv[1], 'rb')
try:
response = requests.post("https://api.courvix.com/image/text", files={"image": image}).json()
print(response) # Print the entire response
except Exception as e:
print(f'Exception occured {e}')
{
"TextDetections": [
{
"DetectedText": "Courvix Network",
"Type": "LINE",
"Id": 0,
"Confidence": 100,
"Geometry": {
"BoundingBox": {
"Width": 0.8967432379722595,
"Height": 0.48267537355422974,
"Left": 0.05202958732843399,
"Top": 0.22379226982593536
},
"Polygon": [
{
"X": 0.05202958732843399,
"Y": 0.23383335769176483
},
{
"X": 0.9485483169555664,
"Y": 0.22379226982593536
},
{
"X": 0.9487727880477905,
"Y": 0.6964265704154968
},
{
"X": 0.052254099398851395,
"Y": 0.7064676880836487
}
]
}
},
{
"DetectedText": "Courvix",
"Type": "WORD",
"Id": 1,
"ParentId": 0,
"Confidence": 100,
"Geometry": {
"BoundingBox": {
"Width": 0.3995901644229889,
"Height": 0.46766167879104614,
"Left": 0.052254099398851395,
"Top": 0.23383083939552307
},
"Polygon": [
{
"X": 0.052254099398851395,
"Y": 0.23383083939552307
},
{
"X": 0.4518442749977112,
"Y": 0.23383083939552307
},
{
"X": 0.4518442749977112,
"Y": 0.7014925479888916
},
{
"X": 0.052254099398851395,
"Y": 0.7064676880836487
}
]
}
},
{
"DetectedText": "Network",
"Type": "WORD",
"Id": 2,
"ParentId": 0,
"Confidence": 100,
"Geometry": {
"BoundingBox": {
"Width": 0.45596975088119507,
"Height": 0.4626877009868622,
"Left": 0.49180328845977783,
"Top": 0.23383083939552307
},
"Polygon": [
{
"X": 0.49180328845977783,
"Y": 0.23383083939552307
},
{
"X": 0.9477459192276001,
"Y": 0.22885571420192719
},
{
"X": 0.9487704634666443,
"Y": 0.6915422677993774
},
{
"X": 0.49180328845977783,
"Y": 0.7014925479888916
}
]
}
}
],
"TextModelVersion": "3.0"
}
{
"TextDetections": [
{
"Confidence": number,
"DetectedText": "string",
"Geometry": {
"BoundingBox": {
"Height": number,
"Left": number,
"Top": number,
"Width": number
},
"Polygon": [
{
"X": number,
"Y": number
}
]
},
"Id": number,
"ParentId": number,
"Type": "string"
}
],
"TextModelVersion": "string"
}
This API call has limits to free users...
Detects faces in an image and analyzes characteristics
curl -X POST -H "Content-Type: multipart/form-data" -F [email protected] https://api.courvix.com/image/face
import requests
import json
import sys
image = open(sys.argv[1], 'rb')
try:
response = requests.post("https://api.courvix.com/image/face", files={"image": image}).json()
print(response) # Print the entire response
except Exception as e:
print(f'Exception occured {e}')
{
"FaceDetails": [
{
"BoundingBox": {
"Width": 0.2762305736541748,
"Height": 0.383755087852478,
"Left": 0.16169919073581696,
"Top": 0.15905112028121948
},
"AgeRange": {
"Low": 16,
"High": 31
},
"Smile": {
"Value": false,
"Confidence": 98.54898071289062
},
"Eyeglasses": {
"Value": false,
"Confidence": 99.5947494506836
},
"Sunglasses": {
"Value": false,
"Confidence": 99.81221008300781
},
"Gender": {
"Value": "Male",
"Confidence": 99.5248031616211
},
"Beard": {
"Value": false,
"Confidence": 75.38031005859375
},
"Mustache": {
"Value": false,
"Confidence": 96.6395034790039
},
"EyesOpen": {
"Value": true,
"Confidence": 98.10810089111328
},
"MouthOpen": {
"Value": false,
"Confidence": 82.09398651123047
},
"Emotions": [
{
"Type": "SAD",
"Confidence": 42.207122802734375
},
{
"Type": "CONFUSED",
"Confidence": 41.32870864868164
},
{
"Type": "CALM",
"Confidence": 8.930919647216797
},
{
"Type": "ANGRY",
"Confidence": 3.749586582183838
},
{
"Type": "FEAR",
"Confidence": 2.662080764770508
},
{
"Type": "SURPRISED",
"Confidence": 0.5720242857933044
},
{
"Type": "DISGUSTED",
"Confidence": 0.2967897653579712
},
{
"Type": "HAPPY",
"Confidence": 0.25276556611061096
}
],
"Landmarks": [
{
"Type": "eyeLeft",
"X": 0.25443094968795776,
"Y": 0.3268865942955017
},
{
"Type": "eyeRight",
"X": 0.3632013499736786,
"Y": 0.2881803810596466
},
{
"Type": "mouthLeft",
"X": 0.3080856204032898,
"Y": 0.46547815203666687
},
{
"Type": "mouthRight",
"X": 0.398539274930954,
"Y": 0.4325271546840668
},
{
"Type": "nose",
"X": 0.35918259620666504,
"Y": 0.37800267338752747
},
{
"Type": "leftEyeBrowLeft",
"X": 0.19369421899318695,
"Y": 0.3114825487136841
},
{
"Type": "leftEyeBrowRight",
"X": 0.23393043875694275,
"Y": 0.281032919883728
},
{
"Type": "leftEyeBrowUp",
"X": 0.27305522561073303,
"Y": 0.2762155532836914
},
{
"Type": "rightEyeBrowLeft",
"X": 0.3361811637878418,
"Y": 0.2543238401412964
},
{
"Type": "rightEyeBrowRight",
"X": 0.360992968082428,
"Y": 0.2367877960205078
},
{
"Type": "rightEyeBrowUp",
"X": 0.3842173218727112,
"Y": 0.2442859262228012
},
{
"Type": "leftEyeLeft",
"X": 0.23103466629981995,
"Y": 0.3340148627758026
},
{
"Type": "leftEyeRight",
"X": 0.27609309554100037,
"Y": 0.3207177221775055
},
{
"Type": "leftEyeUp",
"X": 0.2530564069747925,
"Y": 0.3197972774505615
},
{
"Type": "leftEyeDown",
"X": 0.2567131221294403,
"Y": 0.33308202028274536
},
{
"Type": "rightEyeLeft",
"X": 0.34190309047698975,
"Y": 0.29743024706840515
},
{
"Type": "rightEyeRight",
"X": 0.3790508806705475,
"Y": 0.2813720107078552
},
{
"Type": "rightEyeUp",
"X": 0.3626129627227783,
"Y": 0.28094738721847534
},
{
"Type": "rightEyeDown",
"X": 0.36475011706352234,
"Y": 0.29455944895744324
},
{
"Type": "noseLeft",
"X": 0.3262130320072174,
"Y": 0.4028383791446686
},
{
"Type": "noseRight",
"X": 0.3671954870223999,
"Y": 0.38829341530799866
},
{
"Type": "mouthUp",
"X": 0.35946258902549744,
"Y": 0.4282350242137909
},
{
"Type": "mouthDown",
"X": 0.3688056766986847,
"Y": 0.47078806161880493
},
{
"Type": "leftPupil",
"X": 0.25443094968795776,
"Y": 0.3268865942955017
},
{
"Type": "rightPupil",
"X": 0.3632013499736786,
"Y": 0.2881803810596466
},
{
"Type": "upperJawlineLeft",
"X": 0.14767757058143616,
"Y": 0.3607099950313568
},
{
"Type": "midJawlineLeft",
"X": 0.22135865688323975,
"Y": 0.5007627010345459
},
{
"Type": "chinBottom",
"X": 0.37924233078956604,
"Y": 0.5437403917312622
},
{
"Type": "midJawlineRight",
"X": 0.41789504885673523,
"Y": 0.4316871464252472
},
{
"Type": "upperJawlineRight",
"X": 0.38829270005226135,
"Y": 0.2765507102012634
}
],
"Pose": {
"Roll": -15.883942604064941,
"Yaw": 18.86370849609375,
"Pitch": -0.2252194732427597
},
"Quality": {
"Brightness": 32.680477142333984,
"Sharpness": 20.927310943603516
},
"Confidence": 99.99960327148438
}
]
}
{
"FaceDetails": [
{
"AgeRange": {
"High": number,
"Low": number
},
"Beard": {
"Confidence": number,
"Value": boolean
},
"BoundingBox": {
"Height": number,
"Left": number,
"Top": number,
"Width": number
},
"Confidence": number,
"Emotions": [
{
"Confidence": number,
"Type": "string"
}
],
"Eyeglasses": {
"Confidence": number,
"Value": boolean
},
"EyesOpen": {
"Confidence": number,
"Value": boolean
},
"Gender": {
"Confidence": number,
"Value": "string"
},
"Landmarks": [
{
"Type": "string",
"X": number,
"Y": number
}
],
"MouthOpen": {
"Confidence": number,
"Value": boolean
},
"Mustache": {
"Confidence": number,
"Value": boolean
},
"Pose": {
"Pitch": number,
"Roll": number,
"Yaw": number
},
"Quality": {
"Brightness": number,
"Sharpness": number
},
"Smile": {
"Confidence": number,
"Value": boolean
},
"Sunglasses": {
"Confidence": number,
"Value": boolean
}
}
],
"OrientationCorrection": "string"
}
This API call has limits to free users...
Returns moderation labels from an image such as NSFW attributes.
curl -X POST -H "Content-Type: multipart/form-data" -F [email protected] https://api.courvix.com/image/moderation
import requests
import json
import sys
image = open(sys.argv[1], 'rb')
try:
response = requests.post("https://api.courvix.com/image/moderation", files={"image": image}).json()
print(response) # Print the entire response
except Exception as e:
print(f'Exception occured {e}')
{
"ModerationLabels": [
{
"Confidence": 99.99110412597656,
"Name": "Explicit Nudity",
"ParentName": ""
},
{
"Confidence": 99.99110412597656,
"Name": "Nudity",
"ParentName": "Explicit Nudity"
},
{
"Confidence": 82.1614990234375,
"Name": "Graphic Female Nudity",
"ParentName": "Explicit Nudity"
}
],
"ModerationModelVersion": "5.0"
}
{
"HumanLoopActivationOutput": {
"HumanLoopActivationConditionsEvaluationResults": "string",
"HumanLoopActivationReasons": [ "string" ],
"HumanLoopArn": "string"
},
"ModerationLabels": [
{
"Confidence": number,
"Name": "string",
"ParentName": "string"
}
],
"ModerationModelVersion": "string"
}
This API call has limits to free users...
Translate text between 72 languages
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "source=es&target=en&text=losiento" https://api.courvix.com/text/translate
source=es target=en text=losiento
{
"source": "es",
"target": "en",
"response": "i'm sorry"
}