{"id":4271,"date":"2021-11-15T13:54:44","date_gmt":"2021-11-15T05:54:44","guid":{"rendered":"https:\/\/www.enablex.io\/developer\/?page_id=4271"},"modified":"2025-02-24T13:34:33","modified_gmt":"2025-02-24T05:34:33","slug":"room-connection","status":"publish","type":"page","link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/video-api\/client-api\/android-toolkit\/room-connection\/","title":{"rendered":"Room Connection: Android SDK &#8211; Video API"},"content":{"rendered":"\n<h4>Table of Contents<\/h4>\n\n\n\n<ul><li><a href=\"#init-room\">Initiate a Room<\/a><\/li><li><a href=\"#connect-room\">Connect to Room<\/a><\/li><li><a href=\"#join-room\">Join a Room with Stream<\/a><\/li><li><a href=\"#disconnect-room\">Disconnect from a Room<\/a><\/li><li><a href=\"#handle-disconnect-reconnect\">Handle Disconnection &amp; Reconnection<\/a><\/li><\/ul>\n\n\n\n<a name=\"init-room\"><\/a>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Initiate a Room<\/h2>\n\n\n\n<p>An RTC session takes place in a Virtual Room hosted on the Portal and the Android SDK allows the Client endpoint application to connect to it. The process starts with initializing a Room Object using the <code>EnxRoom <\/code>Class.<\/p>\n\n\n\n<p><strong>Constructor:<\/strong> <code>EnxRoom room = new EnxRoom( EnxRoomObserver-Instance, EnxStreamObserver-Instance)   <\/code><\/p>\n\n\n\n<p>After the Room Object is instantiated, Call <code>EnxRoom.init()<\/code> method.<\/p>\n\n\n\n<p><strong>Class<\/strong>: <code>EnxRoom<\/code><\/p>\n\n\n\n<p><strong>Method<\/strong>: <code>public void init( Context context )<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">EnxRoom room = new EnxRoom(\n         EnxRoomObserver-Instance, \n         EnxStreamObserver-Instance\n     );\nroom.init( activity-class-context );<\/pre>\n\n\n\n<a name=\"connect-room\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Connect to Room<\/h2>\n\n\n\n<p>The\u00a0<code>EnxRoom.connect()<\/code> method\u00a0connects the client application to the virtual Room\u00a0hosted on the\u00a0Video server where the RTC session takes place.\u00a0After initializing the room, the client endpoint must\u00a0connect\u00a0to the\u00a0room to establish a bi-directional communication channel over a\u00a0Web\u00a0Socket.\u00a0\u00a0<\/p>\n\n\n\n<p>As the communication takes place over the\u00a0Web\u00a0Sockets using Socket\u00a0Events, any network issue leading to the disconnection of the Web Sockets would cause the communication to fail. In such cases,\u00a0The Portal offers the option\u00a0to Auto-Reconnect. <\/p>\n\n\n\n<p>Note that Auto-Reconnect is not applicable under the following circumstances:<\/p>\n\n\n\n<ul><li>The last participant disconnected from Adhoc Room.<\/li><li>The participant is dropped from the Room by the Moderator.<\/li><li>The user disconnects explicitly.<\/li><\/ul>\n\n\n\n<p><strong>Class<\/strong>: <code>EnxRoom<\/code><\/p>\n\n\n\n<p><strong>Method<\/strong>: <code>public void connect(String token,  JSONObject roomInfo, JSONObject advanceOptions)<\/code><\/p>\n\n\n\n<p><strong>Parameters<\/strong>:&nbsp;<\/p>\n\n\n\n<ul><li><code>token<\/code>: String. A JWT Token to connect to the Room as received using Video API Call via Application Server.<\/li><li><code>roomInfo<\/code>\u00a0\u2013 Optional. JSON Object with Reconnection Options. JSON keys are explained below: <ul><li><code>allow_reconnect:<\/code>\u00a0<code>Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to enable Auto-Reconnect feature. When set to <em>false<\/em>, the Client endpoint does not try to reconnect to the Portal.<\/li><li><code>number_of_attempts:<\/code>\u00a0<code>Numeric<\/code>. Min Value: 1. Max Value: Not specified, use any number. Default: 3. A maximum number of attempts made by the Client endpoint to reconnect to the Portal.<\/li><li><code>timeout_interval<\/code>:\u00a0<code>Numeric<\/code>. Timeout Interval in Millisecond required by the Client endpoint to wait before attempting to reconnect.<\/li><li><code>audio_only<\/code>: <code>Boolean<\/code>. Set to <em>true<\/em> if you want to join as an audio-only call.<\/li><\/ul><\/li><li><code>advanceOptions<\/code> &#8211; Optional. JSON Object with an array of advanced options. Each element of the array consists of a key-value pair as given below: <ul><li><code>battery_updates<\/code>: <code>Boolean<\/code>. Set to <em>true<\/em> to enable Auto-Battery Update feature. <\/li><li><code>notify-video-resolution-change<\/code>: <code>Boolean<\/code>. Set to <em>true<\/em> to enable Video Resolution Change Notification feature. <\/li><\/ul><\/li><\/ul>\n\n\n\n<p><strong>Callbacks<\/strong>:<\/p>\n\n\n\n<ul><li><code>onRoomConnected <\/code>&#8211; Acknowledgment to the Client endpoint when it gets connected to the Room.<\/li><li><code>onRoomError <\/code>&#8211; Acknowledgment to the Client endpoint when it fails to connect to the Room.<\/li><li><code>onUserConnected <\/code>&#8211; Notification to everyone in the Room when a new user is connected to the Room.<\/li><li><code>onRoomAwaited <\/code>\u2013 Notification to the Client endpoint when it awaits the Moderator\u2019s permission to enter a Knock-enabled Room or awaits the Moderator to enter the Room first in a Wait-for-Moderator enabled Room. The event&#8217;s JSON structure provides information on whether the Room is Knock-enabled <code>{ \"event_type\": \"knock\" }<\/code> or Wait-for-Moderator enabled <code>{ \"event_type\": \"wait_for_moderator\" }<\/code>. <\/li><li><code>onUserAwaited <\/code>\u2013 Notification to the Moderator when a user awaits their permission to enter the Room. Refer to <a href=\"\/developer\/video-api\/client-api\/android-toolkit\/moderate-participants-entry\/\" target=\"_blank\" rel=\"noreferrer noopener\">Moderate Participant\u2019s entry to a Session<\/a> for more details.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">String token = \"XXX\":\nJSONObject roomInfo = {\n\t\"allow_recnnect\": true,\n\t\"number_of_attempts\": 3,\n\t\"timeout_interval\": 10000,\n\t\"audio_only\": true\n}\n\nJSONObject advancedOptions = {\n\t[\n\t\t{\n\t\t\t\"id\": \" battery_updates\",\n    \t\t\t\"enable\": true,\n\t\t},\n\t\t{\n\t\t\t\"id\": \" notify-video-resolution-change\",\n    \t\t\t\"enable\": true,\n\t\t}\n\t]\n}\n\n\/\/ Initiates Room \nEnxRoom room = new EnxRoom(this, this, this); \n\n\/\/ Connects with Re-Connection &amp; Advance Options\nroom.connect(token, roomInfo, advanceOptions);  \n\npublic void onRoomConnected(EnxRoom room, JSONObject roomMetaData) {\n \/\/ Connected. \n \/\/Callback received with room object and Room Meta JSON\n}\n\npublic void onRoomError(JSONObject roomError) {\n \/\/ Connection failed. Find error\n}\n\npublic void onUserConnected(JSONObject userData) {\n \/\/ Notification to all that a new user is connected. \n \/\/ userData json has user information\n}\n<\/pre>\n\n\n\n<p><strong>Error Codes \/ Exceptions:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5086<\/td><td>Unable to connect to Room.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<a name=\"join-room\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Join a Room with Stream<\/h2>\n\n\n\n<p>A typical process to connect to a room is as&nbsp;follows:&nbsp;<\/p>\n\n\n\n<ol><li>Initiate a room and connect to it.&nbsp;<\/li><li>Initiate streaming after connecting which requires you to check media accessibility.<\/li><li>Publish local stream.<\/li><li>Check if&nbsp;the&nbsp;stream is successfully published.&nbsp;<\/li><\/ol>\n\n\n\n<p>To successfully join a Room, you need to ensure the success of each step before proceeding to the next thus making it a complex process. <\/p>\n\n\n\n<p>The <code>EnxRtc.joinRoom()<\/code> method allows you to quickly join a room and get started without having to follow the&nbsp;above&nbsp;procedure step by step. <\/p>\n\n\n\n<p><strong>Class<\/strong>: <code>EnxRtc<\/code><\/p>\n\n\n\n<p><strong>Method<\/strong>: <code>public EnxStream joinRoom(String token, JSONObject  publishStreamInfo, JSONObject roomInfo, JSONArray advanceOptions)<\/code> <\/p>\n\n\n\n<p><strong>Parameters<\/strong>: <\/p>\n\n\n\n<ul><li><code>token <\/code>&#8211; String. A JWT Token to connect to the Room as received using Video API Call via Application Server.<\/li><li><code>publishStreamInfo<\/code>&#8211; Optional. <a href=\"..\/..\/appendix\/#stream-options\">Stream Initialization Meta Info<\/a>. <\/li><li><code>roomInfo<\/code> &#8211; Optional. JSON Object with Reconnection Options. JSON keys are explained below: <ul><li><code>allow_reconnect<\/code>:\u00a0<code>Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to enable Auto-Reconnect feature. When set to <em>false<\/em>, Client endpoint does not try to reconnect to the Portal.<\/li><li><code>number_of_attempts<\/code>:\u00a0<code>Numeric<\/code>. Min Value: 1. Max Value: Not specified, use any number. Default: 3. A maximum number of attempts made by the Client endpoint to reconnect to the Portal.<\/li><li><code>timeout_interval<\/code>:\u00a0<code>Numeric<\/code>. Timeout Interval in Millisecond required by the Client endpoint to wait before attempting to reconnect.<\/li><li><code>activeviews<\/code>: <code>Enum<\/code>. Values: <code>list<\/code> or <code>view<\/code>. Set to <code>view<\/code> to get a predefined view of all the video Streams in a session. Set to <code>list<\/code> to get individual streams to create your own view with the video streams.<\/li><li><code>forceTurn<\/code>: <code>Boolean<\/code>. Default: <em>false<\/em>. If enabled, Video Streams are forced through a TURN Server.<\/li><li><code>chat_only<\/code>: <code>Boolean<\/code>. Default: <em>false<\/em>. Set to <em>true<\/em> to allow only text-chat in the Stream thus disabling audio\/video streams.<\/li><li><code>playerConfiguration<\/code>: JSON Object with Video Player configurations.<ul><li><code>audiomute<\/code>: <code>Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to show and <em>false<\/em> to hide the Audio Mute\/Unmute button.<\/li><li><code>videomute<\/code>: <code>Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to show and <em>false<\/em> to hide the Video Mute\/Unmute button.<\/li><li><code>bandwidth: Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to show and <em>false<\/em> hide the Low-Bandwidth notification button.<\/li><li><code>screenshot<\/code>: <code>Boolean<\/code>. Default: <em>true<\/em>. Set to <em>true<\/em> to show and <em>false<\/em> to hide the Screenshot button.<\/li><li><code>avatar<\/code>: <code>Boolean<\/code>. Default: <em>true<\/em>. Set <em>true<\/em> to show and <em>false<\/em> to hide Avatar for No-Video Stream.<\/li><li><code>iconColor: String<\/code>. Default: #FFFFFF. HEX color code for icons.<\/li><li><code>iconHeight: Number<\/code>. Default: 30. Icon height in pixel.<\/li><li><code>iconWidth: Number<\/code>. Default: 30. Icon width in pixel.<\/li><li><code>avatarHeight: Number<\/code>. Default: 200. Avatar height in pixel.<\/li><li><code>avatarWidth: Number<\/code>. Default: 200. Avatar width in pixel.<\/li><\/ul><\/li><\/ul><\/li><li><code>advanceOptions<\/code>\u00a0\u2013 Optional. JSON Object with an array of advanced options. Each element of the array consists of a key-value pair as given below:<ul><li><code>battery_updates<\/code>:\u00a0<code>Boolean<\/code>. Set to\u00a0<em>true\u00a0<\/em>to enable Auto-Battery Updates feature.<\/li><li><code>notify-video-resolution-change<\/code>:\u00a0<code>Boolean<\/code>. Set\u00a0to\u00a0<em>true<\/em>\u00a0to enable Video Resolution Change Notification feature.<\/li><\/ul><\/li><\/ul>\n\n\n\n<p><strong>Returns<\/strong>:  Published Local Stream JSON object.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">JSONObject publishStreamInfo = {\n         video: true,\n         audio: true,\n         data: true,\n         attributes: { name: \"XX\" }\n};\n\nJSONObject roomInfo = {\n\tallow_reconnect: true,\n\tnumber_of_attempts: 3,\n\ttimeout_interval: 15,\n\tactiveviews: \"view\",\n\tforceTurn: false,\n\tchat_only: false,\n\tplayerConfiguration: {\n\t\taudiomute: true,\n\t\tvideomute: true,\n\t\tbandwidth: true,\n\t\tscreenshot: true,\n\t\tavatar: true,\n\t\ticonColor: \"#FFFFFF\",\n\t\ticonHeight: 30,\n\t\ticonWidth: 30,\n\t\tavatarHeight: 200,\n\t\tavatarWidth: 200\n\t}\n};\n\nJSONObject advanceOptions = [\n\t{\u200b\t\"id\": \"notify-video-resolution-change\",\n\t\t\"enable\": true\n\t}\u200b\u200b\u200b\u200b\u200b,\n\t{\u200b\u200b\u200b\u200b\u200b\t\"id\": \"battery_updates\",\n\t\t\"enable\": true\n\t}\n]\n\nString token = \"XXX\";\n\nEnxRtc enxRtc = new EnxRtc(\n                  Current-Class-Context, \n                  EnxRoomOberver-Instance, \n                  EnxStreamObserver-Instance);\n\n\nEnxStream localStream = enxRtc.joinRoom(token, publishStreamInfo, roomInfo, advanceOptions);\n\npublic void onRoomConnected(EnxRoom room, JSONObject roomMetaData) {\n   \/\/ Connected. \n   \/\/Callback received with room object and Room Meta JSON\n}\n\npublic void onRoomError(JSONObject roomError) {\n   \/\/ Connection failed. Find error\n}<\/pre>\n\n\n\n<a name=\"disconnect-room\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Disconnect from a Room<\/h2>\n\n\n\n<p>The <code>EnxRoom.disconnect()<\/code> method&nbsp;is used to close the session and&nbsp;disconnect&nbsp;the client endpoint from the&nbsp;Room. The&nbsp;media and&nbsp;signaling&nbsp;sockets are also released in this process.&nbsp;&nbsp;<\/p>\n\n\n\n<p><strong>Class<\/strong>: <code>EnxRoom<\/code> <\/p>\n\n\n\n<p><strong>Method<\/strong>: <code>public void disconnect()<\/code> &#8211; No parameter required.<\/p>\n\n\n\n<p><strong>Observers<\/strong>:<\/p>\n\n\n\n<ul><li><code>onRoomDisconnected <\/code>&#8211; Acknowledgment to the user when disconnected. The Callback allows you to update the UI of the user post disconnect.<\/li><li><code>onUserDisconnected <\/code>&#8211; Notification to everyone in the Room when a user gets disconnected. The Callback allows you to update the UI of other connected users.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">room.disconnect();\n\npublic void onRoomDisConnected( JSONObject jsonobject) {\n \/\/ You are disconnected\n}\n\npublic void onUserDisconnected( JSONObject userData ) {\n \/\/ A user is disconnected\n \/\/ User Information of disconnected user\n}<\/pre>\n\n\n\n<p><strong>Error Codes \/ Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5031<\/td><td>Repeated disconnect() call made while previous disconnection request is in process. <\/td><\/tr><tr><td>5032<\/td><td>When the user tries to disconnect after getting disconnected from the Room.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<a name=\"handle-disconnect-reconnect\"><\/a>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2>Handle Disconnection &amp; Reconnection<\/h2>\n\n\n\n<p>A Client endpoint is connected with the Portal over Secured Web Socket, which is susceptible to network failures. The Client endpoint is notified of the failure through the following Callbacks:<\/p>\n\n\n\n<p><strong>Callbacks<\/strong>:<\/p>\n\n\n\n<ul><li><code>onConnectionLost<\/code> \u2013 Notification to the Client endpoint when the endpoint loses network connection.<\/li><li><code>onConnectionInterrupted <\/code>&#8211; Notification to the Client endpoint when the connection is interrupted e.g Switch from WiFi to 4G and vice versa.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">public void onConnectionLost(JSONObject json){\n\t\/\/ Disconnected. Handle UI \n} \n\npublic void onConnectionInterrupted(JSONObject json){\n\t\/\/ Interrupted. Handle UI \n}<\/pre>\n\n\n\n<p>For disconnected endpoints, Portal provides\u00a0<strong>Auto-Reconnection<\/strong>\u00a0functionality to ensure a better user experience. To use the Auto-Reconnection feature, you must <a rel=\"noreferrer noopener\" href=\"#connect-room\" target=\"_blank\">Connect to Room with Reconnection options.<\/a> Note that Auto-Reconnect is not applicable under the following circumstances:  <\/p>\n\n\n\n<ul id=\"block-f5d0d2f9-f1a6-41bb-b957-055919d5d236\"><li>The last participant disconnected from Adhoc Room.<\/li><li>The participant is dropped from the Room by the Moderator.<\/li><li>The user disconnects explicitly.<\/li><\/ul>\n\n\n\n<p><strong>Callbacks<\/strong>:<\/p>\n\n\n\n<ul><li><code>onUserReconnectSuccess<\/code> \u2013 Notification to the user when the Client endpoint successfully gets reconnected with the Portal.<\/li><li><code>onReconnect<\/code> \u2013 Notification to the user when the Client endpoint attempts to reconnect within the given time period.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/To receive and handle reconnection events, \n\/\/ you need to pass an argument called roomInfo (its is an optional parameter) while connecting to the room through the room api - joinRoom() or connect(). For example,\n\nJSONObject roomInfo = { \n    \"allow_reconnect\": true,\n    \"number_of_attempts\": 3,\n    \"timeout_interval\": 10000,\n    \"audio_only\": false\n};\n\n\/\/This will helps the end-point user to auto-reconnect to the same room.\n\n\npublic void onUserReconnectSuccess(EnxRoom room, JSONObject roomMetaData){\n \/\/ Got reconnected\n}\n\npublic void onReconnect(String message){\n \/\/ Reconnecting \n}<\/pre>\n\n\n\n<p><strong>Error Codes \/ Exceptions<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Code<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>5073<\/td><td>Connection is switched to the current network.<\/td><\/tr><tr><td>5074<\/td><td>Network disconnected.  Reconnection attempt timed-out.<\/td><\/tr><tr><td>5086<\/td><td>When any method is called while the Room is not connected. <\/td><\/tr><tr><td>5087<\/td><td>Reconnection failed.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<div class=\"wp-block-columns\">\n<div class=\"wp-block-column\">\n<p>\u2190  <a href=\"..\/local-stream\/\">Create Local Stream<\/a> <\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-center\"><a href=\"..\/\">Index<\/a><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column\">\n<p class=\"has-text-align-right\"><a href=\"..\/video-quality-adaption\/\">Quality Adaption with Bandwidth<\/a>  \u2192<a href=\"\/developer\/how-to-use\/\"><\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Table of Contents Initiate a Room Connect to Room Join a Room with Stream Disconnect from a Room Handle Disconnection &amp; Reconnection Initiate a Room An RTC session takes place in a Virtual Room hosted on the Portal and the Android SDK allows the Client endpoint application to connect to it. The process starts with initializing a Room Object using the EnxRoom Class. Constructor: EnxRoom room = new EnxRoom( EnxRoomObserver-Instance,&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3740,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":""},"featured_image_src":null,"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false,"featured":false,"featured-large":false},"uagb_author_info":{"display_name":"vcxdevwpadmin","author_link":"https:\/\/doc.smartflomeet.ttns.in\/developer\/author\/vcxdevwpadmin\/"},"uagb_comment_info":0,"uagb_excerpt":"Table of Contents Initiate a Room Connect to Room Join a Room with Stream Disconnect from a Room Handle Disconnection &amp; Reconnection Initiate a Room An RTC session takes place in a Virtual Room hosted on the Portal and the Android SDK allows the Client endpoint application to connect to it. The process starts with&hellip;","_links":{"self":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4271"}],"collection":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/comments?post=4271"}],"version-history":[{"count":0,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/4271\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/pages\/3740"}],"wp:attachment":[{"href":"https:\/\/doc.smartflomeet.ttns.in\/developer\/wp-json\/wp\/v2\/media?parent=4271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}