API call description
- For recurring events, all past recurring event instances are returned, but future instances are not. For example, if a daily recurring event starts on January 1 and the query is run on January 4, the instances from January 1 to January 4 are returned, but instances after January 4 are not.
- To determine whether an event is an instance of a recurring event, check whether the
recurrenceIdof the returned event object is empty. - By default, deleted events are not returned. To return them, set
showDeleted=true. When a deleted event is returned, calling the Get event details API returns the instanceNotExist error.
Request
Basic information
| Field | Value |
|---|---|
| HTTP URL | https://api.dingtalk.io/v1.0/calendar/users/{userId}/calendars/{calendarId}/events |
| HTTP Method | GET |
| Supported app types | appType-Internal app appType-Third-party enterprise app appType-Third-party personal app |
| Required permissions | permission-Calendar.Event.Read-Read permission for events in the Calendar app |
Request headers
| Name | Type | Required | Description |
|---|---|---|---|
| x-acs-dingtalk-access-token | String | Yes | The access credential for calling this API. Obtain it as follows: - For an internal app, call the Get the access token of an internal app API. - For a third-party enterprise app, call the Get the access token of an organization authorized to a third-party app API. - For a third-party personal app, call the Get user token API. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
| userId | String | Yes | The unionId of the target user. - For an internal app or a third-party enterprise app, call the Query user details API to obtain the unionid value. - For a third-party personal app, call the Get the user profile from Contacts API to obtain the unionId value. |
| calendarId | String | Yes | The ID of the calendar to which the event belongs. The value is uniformly set to primary, indicating the user’s primary calendar. |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
| timeMin | String | No | The minimum value of the event start time, in ISO-8601 date-time format. Optional. The maximum difference between timeMin and timeMax is one year. |
| timeMax | String | No | The maximum value of the event start time, in ISO-8601 date-time format. Optional. The maximum difference between timeMin and timeMax is one year. |
| showDeleted | Boolean | No | Whether to return deleted events: - true: Return - false (default): Do not return |
| maxResults | Integer | No | The maximum number of records to return. Maximum value: 100. Default value: 100. |
| maxAttendees | Integer | No | The number of attendees to query per event. Default value: 100. Maximum value: 100. If an event has more than 100 attendees and you need to retrieve all of them, use the Get event attendees API. |
| nextToken | String | No | The pagination cursor. If a single query cannot return all results, a pagination token is returned. Pass this token in the next query to retrieve subsequent data. When the pagination token returns null, all data has been retrieved. |
| syncToken | String | No | The sync token, used for incremental data synchronization. After a query has returned all data (if there is a large amount of data, the results are returned in pages, and the caller must use nextToken repeatedly until nextToken returns null in the last page), a syncToken is returned. Pass this token in the next query to retrieve the incremental data changed between the two queries. If timeMax is passed in, syncToken is not returned. |
| seriesMasterId | String | No | The ID of the master event of a recurring event. Empty for non-recurring events. |
Request example
HTTPGET /v1.0/calendar/users/iiiP35sJadxxxxPRKgiEiF/calendars/primary/events?timeMin=2022-11-27T00%3A00%3A00%2B08%3A00&timeMax=2022-11-30T00%3A00%3A00%2B08%3A00&showDeleted=false&maxResults=15&maxAttendees=10&nextToken=cnNTbW1xxxxEgvdlQrQT09&syncToken=cnNTbW1YbxxxxdEgvdlQrQT09 HTTP/1.1
Host:api.dingtalk.io
x-acs-dingtalk-access-token:dd43888e269xxxxa556389b064
Content-Type:application/json
// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
/**
* Initialize the account Client using a Token
* @return Client
* @throws Exception
*/
public static com.aliyun.dingtalkcalendar_1_0.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();
config.protocol = "https";
config.regionId = "central";
return new com.aliyun.dingtalkcalendar_1_0.Client(config);
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
com.aliyun.dingtalkcalendar_1_0.Client client = Sample.createClient();
com.aliyun.dingtalkcalendar_1_0.models.ListEventsHeaders listEventsHeaders = new com.aliyun.dingtalkcalendar_1_0.models.ListEventsHeaders();
listEventsHeaders.xAcsDingtalkAccessToken = "<your access token>";
com.aliyun.dingtalkcalendar_1_0.models.ListEventsRequest listEventsRequest = new com.aliyun.dingtalkcalendar_1_0.models.ListEventsRequest()
.setTimeMin("2022-11-27T00:00:00+08:00")
.setTimeMax("2022-11-28T00:00:00+08:00")
.setShowDeleted(false)
.setMaxResults(15)
.setMaxAttendees(10)
.setNextToken("cnNTbW1xxxxEgvdlQrQT09")
.setSyncToken("cnNTbW1YbxxxxdEgvdlQrQT09");
try {
client.listEventsWithOptions("iiiP35sJadxxxxPRKgiEiF", "primary", listEventsRequest, listEventsHeaders, new com.aliyun.teautil.models.RuntimeOptions());
} catch (TeaException err) {
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err contains code and message attributes that help you locate the issue
}
} catch (Exception _err) {
TeaException err = new TeaException(_err.getMessage(), _err);
if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
// err contains code and message attributes that help you locate the issue
}
}
}
}
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import sys
from typing import List
from alibabacloud_dingtalk.calendar_1_0.client import Client as dingtalkcalendar_1_0Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dingtalk.calendar_1_0 import models as dingtalkcalendar__1__0_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client() -> dingtalkcalendar_1_0Client:
"""
Initialize the account Client using a Token
@return: Client
@throws Exception
"""
config = open_api_models.Config()
config.protocol = 'https'
config.region_id = 'central'
return dingtalkcalendar_1_0Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
client = Sample.create_client()
list_events_headers = dingtalkcalendar__1__0_models.ListEventsHeaders()
list_events_headers.x_acs_dingtalk_access_token = '<your access token>'
list_events_request = dingtalkcalendar__1__0_models.ListEventsRequest(
time_min='2022-11-27T00:00:00+08:00',
time_max='2022-11-28T00:00:00+08:00',
show_deleted=False,
max_results=15,
max_attendees=10,
next_token='cnNTbW1xxxxEgvdlQrQT09',
sync_token='cnNTbW1YbxxxxdEgvdlQrQT09'
)
try:
client.list_events_with_options('iiiP35sJadxxxxPRKgiEiF', 'primary', list_events_request, list_events_headers, util_models.RuntimeOptions())
except Exception as err:
if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
# err contains code and message attributes that help you locate the issue
pass
@staticmethod
async def main_async(
args: List[str],
) -> None:
client = Sample.create_client()
list_events_headers = dingtalkcalendar__1__0_models.ListEventsHeaders()
list_events_headers.x_acs_dingtalk_access_token = '<your access token>'
list_events_request = dingtalkcalendar__1__0_models.ListEventsRequest(
time_min='2022-11-27T00:00:00+08:00',
time_max='2022-11-28T00:00:00+08:00',
show_deleted=False,
max_results=15,
max_attendees=10,
next_token='cnNTbW1xxxxEgvdlQrQT09',
sync_token='cnNTbW1YbxxxxdEgvdlQrQT09'
)
try:
await client.list_events_with_options_async('iiiP35sJadxxxxPRKgiEiF', 'primary', list_events_request, list_events_headers, util_models.RuntimeOptions())
except Exception as err:
if not UtilClient.empty(err.code) and not UtilClient.empty(err.message):
# err contains code and message attributes that help you locate the issue
pass
if __name__ == '__main__':
Sample.main(sys.argv[1:])
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace AlibabaCloud\SDK\Sample;
use AlibabaCloud\SDK\Dingtalk\Vcalendar_1_0\Dingtalk;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Dingtalk\Vcalendar_1_0\Models\ListEventsHeaders;
use AlibabaCloud\SDK\Dingtalk\Vcalendar_1_0\Models\ListEventsRequest;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
class Sample {
/**
* Initialize the account Client using a Token
* @return Dingtalk Client
*/
public static function createClient(){
$config = new Config([]);
$config->protocol = "https";
$config->regionId = "central";
return new Dingtalk($config);
}
/**
* @param string[] $args
* @return void
*/
public static function main($args){
$client = self::createClient();
$listEventsHeaders = new ListEventsHeaders([]);
$listEventsHeaders->xAcsDingtalkAccessToken = "<your access token>";
$listEventsRequest = new ListEventsRequest([
"timeMin" => "2022-11-27T00:00:00+08:00",
"timeMax" => "2022-11-28T00:00:00+08:00",
"showDeleted" => false,
"maxResults" => 15,
"maxAttendees" => 10,
"nextToken" => "cnNTbW1xxxxEgvdlQrQT09",
"syncToken" => "cnNTbW1YbxxxxdEgvdlQrQT09"
]);
try {
$client->listEventsWithOptions("iiiP35sJadxxxxPRKgiEiF", "primary", $listEventsRequest, $listEventsHeaders, new RuntimeOptions([]));
}
catch (Exception $err) {
if (!($err instanceof TeaError)) {
$err = new TeaError([], $err->getMessage(), $err->getCode(), $err);
}
if (!Utils::empty_($err->code) && !Utils::empty_($err->message)) {
// err contains code and message attributes that help you locate the issue
}
}
}
}
$path = __DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'vendor' . \DIRECTORY_SEPARATOR . 'autoload.php';
if (file_exists($path)) {
require_once $path;
}
Sample::main(array_slice($argv, 1));
// This file is auto-generated, don't edit it. Thanks.
package main
import (
"os"
util "github.com/alibabacloud-go/tea-utils/v2/service"
dingtalkcalendar_1_0 "github.com/alibabacloud-go/dingtalk/calendar_1_0"
openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/tea/tea"
)
/**
* Initialize the account Client using a Token
* @return Client
* @throws Exception
*/
func CreateClient () (_result *dingtalkcalendar_1_0.Client, _err error) {
config := &openapi.Config{}
config.Protocol = tea.String("https")
config.RegionId = tea.String("central")
_result = &dingtalkcalendar_1_0.Client{}
_result, _err = dingtalkcalendar_1_0.NewClient(config)
return _result, _err
}
func _main (args []*string) (_err error) {
client, _err := CreateClient()
if _err != nil {
return _err
}
listEventsHeaders := &dingtalkcalendar_1_0.ListEventsHeaders{}
listEventsHeaders.XAcsDingtalkAccessToken = tea.String("<your access token>")
listEventsRequest := &dingtalkcalendar_1_0.ListEventsRequest{
TimeMin: tea.String("2022-11-27T00:00:00+08:00"),
TimeMax: tea.String("2022-11-28T00:00:00+08:00"),
ShowDeleted: tea.Bool(false),
MaxResults: tea.Int32(15),
MaxAttendees: tea.Int32(10),
NextToken: tea.String("cnNTbW1xxxxEgvdlQrQT09"),
SyncToken: tea.String("cnNTbW1YbxxxxdEgvdlQrQT09"),
}
tryErr := func()(_e error) {
defer func() {
if r := tea.Recover(recover()); r != nil {
_e = r
}
}()
_, _err = client.ListEventsWithOptions(tea.String("iiiP35sJadxxxxPRKgiEiF"), tea.String("primary"), listEventsRequest, listEventsHeaders, &util.RuntimeOptions{})
if _err != nil {
return _err
}
return nil
}()
if tryErr != nil {
var err = &tea.SDKError{}
if _t, ok := tryErr.(*tea.SDKError); ok {
err = _t
} else {
err.Message = tea.String(tryErr.Error())
}
if !tea.BoolValue(util.Empty(err.Code)) && !tea.BoolValue(util.Empty(err.Message)) {
// err contains code and message attributes that help you locate the issue
}
}
return _err
}
func main() {
err := _main(tea.StringSlice(os.Args[1:]))
if err != nil {
panic(err)
}
}
// This file is auto-generated, don't edit it
import Util, * as $Util from '@alicloud/tea-util';
import dingtalkcalendar_1_0, * as $dingtalkcalendar_1_0 from '@alicloud/dingtalk/calendar_1_0';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import * as $tea from '@alicloud/tea-typescript';
export default class Client {
/**
* Initialize the account Client using a Token
* @return Client
* @throws Exception
*/
static createClient(): dingtalkcalendar_1_0 {
let config = new $OpenApi.Config({ });
config.protocol = "https";
config.regionId = "central";
return new dingtalkcalendar_1_0(config);
}
static async main(args: string[]): Promise<void> {
let client = Client.createClient();
let listEventsHeaders = new $dingtalkcalendar_1_0.ListEventsHeaders({ });
listEventsHeaders.xAcsDingtalkAccessToken = "<your access token>";
let listEventsRequest = new $dingtalkcalendar_1_0.ListEventsRequest({
timeMin: "2022-11-27T00:00:00+08:00",
timeMax: "2022-11-28T00:00:00+08:00",
showDeleted: false,
maxResults: 15,
maxAttendees: 10,
nextToken: "cnNTbW1xxxxEgvdlQrQT09",
syncToken: "cnNTbW1YbxxxxdEgvdlQrQT09",
});
try {
await client.listEventsWithOptions("iiiP35sJadxxxxPRKgiEiF", "primary", listEventsRequest, listEventsHeaders, new $Util.RuntimeOptions({ }));
} catch (err) {
if (!Util.empty(err.code) && !Util.empty(err.message)) {
// err contains code and message attributes that help you locate the issue
}
}
}
}
Client.main(process.argv.slice(2));
// This file is auto-generated, don't edit it. Thanks.
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
/**
* Initialize the account Client using a Token
* @return Client
* @throws Exception
*/
public static AlibabaCloud.SDK.Dingtalkcalendar_1_0.Client CreateClient()
{
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
config.Protocol = "https";
config.RegionId = "central";
return new AlibabaCloud.SDK.Dingtalkcalendar_1_0.Client(config);
}
public static void Main(string[] args)
{
AlibabaCloud.SDK.Dingtalkcalendar_1_0.Client client = CreateClient();
AlibabaCloud.SDK.Dingtalkcalendar_1_0.Models.ListEventsHeaders listEventsHeaders = new AlibabaCloud.SDK.Dingtalkcalendar_1_0.Models.ListEventsHeaders();
listEventsHeaders.XAcsDingtalkAccessToken = "<your access token>";
AlibabaCloud.SDK.Dingtalkcalendar_1_0.Models.ListEventsRequest listEventsRequest = new AlibabaCloud.SDK.Dingtalkcalendar_1_0.Models.ListEventsRequest
{
TimeMin = "2022-11-27T00:00:00+08:00",
TimeMax = "2022-11-28T00:00:00+08:00",
ShowDeleted = false,
MaxResults = 15,
MaxAttendees = 10,
NextToken = "cnNTbW1xxxxEgvdlQrQT09",
SyncToken = "cnNTbW1YbxxxxdEgvdlQrQT09",
};
try
{
client.ListEventsWithOptions("iiiP35sJadxxxxPRKgiEiF", "primary", listEventsRequest, listEventsHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
}
catch (TeaException err)
{
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err contains code and message attributes that help you locate the issue
}
}
catch (Exception _err)
{
TeaException err = new TeaException(new Dictionary<string, object>
{
{ "message", _err.Message }
});
if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
{
// err contains code and message attributes that help you locate the issue
}
}
}
}
}
Response
Response body
| Name | Type | Description |
|---|---|---|
| nextToken | String | The pagination token. |
| events | Array | The events. |
| id | String | The event ID. |
| summary | String | The event title. |
| description | String | The event description. |
| start | Object | The event start time. |
| date | String | The event start date, in yyyy-MM-dd format. |
| dateTime | String | The event start time, in ISO-8601 date-time format. |
| timeZone | String | The time zone of the event start time, in tz database name format. Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones |
| originStart | Object | The original start time when the recurring sequence was first created. Not returned for regular single events. |
| dateTime | String | The date and time information in ISO 8601 format, always in UTC. For example, midnight UTC on January 1, 2023, is 2023-01-01T00:00:00Z. |
| end | Object | The event end time. |
| date | String | The event end date, in yyyy-MM-dd format. |
| dateTime | String | The event end time, in ISO-8601 date-time format. |
| timeZone | String | The time zone of the event end time. Must be the same as the time zone of the start time. In tz database name format. Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones |
| isAllDay | Boolean | Whether this is an all-day event. - true: Yes - false: No |
| recurrence | Object | The event recurrence rule. |
| pattern | Object | The recurrence pattern. |
| type | String | The recurrence rule type. - daily: Repeat every interval days - weekly: Repeat on daysOfWeek every interval weeks - absoluteMonthly: Repeat on day dayOfMonth every interval months - relativeMonthly: Repeat on daysOfWeek of the index week every interval months - absoluteYearly: Repeat every interval years |
| dayOfMonth | Integer | When type=absoluteMonthly, specifies the day of the month. |
| daysOfWeek | String | Lowercase English words specifying the days of the week. Use commas to separate multiple values. |
| index | String | When type=relativeMonthly, specifies which week of the month. - first - second - third - fourth - last last indicates the last week of the month. |
| interval | Integer | The recurrence interval. The unit varies by type. For example, when type=daily, it represents an interval of N days; when type=absoluteYearly, it represents an interval of N years. |
| firstDayOfWeek | String | The first day of the week. Possible values: sunday, monday, tuesday, wednesday, thursday, friday, saturday. Default value: “sunday”. |
| range | Object | The recurrence range. |
| type | String | The recurrence range type. - noEnd: Never ends - endDate: Repeats until the specified end date - numbered: Ends after a specified number of occurrences |
| endDate | String | The recurrence end date. |
| numberOfOccurrences | Integer | The number of repetitions. |
| attendees | Array | The event attendees. |
| id | String | The user unionId. |
| displayName | String | The user name. |
| responseStatus | String | The reply status. |
| self | Boolean | Whether this is the currently signed-in user. - true: Yes - false: No |
| isOptional | Boolean | Whether this is an optional attendee. - true: Yes - false: No |
| organizer | Object | The event organizer. |
| id | String | The user unionId. |
| displayName | String | The user name. |
| responseStatus | String | The reply status. |
| self | Boolean | Whether this is the currently signed-in user. - true: Yes - false: No |
| location | Object | The event location. |
| displayName | String | The display name. |
| meetingRooms | Array of String | The meeting rooms. |
| seriesMasterId | String | The ID of the master event of a recurring event. Empty for non-recurring events. |
| createTime | String | The created time. |
| updateTime | String | The update time. |
| status | String | The event status. |
| onlineMeetingInfo | Object | The online meeting. |
| type | String | The online meeting type. Currently supported: - dingtalk: DingTalk Video Meeting |
| conferenceId | String | The meeting ID. |
| url | String | The URL for joining the meeting. |
| extraInfo | Map | Other extended information. |
| reminders | Array | The event reminders. |
| method | String | The reminder method. |
| minutes | String | Send a reminder N minutes before the event starts. |
| extendedProperties | Object | The event extended properties. |
| sharedProperties | Object | The shared fields. |
| sourceOpenCid | String | When the event is created from a group chat, this field indicates the source group of the event. |
| belongCorpId | String | The organization ID of the organization to which the event belongs. |
| meetingRooms | Array | The meeting rooms. |
| roomId | String | The meeting room roomId. |
| responseStatus | String | The meeting room response status: - accepted: Accepted - tentative: Pending approval - declined: Approval rejected |
| displayName | String | The meeting room name. |
| categories | Array | The event categories. |
| displayName | String | The event category name. |
| richTextDescription | Object | The Rich Text field. |
| text | String | The Rich Text content. |
| syncToken | String | The incremental sync token. |
Response body example
HTTP/1.1 200 OK
Content-Type:application/json
{
"nextToken" : "cnNTbW1YbxxxxdlQrQT09",
"events" : [ {
"id" : "cnNTbW1YbxxxxdEgvdlQrQT09",
"summary" : "test event",
"description" : "something about this event",
"start" : {
"date" : "2020-01-01",
"dateTime" : "2020-01-01T10:15:30+08:00",
"timeZone" : "Asia/Shanghai"
},
"originStart" : {
"dateTime" : "2023-01-01T00:00:00Z"
},
"end" : {
"date" : "2020-01-01",
"dateTime" : "2020-01-01T10:15:30+08:00",
"timeZone" : "Asia/Shanghai"
},
"isAllDay" : false,
"recurrence" : {
"pattern" : {
"type" : "daily",
"dayOfMonth" : 14,
"daysOfWeek" : "sunday",
"index" : "first",
"interval" : 1
},
"range" : {
"type" : "noEnd",
"endDate" : "2020-01-01T10:15:30+08:00",
"numberOfOccurrences" : 5
}
},
"attendees" : [ {
"id" : "iiiP35sJaxxxxRKgiEiF",
"displayName" : "jack",
"responseStatus" : "accepted",
"self" : false,
"isOptional" : false
} ],
"organizer" : {
"id" : "iiiP35xxxxBSgjrwPRKgiEiF",
"displayName" : "tony",
"responseStatus" : "accepted",
"self" : false
},
"location" : {
"displayName" : "room 1-2-3",
"meetingRooms" : [ "Room" ]
},
"seriesMasterId" : "cnNTbWxxxxaFJZdEgvdlQrQT09",
"createTime" : "2020-01-01T10:15:30+08:00",
"updateTime" : "2020-01-01T10:15:30+08:00",
"status" : "confirmed",
"onlineMeetingInfo" : {
"type" : "dingtalk",
"conferenceId" : "5c4df21dxxxx-a6db402b9f3a",
"url" : "dingtalk://dingtalkclient/page/videoCoxxxxndar?confId=5c4df21dxxxx2b9f3a&calendarId=92xxxx36"
},
"reminders" : [ {
"method" : "dingtalk",
"minutes" : "15"
} ],
"extendedProperties" : {
"sharedProperties" : {
"sourceOpenCid" : "zxcv90asdf123===",
"belongCorpId" : "ding*********31"
}
},
"meetingRooms" : [ {
"roomId" : "c10315a8b4e740a317813ab6fxxxxxx",
"responseStatus" : "accepted",
"displayName" : "Room 1"
} ],
"categories" : [ {
"displayName" : "Biweekly meeting"
} ]
} ],
"syncToken" : "zxcasdfvc000009"
}
Error codes
If an error is returned when calling this API, refer to the Global error codes document to find the solution based on the error message.| HttpCode | Error code | Error message | Description |
|---|---|---|---|
| 400 | invalidParameter | forwardErrorMessage | Invalid parameter |