# Doing HTTP API Calls

To invoke HTTP API command, you have to call SmartBots API URL with required parameters.

See the full list of HTTP Bot commands ==here==.

The request can be either **GET** or **POST**. The returned value format is described down below.

# API call constructor

<https://www.mysmartbots.com/api/testing.html> - compose and test API queries using simple web form

# Passing parameters to API URL

For example, you want to call the `say_chat_channel` command to say something in local chat.


1. Take the Bot API URL: <https://api.mysmartbots.com/api/bot.html>
2. Add required parameters
3. Parse the response

The resulting query looks like this:

```csharp
string params = llDumpList2String([
  "action="  + "say_chat_channel",
  "apikey="  + llEscapeURL(yourApiKey),
  "botname=" + llEscapeURL("YourBot Resident"),
  "secret="  + llEscapeURL(botSecretCode),
  "channel=" + "0",
  "message=" + llEscapeURL("Hello there!")
  ],"&");

llHTTPRequest("https://api.mysmartbots.com/api/bot.html",
  [HTTP_METHOD,"POST"], params);
```

Or using ==smartbotsAPI== LSL helper functions:

```csharp
smartbotsAPI("im", [
    "slname", "Glaznah Gassner",
    "message", "Hi there from API"
]);
```

If you love JSON responses (see below):

```csharp
smartbotsAPIJSON("status", []);
```

# Parsing API Response

HTTP APIs return either JSON or URL-encoded string (by your choice). Use "`dataType=json`" input parameter to get JSON.

## JSON (added Jan 2018)

The reply is being returned as a JSON string:

```json
{
  "result": "FAIL",
  "resulttext": "BOT NOT EXISTS"
}
```

Use `llJsonGetValue` to get values from the response:

```csharp
touch_start(integer total_number) {
    llOwnerSay("Requesting bot status...");

    // See SmartBots "LSL Helper Functions" for smartbotsAPIJSON
    smartbotsAPIJSON("status", []);
}

http_response(key request_id, integer status, list metadata, string body) {
    // llOwnerSay("API raw response: " + body);
    
    string status = llJsonGetValue(body, ["status"]);
    ...
}
```

## URL-encoded string

The reply is being returned as a set of variables joined in the same way as URL parameters:

```
result=FAIL&resulttext=BOT%20NOT%20EXISTS
```

# Standard reply variables

There are two standard return variables:

* **result** - can be one of:  
  OK - command completed successfully

  FAIL - command failed
* **resulttext** - contains the detailed explanation of failed commands

Other return variables may contain the query results (for example, "groups" for `listgroups`).

# See also

Refer to ==HTTP API page== for information on API commands available.