From 3a3889db8c476db4c1d5c870ba66faaffe266b70 Mon Sep 17 00:00:00 2001 From: video-prize-ranch Date: Wed, 7 Dec 2022 22:24:41 -0500 Subject: [PATCH] Add Odysee API --- docs/Odysee-API/api.na-backend.odysee.com.md | 717 +++++++++++++++++++ docs/Odysee-API/api.odysee.com.md | 159 ++++ docs/Odysee-API/api.odysee.live.md | 55 ++ docs/Odysee-API/comments.odysee.tv.md | 250 +++++++ docs/Odysee-API/lighthouse.odysee.tv.md | 70 ++ docs/Odysee-API/odysee.com.md | 172 +++++ 6 files changed, 1423 insertions(+) create mode 100644 docs/Odysee-API/api.na-backend.odysee.com.md create mode 100644 docs/Odysee-API/api.odysee.com.md create mode 100644 docs/Odysee-API/api.odysee.live.md create mode 100644 docs/Odysee-API/comments.odysee.tv.md create mode 100644 docs/Odysee-API/lighthouse.odysee.tv.md create mode 100644 docs/Odysee-API/odysee.com.md diff --git a/docs/Odysee-API/api.na-backend.odysee.com.md b/docs/Odysee-API/api.na-backend.odysee.com.md new file mode 100644 index 0000000..8652dd1 --- /dev/null +++ b/docs/Odysee-API/api.na-backend.odysee.com.md @@ -0,0 +1,717 @@ +--- +title: api.na-backend.odysee.com +--- + +> **⚠️ DEPRECATED:** Use official documentation at https://lbry.tech/api/sdk + +# Odysee API documentation - api.na-backend.odysee.com +This is an unofficial documentation for the Odysee API. api.na-backend.odysee.com is used for video metadata and video streams, api.odysee.com is used for data such as like/dislike counts and view counts. + +## `GET` /api/v2/status + +### `200` OK +```json +{ + "timestamp": "2021-07-03 00:29:19.5246211 +0000 UTC", + "services": { + "lbrynet": [ + { + "name": "lbrynet-b-17", + "status": "ok" + } + ] + }, + "general_state": "ok" +} +``` + +## `POST` /api/v1/proxy?m=status + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "method": "status", + "params": {}, + "id": 1625272172600 +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "blob_manager": { + "connections": { + "incoming_bps": {}, + "outgoing_bps": {}, + "time": 0, + "total_incoming_mbs": 0, + "total_outgoing_mbs": 0 + }, + "finished_blobs": 0 + }, + "connection_status": { + "code": "connected", + "message": "No connection problems detected" + }, + "installation_id": "692EAWhtoqDuAfQ6KHMXxFxt8tkhmt7sfprEMHWKjy5hf6PwZcHDV542VHqRnFnTCD", + "is_running": true, + "skipped_components": [ + "hash_announcer", + "blob_server", + "dht" + ], + "startup_status": { + "blob_manager": true, + "blockchain_headers": true, + "database": true, + "exchange_rate_manager": true, + "peer_protocol_server": true, + "stream_manager": true, + "upnp": true, + "wallet": true + }, + "stream_manager": { + "managed_files": 1 + }, + "upnp": { + "aioupnp_version": "0.0.13", + "dht_redirect_set": false, + "external_ip": "127.0.0.1", + "gateway": "No gateway found", + "peer_redirect_set": false, + "redirects": {} + }, + "wallet": { + "best_blockhash": "3d77791b9d87609a004b398e638bcdc91650247ee4448a2b30bf8474668d0ad3", + "blocks": 0, + "blocks_behind": 0, + "is_encrypted": false, + "is_locked": false + } + }, + "id": 1625272172600 +} +``` + +## `POST` /api/v1/proxy?m=resolve +Resolves a LBRY URL. + +### JSON Data + +#### Video +```json +{ + "jsonrpc": "2.0", + "method": "resolve", + "params": { + "urls": [ + "lbry://@jordanisgreat505#3/how-to-make-chicken-noodle-oinion-soup#9" + ], + "include_purchase_receipt": true, + "include_is_my_output": true + }, + "id": 1625272172800 +} +``` + +#### Channel +```json +{ + "jsonrpc": "2.0", + "method": "resolve", + "params": { + "urls": [ + "lbry://@SomeOrdinaryGamers#a" + ], + "include_purchase_receipt": true, + "include_is_my_output": true + }, + "id": 1625272172800 +} +``` + +#### Articles +```json +{ + "jsonrpc": "2.0", + "method": "resolve", + "params": { + "urls": [ + "lbry://@Odysee:8/axxl-on-odysee:c" + ], + "include_purchase_receipt": true, + "include_is_my_output": true + }, + "id": 1625272172800 +} +``` + +### `200` OK + +#### Video +```json +{ + "jsonrpc": "2.0", + "result": { + "lbry://@jordanisgreat505#3/how-to-make-chicken-noodle-oinion-soup#9": { + "address": "bDwAYeNLZwt42dkvZi7ijVC99sTSSvwvjb", + "amount": "0.005", + "canonical_url": "lbry://@jordanisgreat505#3/how-to-make-chicken-noodle-oinion-soup#9", + "claim_id": "9e9a5448d0afbe13bc7cd129acb35a290233487f", + "claim_op": "update", + "confirmations": 71132, + "height": 917608, + "is_channel_signature_valid": true, + "is_my_output": false, + "meta": { + "activation_height": 902112, + "creation_height": 902112, + "creation_timestamp": 1611546078, + "effective_amount": "0.005", + "expiration_height": 3004512, + "is_controlling": true, + "reposted": 0, + "support_amount": "0.0", + "take_over_height": 902112, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": 0.0 + }, + "name": "how-to-make-chicken-noodle-oinion-soup", + "normalized_name": "how-to-make-chicken-noodle-oinion-soup", + "nout": 0, + "permanent_url": "lbry://how-to-make-chicken-noodle-oinion-soup#9e9a5448d0afbe13bc7cd129acb35a290233487f", + "short_url": "lbry://how-to-make-chicken-noodle-oinion-soup#9", + "signing_channel": { + "address": "bDwAYeNLZwt42dkvZi7ijVC99sTSSvwvjb", + "amount": "0.005", + "canonical_url": "lbry://@jordanisgreat505#3", + "claim_id": "3d248260e4d89cf4292c9d193560525f9a792512", + "claim_op": "update", + "confirmations": 71131, + "has_signing_key": false, + "height": 917609, + "meta": { + "activation_height": 902097, + "claims_in_channel": 450, + "creation_height": 902097, + "creation_timestamp": 1611543696, + "effective_amount": "0.005", + "expiration_height": 3004497, + "is_controlling": true, + "reposted": 0, + "support_amount": "0.0", + "take_over_height": 902097, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": 0.0 + }, + "name": "@jordanisgreat505", + "normalized_name": "@jordanisgreat505", + "nout": 0, + "permanent_url": "lbry://@jordanisgreat505#3d248260e4d89cf4292c9d193560525f9a792512", + "short_url": "lbry://@jordanisgreat505#3", + "timestamp": 1614001671, + "txid": "e9f99e66057025b8aada3b64acf7d004bb14fe035550a117cc48a185ae755ef8", + "type": "claim", + "value": { + "cover": { + "url": "https://thumbnails.lbry.com/banner-UCX6jiEzG7fNe1OXdzrGJxMQ" + }, + "description": "hello peeps i make videos daily about video games real life things\n\nThanks to ♤ACE♤Freeflier181 for the profile pic and watermark. please go check her out for your own!\nLink https://freeflier181.deviantart.com/\n\nThanks to Not Cboy for the new channel banner!\n", + "public_key": "3056301006072a8648ce3d020106052b8104000a03420004cead14e4a4f8502eb2622eef73a796bd1eb82f440f51523f9eda2dea75e317fd75d714b394fd6c6813f40432fa0aaeff705762771a8ecd5900b5dbae155dcffe", + "public_key_id": "bPea6CzhHXogBcmy7SWahuFTefrC4UfHP7", + "thumbnail": { + "url": "https://thumbnails.lbry.com/UCX6jiEzG7fNe1OXdzrGJxMQ" + }, + "title": "jordanisgreat 505" + }, + "value_type": "channel" + }, + "timestamp": 1614001625, + "txid": "6119090be4c52277bb520ed27207748c4850e6540357ecb8efd942ffcf841c66", + "type": "claim", + "value": { + "description": "\n...\nhttps://www.youtube.com/watch?v=pmTNVZL7KSk", + "license": "Copyrighted (contact publisher)", + "release_time": "1568073600", + "source": { + "hash": "aae9dd9b29f90923f34b8e48d29d7e0cb036334a5cd132c2cb8724c437f2146287ef810c742742ca43b32556cb34678b", + "media_type": "video/mp4", + "name": "how-to-make-chicken-noodle.mp4", + "sd_hash": "09d9b2079ca3aaf4484b6a29fe3e03db7bc3934ba74d23ec3525d0a9022496806ef2335b8fbf582a60768822f7a848fe", + "size": "4455260" + }, + "stream_type": "video", + "thumbnail": { + "url": "https://thumbnails.lbry.com/pmTNVZL7KSk" + }, + "title": "How to make chicken noodle oinion soup part 3", + "video": { + "duration": 25, + "height": 720, + "width": 1280 + } + }, + "value_type": "stream" + } + }, + "id": 0 +} +``` + +#### Channel +```json +{ + "jsonrpc": "2.0", + "result": { + "lbry://@SomeOrdinaryGamers#a": { + "address": "bU66vJDJy3GwC6zu9E21bM4ME94hNAmzfV", + "amount": "0.005", + "canonical_url": "lbry://@SomeOrdinaryGamers#a", + "claim_id": "a8cca58a9a49b08a1325be5fe76646ea85201dbd", + "claim_op": "update", + "confirmations": 24170, + "has_signing_key": false, + "height": 965486, + "is_my_output": false, + "meta": { + "activation_height": 965412, + "claims_in_channel": 2071, + "creation_height": 965412, + "creation_timestamp": 1621587132, + "effective_amount": "5547.638718", + "expiration_height": 3067812, + "is_controlling": true, + "reposted": 0, + "support_amount": "5547.633718", + "take_over_height": 965412, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": -0.028158480301499367 + }, + "name": "@SomeOrdinaryGamers", + "normalized_name": "@someordinarygamers", + "nout": 0, + "permanent_url": "lbry://@SomeOrdinaryGamers#a8cca58a9a49b08a1325be5fe76646ea85201dbd", + "short_url": "lbry://@SomeOrdinaryGamers#a", + "timestamp": 1621598500, + "txid": "a8b547777a9ade157448f9508c61804ba4bf426e1c42b733a3ffe867afa22196", + "type": "claim", + "value": { + "cover": { + "url": "https://thumbnails.lbry.com/banner-UCtMVHI3AJD4Qk4hcbZnI9ZQ" + }, + "description": "Let's Play's, Commentaries, Reviews, Hardcore Raging ... we're just a team of Ordinary Gamers... what did YOU expect???", + "public_key": "3056301006072a8648ce3d020106052b8104000a03420004b63167b08a00a1a31ee38ae437e5c44abb606821eda2edc9898b9c71418afa729845eeee5756a7f1f590ca4f4c4343b9d0b867767833f7fb6290589733391a1d", + "public_key_id": "bFSKg3r7mxAdSo5JYivr1mzqvbByyVhApp", + "thumbnail": { + "url": "https://thumbnails.lbry.com/UCtMVHI3AJD4Qk4hcbZnI9ZQ" + }, + "title": "SomeOrdinaryGamers" + }, + "value_type": "channel" + } + }, + "id": 0 +} +``` + +#### Article +```json +{ + "jsonrpc": "2.0", + "result": { + "lbry://@Odysee:8/axxl-on-odysee:c": { + "address": "bLjszZEJBxUCe2zrprf3hHZmK2r3kbmK6V", + "amount": "50.0", + "canonical_url": "lbry://@Odysee#8/axxl-on-odysee#c", + "claim_id": "c80d4c55bb2b3ecba911097f192ccbe9c5ce2ef3", + "claim_op": "update", + "confirmations": 48104, + "height": 1006034, + "is_channel_signature_valid": true, + "is_my_output": false, + "meta": { + "activation_height": 1006034, + "creation_height": 1006032, + "creation_timestamp": 1628008731, + "effective_amount": "62.018", + "expiration_height": 3108434, + "is_controlling": true, + "reposted": 0, + "support_amount": "12.018", + "take_over_height": 1006032, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": 0.0 + }, + "name": "axxl-on-odysee", + "normalized_name": "axxl-on-odysee", + "nout": 0, + "permanent_url": "lbry://axxl-on-odysee#c80d4c55bb2b3ecba911097f192ccbe9c5ce2ef3", + "short_url": "lbry://axxl-on-odysee#c", + "signing_channel": { + "address": "bWmRCqPEgrnoMaXzwZ6wGtaY7BVcBCTJFx", + "amount": "1.0", + "canonical_url": "lbry://@Odysee#8", + "claim_id": "80d2590ad04e36fb1d077a9b9e3a8bba76defdf8", + "claim_op": "update", + "confirmations": 138653, + "has_signing_key": false, + "height": 915485, + "meta": { + "activation_height": 916714, + "claims_in_channel": 48, + "creation_height": 831298, + "creation_timestamp": 1600203894, + "effective_amount": "1689.57096", + "expiration_height": 3017885, + "is_controlling": true, + "reposted": 1, + "support_amount": "1688.57096", + "take_over_height": 919358, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": 0.0 + }, + "name": "@Odysee", + "normalized_name": "@odysee", + "nout": 0, + "permanent_url": "lbry://@Odysee#80d2590ad04e36fb1d077a9b9e3a8bba76defdf8", + "short_url": "lbry://@Odysee#8", + "timestamp": 1613674567, + "txid": "6f2e8b3799f919aee9154f465f653f632c76bd062b23dcf84f0b9098f87ccce9", + "type": "claim", + "value": { + "cover": { + "url": "https://spee.ch/5/99ef192b3b366563.jpg" + }, + "email": "hello@odysee.com", + "languages": [ + "en" + ], + "public_key": "3056301006072a8648ce3d020106052b8104000a034200047c1024948871d1dcdf92a3ad987d5e94d8cab2e35ca19a85407be566c7af2b4a51d4e4ff7250041cfc26ee83e128f2831e75de043b942832e345879a0ac13dba", + "public_key_id": "bQcmWRk69UkGQEib8WwrTCpq533QnFWwEX", + "tags": [ + "odysee", + "lbry", + "news", + "blockchain", + "education" + ], + "thumbnail": { + "url": "https://spee.ch/9/45245681a50082f7.jpg" + }, + "title": "Odysee", + "website_url": "odysee.com" + }, + "value_type": "channel" + }, + "timestamp": 1628009077, + "txid": "858c42a00a659a948083e9997df16545a1eb0a1e9f765a5a0235182c972b8dbf", + "type": "claim", + "value": { + "languages": [ + "en" + ], + "license": "None", + "release_time": "1628008557", + "source": { + "hash": "058b182f95e3433b540e08865f160855eb41a65fa269aff2ed5b1a07c0bf5b7b3ffc9c1de4a570873d9f93c2602bcd5a", + "media_type": "text/markdown", + "name": "axxl-on-odysee.md", + "sd_hash": "5fcc569c4c087eff097fa17dd738298f3fa658f4b21737e2ba02aa9586691f012c403e21f115c2c36bf808e48977763b", + "size": "1106" + }, + "stream_type": "document", + "tags": [ + "axxl", + "odysee" + ], + "thumbnail": { + "url": "https://spee.ch/1/0e4d2ae15b8553bb.png" + }, + "title": "Unprettiest Human Worldwide is now on Odysee" + }, + "value_type": "stream" + } + }, + "id": 0 +} +``` + +## `POST` /api/v1/proxy?m=version + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "method": "version", + "params": {}, + "id": 1625272173800 +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "build": "release", + "desktop": "Unknown", + "distro": { + "codename": "bionic", + "id": "ubuntu", + "like": "debian", + "version": "18.04", + "version_parts": { + "build_number": "", + "major": "18", + "minor": "04" + } + }, + "lbrynet_version": "0.99.0", + "os_release": "4.14.193-149.317.amzn2.x86_64", + "os_system": "Linux", + "platform": "Linux-4.14.193-149.317.amzn2.x86_64-x86_64-with-Ubuntu-18.04-bionic", + "processor": "x86_64", + "python_version": "3.7.10", + "version": "0.99.0" + }, + "id": 0 +} +``` + +## `POST` /api/v1/proxy?m=get +Get video stream URLs. + +### JSON Data +```json +{ + "jsonrpc":"2.0", + "method":"get", + "params": { + "uri": "lbry://@jordanisgreat505#3/how-to-make-chicken-noodle-oinion-soup#9", + "save_file": false + }, + "id":1625272174700 +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "streaming_url": "https://cdn.lbryplayer.xyz/api/v4/streams/free/how-to-make-chicken-noodle-oinion-soup/9e9a5448d0afbe13bc7cd129acb35a290233487f/09d9b2" + }, + "id": 1625272174700 +} +``` + +## `POST` /api/v1/proxy?m=comment_react_list +Get likes/dislikes for comments. + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "method": "comment_react_list", + "params": { + "comment_ids": "92e04bebad630bd19138ef5fb922ce00a53daa39e8a0c8da9d34bafdf2de3940,beaa7141304adaf9fd54b2c4072b40867db7707510af6272770e6b6da103ac73" + }, + "id": 1625437715900 +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "others_reactions": { + "15f3272aa085ac16771459ad33b5a3f195af5932458ec130407794a957989870": { + "": 0, + "bones": 0, + "creator_like": 0, + "creators_like": 0, + "dislike": 0, + "frozen_tom": 0, + "like": 0, + "likes": 0, + "mind_blown": 0 + }, + "3e2bd8f9fed0943a0895c428476473e6fab21afb694ec54a161f1a6bd0e493c3": { + "": 0, + "bones": 0, + "creator_like": 0, + "creators_like": 0, + "dislike": 5, + "frozen_tom": 0, + "like": 1, + "likes": 0, + "mind_blown": 0 + } + } + }, + "id": 0 +} +``` + +## `POST` /api/v1/proxy?m=claim_search + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "method": "claim_search", + "params":{ + "page_size": 30, + "page": 1, + "no_totals": true, + "not_tags": ["tag"], + "claim_type": ["stream", "collection"], + "order_by": ["release_time | effective_amount | trending_group/trending_mixed"], + "fee_amount": "<=0", + "channel_ids": ["2332c0df0bd5e046db04fe7e3e79f756d35a1523"], + "release_time": "<1626737820", + "include_purchase_receipt": true + }, + "id": 1626737833900 +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "blocked": { + "channels": [], + "total": 0 + }, + "items": [ + { + "address": "bDymdcd6R9mceNmkaMGAdRjifLR3W9xCSb", + "amount": "0.01", + "canonical_url": "lbry://@DistroTube#2/to-protect-yourself,-never-give-your-dna#c", + "claim_id": "c104793f74d9fd7793170f1fd262baec216a1d85", + "claim_op": "create", + "confirmations": 90, + "height": 997927, + "is_channel_signature_valid": true, + "meta": { + "activation_height": 997927, + "creation_height": 997927, + "creation_timestamp": 1626722365, + "effective_amount": "47.0565573", + "expiration_height": 3100327, + "is_controlling": true, + "reposted": 1, + "support_amount": "47.0465573", + "take_over_height": 997927, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": 5.676791667938232 + }, + "name": "to-protect-yourself,-never-give-your-dna", + "normalized_name": "to-protect-yourself,-never-give-your-dna", + "nout": 0, + "permanent_url": "lbry://to-protect-yourself,-never-give-your-dna#c104793f74d9fd7793170f1fd262baec216a1d85", + "short_url": "lbry://to-protect-yourself,-never-give-your-dna#c", + "signing_channel": { + "address": "bDymdcd6R9mceNmkaMGAdRjifLR3W9xCSb", + "amount": "0.005", + "canonical_url": "lbry://@DistroTube#2", + "claim_id": "2332c0df0bd5e046db04fe7e3e79f756d35a1523", + "claim_op": "update", + "confirmations": 5008, + "has_signing_key": false, + "height": 993009, + "meta": { + "activation_height": 695996, + "claims_in_channel": 936, + "creation_height": 695996, + "creation_timestamp": 1578488436, + "effective_amount": "41818.005", + "expiration_height": 2798396, + "is_controlling": true, + "reposted": 0, + "support_amount": "41818.0", + "take_over_height": 695996, + "trending_global": 0.0, + "trending_group": 0, + "trending_local": 0.0, + "trending_mixed": -0.013612883165478706 + }, + "name": "@DistroTube", + "normalized_name": "@distrotube", + "nout": 0, + "permanent_url": "lbry://@DistroTube#2332c0df0bd5e046db04fe7e3e79f756d35a1523", + "short_url": "lbry://@DistroTube#2", + "timestamp": 1625947295, + "txid": "cb40029fb6d79fc88c80ce3c9a0c1b614c8087b0e6fc41678ff80d3e1a400dae", + "type": "claim", + "value": { + "cover": { + "url": "https://spee.ch/1/59fe91a43bd9d9db.png" + }, + "description": "", + "locations": [ + { + "country": "US" + } + ], + "public_key": "", + "public_key_id": "", + "thumbnail": { + "url": "https://spee.ch/e/b18cc0e2d8c9707d.jpg" + }, + "title": "DistroTube", + "website_url": "www.distrotube.com" + }, + "value_type": "channel" + }, + "timestamp": 1626722365, + "txid": "", + "type": "claim", + "value": { + "description": "description", + "languages": ["en"], + "license": "Copyrighted (contact publisher)", + "release_time": "1626721201", + "source": { + "hash": "", + "media_type": "video/mp4", + "name": "to-protect-yourself-never-give.mp4", + "sd_hash": "", + "size": "153053012" + }, + "stream_type": "video", + "tags": ["tags"], + "thumbnail": { + "url": "https://thumbnails.lbry.com/4kDPDio4MYw" + }, + "title": "To Protect Yourself, Never Give Your DNA Or Biometric Data", + "video": { + "duration": 415, + "height": 1080, + "width": 1920 + } + }, + "value_type": "stream" + }, + ] + } +} +``` \ No newline at end of file diff --git a/docs/Odysee-API/api.odysee.com.md b/docs/Odysee-API/api.odysee.com.md new file mode 100644 index 0000000..bcbbb49 --- /dev/null +++ b/docs/Odysee-API/api.odysee.com.md @@ -0,0 +1,159 @@ +--- +title: api.odysee.com +--- + +# Odysee API documentation - api.odysee.com +This is an unofficial documentation for the Odysee API. api.odysee.com is used for view counts and video blocks. For metadata and video streams, api.na-backend.odysee.com is used. + +## `GET` /file/list_blocked +Lists blocked claim IDs (for DMCA or other reasons). + +### `200` OK +``` +{ + "success": true, + "error": null, + "data": { + "outpoints": [ + "...:0", + ], + } +} +``` + +## `GET` /file/view_count +Get view counts of videos. + +### Query parameters +* `REQUIRED` auth_token: Authentication token +* `REQUIRED` claim_id: Claim ID of the video + +### `200` OK +``` +{ + "success": true, + "error": null, + "data": [ + 239 + ] +} +``` + +### `401` Unauthorized +``` +{ + "success": false, + "error": "authentication required", + "data": null +} +``` + +### `400` Bad Request +``` +{ + "success": false, + "error": "claim_id: cannot be blank.", + "data": null +} +``` + +## `POST` /user/new +Create a new account. + +### Form Data +``` +auth_token: "" +language: "en" +app_id: "odyseecom692EAWhtoqDuAfQ6KHMXxFxt8tkhmt7sfprEMHWKjy5hf6PwZcHDV542V" +``` + +### `200` OK +```json +{ + "success": true, + "error": null, + "data": { + "id": 179611504, + "language": "en", + "given_name": null, + "family_name": null, + "created_at": "2021-07-04T15:59:44Z", + "updated_at": "2021-07-04T15:59:44Z", + "invited_by_id": null, + "invited_at": null, + "invites_remaining": 0, + "invite_reward_claimed": false, + "is_reward_approved": false, + "is_email_enabled": true, + "manual_approval_user_id": null, + "reward_status_change_trigger": null, + "settings": null, + "prev_settings": null, + "publish_id": null, + "country": null, + "is_odysee_user": false, + "location": null, + "auth_token": "AUTH_TOKEN" + } +} +``` + +## `GET` /subscription/sub_count +Get the sub count of a channel. + +### Query parameters +* `REQUIRED` auth_token: Authentication token +* `REQUIRED` claim_id: Claim ID of the video + +### `200` OK +```json +{ + "success": true, + "error": null, + "data": [ + 34213 + ] +} +``` + +### `400` Bad Request +```json +{ + "success": false, + "error": "claim_id: cannot be blank.", + "data": null +} +``` + +### `401` Unauthorized +```json +{ + "success": false, + "error": "authentication required", + "data": null +} +``` + +## `GET` /yt/resolve +Get LBRY claim or channel IDs from YouTube video/channel IDs. + +### Query parameters +* video_ids: YouTube video ID (multiple accepted, comma-seperated) +* channel_ids: YouTube channel ID (multiple accepted, comma-seperated) + +### `200` OK +```json +{ + "success": true, + "error": null, + "data": { + "videos": { + "5JvLV2-ngCI": "@AlphaNerd#8/how-ssh-works-2#6", + "12eoipnmdq": "" # Invalid or non-synced videos will return null + }, + "channels": { + "UC5UAwBUum7CPN5buc-_N1Fw": "@TheLinuxExperiment#e5d96ea3720b01cca537c6d90f38e8c11ff06a0a" + } + } +} +``` \ No newline at end of file diff --git a/docs/Odysee-API/api.odysee.live.md b/docs/Odysee-API/api.odysee.live.md new file mode 100644 index 0000000..bc7c465 --- /dev/null +++ b/docs/Odysee-API/api.odysee.live.md @@ -0,0 +1,55 @@ +--- +title: api.odysee.live +--- + +# Odysee API documentation - api.odysee.live +This is an unofficial documentation for the Odysee API. api.odysee.live is used for live streams. + +> ⚠️ Requests for live video streams require extra headers to avoid being blocked. See [proxy/live.go](https://codeberg.org/librarian/librarian/src/branch/main/proxy/live.go#L24) for an example. + +## `GET` /livestream/is_live +Gets data about the livestream. + +### Query parameters +* `channel_claim_id` - Claim ID of the channel + +### `200` OK +```json +{ + "success": true, + "error": null, + "data": { + "Live": true, + "Start": "2022-04-23T20:12:24Z", + "VideoURL": "https://cloud.odysee.live/content/496730b88e41e74742fba5b6365435e5622dce92/master.m3u8", + "ThumbnailURL": "", + "ViewerCount": 9, + "ChannelClaimID": "496730b88e41e74742fba5b6365435e5622dce92", + "ActiveClaim": { + "ClaimID": "5d500bc4a741d14908507b5960280b1d0d1a0fc7", + "ReleaseTime": "2022-04-08T11:38:47Z" + }, + "PastClaims": [ + { + "ClaimID": "5d500bc4a741d14908507b5960280b1d0d1a0fc7", + "ReleaseTime": "2022-04-08T11:38:47Z" + }, + { + "ClaimID": "63a0c26587209371a462118d72a249382f01f5cf", + "ReleaseTime": "2022-03-26T12:26:17Z" + } + ], + "FutureClaims": null + } +} +``` + +## `GET` wss://sockety.odysee.com/ws/commentron +WebSocket for live chat. + +### Query Parameters +* `id` - Claim ID of the channel +* `category` - Claim ID of the channel + +### Messages +TO-DO \ No newline at end of file diff --git a/docs/Odysee-API/comments.odysee.tv.md b/docs/Odysee-API/comments.odysee.tv.md new file mode 100644 index 0000000..1c72ce7 --- /dev/null +++ b/docs/Odysee-API/comments.odysee.tv.md @@ -0,0 +1,250 @@ +--- +title: comments.odysee.tv +--- + +# Odysee API Documentation - comments.odysee.tv +Odysee comments API. + +## `POST` /api/v2?m=comment.List +List comments for a claim. + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "comment.List", + "params": { + "page": 1, + "page_size": 10, + "top_level": true, + "sort_by: 3, # 3 - Best, 2 - Controversial, 0 - New + "parent_id": "parent comment ID", # For comment replies + "claim_id": "463e63afb35a319f260b36ef8d5c3dc41a98ce28", + "channel_id": "ecf0a6be99030d0ad4e10aec11d2c0bab94246ae", + "channel_name": "@MusicARetro" + } +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "page": 1, + "page_size": 600, + "total_pages": 1, + "total_items": 3, + "total_filtered_items": 3, + "items": [ + { + "comment": "otimo", + "comment_id": "cf646d91c2c98a9471954b63bc51cf8c78f86fa1c734fb0c65e49ed0ded3799b", + "claim_id": "463e63afb35a319f260b36ef8d5c3dc41a98ce28", + "timestamp": 1613902598, + "signature": "", + "signing_ts": "1613902598", + "is_hidden": false, + "is_pinned": false, + "channel_id": "d177dcbe8cfd1b6e58797ea573ba856a2be759c0", + "channel_name": "@joseavf1", + "channel_url": "lbry://@joseavf1#d177dcbe8cfd1b6e58797ea573ba856a2be759c0", + "support_amount": 0 + }, { + "comment":"True. Always entertaining content.", + "comment_id":"49357e258bf3b69574ead22e43144630c94ca73950b84cc7280f99c610b559a2", + "claim_id":"93b951fc1f8c7af3def41073c539ec957c3c562a", + "timestamp":1625274573, + "parent_id":"fafae646a3c1ae2e3f4631b77733ef5a6e197f052228d8ae09aa642aa2ddff34", + "signature":"", + "signing_ts":"1625274572", + "is_hidden":false, + "is_pinned":false, + "channel_id":"0db3cea9230c2506e266df053a5a8aca8dc39214", + "channel_name":"@VoidHeart", + "channel_url":"lbry://@VoidHeart#0db3cea9230c2506e266df053a5a8aca8dc39214", + "replies":1, + "support_amount":0 + } + ], + "has_hidden_comments": false + }, + "id": 1 +} +``` + +## `POST` /api/v2?m=reaction.List +Get comment reactions. + +### JSON Data +```json +{ + "jsonrpc": "2.0", + "id": 1, + "method": "reaction.List", + "params": { + "comment_ids": "commentId,commentId2" # Comma-separated list of comment IDs + } + } +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "others_reactions": { + "062d9b51b099db7c4bba2e3aa2811badc901cf116f6fb6cdb68e0a636784fa14": { + "": 0, + "bones": 0, + "creator_like": 0, + "creators_like": 0, + "dislike": 0, + "frozen_tom": 0, + "like": 1, + "likes": 0, + "mind_blown": 0 + } + } + }, + "id": 1 +} +``` + +## `POST` /api/v2?m=comment.Create +Create a comment. + +### JSON Data +```json +{ + "method": "comment.Create", + "id": 1, + "jsonrpc": "2.0", + "params": { + "channel_id": "81bec0b66ff34a1378581751958f5b98f9043d17", + "channel_name": "@vertbyqb", + "claim_id": "2ba7ec34033a42c76468cdfc463943e5de7e364a", + "parent_id": "", # Optional, for replies + "comment": "l test", + "signature": "lbrynet channel sign --channel_name=@channel --hexdata=hexdata", # hexdata is the hex encoded version of the comment. TO-DO: Document signing API + "signing_ts": "1642638072" + } +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": { + "comment": "l test", + "comment_id": "c20a24a3fa050d0b3cd851be1dcf27d3091bcee2e770784fba7d70f3502964d5", + "claim_id": "2ba7ec34033a42c76468cdfc463943e5de7e364a", + "timestamp": 1642638103, + "parent_id": "ef31674ca10560c5c1ad41f9b2e2de80af80fe73121047e96a7ba1f28dd00525", + "signature": "f37dcadda088b77a6ee17271e8d27b2b67820b22bc2752c066864fa9ebfaa33f9ea9d98cf7e7b3209b519e0ca66ea65a62d5738b9d028f42e0c7a420a2b603bf", + "signing_ts": "1642638072", + "channel_id": "81bec0b66ff34a1378581751958f5b98f9043d17", + "channel_name": "@vertbyqb", + "channel_url": "lbry://@vertbyqb#81bec0b66ff34a1378581751958f5b98f9043d17", + "currency": "", + "support_amount": 0, + "is_hidden": false, + "is_pinned": false, + "is_fiat": false + }, + "id": 1 +} +``` + +## `POST` /api/v2?m=comment.Abandon +Abandon a comment. + +### JSON Data +```json +{ + "method": "comment.Abandon", + "id": 1, + "jsonrpc": "2.0", + "params": { + "channel_id": "81bec0b66ff34a1378581751958f5b98f9043d17", + "channel_name": "@vertbyqb", + "claim_id": "2ba7ec34033a42c76468cdfc463943e5de7e364a", + "comment_id": "3eb5e2719a0e70d987eef586234e3fafd31eaafca14f9cc14048accf1ba4aef4", + "signature": "lbrynet channel sign --channel_name=@channel --hexdata=hexdata", # hexdata is the hex encoded version of the comment_id. TO-DO: Document signing API + "signing_ts": "1642638072" + } +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": + { + "comment": "Test", + "comment_id": "3eb5e2719a0e70d987eef586234e3fafd31eaafca14f9cc14048accf1ba4aef4", + "claim_id": "f334b6d4f4b42620d5abfe07ad1100cf1d597a9f", + "timestamp": 1649613454, + "signature": "2945092ad56d8997d5537bd77bd7420b16004e7fa41d2fc639dfe10b0601f2548cb9ce8b6d8ebb024175e8ba62035f11052fdc2c5b3b089c92134bfdba9abd61", + "signing_ts": "1649613454", + "channel_id": "ebec8cc32a98cfed2902f572bad62c3c0378def2", + "channel_name": "@MorsMortium", + "channel_url": "lbry://@MorsMortium#ebec8cc32a98cfed2902f572bad62c3c0378def2", + "currency": "", + "support_amount": 0, + "is_hidden": false, + "is_pinned": false, + "is_fiat": false, + "abandoned": true + }, + "id": 1 +} +``` + +## `POST` /api/v2?m=comment.Edit +Edit a comment. + +### JSON Data +```json +{ + "id": 1, + "jsonrpc": "2.0", + "method": "comment.Edit", + "params": { + "comment_id": "3eb5e2719a0e70d987eef586234e3fafd31eaafca14f9cc14048accf1ba4aef4", + "comment": "Test", + "channel_name": "@MorsMortium", + "channel_id": "ebec8cc32a98cfed2902f572bad62c3c0378def2", + "signature": "lbrynet channel sign --channel_name=@channel --hexdata=hexdata", # hexdata is the hex encoded version of the comment. TO-DO: Document signing API + "signing_ts": "1642638072" + } +} +``` + +### `200` OK +```json +{ + "jsonrpc": "2.0", + "result": + { + "comment": "Testggggggddfsdsd", + "comment_id": "bc91909960cb7b74c09777d9291bebf208e0a6e32801fbbe64acfd809cbb8218", + "claim_id": "f334b6d4f4b42620d5abfe07ad1100cf1d597a9f", + "timestamp": 1649615106, + "signature": "90080fa06bbe51530a224f604be850a851110248e50d5aa682b776f12f097fe78d68775816addfad49277243c6968f40cfd259ceb56d7f209ed923186705560a", + "signing_ts": "1649615106", + "channel_id": "ebec8cc32a98cfed2902f572bad62c3c0378def2", + "channel_name": "@MorsMortium", + "channel_url": "lbry://@MorsMortium#ebec8cc32a98cfed2902f572bad62c3c0378def2", + "currency": "", + "support_amount": 0, + "is_hidden": false, + "is_pinned": false, + "is_fiat": false + }, + "id": 1 +} +``` \ No newline at end of file diff --git a/docs/Odysee-API/lighthouse.odysee.tv.md b/docs/Odysee-API/lighthouse.odysee.tv.md new file mode 100644 index 0000000..ff21abd --- /dev/null +++ b/docs/Odysee-API/lighthouse.odysee.tv.md @@ -0,0 +1,70 @@ +--- +title: lighthouse.odysee.tv +--- + +# Odysee API documentation - lighthouse.odysee.tv +lighthouse.odysee.tv is used for searching Odysee. + +> ⚠️ Requests to these endpoints require extra headers to avoid being blocked. See [api/search.go](https://codeberg.org/librarian/librarian/src/branch/main/api/search.go#L36) for an example. + +## `GET` /search +Search Odysee for channels and videos. + +### Query parameters +* `REQUIRED` s: Search query (string) (3-99999 characters) +* size: Amount of search results to get (number, default: 9) +* from: Use to get next page of results (number) +* claimType: The type of claim to search for (accepts list, (file,channel): file, channel, default: file,channel) +* nsfw: Show NSFW videos (boolean) +* free_only: Show paid videos (boolean) +* related_to: Claim ID of video to get related videos (string) + +### `200` OK +``` +[ + { + "claimId": "2332c0df0bd5e046db04fe7e3e79f756d35a1523", + "name": "@DistroTube" + } +] +``` + +### `400` Bad Request +``` +{ + "success": false, + "error": "S: cannot be blank.", + "data": null +} +``` + +## `GET` /autocomplete + +### Query parameters +* `REQUIRED` s: Search query (string) + + +### `200` OK +``` +[ + "searchnu-searchqu-software-entfernen", + "searchsploit-searching-for-exploits", + "SearchFunctionHangUp", + "search1", + "searchblackbox-net-history", + "CRYM---Searchlights", + "searchblackbox-review-1", + "torrent-search-searching-bittorrent", + "searchthat-net-v7", + "searchthat-new-design" +] +``` + +### `400` Bad Request +``` +{ + "success": false, + "error": "S: cannot be blank.", + "data": null +} +``` \ No newline at end of file diff --git a/docs/Odysee-API/odysee.com.md b/docs/Odysee-API/odysee.com.md new file mode 100644 index 0000000..0e203bf --- /dev/null +++ b/docs/Odysee-API/odysee.com.md @@ -0,0 +1,172 @@ +--- +title: odysee.com +--- + +# Odysee API documentation - odysee.com +This is unofficial documentation for the Odysee API. + +## `GET` /$/api/content/v2/get + +### `200` OK +Response shortened and channel IDs removed. + +```json +{ + "status": "success", + "data": { + "en": { + "categories": { + "FEATURED": { + "channelIds": [], + "name": "popculture", + "sortOrder": 10, + "icon": "Pop Culture", + "label": "Pop Culture", + "description": "Movies, TV, Comic Books, and all the other pop culture content on Odysee", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "ART": { + "channelIds": [], + "name": "artists", + "sortOrder": 20, + "icon": "Artists", + "label": "Artists", + "description": "Odysee's home for art, animation, comedy, and everything inbetween", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "PRIMARY_CONTENT": { + "channelIds": [], + "name": "education", + "sortOrder": 30, + "icon": "Education", + "label": "Education", + "description": "Who needs school when there's Odysee?", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "LIFESTYLE": { + "channelIds": [], + "name": "lifestyle", + "sortOrder": 30, + "icon": "Peace", + "label": "Lifestyle", + "description": "Odysee's home for lifestyle content - cooking, gardening, fitness, you name it", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "MUSIC": { + "channelIds": [], + "name": "music", + "sortOrder": 40, + "icon": "MusicCategory", + "label": "Music", + "description": "Get your groove on with Odysee", + "image": "https://player.odycdn.com/speech/category-music:8.jpg", + "channelLimit": "1", + "daysOfContent": 720, + "pageSize": 12 + }, + "GAMING": { + "channelIds": [], + "name": "gaming", + "sortOrder": 60, + "icon": "Gaming", + "label": "Gaming", + "description": "Pew pew bzzz gaming on Odysee", + "image": "https://player.odycdn.com/speech/category-gaming:5.jpg", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12, + "tags": [ + "gaming" + ], + "searchLanguages": [ + "en" + ] + }, + "TECHNOLOGY": { + "channelIds": [], + "name": "tech", + "sortOrder": 80, + "icon": "Speaker", + "label": "Tech", + "description": "Hardware, software, startups, photography on Odysee", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "FINANCE": { + "channelIds": [], + "name": "finance", + "sortOrder": 100, + "icon": "DollarSign", + "label": "Finance 2.0", + "description": "Crypto, Money, Economics, Markets on Odysee", + "image": "https://player.odycdn.com/speech/category-finance:c.jpg", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "UNIVERSE": { + "channelIds": [], + "name": "universe", + "sortOrder": 60, + "icon": "Universe", + "label": "Universe", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "NEWS_AND_POLITICS": { + "hideByDefault": true, + "channelIds": [], + "name": "news", + "sortOrder": 90, + "icon": "Aperature", + "label": "News & Politics", + "description": "Stay up to date with all that's happening around the world on Odysee", + "image": "", + "channelLimit": "1", + "daysOfContent": 180, + "pageSize": 12 + }, + "WILD_WEST": { + "hideByDefault": true, + "name": "wildwest", + "sortOrder": 999, + "icon": "WildWest", + "label": "Wild West", + "description": "Boosted by user credits, this is what the community promotes on Odysee", + "image": "https://player.odycdn.com/speech/category-wildwest:1.jpg", + "channelLimit": "1", + "searchLanguages": [ + "en" + ], + "excludedChannelIds": [] + } + }, + "meme": { + "text": "don't worry about the vase", + "url": "https://odysee.com/@Odysee:8?view=discussion" + }, + "announcement": "" + }, + "fr": { + "categories": { + + } + } + } +} +``` \ No newline at end of file