curl --request PATCH \
--url https://api.isnap.ai/v1/lines/{id}/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"default_use_typing_indicator": true,
"daily_new_contact_limit": 250,
"daily_known_contact_limit": 1000,
"daily_total_message_limit": 50000,
"hourly_message_limit": 500,
"minute_message_limit": 50,
"min_inter_message_seconds": 150,
"min_inter_new_contact_seconds": 1815,
"max_queue_depth": 2505,
"reply_window_hours": 84,
"reply_max_per_inbound": 25,
"daily_reply_limit": 500,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
}
'import requests
url = "https://api.isnap.ai/v1/lines/{id}/config"
payload = {
"default_use_typing_indicator": True,
"daily_new_contact_limit": 250,
"daily_known_contact_limit": 1000,
"daily_total_message_limit": 50000,
"hourly_message_limit": 500,
"minute_message_limit": 50,
"min_inter_message_seconds": 150,
"min_inter_new_contact_seconds": 1815,
"max_queue_depth": 2505,
"reply_window_hours": 84,
"reply_max_per_inbound": 25,
"daily_reply_limit": 500,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
default_use_typing_indicator: true,
daily_new_contact_limit: 250,
daily_known_contact_limit: 1000,
daily_total_message_limit: 50000,
hourly_message_limit: 500,
minute_message_limit: 50,
min_inter_message_seconds: 150,
min_inter_new_contact_seconds: 1815,
max_queue_depth: 2505,
reply_window_hours: 84,
reply_max_per_inbound: 25,
daily_reply_limit: 500,
timezone: '<string>',
activity_curve: [{hour: 11, weight: 1}]
})
};
fetch('https://api.isnap.ai/v1/lines/{id}/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.isnap.ai/v1/lines/{id}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'default_use_typing_indicator' => true,
'daily_new_contact_limit' => 250,
'daily_known_contact_limit' => 1000,
'daily_total_message_limit' => 50000,
'hourly_message_limit' => 500,
'minute_message_limit' => 50,
'min_inter_message_seconds' => 150,
'min_inter_new_contact_seconds' => 1815,
'max_queue_depth' => 2505,
'reply_window_hours' => 84,
'reply_max_per_inbound' => 25,
'daily_reply_limit' => 500,
'timezone' => '<string>',
'activity_curve' => [
[
'hour' => 11,
'weight' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.isnap.ai/v1/lines/{id}/config"
payload := strings.NewReader("{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.isnap.ai/v1/lines/{id}/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.isnap.ai/v1/lines/{id}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"line_id": "<string>",
"config": {
"default_use_typing_indicator": true,
"quota_overflow_behavior": "queue",
"daily_new_contact_limit": 1,
"daily_known_contact_limit": 1,
"daily_total_message_limit": 1,
"hourly_message_limit": 1,
"minute_message_limit": 1,
"min_inter_message_seconds": 1,
"min_inter_new_contact_seconds": 1,
"max_queue_depth": 1,
"reply_window_hours": 1,
"reply_max_per_inbound": 1,
"daily_reply_limit": 1,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
},
"overridden_keys": [
"<string>"
],
"knobs": {
"daily_new_contact_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_known_contact_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_total_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"hourly_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"minute_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"reply_window_hours": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"reply_max_per_inbound": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_reply_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
}
},
"default_activity_curve": [
{
"hour": 11,
"weight": 1
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}Update the configuration of a line
Sets per-line overrides of the send configuration of a line.
curl --request PATCH \
--url https://api.isnap.ai/v1/lines/{id}/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"default_use_typing_indicator": true,
"daily_new_contact_limit": 250,
"daily_known_contact_limit": 1000,
"daily_total_message_limit": 50000,
"hourly_message_limit": 500,
"minute_message_limit": 50,
"min_inter_message_seconds": 150,
"min_inter_new_contact_seconds": 1815,
"max_queue_depth": 2505,
"reply_window_hours": 84,
"reply_max_per_inbound": 25,
"daily_reply_limit": 500,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
}
'import requests
url = "https://api.isnap.ai/v1/lines/{id}/config"
payload = {
"default_use_typing_indicator": True,
"daily_new_contact_limit": 250,
"daily_known_contact_limit": 1000,
"daily_total_message_limit": 50000,
"hourly_message_limit": 500,
"minute_message_limit": 50,
"min_inter_message_seconds": 150,
"min_inter_new_contact_seconds": 1815,
"max_queue_depth": 2505,
"reply_window_hours": 84,
"reply_max_per_inbound": 25,
"daily_reply_limit": 500,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
default_use_typing_indicator: true,
daily_new_contact_limit: 250,
daily_known_contact_limit: 1000,
daily_total_message_limit: 50000,
hourly_message_limit: 500,
minute_message_limit: 50,
min_inter_message_seconds: 150,
min_inter_new_contact_seconds: 1815,
max_queue_depth: 2505,
reply_window_hours: 84,
reply_max_per_inbound: 25,
daily_reply_limit: 500,
timezone: '<string>',
activity_curve: [{hour: 11, weight: 1}]
})
};
fetch('https://api.isnap.ai/v1/lines/{id}/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.isnap.ai/v1/lines/{id}/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'default_use_typing_indicator' => true,
'daily_new_contact_limit' => 250,
'daily_known_contact_limit' => 1000,
'daily_total_message_limit' => 50000,
'hourly_message_limit' => 500,
'minute_message_limit' => 50,
'min_inter_message_seconds' => 150,
'min_inter_new_contact_seconds' => 1815,
'max_queue_depth' => 2505,
'reply_window_hours' => 84,
'reply_max_per_inbound' => 25,
'daily_reply_limit' => 500,
'timezone' => '<string>',
'activity_curve' => [
[
'hour' => 11,
'weight' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.isnap.ai/v1/lines/{id}/config"
payload := strings.NewReader("{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.isnap.ai/v1/lines/{id}/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.isnap.ai/v1/lines/{id}/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"default_use_typing_indicator\": true,\n \"daily_new_contact_limit\": 250,\n \"daily_known_contact_limit\": 1000,\n \"daily_total_message_limit\": 50000,\n \"hourly_message_limit\": 500,\n \"minute_message_limit\": 50,\n \"min_inter_message_seconds\": 150,\n \"min_inter_new_contact_seconds\": 1815,\n \"max_queue_depth\": 2505,\n \"reply_window_hours\": 84,\n \"reply_max_per_inbound\": 25,\n \"daily_reply_limit\": 500,\n \"timezone\": \"<string>\",\n \"activity_curve\": [\n {\n \"hour\": 11,\n \"weight\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"line_id": "<string>",
"config": {
"default_use_typing_indicator": true,
"quota_overflow_behavior": "queue",
"daily_new_contact_limit": 1,
"daily_known_contact_limit": 1,
"daily_total_message_limit": 1,
"hourly_message_limit": 1,
"minute_message_limit": 1,
"min_inter_message_seconds": 1,
"min_inter_new_contact_seconds": 1,
"max_queue_depth": 1,
"reply_window_hours": 1,
"reply_max_per_inbound": 1,
"daily_reply_limit": 1,
"timezone": "<string>",
"activity_curve": [
{
"hour": 11,
"weight": 1
}
]
},
"overridden_keys": [
"<string>"
],
"knobs": {
"daily_new_contact_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_known_contact_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_total_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"hourly_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"minute_message_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"reply_window_hours": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"reply_max_per_inbound": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
},
"daily_reply_limit": {
"current": 1,
"default": 1,
"min": 1,
"max": 1
}
},
"default_activity_curve": [
{
"hour": 11,
"weight": 1
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}{
"success": false,
"data": "<unknown>",
"error": {
"status": 123,
"code": "<string>",
"message": "<string>",
"retry_after": 123,
"retry_at": "<string>",
"issues": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>",
"min": 123,
"max": 123
}
]
},
"trace_id": "<string>",
"request_id": "<string>"
}- Credential: an API key of the owner of the line. See Configuration for the direction rule, the ranges and the way back to a default.
- Line-scoped keys: a line-scoped key gets
403 forbiddenunless the line is in its list. Idempotency-Key: not honored. The operation sets the keys you send and keeps the others, so the same request sent twice leaves the line in the same state.- Events: none. See What events do not announce.
- Body:
nullis not accepted for any key, and an unknown key is refused. To remove an override, send the key with its default value. Foractivity_curve, send thedefault_activity_curveofGET /v1/lines/{id}/config: a curve that gives every hour the same weight as that curve, an hour with no entry counting as 0, removes the override. A request that does not sendactivity_curveleaves its override in place.
Errors
| Status | error.code | When |
|---|---|---|
| 400 | validation_failed | The body has an unknown key or a null value, a number is outside the range that the schema of this operation accepts, timezone is not a valid IANA time zone name, or an activity_curve entry has an hour outside 0 to 23 or a weight that is negative or not an integer. |
| 403 | forbidden | The request uses a line-scoped key, and the line is not in its list. |
| 403 | cannot_increase_limit | A limit is inside its accepted range and above its default. On a BYOD line, this applies only to max_queue_depth and to the three reply limits. |
| 403 | cannot_decrease_delay | min_inter_message_seconds or min_inter_new_contact_seconds is below its default. |
| 404 | not_found | No line has this id, or you do not own the line. |
| 422 | limit_out_of_bounds | One of the five message limits is outside its accepted range. For one key, this check comes before cannot_increase_limit: on every line, a value above the range returns this code or 400 validation_failed, never cannot_increase_limit. error.issues[0] carries the allowed min and max. |
| 422 | invalid_activity_curve | activity_curve is empty, names an hour twice, or has a total weight of 0. |
Authorizations
An API key created in the iSnap dashboard, or a trial key, sent as Authorization: Bearer <key>. An API key starts with isnap_live_ or isnap_test_; both act on the same account, lines and billing. A trial key acts on its trial only.
Path Parameters
Id of a line: line_ followed by 25 letters or digits.
^line_[0-9A-Za-z]{25}$Body
The keys to override on this line. Send a key with its default value to remove its override. null and unknown keys return 400 validation_failed.
Whether a message that does not state use_typing_indicator shows the typing indicator before it is sent.
What happens to a send that reaches a sending limit. queue: the message is accepted and held, with status: scheduled. drop or fail: the send returns 429 and nothing is stored; the two values behave the same.
queue, drop, fail Distinct new contacts the line can message per rolling 24 hours. Accepted values: 5 to 200. Another integer from 1 to 500 returns 422 limit_out_of_bounds. A value outside 1 to 500, or one that is not an integer, returns 400 validation_failed. It can only be lowered below the default (403 cannot_increase_limit), except on a BYOD line, where it can be raised up to knobs.daily_new_contact_limit.max.
1 <= x <= 500Distinct known contacts the line can message per rolling 24 hours. Accepted values: 10 to 1,000. Another integer from 1 to 2,000 returns 422 limit_out_of_bounds. A value outside 1 to 2,000, or one that is not an integer, returns 400 validation_failed. It can only be lowered below the default (403 cannot_increase_limit), except on a BYOD line, where it can be raised up to knobs.daily_known_contact_limit.max.
1 <= x <= 2000Messages the line can send per rolling 24 hours. Accepted values: 10 to 1,000. Another integer from 1 to 100,000 returns 422 limit_out_of_bounds. A value outside 1 to 100,000, or one that is not an integer, returns 400 validation_failed. It can only be lowered below the default (403 cannot_increase_limit), except on a BYOD line, where it can be raised up to knobs.daily_total_message_limit.max.
1 <= x <= 100000Messages the line can send per rolling 60 minutes. Accepted values: 5 to 200. Another integer from 1 to 1,000 returns 422 limit_out_of_bounds. A value outside 1 to 1,000, or one that is not an integer, returns 400 validation_failed. It can only be lowered below the default (403 cannot_increase_limit), except on a BYOD line, where it can be raised up to knobs.hourly_message_limit.max.
1 <= x <= 1000Messages the line can send per rolling 60 seconds. Accepted values: 1 to 60. An integer from 61 to 100 returns 422 limit_out_of_bounds. A value outside 1 to 100, or one that is not an integer, returns 400 validation_failed. It can only be lowered below the default (403 cannot_increase_limit), except on a BYOD line, where it can be raised up to knobs.minute_message_limit.max.
1 <= x <= 100Minimum number of seconds between two messages of the line. Accepted values: 1 to 300. It can only be raised above the default (403 cannot_decrease_delay).
1 <= x <= 300Minimum number of seconds between two first messages to new contacts. Accepted values: 30 to 3,600. It can only be raised above the default (403 cannot_decrease_delay).
30 <= x <= 3600Maximum number of held messages on the line: beyond it, a send that would be held returns 429 queue_full. Accepted values: 10 to 5,000. It can only be lowered below the default (403 cannot_increase_limit).
10 <= x <= 5000Reply lane: a message qualifies as a reply when its recipient messaged the line within this number of hours. Accepted values: 1 to 168. It can only be lowered below the default (403 cannot_increase_limit).
1 <= x <= 168Reply lane: the number of messages to a contact that qualify as replies after each message from that contact. 0 turns the reply lane off. Accepted values: 0 to 50. It can only be lowered below the default (403 cannot_increase_limit).
0 <= x <= 50Reply-lane allowance: the number of replies per rolling 24 hours that can pass a sending limit through the reply lane. 0 turns the reply lane off. Accepted values: 0 to 1,000. It can only be lowered below the default (403 cannot_increase_limit).
0 <= x <= 1000IANA time zone name of the line, for example America/New_York (400 validation_failed otherwise). iSnap reads quiet hours in it for a recipient whose own time zone it does not know. Once set, it can be replaced but not removed.
The sending hours of the line, as a list of hours with a weight. An hour with weight 0, or with no entry, is a quiet hour: a message accepted then is held until the next hour that has a weight. Messages held by a 24-hour sending limit are placed in the hours in proportion to their weights. It needs at least one entry, no hour twice, and a total weight above 0 (422 invalid_activity_curve otherwise). A curve the same as default_activity_curve (returned by GET /v1/lines/{id}/config) removes the override instead of setting one. Two curves are the same when every hour from 0 to 23 has the same weight in both, an hour with no entry counting as 0: the order of the entries does not matter, and a curve that lists only its weighted hours is the same as the 24-hour curve with 0 everywhere else.
Show child attributes
Show child attributes
Response
The configuration of the line after the change.
Always true on a success response.
true The sending configuration of a line.
Show child attributes
Show child attributes
Trace id of the request that produced this response: 32 lowercase hexadecimal characters. Quote it when you report a problem to iSnap.
Id of the request that produced this response: req_ followed by 25 letters or digits.