UNPKG

openapi-directory

Version:

Building & bundling https://github.com/APIs-guru/openapi-directory for easy use from JS

1 lines 36.1 kB
{"openapi":"3.0.0","info":{"contact":{"email":"api@link.fish","name":"link.fish","url":"https://link.fish/api"},"description":"API to easily extract data from websites.\n\n\n# Base URL\n\n\nAll URLs referenced in the documentation have the following base:\n\n\n```\nhttps://api.link.fish\n```\n\n\nThe REST API is only served over HTTPS. To ensure data privacy, unencrypted HTTP is not supported.\n\n\n# Authentication\nHTTP requests to the REST API are protected with [HTTP Basic authentication](https://en.wikipedia.org/wiki/Basic_access_authentication). You will use the email address of your link.fish account as the username and your API access token as the password for HTTP Basic authentication.\n\nIf you do not have an account yet, go to [https://link.fish/api](https://link.fish/api) and create one first.\n\nYou will receive the API access token automatically via email after you signed up. To generate a new token and invalidate the current one log into your link.fish account at [https://app.link.fish](https://app.link.fish) and go to: \"Plugins\" -> \"API Dashboard\"\n\nThere you can also see how many credits you used already.\n\n\n# Errors\nThe API uses standard HTTP status codes to indicate the success or failure of the API call. The body of the response will be JSON in the following format:\n```\n{\n\n \"status\": {HTTP STATUS CODE}\n \"message\": \"{ERROR MESSAGE}\"\n}\n```\nLike for example when the authorization is not provided or wrong:\n```\n{\n\n \"status\": 401\n \"message\": \"Unauthorized\"\n}\n```\n\n# Request IDs\n\nEach API request has an associated request identifier. You can find it in the response headers, under X-LF-Request-Id. In case you have problems please provide this identifier that we can help you as good and fast as possible.\n\n\nExample:\n```\nX-LF-Request-Id: f7f0036f-5277-421a-b143-f7a151571d18\n```\n\n\n# Item format\n\nThe data is by default deeply nested. So if it should be checked if there is an offer with a price, the whole tree has to be checked. To make that simpler, it is also possible to return the data \"flat\". If selected it will flatten the tree by copying all the data to the main level under a property with the name of its type and link the data internally.\n\nInformation: We created a node module which allows converting between the two formats. It did not get open sourced yet. If you are in need, simply contact us via api@link.fish.\n\n\n# Response Content Type\nBy default, all data gets returned as JSON. If the data should be returned as XML add the following header:\n\n```\nAccept: application/xml\n```\n\n# Credits\n\nDepending on the request made a different amount of credits get charged. How many which request costs can be found on the [API pricing page](http://link.fish/api/#pricing). Additionally, does a header named \"X-LF-Credits-Charged\" get added to each successful response with information about the credits.\n\nExample:\n```\nX-LF-Credits-Charged: 1 # Credits used for current requests\nX-LF-Credits-Subscription-Max: 1000 # Total credits available in subscription\nX-LF-Credits-Subscription-Used: 512 # Credits still left in current month\n```\nYou can check anytime how many credits you did use already by logging into your link.fish account at [https://app.link.fish](https://app.link.fish) and checking under: \"Plugins\" -> \"API Dashboard\"\n\n\nIf you have problems, questions or improvement advice please send us an email to api@link.fish\n","termsOfService":"https://link.fish/terms-of-service/","title":"link.fish API","version":"Sun Jun 15 2025 13:47:08 GMT+0000 (Coordinated Universal Time)","x-apisguru-categories":["developer_tools"],"x-logo":{"backgroundColor":"#fafafa","url":"https://twitter.com/linkfish_/profile_image?size=original"},"x-origin":[{"format":"swagger","url":"https://api.link.fish/swagger.yaml","version":"2.0"}],"x-providerName":"link.fish"},"tags":[{"description":"All the currently available link.fish REST endpoints.","name":"REST-Endpoints"}],"paths":{"/Urls/apps":{"get":{"description":"Visits the URL and checks if there are mobile apps on them and returns the found ones.\n\nWill by default return the app identifiers and not the full URL to the apps. To return URLs instead set the parameter \"return_urls\" to true.\n\nThe URLs can also be created manually like this:\n\n| Property | URL |\n| -------- | -------------------------------------------------- |\n| android | https://play.google.com/store/apps/details?id={ID} |\n| ios | https://itunes.apple.com/us/app/app-name/id{ID} |\n\nProperties only get set when a value for it has been found. That means that if no app has been found only the property \"url\" will be set.\n","parameters":[{"description":"The URL of the website to query","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"Returns app URLs instead of the identifiers","in":"query","name":"return_urls","required":false,"schema":{"type":"boolean","default":false}},{"description":"If the page should be fully rendered with a browser to extract data. The request will then cost 5 credits instead of 1!","in":"query","name":"browser_render","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Apps"}},"application/xml":{"schema":{"$ref":"#/components/schemas/Apps"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Get mobile apps","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com'\n },\n uri: 'https://api.link.fish/Urls/apps',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/apps \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}],"x-explorer-description":"Visits the URL and checks if there are mobile apps on them and returns the found ones."}},"/Urls/browser-data":{"get":{"description":"Visits the URL with a full browser and extracts the data. This request costs 5 credits.","parameters":[{"description":"The URL of the website to query","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"If the items should be return \"normal\" with multiple levels or \"flat\" with just one level and linked instead.","in":"query","name":"item_format","schema":{"type":"string","enum":["normal","flat"],"default":"normal"}},{"description":"Some types like \"PropertyValue\" do save key and value in separate properties which makes the data harder to process. If this option gets set it converts them automatically into the regular key -> value format.","in":"query","name":"simplify_special_types","schema":{"type":"boolean","default":false}},{"description":"Returns additionally also the raw HTML as property \"rawHtml\".","in":"query","name":"include_raw_html","schema":{"type":"boolean","default":false}},{"description":"If and what kind of screenshot should be returned. Do only request screenshot generation when really needed because it will increase the response time significantly.","in":"query","name":"screenshot","schema":{"type":"string","enum":["none","normal","full"],"default":"none"}},{"description":"The widh of the screenshot in pixel.","in":"query","name":"screenshot_width","schema":{"type":"integer","minimum":50,"maximum":1280,"default":640}},{"description":"The file format of the screenshot","in":"query","name":"screenshot_file_format","schema":{"type":"string","enum":["png","jpg"],"default":"png"}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlBrowser"}},"application/xml":{"schema":{"$ref":"#/components/schemas/UrlBrowser"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Extract data (browser)","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com',\n screenshot: 'normal',\n screenshot_width: 100\n },\n uri: 'https://api.link.fish/Urls/browser-data',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n fs.writeFile('screenshot.png', data.screenshot, 'base64', function (err) {});\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/browser-data \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}]}},"/Urls/browser-screenshot":{"get":{"description":"Visits the URL with full browser and creates a screenshot. This request costs 5 credits.","parameters":[{"description":"The URL of the website to create screenshot of","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"What kind of screenshot should be returned. If it should be a regular 16:9 screenshot or one with the full page height","in":"query","name":"type","schema":{"type":"string","enum":["normal","full"],"default":"normal"}},{"description":"The file format of the screenshot","in":"query","name":"file_format","schema":{"type":"string","enum":["png","jpg"],"default":"png"}},{"description":"The widh of the screenshot in pixel.","in":"query","name":"width","schema":{"type":"integer","minimum":50,"maximum":1280,"default":640}}],"responses":{"200":{"description":"OK - Successful Request"},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"image/jpeg":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Generate screenshot (browser)","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var request = require('request');\nvar fs = require('fs');\n\nconst options = {\n method: 'GET',\n qs: {\n url: 'https://example.com'\n },\n encoding: 'binary',\n uri: 'https://api.link.fish/Urls/browser-screenshot',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n};\n\nrequest.get(options, function(err, response, body) {\n if (!err) {\n fs.writeFile('screenshot.png', body, 'binary', function (err) {});\n }\n});"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/browser-screenshot \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\" \\\n > screenshot.png"}]}},"/Urls/data":{"get":{"description":"Visits the URL and extracts the data.","parameters":[{"description":"The URL of the website to query","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"If the items should be return \"normal\" with multiple levels or \"flat\" with just one level and linked instead.","in":"query","name":"item_format","schema":{"type":"string","enum":["normal","flat"],"default":"normal"}},{"description":"Some types like \"PropertyValue\" do save key and value in separate properties which makes the data harder to process. If this option gets set it converts them automatically into the regular key -> value format.","in":"query","name":"simplify_special_types","schema":{"type":"boolean","default":false}},{"description":"Returns additionally also the raw HTML as property \"rawHtml\".","in":"query","name":"include_raw_html","schema":{"type":"boolean","default":false}},{"description":"If the page should be fully rendered with a browser to extract data. The request will then cost 5 credits instead of 1!","in":"query","name":"browser_render","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Url"}},"application/xml":{"schema":{"$ref":"#/components/schemas/Url"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Extract data","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com'\n },\n uri: 'https://api.link.fish/Urls/data',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/data \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}]}},"/Urls/data-raw":{"get":{"description":"Visits the URL and extracts the data.","parameters":[{"description":"The URL to get the data of","in":"query","name":"url","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataRaw"}},"application/xml":{"schema":{"$ref":"#/components/schemas/DataRaw"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Return data of JSON/XML","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com/data.xml'\n },\n uri: 'https://api.link.fish/Urls/data-raw',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/data-raw \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}]}},"/Urls/data-tabular":{"get":{"description":"Visits the URL and extracts tabular data.","parameters":[{"description":"The URL to get the data of","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"CSS selector to define tabular data which should get returned","in":"query","name":"selector","required":false,"schema":{"type":"string"}},{"description":"If the page should be fully rendered with a browser to extract data. The request will then cost 5 credits instead of 1!","in":"query","name":"browser_render","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataTabular"}},"application/xml":{"schema":{"$ref":"#/components/schemas/DataTabular"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Return tabular data","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com'\n },\n uri: 'https://api.link.fish/Urls/data-tabular',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/data-tabular \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}]}},"/Urls/geo-coordinates":{"get":{"description":"Visits the URL and checks if there are Geo Coordinates on them and returns the found ones.\n\nProperties only get set when a value for both latitude and longitude have been found. That means that if no geo coordinates have been found only the property \"url\" will be set.","parameters":[{"description":"The URL of the website to query","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"If the page should be fully rendered with a browser to extract data. The request will then cost 5 credits instead of 1!","in":"query","name":"browser_render","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoCoordinates"}},"application/xml":{"schema":{"$ref":"#/components/schemas/GeoCoordinates"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Get geo coordinates","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com'\n },\n uri: 'https://api.link.fish/Urls/geo-coordinates',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/geo-coordinates \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}],"x-explorer-description":"Visits the URL and checks if there are Geo Coordinates on them and returns the found ones."}},"/Urls/social-media":{"get":{"description":"Visits the URL and checks if there are any social media accounts and returns the found ones.\n\nWill by default return the account identifiers and not the full URL to the profiles. To return URLs instead set the parameter \"return_urls\" to true.\n\nThe URLs can also be created manually like this:\n\n| Property | URL |\n| --------------- | -------------------------------------- |\n| facebookPage | https://facebook.com/{ID} |\n| githubUser | https://github.com/{ID} |\n| googlePlus | https://plus.google.com/+{ID} |\n| instagram | https://instagram.com/{ID} |\n| linkedInCompany | https://linkedin.com/company/{ID} |\n| pinterest | https://pinterest.com/{ID} |\n| twitter | https://twitter.com/{ID} |\n| youTubeUser | https://youtube.com/user/{ID} |\n\nProperties only get set when a value for it has been found. That means that if no social media account has been found only the property \"url\" will be set.\n","parameters":[{"description":"The URL of the website to query","in":"query","name":"url","required":true,"schema":{"type":"string"}},{"description":"Returns profile URLs instead of the profile names/ids","in":"query","name":"return_urls","required":false,"schema":{"type":"boolean","default":false}},{"description":"If the page should be fully rendered with a browser to extract data. The request will then cost 5 credits instead of 1!","in":"query","name":"browser_render","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK - Successful Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SocialMedia"}},"application/xml":{"schema":{"$ref":"#/components/schemas/SocialMedia"}}}},"400":{"description":"Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"401":{"description":"Unauthorized - Authentication missing or failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"402":{"description":"Request failed - All parameters were correct but the request failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"404":{"description":"Not Found - The requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}},"500":{"description":"Internal Server Error - Something went wrong on our side.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ApiResponsError"}}}}},"security":[{"basicAuth":[]}],"summary":"Get social media accounts","tags":["REST-Endpoints"],"x-code-samples":[{"lang":"Node.js","source":"var rp = require('request-promise');\n\nvar options = {\n method: 'GET',\n body: {\n url: 'https://example.com'\n },\n uri: 'https://api.link.fish/Urls/social-media',\n auth: {\n user: '{EMAIL}',\n pass: '{API-TOKEN}'\n },\n json: true\n};\n\nrp(options)\n .then(function (data) {\n // Request succeeded\n console.log(JSON.stringify(data,null,2));\n })\n .catch(function (err) {\n // Request failed\n console.log(err.statusCode + ': ' + err.error);\n });"},{"lang":"Curl","source":"curl https://api.link.fish/Urls/social-media \\\n -X GET \\\n -u \"{EMAIL}:{API-TOKEN}\" \\\n -d url=\"https://example.com\""}],"x-explorer-description":"l Visits the URL and checks if there are any social media accounts and returns the found ones."}}},"servers":[{"url":"https://api.link.fish"}],"components":{"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ApiResponsError":{"discriminator":{"propertyName":"type"},"properties":{"message":{"description":"The error message.","type":"string"},"status":{"description":"The HTTP status code for the error.","type":"string"}},"required":["status","message"],"type":"object"},"Apps":{"properties":{"android":{"description":"Android app","example":"com.example","type":"string"},"ios":{"description":"iOS app","example":"1234567890","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/product_1.html","type":"string"}},"required":["url","android","ios"],"type":"object"},"DataRaw":{"properties":{"data":{"description":"The found data (can be an object or array)","type":"object"},"sourceFormat":{"description":"The format the source data was in. (json/xml)","example":"json","type":"string"},"statusCode":{"description":"The HTTP status code the URL returned","example":"200","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/data.xml","type":"string"}},"required":["url","statusCode","data"],"type":"object"},"DataTabular":{"properties":{"data":{"properties":{"data":{"description":"The found tabular data on the website.","items":{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},"type":"array"},"metadata":{"type":"object"}},"type":"object"},"statusCode":{"description":"The HTTP status code the URL returned","example":"200","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com","type":"string"}},"required":["url","statusCode","data"],"type":"object"},"GeoCoordinates":{"properties":{"latitude":{"description":"The latitude","example":52.5333,"type":"number"},"longitude":{"description":"The longitude","example":13.38,"type":"number"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/product_1.html","type":"string"}},"required":["url","latitude","longitude"],"type":"object"},"SocialMedia":{"properties":{"facebookPage":{"description":"The facebook page name","example":"link.fish","type":"string"},"githubUser":{"description":"The Github user name","example":"link-fish","type":"string"},"linkedInCompany":{"description":"The LinkedIn page name","example":"link-fish","type":"string"},"twitter":{"description":"The Twitter handle","example":"linkfish_","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/product_1.html","type":"string"}},"required":["url","twitter","facebookPage","linkedInCompany","githubUser"],"type":"object"},"Url":{"properties":{"additionalData":{"properties":{"locality":{"properties":{"country":{"description":"The recognized country of the website determined by TLD.","example":"US","type":"string"},"language":{"description":"The language of website. Recognized by header information if supplied or text analysis.","example":"en","type":"string"}},"type":"object"}},"type":"object"},"favicon":{"description":"Url of website favicon","example":"http://example.com/favicon.ico","type":"string"},"items":{"description":"The found data items on the website.","items":{"description":"The properties depend on the type of the item. The field \"@type\" exists for all.","properties":{"@type":{"description":"The item type","example":"WebPage","type":"string"}},"type":"object"},"type":"array"},"statusCode":{"description":"The HTTP status code the URL returned","example":"200","type":"string"},"title":{"description":"The title of the page","example":"Product 1 - Online Shop - example.com","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/product_1.html","type":"string"}},"required":["url","statusCode","title","items","additionalData"],"type":"object"},"UrlBrowser":{"properties":{"additionalData":{"properties":{"locality":{"properties":{"country":{"description":"The recognized country of the website determined by TLD.","example":"US","type":"string"},"language":{"description":"The language of website. Recognized by header information if supplied or text analysis.","example":"en","type":"string"}},"type":"object"}},"type":"object"},"favicon":{"description":"Url of website favicon","example":"http://example.com/favicon.ico","type":"string"},"items":{"description":"The found data items on the website.","items":{"description":"The properties depend on the type of the item. The field \"@type\" exists for all.","properties":{"@type":{"description":"The item type","example":"WebPage","type":"string"}},"type":"object"},"type":"array"},"screenshot":{"description":"Base64 encoded PNG screenshot of website (if generation got requested)","example":"AvDjs4...SjfRf","format":"byte","type":"string"},"statusCode":{"description":"The HTTP status code the URL returned","example":"200","type":"string"},"title":{"description":"The title of the page","example":"Product 1 - Online Shop - example.com","type":"string"},"url":{"description":"The url of the website. Can be different to requested one if there were redirects","example":"http://example.com/product_1.html","type":"string"}},"required":["url","statusCode","title","items","additionalData"],"type":"object"}}}}