{"id":25246839,"url":"https://github.com/godhanded/mysignalsapp","last_synced_at":"2026-01-24T18:31:55.607Z","repository":{"id":155313499,"uuid":"631561957","full_name":"Godhanded/MySignalsApp","owner":"Godhanded","description":"Backend Api for My Signals App Copy Trading platform. pay for signals with cryptocurrency and place the signals automatically on your binance account","archived":false,"fork":false,"pushed_at":"2024-10-28T19:38:35.000Z","size":424,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T15:21:51.858Z","etag":null,"topics":["api-rest","binance-api","flask","flask-sqlalchemy","python","web3py"],"latest_commit_sha":null,"homepage":"https://www.mysignals.app","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Godhanded.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-04-23T12:19:38.000Z","updated_at":"2024-10-28T19:38:38.000Z","dependencies_parsed_at":"2023-11-03T01:35:06.943Z","dependency_job_id":"d21e835f-7ed1-4a52-9b09-02d2681d5fe1","html_url":"https://github.com/Godhanded/MySignalsApp","commit_stats":null,"previous_names":["godhanded/mysignalsapp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Godhanded/MySignalsApp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Godhanded%2FMySignalsApp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Godhanded%2FMySignalsApp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Godhanded%2FMySignalsApp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Godhanded%2FMySignalsApp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Godhanded","download_url":"https://codeload.github.com/Godhanded/MySignalsApp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Godhanded%2FMySignalsApp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28734307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T17:51:25.893Z","status":"ssl_error","status_checked_at":"2026-01-24T17:50:48.377Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","binance-api","flask","flask-sqlalchemy","python","web3py"],"created_at":"2025-02-12T02:49:41.048Z","updated_at":"2026-01-24T18:31:55.588Z","avatar_url":"https://github.com/Godhanded.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MySignalsApp_Server\n\n## TODO \n* Switch to MainNet\n\n## Table Of Contents\n- [Set up for Local Machine](#set-up-the-server)\n- [Base Uri/Live Deployment](#base-uri)\n- [Error Handling](#error-handling)\n- [Permissions/Roles](#permissionsroles)\n- [EndPoints](#endpoints)\n  - [Authentication Routes](#authentication)\n  - [Provider Routes](#provider-endpoints)\n  - [General Routes](#general-endpoints)\n  - [Registrar Routes](#registrar-enpoints)\n- [Authors](#authors)\n- [Acknowledgments](#acknowledgments)\n\n\u003cimg src=\"https://komarev.com/ghpvc/?username=mysignalsapp\u0026label=Hellos\u0026style=for-the-badge\u0026color=blueviolet\" alt=\"\"/\u003e\n\u003chr\u003e\n\n## **MY SIGNALSAPP API-ENDPOINT DOCUMENTATION**\n---\n\u003cbr\u003e\n\u003cbr\u003e\n\n### **Set up the server**\n#### Install Dependencies\n```bash\n$ python3 -m venv venv\n\n$ source venv/bin/activate\n\n$ pip install -r requirements.txt\n```\n\n#### Set up the Database\n\nWith Postgres running, create a `sigs` database:\n\n```bash\n$ createdb sigs\n```\n\n#### Run the Server\n```bash\n$ python3 run.py \n```\n\n### **Base Uri**\n----\n----\nhosted for live testing on **https://api.mysignals.app/**\n....\n\n\n\u003cbr\u003e\n\n### **Error Handling**\n---\n---\n\u003eErrors are returned as JSON objects in the following format with their error code\n\n```json\n{\n  \"error\": \"error name\",\n  \"message\": \"error description\"\n}\n```\nThe API will return 5 error types, with diffreent descriptions when requests fail;\n- 400: Request unprocessable\n- 403: Forbidden\n- 404: resource not found\n- 422: Bad Request\n- 429: Too Many Requests(rate limiting)\n- 500: Internal server error\n\n\u003cbr\u003e\n\n### **Permissions/Roles**\n---\n---\n\nThere are three roles available, role will be provided at login and `base_uri/auth/@me`\n\n- User:[\"User\"]\n    * general permissions, regular user\n- Provider:[\"User\",\"Provider\"]\n    * signal providers,permissions to upload signals for users to trade\n- Registrar:[\"User\",\"Registrar]\n    * Admin, grant roles and view users\n\u003cbr\u003e\n\n### **EndPoints**\n---\n---\n\u003cbr\u003e\n\n#### **AUTHENTICATION**\n  \u003e server side authentication is Used\n\n  `POST '/auth/register'`\n\n- Register new user,role is set to user and account is marked inactive, sends activation code to user email on success.\n- Request Arguements: JSON object containing\n```json\n{\n  \"email\":\"user email\",\n  \"user_name\":\"user name\",\n  \"password\":\"password at least 8 characters\",\n  \"confirm_password\":\"confirm password\",\n  \"referrers_code\":\"referal code to register\",// \"\" if no ref code\n  \"wallet\":\"User wallet address\"\n}\n```\n- Returns `message` ,`user name` and `email`\n```json\n{\n    \"message\": \"Success\", \n    \"user_name\": \"user_name\", \n    \"email\": \"user email\"\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/auth/activate/${token}'`\n- Activates user account\n- Request Arguements: `token`- string token/code\n- Returns: HTML \n\n\n---\n\u003cbr\u003e\n\n  `POST '/auth/login'`\n- login user, Server side sessions is used, cookie is sent to client\n- Request Arguements: JSON object containing\n```json\n{\n  \"user_name_or_mail\":\"users username or email address\",\n  \"password\":\"user password\"\n}\n```\n- Returns: JSON, permissions of logged in user and if user account is active\n\n```json\n {\n    \"message\": \"Success\",\n    \"id\":\"user id\",\n    \"has_api_keys\": true,\n    \"user_name\": \"user_name\",\n    \"referral_code\":\"90jeu378\",\n    \"is_active\": true,//boolean- if account is active or not\n    \"permission\": \"User\",//string 'User' or array of permissions\n}\n```\n*note:* \"permission\":[\"User\",\"Provider\"] or \"permission\":\"User\"\n\n---\n\u003cbr\u003e\n\n  `POST '/auth/reset_password'`\n- Request password reset, reset code sent to user mail if exists\n- Request Arguements: Json object\n```json\n{\n    \"email\":\"user email\"\n}\n```\nReturns:\n```json\n{\n    \"message\": \"Reset password token will be sent to {email} if they exist\"\n}\n```\n\n---\n\u003cbr\u003e\n\n  `POST '/auth/reset_password/${token}'`\n- receive sent token and allows password chsnge\n- Request Arguements `token`-string jwt token and JSON object\n```json\n{\n  \"password\":\"user password\",\n  \"confirm_password\":\"confirm password\"\n}\n```\n- Returns:\n```json\n{\"message\": \"Password changed\"}\n```\n---\n\u003cbr\u003e\n\n  `POST '/auth/logout'`\n- Log out user\n- Returns: 'message'\n```json\n{\n    \"message\": \"Success\",\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/auth/@me'`\n- gets all data of currenly logged in user\n- Requires logged in\n- Returns: JSON object\n```json\n{\n    \"message\": \"Success\",\n    \"id\":\"user id\",\n    \"has_api_keys\": false,\n    \"email\": \"email\",\n    \"referral_code\": \"90c44000\",// users referral code\n    \"referrals\": 0,\n    \"referrers_wallet\": null,//wallet address of referrer\n    \"wallet\": \"0xodn\",//wallet address of user\n    \"unread_notifications\":1,\n    \"user_name\": \"user_name\",\n    \"is_active\": false,\n    \"roles\": \"['User','Rgistrar']\",\n    \"created_on\": \"thu 30 june 2021 12:24:07\"\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/auth/notifications'` or `GET '/auth/notifications?page=${page}'`\n- gets all notifications of a user\n- Requires logged in\n- Request Arguements:query parameter `page`- integer defaults to `1` if not provided\n- Returns: JSON object paginated\n```json\n{\n  \"message\": \"success\",\n  \"notifications\": [\n    {\n      \"date_created\": \"Mon, 15 Jan 2024 17:46:38 GMT\",\n      \"id\": 1,\n      \"message\": \"test notification\",\n      \"user\": \"bingoprovider\"\n    }\n  ],\n  \"pages\": 1,\n  \"status\": true,\n  \"total\": 1\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/auth/notifications/count'`\n- gets total number of unread notifications of logged in user\n- Returns: JSON object\n```json\n{\n  \"message\": \"success\",\n  \"status\": true,\n  \"unread_notifications\": 1\n}\n```\n---\n\u003cbr\u003e\n\n`POST '/auth/update_keys'`\n- Change api key and secret, Requires logged in\n- Request Arguements: JSON object\n```json\n{\n    \"api_key\":\"key...\",\n    \"api_secret\":\"secret...\"\n}\n```\nReturns: Json object\n```json\n{\n    \"message\": \"success\",\n    \"id\":\"user id\",\n    \"has_api_keys\": true,\n    \"user_name\": \"user_name\",\n    \"is_active\": true,\n}\n```\n\n---\n---\n\u003cbr\u003e\n\n#### **PROVIDER ENDPOINTS**\n\u003eENDPOINTS only accessible to logged in user with Provider role. These are Signal Providers\n\n  `GET '/provider/signals'` or `GET '/provider/signals?page=${page}'`\n- get all signals uploaded by logged in provider\n- Request Arguements:query parameter `page`- integer defaults to `1` if not provided\n- Returns: JSON object array of signals, total signals and total number of pages,20 signals max per page\n```json\n{\n    \"message\": \"Success\",\n    \"provider_rating\": 0.0,\n    \"signals\": [\n        {\n            \"id\": 1,\n            \"signal\": {\n                \"symbol\":\"BNBUSDT\",\n                \"side\":\"BUY\",\n                \"quantity\":\"0.05\",\n                \"price\":\"360\",\n                \"stops\":{\n                    \"sl\":\"350\",\n                    \"tp\":\"380\"\n                }\n            },\n            \"short_text\":\"short message from provider\",\n            \"status\": true, //is signal is still valid\n            \"is_spot\": true,// if is spot trade\n            \"provider\": \"testprovider\", // provider user name\n            \"provider_wallet\": \"0x0...\",//providers wallet address\n            \"date_created\": \"sun 31 march 2020 13:42:00\",\n        },\n        {\n            \"id\": 2,\n            \"signal\": {\n                \"symbol\":\"LTCUSDT\",\n                \"side\":\"SELL\",\n                \"quantity\":\"1\",\n                \"price\":\"70.05\",\n                \"stops\":{\n                    \"sl\":\"73.2\",\n                    \"tp\":\"60\"\n                }\n            },\n            \"short_text\":\"short message from provider\",\n            \"status\": false, //old or no longer valid\n            \"is_spot\": false,// futures trade\n            \"provider\": \"testprovider\", // provider user name\n            \"provider_wallet\": \"0x0...\",//providers wallet address\n            \"date_created\": \"sun 31 march 2020 13:42:00\",\n        },\n    ],\n    \"total\": 5,// total signals from this provider\n    \"pages\": 1,// total number of pages available\n}\n```\n\n---\n\u003cbr\u003e\n\n  `GET '/provider/spot/pairs'`\n- get all available USDT spot trading pairs from binance\n- Returns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"pairs\":[\n        \"BNBUSDT\",\n        \"ETHUSDT\",\n        \"BTCUSDT\"]\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/provider/futures/pairs'`\n- get all available USDT futures trading pairs from binance\n- Returns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"pairs\":[\n        \"BNBUSDT\",\n        \"ETHUSDT\",\n        \"BTCUSDT\"]\n}\n```\n---\n\u003cbr\u003e\n\n  `POST '/provider/spot/new'`\n- upload or post new spot trade\n- Request Arguements: JSON object \n```json\n{\n  \"symbol\":\"BNBUSDT\",\n  \"side\":\"BUY\",\n  \"quantity\":\"0.5\",//type:float\n  \"price\":\"336\",//type:float\n  \"tp1\":\"325\",//type:float\n  \"tp2\":\"\",//float optional\n  \"tp3\":\"\",//float optional\n  \"sl\":\"340\",//type:float\n  \"short_text\":\"sample short message from provider\"\n}\n```\n- Returns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal\":{\n            \"id\": 1,\n            \"signal\": {\n                \"symbol\":\"BNBUSDT\",\n                \"side\":\"SELL\",\n                \"quantity\":\"0.5\",\n                \"price\":\"366\",\n                \"stops\":{\n                    \"sl\":\"340\",\n                    \"tp\":\"325\"\n                }\n            },\n            \"short_text\":\"short message from provider\",\n            \"status\": true, //is signal is still valid\n            \"is_spot\": true,// if is spot trade\n            \"provider\": \"testprovider\", // provider user name\n            \"provider_wallet\": \"0x0...\",//providers wallet address\n            \"date_created\": \"sun 31 march 2020 13:42:00\",\n        }\n}\n```\n---\n\u003cbr\u003e\n\n  `POST '/provider/futures/new'`\n- upload or post new futures trade\n- Request Arguements: JSON object \n```json\n{\n  \"symbol\":\"BNBUSDT\",\n  \"side\":\"SELL\",\n  \"quantity\":\"0.5\",//type:float\n  \"price\":\"336\",//type:float\n  \"leverage\":\"3\",//type:integer\n  \"tp1\":\"325\",//type:float required\n  \"tp2\":\"\",//float optional\n  \"tp3\":\"\",//float optional\n  \"sl\":\"340\",//type:float\n  \"short_text\":\"sample short message from provider\"\n}\n```\n- Returns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal\":{\n            \"id\": 1,\n            \"signal\": {\n                \"symbol\":\"BNBUSDT\",\n                \"side\":\"SELL\",\n                \"quantity\":\"0.5\",\n                \"leverage\":\"5\",\n                \"price\":\"366\",\n                \"stops\":{\n                    \"sl\":\"340\",\n                    \"tp\":\"325\"\n                }\n            },\n            \"short_text\":\"short message from provider\",\n            \"status\": true, //if signal is still valid\n            \"is_spot\": false,// if is futures trade\n            \"provider\": \"testprovider\", // provider user name\n            \"provider_wallet\": \"0x0...\",//providers wallet address\n            \"date_created\": \"sun 31 march 2020 13:42:00\",\n        }\n}\n```\n---\n\u003cbr\u003e\n\n\n  `POST '/provider/delete/${signal_id}'`\n- Provider deletes a signal he has created before\n- Request Arguements: `signal_id`- integer id of the signal to delete\nReturns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal_id\":1\n}\n```\n---\n\u003cbr\u003e\n\n\n  `POST '/provider/deactivate/${signal_id}'`\n- Provider marks a signal he has created before as no longer valid \n- Request Arguements: `signal_id`- integer id of the signal to edit\nReturns: JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal_id\":1\n}\n```\n---\n\u003cbr\u003e\n\n\n  `POST '/provider/update_wallet'`\n- allows provider change wallet address the will be paid with requires user is active\n- Request Arguements: JSON object\n```json\n{\n    \"wallet\":\"0x12...\"\n}\n```\nReturns:JSON object\n```json\n{\n    \"message\":\"wallet changed\"\n}\n```\n\n---\n\u003cbr\u003e\n\n#### **GENERAL ENDPOINTS**\n\u003eENDPOINTS accessible to any logged in user\n\n  `POST '/spot/trade/${signal_id}'`\n- place spot trade on logged in users binance account\n- Request Arguements: `signal_id`- integer, id of signal to trade and empty JSON body\n```json\n{ \n  \"tp\":\"0.876\",//selected tp:float\n  \"quoteQty\":\"10\" //AMOUNT USDT TO TRADE\n}\n```\n- Returns:JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal\":{\n        \"symbol\":\"BNBUSDT\",\n        \"side\":\"SELL\",\n        \"quantity\":\"0.5\",\n        \"price\":\"336\",\n        \"timeInForce\": \"GTC\",\n        \"type\": \"LIMIT\",\n        \"tp\":\"325\",\n        \"sl\":\"340\",\n        \"newClientOrderId\": \"bieuhcfu3y478gi88\"\n    }\n}\n```\n---\n\u003cbr\u003e\n\n  `POST '/futures/trade/${signal_id}'`\n- place futures trade on logged in users binance account\n- Request Arguements: `signal_id`- integer, id of signal to trade and JSON body containig\n```json\n{ \n  \"tp\":\"0.876\",//selected tp:float\n  \"quoteQty\":\"10\" //AMOUNT USDT TO TRADE\n}\n```\n- Returns:JSON object\n```json\n{\n    \"message\":\"success\",\n    \"signal\":{\n        \"symbol\":\"BNBUSDT\",\n        \"side\":\"SELL\",\n        \"quantity\":\"0.5\",\n        \"price\":\"336\",\n        \"timeInForce\": \"GTC\",\n        \"type\": \"LIMIT\",\n        \"tp\":\"325\",\n        \"sl\":\"340\",\n        \"leverage\":\"3\",\n        \"newClientOrderId\": \"bieuhcfu3y478gi88\"\n    }\n}\n```\n---\n\u003cbr\u003e\n\n  `GET or POST '/signal/${signal_id}?tx_hash=${tx_hash}'`\n- get complete details of a signal, requires logged in\n- Request Arguements: query parameter `signal_id`- integer,`tx_hash` - string; id of signal to get;tx hash of payment made to contract\n\n- Returns: JSON object\n```json\n{\n  \"message\":\"success\",\n  \"signal\": {\n            \"id\": 1,\n            \"signal\": {\n                \"symbol\":\"BNBUSDT\",\n                \"side\":\"SELL\",\n                \"quantity\":\"0.5\",\n                \"price\":\"366\",\n                \"stops\":{\n                    \"sl\":\"340\",\n                    \"tp\":\"325\"\n                }\n            },\n            \"short_text\":\"\",//short message from provider\n            \"status\": true, //is signal is still valid\n            \"is_spot\": true,// if is spot trade\n            \"provider\": \"testprovider\", // provider user name\n            \"provider_wallet\": \"0x0...\",//providers wallet address\n            \"date_created\": \"sun 31 march 2020 13:42:00\",\n        }\n}\n```\n\n---\n\u003cbr\u003e\n\n  `POST '/signal/rate/${signal_id}'`\n- rate a trade that as user has paid for and has taken before\n- Request Arguements: query parameter `signal_id`- integer, id of signal to rate and JSON object:\n```json\n{\n  \"rate\":5 // integer between 1 and 5\n}\n```\n- Returns: JSON object\n```json\n{\n  \"message\": \"success\", \n  \"rating\": 5\n}\n\n```\n\n---\n\u003cbr\u003e\n\n  `GET '/'` or `GET '?page=${page}'`\n- get reduced/summarized form of all active signals(status=true),paginated\n- Request Arguements: `page`- integer page number, page defaults to `1` if not given\n- Returns:JSON object\n```json\n{\n  \"message\": \"Success\",\n  \"signals\":[\n    {\n      \"id\": 4,\n      \"signal\": {\n          \"symbol\": \"LTCUSDT\",\n          \"side\":\"SELL\",\n          \"quantity\":\"\"\n      },\n      \"is_spot\": true,\n      \"short_text\":null,\n      \"provider\":\"proider username\",\n      \"provider_wallet\": \"0x21gh...\",\n      \"provider_rating\":4.65,\n      \"date_created\": \"Sun 31 march 2020 13:42:00\",\n    },\n    {\n      \"id\": 7,\n      \"signal\": {\n          \"symbol\": \"BTCUSDT\",\n          \"side\":\"BUY\",\n          \"quantity\":\"\"\n      },\n      \"is_spot\": true,\n      \"provider\":\"proider username\",\n      \"short_text\":null,\n      \"provider_wallet\": \"0x21gh...\",\n      \"provider_rating\":4.05,\n      \"date_created\": \"Sun 31 march 2020 13:42:00\",\n    },\n    {\n      \"id\": 9,\n      \"signal\": {\n          \"symbol\": \"ETHUSDT\",\n          \"side\":\"SELL\",\n          \"quantity\":\"\"\n      },\n      \"is_spot\": false,\n      \"provider\":\"proider username\",\n      \"short_text\":null,\n      \"provider_wallet\": \"0x21gh...\",\n      \"provider_rating\":3.35,\n      \"date_created\": \"Sun 31 march 2020 13:42:00\",\n    }\n  ],\n  \"total\": 40,\n  \"pages\": 3,\n}\n```\n\n---\n\u003cbr\u003e\n\n  `GET '/mytrades'` or `GET '/mytrades?page=${page}'`\n- get all previously purchased trades of logged in user,paginated\n- Request Arguements: `page`- integer page number, page defaults to `1` if not given\n- Returns:JSON object\n```json\n{\n  \"message\": \"success\",\n  \"pages\": 1,\n  \"total\": 2 ,\n  \"mytrades\": [\n    {\n      \"date_created\": \"Mon, 27 Nov 2023 00:10:22 GMT\",\n      \"id\": 2,\n      \"is_spot\": true,\n      \"short_text\":\"\", //short message from provider\n      \"provider\": \"testprovider\", // provider user name\n      \"provider_wallet\": \"0x0...\",//providers wallet address\n      \"signal\": {\n        \"price\": 336.0,\n        \"quantity\": 0.5,\n        \"side\": \"SELL\",\n        \"stops\": {\n          \"sl\": 340.0,\n          \"tp\": 325.0\n        },\n        \"symbol\": \"LTCUSDT\"\n      },\n      \"status\": true,\n      \"user_rating\": 0 // signal rating given by this logged in user\n    },\n    {\n      \"date_created\": \"Mon, 27 Nov 2023 00:10:07 GMT\",\n      \"id\": 1,\n      \"is_spot\": true,\n      \"short_text\":\"\",//short message from provider\n      \"provider\": \"testprovider\", // provider user name\n      \"provider_wallet\": \"0x0...\",//providers wallet address\n      \"signal\": {\n        \"price\": 336.0,\n        \"quantity\": 0.5,\n        \"side\": \"SELL\",\n        \"stops\": {\n          \"sl\": 340.0,\n          \"tp\": 325.0\n        },\n        \"symbol\": \"BNBUSDT\"\n      },\n      \"status\": true,\n      \"user_rating\": 0  // signal rating given by this logged in user\n    }\n  ],\n  \"status\": true\n}\n```\n\n\n---\n\u003cbr\u003e\n\n  `POST '/mytrades/cancel/${id}'`\n- cancel a trade that was placed on binance through MySignals\n- Request Arguements: `id`- integer id of signal to cancel\n- Request Body: Empty Json Object\n```json \n{}\n```\n- Returns:JSON object\n```json\n{\n    \"message\": \"Successfully Cancelled Signal!\",\n    \"status\": true,\n    \"signal_id\": 13,\n}\n```\n---\n\u003cbr\u003e\n\n---\n\u003cbr\u003e\n\n  `POST '/apply/provider'`\n- submit request to become a signal provider\n- Request Arguements: JSON object:\n```json\n{\n  \"wallet\":\"0x40 characters more\",\n  \"experience\":\"\",//providers experience(300 chars max 10 chars min)\n  \"socials_and_additional\":\"\" //social links and other relevant info(500 chars max 10 chars min)\n}\n```\n- Returns:JSON object\n```json\n{\n  \"message\": \"success\",\n  \"status\": true\n}\n```\n---\n\u003cbr\u003e\n#### **REGISTRAR ENPOINTS**\n\u003eENDPOINTS only accessible to logged in user with Registrar role. This is The Admin\n\n  `POST '/registrar/provider/new'`\n- Change user role to Provider\n- Request Arguements: JSON object\n```json\n{\n  \"email\":\"user@email.com\"\n}\n``` \n- Returns:JSON object\n```json\n{\n  \"message\": \"success\", \n  \"provider\": \"user@email.com\"\n}\n```\n\n---\n\u003cbr\u003e\n\n  `POST '/registrar/registrar/new'`\n- Change user role to Registrar\n- Request Arguements:JSON object\n```json\n{\n  \"email\":\"user@email.com\"\n}\n```\n- Returns:JSON object\n```json\n{\n  \"message\": \"success\", \n  \"registrar\": \"user@email.com\"\n}\n```\n\n---\n\u003cbr\u003e\n\n  `POST '/registrar/drop_role'`\n- Drop any special role of back to User\n- Request Arguements: JSON object\n```json\n{\n  \"email\":\"user@email.com\"\n}\n```\n- RETURNS:JSON object\n```json\n{\n  \"message\": \"success\", \n  \"registrar\": \"user@email.com\"\n}\n```\n---\n\u003cbr\u003e\n\n  `GET '/registrar/role/providers'` or `GET '/registrar/role/providers?page=${page}'`\n- Get all users with Provider role,paginated\n- Request Arguements: `page`-integer, defaults to `1`\n- Returns:JSON object\n```json\n{\n    \"message\": \"success\",\n    \"providers\": [],\n    \"pages\": 0,\n    \"total\": 0,\n}\n```\nor\n```json\n{\n    \"message\": \"success\",\n    \"providers\": [\n      {\n        \"id\": 4,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"Provider\",\n        \"is_active\": true,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      },\n      {\n        \"id\": 5,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"Provider\",\n        \"is_active\": false,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      }\n    ],\n    \"pages\": 1,\n    \"total\": 2\n}\n``` \n---\n\u003cbr\u003e\n\n  `GET '/registrar/role/registrars'` or `GET '/registrar/role/registrars?page=${page}'`\n- Get all users with Registrar role,paginated\n- Request Arguements: `page`-integer, defaults to `1`\n- Returns:JSON object\n```json\n{\n    \"message\": \"success\",\n    \"registrars\": [],\n    \"pages\": 0,\n    \"total\": 0,\n}\n```\nor\n```json\n{\n    \"message\": \"success\",\n    \"registrars\": [\n      {\n        \"id\": 4,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"Registrars\",\n        \"is_active\": true,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      },\n      {\n        \"id\": 5,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"Registrar\",\n        \"is_active\": false,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      }\n    ],\n    \"pages\": 1,\n    \"total\": 2\n}\n``` \n---\n\u003cbr\u003e\n\n  `GET '/registrar/role/users'` or `GET '/registrar/role/users?page=${page}'`\n- Get all regular users, paginated\n- Request Arguements: `page`-integer, defaults to `1`\n- Returns:JSON object\n```json\n{\n    \"message\": \"success\",\n    \"users\": [],\n    \"pages\": 0,\n    \"total\": 0,\n}\n```\nor\n```json\n{\n    \"message\": \"success\",\n    \"users\": [\n      {\n        \"id\": 4,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"User\",\n        \"is_active\": true,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      },\n      {\n        \"id\": 5,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"User\",\n        \"is_active\": false,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      }\n    ],\n    \"pages\": 1,\n    \"total\": 2\n}\n``` \n---\n\u003cbr\u003e\n\n  `GET '/registrar/get/users'` or `GET '/registrar/get/users?page=${page}'`\n- Get all regardless of role, paginated\n- Request Arguements: `page`-integer, defaults to `1`\n- Returns:JSON object\n```json\n{\n    \"message\": \"success\",\n    \"users\": [],\n    \"pages\": 0,\n    \"total\": 0,\n}\n```\nor\n```json\n{\n    \"message\": \"success\",\n    \"users\": [\n      {\n        \"id\": 4,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"User\",\n        \"is_active\": true,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      },\n      {\n        \"id\": 5,\n        \"email\": \"user@email.com\",\n        \"user_name\": \"user name\",\n        \"roles\": \"Provider\",\n        \"is_active\": false,\n        \"wallet\": \"0x05tg4...\",\n        \"has_api_keys\": true,\n        \"date_created\": \"Sun 31 march 2020 13:42:00\"\n      }\n    ],\n    \"pages\": 1,\n    \"total\": 2\n}\n``` \n\n\n\n## Authors\n- [@Godhanded](https://github.com/Godhanded)\n\n## Acknowledgments\n\n- Binance-Python-Connector\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodhanded%2Fmysignalsapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgodhanded%2Fmysignalsapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodhanded%2Fmysignalsapp/lists"}