InsightEra NLP Platform API

RESTful Thai natural-language-processing service, branded "ELI" in InsightEra's own showcase, published with a live Swagger 2.0 contract at nlp.insightera.co.th/docs/v1.0/. Twenty-three operations across two resource groups: an `nlp` group of stateless text services (Thai text tokenization, part-of-speech tagging, named entity recognition, sentiment analysis, spell correction, text cleaning, clustering, common-phrase detection, country detection, datetime parsing, address extraction, email extraction, similar-word lookup, OCR and a QA endpoint marked coming soon) and a `classification` group that trains, retrains, inspects, renames and deletes customer-owned text-classification models and runs predictions against them. Every operation authenticates with a required `token` query parameter.

OpenAPI Specification

insightera-nlp-platform-openapi.yml Raw ↑
schemes:
- https
swagger: '2.0'
info:
  description: NLP APIs available on InsightEra NLP Platform
  title: NLP Platform API
  termsOfService: http://swagger.io/terms/
  contact:
    name: API Support
    email: dev@insightera.co.th
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: '1.0'
host: nlp.insightera.co.th
basePath: /api
paths:
  /nlp/address-extractor:
    post:
      description: 'A service for converting a plain text address to a structural address where each part of the address are
        extracted and labeled. A complete list of parts which will be extracted are as follow:

        1. Name

        2. Phone number

        3. Tambol

        4. Amphoe

        5. Province

        6. Postcode

        7. Probability of an input text being an address (0.0 to 1.0)'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Address extractor
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Address
        name: address
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagAddrInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagAddr'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/change-model-name:
    post:
      description: 'Change existing model name.

        * <i>modelId</i>: An ID from training service which represent an actual model to be used.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Change model name
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassModelNameRecord'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassModelNameORecord'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/delete:
    post:
      description: Delete model
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Delete model
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassModelInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassDeleteResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/model:
    post:
      description: 'Retrieve model details:

        * Model name

        * Model status

        * Created date

        * Number of samples in each class'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Model detail
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassModelInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassModelOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/predict:
    post:
      description: 'Predict classes of input texts using a model previously trained. In each training request, a user will
        receive a model ID. The ID is required for this service so that it knows which model to use for prediction. Model
        ID and a secret token must be matched (the same token used when trained a model) in order to continue using this service.

        * <i>modelId</i>: An ID from training service which represent an actual model to be used.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Predict
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassPredictInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassPredictOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/retrain:
    post:
      description: continue training a model based on an existing model. Users should provide only new information the model
        has never learnt before. A <i>model_id</i> must be provided otherwise the service will response an error.
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Retrain
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassRetrainRecord'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassRetrainResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/token:
    get:
      description: 'Retrieve all models belong to a given token:

        * Model name

        * Model status

        * Created date

        * Number of sample in each class'
      produces:
      - application/json
      tags:
      - classification
      summary: Model Details by Token
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassTokenResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/train:
    post:
      description: 'Train a classification model. The general idea begins with a user provides dataset with labels, our service
        uses these information to build a classification model and give back a model ID. A user then use this model ID with
        prediction service to have model classified users'' text. Every classification models can be accessed only if users
        provide the same token used during training process. This means all models are protected. Only those who have access
        to a secret token can use the model.

        * <i>model_name</i> (optional) - if not provided, <i>model_id</i> will be used as <i>model_name</i>'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Train
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClassTrainRecord'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassTrainResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/classification/train-with-file:
    post:
      description: 'Train a classification model with file. The general idea begins with a user provides dataset with labels,
        our service uses these information to build a classification model and give back a model ID. A user then use this
        model ID with prediction service to have model classified users'' text. Every classification models can be accessed
        only if users provide the same token used during training process. This means all models are protected. Only those
        who have access to a secret token can use the model.

        * <i>model_name</i> (optional) - if not provided, <i>model_id</i> will be used as <i>model_name</i>

        * <i>file</i> - 2 column file with classname and value in xlsx or csv format (comma delimited)'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - classification
      summary: Train with file
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - type: file
        description: file
        name: file
        in: formData
        required: true
      - type: string
        description: model_name
        name: model_name
        in: formData
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClassTrainResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/cleaning:
    post:
      description: 'A service for normalizing texts, especially texts from social media and chat which tend to be informal
        and purposely misspelled (or slang), into a cleaner version to ease further analysis:

        * ''keep_alphabet'' If set, tokenization result which contains only one alphabet will be preserved (default: false).

        * ''keep_rt'' if set, @RT from Twitter will be preserved (default: false).

        * ''keep_stopwords'' if set, stopwords will be preserved (default: false).

        * ''keep_url'' if set, urls will be preserved (default: false).

        * ''keep_emoji'' if set, emoji will be preserved (default: true).

        * ''normalize'' if set, misspelled words will be auto-corrected or transformed into a cleaner form (default: false).

        * ''only_vocab'' If set, words that are not in a dictionary will be removed (default: false).'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Text cleaning
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagCleaningInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagCleaningResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/clustering:
    post:
      description: 'A service for organizing random texts into multiple groups. The service will try grouping them into a
        number of group defined by a user (<i>k</i>).

        * <i>engine</i>: machine learning algorithm: k-mean (default), hierarchy

        * <i>feature_engine</i>: feature extraction method: bag-of-word (default), word-vector

        * <i>max_k</i>: maximum cluster (optional)

        * <i>k</i>: number of cluster (optional). If k is not provided, the service will try to find the least k that makes
        good cluster automatically.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Text clustering
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagClusteringInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagClusteringOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/common-phrase:
    post:
      description: 'A clustering service specifically customized for chat log.

        <i>k</i>: a number of cluster (group) to separate texts into.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Common phrase
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagCommonPhraseInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagCommonPhraseOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/country:
    post:
      description: 'A service for finding a destination country in an address. The service will return the official name of
        the country and ISO country code.

        * User can provide additional aliases for each countries using <i>extra_dict</i> option.

        * By default, the service will only return one country. If <i>multiple</i> is set, it will return all countries found
        in an input text.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Country detection
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagCountryInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagCountryResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/datetime-parser-new:
    post:
      description: 'A service for converting date and time entities in a plain text, e.g. 17 มกราคม 2020, today, tomorrow,
        2 hrs ago to a timestamp. A service supports both Thai and English, and supports both absolute time (24 มิถุนายน 2563)
        and relative time (เมื่อวาน).

        '
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Datetime parser
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagDucklingInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagDucklingNResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/extract-email:
    post:
      description: A service for detect emamil(s) in plain text.
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Email extractor
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Email
        name: address
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagEmailInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagEmail'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/ner:
    post:
      description: A service which locate and classify named entities into pre-defined categories such as name, locaton and
        time.
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Named Entity Recognition
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagNERInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagNEROutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/ocr:
    post:
      description: A servie for extracting text from an image such as a printed paper or a photograph which contains texts.
      consumes:
      - multipart/form-data
      produces:
      - application/json
      tags:
      - nlp
      summary: OCR
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - type: file
        description: ImagePath
        name: image
        in: formData
        required: true
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagOCROutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/pos:
    post:
      description: A service which classify words in a given sentence into a paricular part-of-speech (Noun, Verb, Pronoun)
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: POS
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagPOSInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagPOSOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/qa:
    post:
      description: A service for answering questions based on a given story. A user must provide both story and questions
        in single request.
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: QA (coming soon)
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagQAInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagQAOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/sentiment-new:
    post:
      description: A service for identifying and categorizing opinions expressed in a given text. The result ranges between
        -1 (negative) and 1 (positive).
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Sentiment analysis
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagSentimentNInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagSentimentNOutput'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/similar:
    post:
      description: 'A service for finding semantically related words for a given word. Example use cases are recommendation,
        clustering and word normalization.

        * ''top'' is a number of expecting words in the result.'
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Similar words
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagSimilarNInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagSimilarNResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/spell-correction:
    post:
      description: A service which auto-correct and recommends correct words for misspelling words in a sentence.
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Spell correction
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagSpellInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagSpellResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
  /nlp/tokenize:
    post:
      description: 'A service for breaking (tokenize) a sentence into a sequence of words. Only support Thai and English.

        <i>engine</i>: specify tokenization algorithm to be used, available choices are:

        * <i>longest_match</i>: Simple longest matching

        * <i>longest_inse</i>: Add some rule-based improvement to ''longest_match''

        * <i>longest_tcc</i>: Apply TCC after ''longest_match''

        * <i>deep</i>: LSTM with one character context

        * <i>deep_context_10</i>: LSTM with 10 (front) + 10 (back) characters context

        * <i>deep_context_dict</i>: Apply dictionary cross-check to ''deep_context_10'''
      consumes:
      - application/json
      produces:
      - application/json
      tags:
      - nlp
      summary: Thai text tokenization
      parameters:
      - type: string
        default: 97051ade29a61c860f57dc9443128464
        description: Token
        name: token
        in: query
        required: true
      - description: Input
        name: input
        in: body
        required: true
        schema:
          type: object
          $ref: '#/definitions/record.SwagTokenizeInput'
      responses:
        '200':
          description: OK
          schema:
            $ref: '#/definitions/record.SwagTokenizeResult'
        '400':
          description: Bad Request
          schema:
            type: string
        '401':
          description: Unauthorized
          schema:
            type: string
        '408':
          description: Request Timeout
          schema:
            type: string
        '500':
          description: Internal Server Error
          schema:
            type: string
definitions:
  record.SwagAddr:
    type: object
    properties:
      message:
        type: object
        properties:
          amphoe:
            type: object
            properties:
              scope:
                type: array
                items:
                  type: integer
                example:
                - 116
                - 126
              text:
                type: string
                example: คลองสาน
          is_address_score:
            type: number
            example: 0.99
          name:
            type: object
            properties:
              scope:
                type: array
                items:
                  type: integer
                example:
                - 3
                - 26
              text:
                type: string
                example: ปุญญพัฒน์ เศรษฐ์สมบูรณ์
          original_text:
            type: string
            example: นายปุญญพัฒน์ เศรษฐ์สมบูรณ์ 081-234-5678 110/1 อาคาร KX (ใกล้ๆ BTS วงเวียนใหญ่) �

# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/insightera/refs/heads/main/openapi/insightera-nlp-platform-openapi.yml