ELI
ELI — free-tier JSON endpoint
ELI offers a free API tier. We verified JSON on a sample GET (Text Analysis). Check provider docs for key requirements and limits.
We probe a documented GET and expect 2xx JSON — full uptime and health score. Open provider docs ↗
On our probe schedule. Uptime charts appear after the first check lands.
GET https://nlp.insightera.co.th/api/doc/doc.json
{
"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:\n1. Name\n2. Phone number\n3. Tambol\n4. Amphoe\n5. Province\n6. Postcode\n7. 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.\n* <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:\n* Model name\n* Model status\n* Created date\n* 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.\n* <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:\n* Model name\n* Model status\n* Created date\n* 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.\n* <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"
}
}
}
}
}
},
"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 วงเวียนใหญ่) ชั้น 14 ถ.กรุงธนบุรี แขวงบางลำภูล่าง เขตคลองสาน กรุงเทพมหานคร 10600 จ-ศ 10:00-19:00"
},
"other": {
"type": "string",
"example": "นาย 110/1 อาคาร KX (ใกล้ๆ BTS วงเวียนใหญ่) ชั้น 14 ถ.กรุงธนบุรี จ-ศ 10:00-19:00"
},
"phone": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scope": {
"type": "array",
"items": {
"type": "integer"
},
"example": [
27,
39
]
},
"text": {
"type": "string",
"example": "0812345678"
}
}
}
},
"postcode": {
"type": "object",
"properties": {
"scope": {
"type": "array",
"items": {
"type": "integer"
},
"example": [
141,
146
]
},
"text": {
"type": "string",
"example": "10600"
}
}
},
"province": {
"type": "object",
"properties": {
"scope": {
"type": "array",
"items": {
"type": "integer"
},
"example": [
127,
140
]
},
"text": {
"type": "string",
"example": "กรุงเทพมหานคร"
}
}
}
}
}
}
},
"record.SwagAddrInput": {
"type": "object",
"properties": {
"text": {
"type": "string",
"example": "นายปุญญพัฒน์ เศรษฐ์สมบูรณ์ 081-234-5678 110/1 อาคาร KX (ใกล้ๆ BTS วงเวียนใหญ่) ชั้น 14 ถ.กรุงธนบุรี แขวงบางลำภูล่าง เขตคลองสาน กรุงเทพมหานคร 10600 จ-ศ 10:00-19:00"
}
}
},
"record.SwagClassDeleteResult": {
"type": "object",
"properties": {
"error_msg": {
"type": "string"
},
"result": {
"type": "string",
"example": "ok"
}
}
},
"record.SwagClassModelInput": {
"type": "object",
"properties": {
"model_id": {
"type": "string",
"example": "m-dfcf872c-ef34-11e9-ad3b-84a93e037981"
}
}
},
"record.SwagClassModelNameORecord": {
"type": "object",
"properties": {
"message": {
"type": "object",
"properties": {
"model_id": {
"type": "string",
"example": "m-6069d024-368d-11ea-978f-2e728ce88125"
},
"result": {
"type": "string",
"example": "ok"
}
}
}
}
},
"record.SwagClassModelNameRecord": {
"type": "object",
"properties": {
"model_id": {
"type": "string",
"example": "m-6069d024-368d-11ea-978f-2e728ce88125"
},
"model_name": {
"type": "string",
"example": "Hello world !"
}
}
},
"record.SwagClassModelOutput": {
"type": "object",
"properties": {
"message": {
"type": "object",
"properties": {
"created_at": {
"type": "object",
"properties": {
"$date": {
"type": "integer",
"example": 1571134602455
}
}
},
"modelId": {
"type": "string",
"example": "m-dfcf872c-ef34-11e9-ad3b-84a93e037981"
},
"modelName": {
"type": "string",
"example": "education_vs_politic"
},
"trains": {
"type": "integer",
"example": 2000
}
}
}
}
},
"record.SwagClassPredictInput": {
"type": "object",
"properties": {
"model_id": {
"type": "string",
"example": "m-dfcf872c-ef34-11e9-ad3b-84a93e037981"
},
"samples": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"การศึกษาเป็นสิ่งที่จำเป็นหรือไม่..."
]
}
}
}
}
}curl "https://nlp.insightera.co.th/api/doc/doc.json"const res = await fetch("https://nlp.insightera.co.th/api/doc/doc.json");
const data = await res.json();
console.log(data);import requests
res = requests.get("https://nlp.insightera.co.th/api/doc/doc.json")
print(res.json())/api/doc/doc.jsonPROBEDELI — free-tier JSON endpoint
/apiApi — documented GET route.
/api/1Api details by ID (example: 1).
/api?limit=10Api — documented GET route.
/api/search?q=testSearch by query parameters.
We probe a documented GET and expect 2xx JSON — full uptime and health score. Export includes every documented route below.
Not tracked yet. Shape-change history starts once this API joins our probe schedule.
ELI: common questions
Is ELI free to use?
Yes — ELI is a free developer tools API. Free tier: Free tier — API key may be required for production. Whether the free tier allows commercial use is unclear — check the provider docs.
Does ELI need an API key?
Yes — ELI needs a free API key, which you pass on each request. Rate limits: Unpublished.
Can I call ELI from the browser?
Yes — ELI returns CORS headers over HTTPS, so front-end code can fetch it directly with no backend proxy. Use the fetch snippet on this page, or hit "Run live" to try it now.
Is ELI up right now?
ELI is catalogued but not yet on our probe schedule, so we don't publish a live status for it. Check the provider's own status page or docs for its current state.