swagger: "2.0"
schemes:
  - https
host: api.link.fish
basePath: /
info:
  contact:
    email: api@link.fish
    name: link.fish
    url: https://link.fish/api
  description: |
    API to easily extract data from websites.


    # Base URL


    All URLs referenced in the documentation have the following base:


    ```
    https://api.link.fish
    ```


    The REST API is only served over HTTPS. To ensure data privacy, unencrypted HTTP is not supported.


    # Authentication
    HTTP 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.

    If you do not have an account yet, go to [https://link.fish/api](https://link.fish/api) and create one first.

    You 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"

    There you can also see how many credits you used already.


    # Errors
    The 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:
    ```
    {

      "status": {HTTP STATUS CODE}
      "message": "{ERROR MESSAGE}"
    }
    ```
    Like for example when the authorization is not provided or wrong:
    ```
    {

      "status": 401
      "message": "Unauthorized"
    }
    ```

    # Request IDs

    Each 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.


    Example:
    ```
    X-LF-Request-Id: f7f0036f-5277-421a-b143-f7a151571d18
    ```


    # Item format

    The 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.

    Information: 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.


    # Response Content Type
    By default, all data gets returned as JSON. If the data should be returned as XML add the following header:

    ```
    Accept: application/xml
    ```

    # Credits

    Depending 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.

    Example:
    ```
    X-LF-Credits-Charged: 1 # Credits used for current requests
    X-LF-Credits-Subscription-Max: 1000 # Total credits available in subscription
    X-LF-Credits-Subscription-Used: 512 # Credits still left in current month
    ```
    You 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"


    If you have problems, questions or improvement advice please send us an email to api@link.fish
  termsOfService: https://link.fish/terms-of-service/
  title: link.fish API
  version: 2018-07-05
  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
securityDefinitions:
  basicAuth:
    type: basic
tags:
  - description: All the currently available link.fish REST endpoints.
    name: REST-Endpoints
paths:
  /Urls/apps:
    get:
      consumes:
        - application/json
        - application/xml
      description: |
        Visits the URL and checks if there are mobile apps on them and returns the found ones.

        Will 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.

        The URLs can also be created manually like this:

        | Property | URL                                                |
        | -------- | -------------------------------------------------- |
        | android  | https://play.google.com/store/apps/details?id={ID} |
        | ios      | https://itunes.apple.com/us/app/app-name/id{ID}    |

        Properties 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.
      parameters:
        - description: The URL of the website to query
          in: query
          name: url
          required: true
          type: string
        - default: false
          description: Returns app URLs instead of the identifiers
          in: query
          name: return_urls
          required: false
          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
          type: boolean
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/Apps"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Get mobile apps
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com'
              },
              uri: 'https://api.link.fish/Urls/apps',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/apps \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -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:
      consumes:
        - application/json
        - application/xml
      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
          type: string
        - default: normal
          description: If the items should be return "normal" with multiple levels or "flat" with just one level and linked instead.
          enum:
            - normal
            - flat
          in: query
          name: item_format
          type: string
        - default: false
          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
          type: boolean
        - default: false
          description: Returns additionally also the raw HTML as property "rawHtml".
          in: query
          name: include_raw_html
          type: boolean
        - default: none
          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.
          enum:
            - none
            - normal
            - full
          in: query
          name: screenshot
          type: string
        - default: 640
          description: The widh of the screenshot in pixel.
          in: query
          maximum: 1280
          minimum: 50
          name: screenshot_width
          type: integer
        - default: png
          description: The file format of the screenshot
          enum:
            - png
            - jpg
          in: query
          name: screenshot_file_format
          type: string
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/UrlBrowser"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Extract data (browser)
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com',
                screenshot: 'normal',
                screenshot_width: 100
              },
              uri: 'https://api.link.fish/Urls/browser-data',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
                fs.writeFile('screenshot.png', data.screenshot, 'base64', function (err) {});
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/browser-data \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -d url="https://example.com"
  /Urls/browser-screenshot:
    get:
      consumes:
        - application/json
        - application/xml
      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
          type: string
        - default: normal
          description: What kind of screenshot should be returned. If it should be a regular 16:9 screenshot or one with the full page height
          enum:
            - normal
            - full
          in: query
          name: type
          type: string
        - default: png
          description: The file format of the screenshot
          enum:
            - png
            - jpg
          in: query
          name: file_format
          type: string
        - default: 640
          description: The widh of the screenshot in pixel.
          in: query
          maximum: 1280
          minimum: 50
          name: width
          type: integer
      produces:
        - image/png
        - image/jpeg
      responses:
        "200":
          description: OK - Successful Request
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Generate screenshot (browser)
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var request = require('request');
            var fs = require('fs');

            const options = {
              method: 'GET',
              qs: {
                url: 'https://example.com'
              },
              encoding: 'binary',
              uri: 'https://api.link.fish/Urls/browser-screenshot',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
            };

            request.get(options, function(err, response, body) {
              if (!err) {
                fs.writeFile('screenshot.png', body, 'binary', function (err) {});
              }
            });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/browser-screenshot \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -d url="https://example.com" \
              > screenshot.png
  /Urls/data:
    get:
      consumes:
        - application/json
        - application/xml
      description: Visits the URL and extracts the data.
      parameters:
        - description: The URL of the website to query
          in: query
          name: url
          required: true
          type: string
        - default: normal
          description: If the items should be return "normal" with multiple levels or "flat" with just one level and linked instead.
          enum:
            - normal
            - flat
          in: query
          name: item_format
          type: string
        - default: false
          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
          type: boolean
        - default: false
          description: Returns additionally also the raw HTML as property "rawHtml".
          in: query
          name: include_raw_html
          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
          type: boolean
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/Url"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Extract data
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com'
              },
              uri: 'https://api.link.fish/Urls/data',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/data \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -d url="https://example.com"
  /Urls/data-raw:
    get:
      consumes:
        - application/json
        - application/xml
      description: Visits the URL and extracts the data.
      parameters:
        - description: The URL to get the data of
          in: query
          name: url
          required: true
          type: string
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/DataRaw"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Return data of JSON/XML
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com/data.xml'
              },
              uri: 'https://api.link.fish/Urls/data-raw',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/data-raw \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -d url="https://example.com"
  /Urls/data-tabular:
    get:
      consumes:
        - application/json
        - application/xml
      description: Visits the URL and extracts tabular data.
      parameters:
        - description: The URL to get the data of
          in: query
          name: url
          required: true
          type: string
        - description: CSS selector to define tabular data which should get returned
          in: query
          name: selector
          required: false
          type: string
        - 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
          type: boolean
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/DataTabular"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Return tabular data
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com'
              },
              uri: 'https://api.link.fish/Urls/data-tabular',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/data-tabular \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -d url="https://example.com"
  /Urls/geo-coordinates:
    get:
      consumes:
        - application/json
        - application/xml
      description: |-
        Visits the URL and checks if there are Geo Coordinates on them and returns the found ones.

        Properties 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
          type: string
        - 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
          type: boolean
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/GeoCoordinates"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Get geo coordinates
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com'
              },
              uri: 'https://api.link.fish/Urls/geo-coordinates',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/geo-coordinates \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -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:
      consumes:
        - application/json
        - application/xml
      description: |
        Visits the URL and checks if there are any social media accounts and returns the found ones.

        Will 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.

        The URLs can also be created manually like this:

        | Property        | URL                                    |
        | --------------- | -------------------------------------- |
        | facebookPage    | https://facebook.com/{ID}              |
        | githubUser      | https://github.com/{ID}                |
        | googlePlus      | https://plus.google.com/+{ID}          |
        | instagram       | https://instagram.com/{ID}             |
        | linkedInCompany | https://linkedin.com/company/{ID}      |
        | pinterest       | https://pinterest.com/{ID}             |
        | twitter         | https://twitter.com/{ID}               |
        | youTubeUser     | https://youtube.com/user/{ID}          |

        Properties 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.
      parameters:
        - description: The URL of the website to query
          in: query
          name: url
          required: true
          type: string
        - default: false
          description: Returns profile URLs instead of the profile names/ids
          in: query
          name: return_urls
          required: false
          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
          type: boolean
      produces:
        - application/json
        - application/xml
      responses:
        "200":
          description: OK - Successful Request
          schema:
            $ref: "#/definitions/SocialMedia"
        "400":
          description: Bad Request - Request was unacceptable. Normally because of missing required parameters or invalid data.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "401":
          description: Unauthorized - Authentication missing or failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "402":
          description: Request failed - All parameters were correct but the request failed.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "404":
          description: Not Found - The requested resource does not exist.
          schema:
            $ref: "#/definitions/ApiResponsError"
        "500":
          description: Internal Server Error - Something went wrong on our side.
          schema:
            $ref: "#/definitions/ApiResponsError"
      security:
        - basicAuth: []
      summary: Get social media accounts
      tags:
        - REST-Endpoints
      x-code-samples:
        - lang: Node.js
          source: |-
            var rp = require('request-promise');

            var options = {
              method: 'GET',
              body: {
                url: 'https://example.com'
              },
              uri: 'https://api.link.fish/Urls/social-media',
              auth: {
                user: '{EMAIL}',
                pass: '{API-TOKEN}'
              },
              json: true
            };

            rp(options)
              .then(function (data) {
                // Request succeeded
                console.log(JSON.stringify(data,null,2));
              })
              .catch(function (err) {
                // Request failed
                console.log(err.statusCode + ': ' + err.error);
              });
        - lang: Curl
          source: |-
            curl https://api.link.fish/Urls/social-media \
              -X GET \
              -u "{EMAIL}:{API-TOKEN}" \
              -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.
definitions:
  ApiResponsError:
    discriminator: 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
