Справочник методов

Создать инвойс

POST/v1/invoices

Контракт v1 / 1.0.0 62 / 2026-10-10

На этой странице

Создать инвойс Payments. Для готовых реквизитов передайте chain и amount. Для выбора способа плательщиком передайте invoice_currency и invoice_amount без chain, asset, amount, address и tolerance; нужны live-ключ с правом записи и Idempotency-Key. Создание и идентичный повтор возвращают интерактивную платёжную ссылку, а GET и список — отдельные ссылки только для чтения. После timeout повторяйте то же тело с тем же ключом: ответ 201 и тот же ID; другие параметры дают 409. Без ключа повтор создания с готовым способом может создать другой инвойс. Не создаёт перевод в блокчейне.

Права ключа: invoices / write / payments.

Параметры

ПараметрГдеОбязательныйОписание
Idempotency-KeyheaderНет16–80 букв ASCII, цифр, дефисов или подчёркиваний. Уникальный ID логического заказа в аккаунте. Обязателен при выборе способа оплаты плательщиком.
string minLength: 16; maxLength: 80; pattern: ^[A-Za-z0-9_-]+$

Тело запроса

ПолеТипОбязательноеОписание
projectstringНетID проекта Payments; рекомендуется задавать явно. Для проектного ключа используется его проект.
chainstringНетКод сети.
minLength: 1
assetstringНетПоддерживаемый платёжный актив: native, символ или известный идентификатор. Допустимые активы зависят от сети; отсутствие поля выбирает native.
По умолчанию: native
amountstringНетПоложительная криптосумма в единицах asset; точность не выше decimals актива.
pattern: ^[0-9]+(?:\.[0-9]+)?$
referencestringНетНомер заказа в вашей системе; не заменяет Idempotency-Key.
maxLength: 120
addressstringНетНеобязательный адрес из платёжного пула проекта. Без него адрес выбирает сервис.
tolerancestringНетДопустимая недоплата в единицах asset, строго меньше amount. Нулевой допуск задаётся отсутствием поля.
pattern: ^[0-9]+(?:\.[0-9]+)?$
customerobjectНет
productobjectНет
payerobjectНет
metadataobjectНетДо 20 пар, JSON не более 8192 байт. Не передавайте секреты.
invoice_currencystringНетТрёхбуквенный код валюты котировки заказа; только вместе с invoice_amount.
pattern: ^[A-Za-z]{3}$
invoice_amountstringНетПоложительная сумма заказа в invoice_currency. Вместе с chain и amount сохраняет котировку клиента; без реквизитов задаёт фиксированную стоимость инвойса для расчёта выбранного плательщиком актива.
maxLength: 80; pattern: ^[0-9]+(?:\.[0-9]+)?$
expires_inintegerНетСрок оплаты в минутах с успешной выдачи реквизитов. Отсутствие или 0 использует настройку проекта (по умолчанию 60), максимум 10080. Старый режим с готовым способом также считает отрицательное значение отсутствующим; интерактивный режим его отклоняет.
По умолчанию: 60; maximum: 10080
application/json
{
  "project": "2002",
  "invoice_currency": "USD",
  "invoice_amount": "12.50",
  "reference": "order-42"
}

Примеры запроса

Примеры выполняют реальную операцию в вашем аккаунте. Задайте переменные окружения, указанные в коде. Не публикуйте ключ; изменяющие запросы не повторяются автоматически.

Shell / cURL
#!/usr/bin/env bash
set -euo pipefail
: "${CRYPTANIO_API_KEY:?Set CRYPTANIO_API_KEY}"
: "${CRYPTANIO_OPERATION_ID:?Set CRYPTANIO_OPERATION_ID}"
: "${CRYPTANIO_PROJECT_ID:?Set CRYPTANIO_PROJECT_ID}"
json_string() {
  local text="$1" char code index output='"'
  for ((index=0; index<${#text}; index++)); do
    char="${text:index:1}"
    case "$char" in
      '"'|'\') output+="\\$char" ;;
      *) printf -v code '%d' "'$char"
         if ((code < 32)); then printf -v char '\\u%04x' "$code"; fi
         output+="$char" ;;
    esac
  done
  printf '%s"' "$output"
}
response_file="$(mktemp)"
trap 'rm -f "$response_file"' EXIT
transfer_status=0
http_status="$(curl \
  --silent --show-error --max-time 30 --request POST \
  --header "Authorization: Bearer $CRYPTANIO_API_KEY" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: $CRYPTANIO_OPERATION_ID" \
  --data-binary '{"project":'"$(json_string "$CRYPTANIO_PROJECT_ID")"',"invoice_currency":"USD","invoice_amount":"12.50","reference":"order-42"}' \
  "https://api.cryptanio.com/v1/invoices" \
  --output "$response_file" --write-out '%{http_code}')" || transfer_status=$?
if [[ "$http_status" == 2?? ]]; then
  cat "$response_file"
  exit "$transfer_status"
fi
printf 'HTTP %s\n' "$http_status" >&2
cat "$response_file" >&2
exit 1
Скачать пример
Go
// Go; standard library only. Run: go run request.go
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "time"
)

func env(name string) string {
    value := os.Getenv(name)
    if value == "" { fmt.Fprintln(os.Stderr, "Set", name); os.Exit(1) }
    return value
}
func run() error {
    path := "/v1/invoices"

    endpoint, err := url.Parse("https://api.cryptanio.com" + path)
    if err != nil { return err }
    query := endpoint.Query()

    endpoint.RawQuery = query.Encode()
    var payload map[string]any
    if err := json.Unmarshal([]byte("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}"), &payload); err != nil { return err }
    payload["project"] = env("CRYPTANIO_PROJECT_ID")
    body, err := json.Marshal(payload)
    if err != nil { return err }
    request, err := http.NewRequest("POST", endpoint.String(), bytes.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + env("CRYPTANIO_API_KEY"))
    request.Header.Set("Accept", "application/json")
    request.Header.Set("Content-Type", "application/json")
    request.Header.Set("Idempotency-Key", env("CRYPTANIO_OPERATION_ID"))
    client := &http.Client{Timeout: 30 * time.Second, CheckRedirect: func(*http.Request, []*http.Request) error { return http.ErrUseLastResponse }}
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        body, err := io.ReadAll(response.Body)
        if err != nil { return err }
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, body)
    }
    _, err = io.Copy(os.Stdout, response.Body)
    return err
}
func main() {
    if err := run(); err != nil { fmt.Fprintln(os.Stderr, err); os.Exit(1) }
}
Скачать пример
Rust
// Cargo.toml dependencies:
// reqwest = { version = "=0.12.24", features = ["blocking", "json"] }
// serde_json = "=1.0.145"
use std::{error::Error, io, time::Duration};
use reqwest::{blocking::Client, redirect::Policy, Method, Url};

fn env(name: &str) -> Result<String, Box<dyn Error>> {
    let value = std::env::var(name)?;
    if value.is_empty() { return Err(format!("Set {name}").into()); }
    Ok(value)
}
fn run() -> Result<(), Box<dyn Error>> {
    let mut url = Url::parse("https://api.cryptanio.com")?;
    {
        let mut segments = url.path_segments_mut().map_err(|_| "Invalid base URL")?;
        segments.clear();
        segments.push("v1");
        segments.push("invoices");
    }
    let client = Client::builder().timeout(Duration::from_secs(30)).redirect(Policy::none()).build()?;
    let request = client.request(Method::POST, url)
        .header("Authorization", format!("Bearer {}", env("CRYPTANIO_API_KEY")?))
        .header("Accept", "application/json".to_owned())
        .header("Content-Type", "application/json".to_owned())
        .header("Idempotency-Key", env("CRYPTANIO_OPERATION_ID")?);
    let mut body: serde_json::Value = serde_json::from_str("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}")?;
    body["project"] = serde_json::Value::String(env("CRYPTANIO_PROJECT_ID")?);
    let request = request.json(&body);
    let mut response = request.send()?;
    let status = response.status();
    if !status.is_success() { return Err(format!("HTTP {}: {}", status.as_u16(), response.text()?).into()); }
    io::copy(&mut response, &mut io::stdout())?;
    Ok(())
}
fn main() {
    if let Err(error) = run() { eprintln!("{error}"); std::process::exit(1); }
}
Скачать пример
PHP
<?php
// PHP 8 with the cURL extension. Run this on your server.
function env(string $name): string {
    $value = getenv($name);
    if ($value === false || $value === '') throw new RuntimeException('Set ' . $name);
    return $value;
}
try {
    $path = '/v1/invoices';

    $query = [

    ];
    $url = 'https://api.cryptanio.com' . $path . ($query ? '?' . http_build_query($query, '', '&', PHP_QUERY_RFC3986) : '');
    $headers = [
        'Authorization: ' . 'Bearer ' . env('CRYPTANIO_API_KEY'),
        'Accept: ' . 'application/json',
        'Content-Type: ' . 'application/json',
        'Idempotency-Key: ' . env('CRYPTANIO_OPERATION_ID'),
    ];
    $body = json_decode('{"project":"2002","invoice_currency":"USD","invoice_amount":"12.50","reference":"order-42"}', true, 512, JSON_THROW_ON_ERROR);
    $body['project'] = env('CRYPTANIO_PROJECT_ID');
    $curl = curl_init($url);
    curl_setopt_array($curl, [
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => false,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
    ]);
    $response = curl_exec($curl);
    if ($response === false) throw new RuntimeException(curl_error($curl));
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    if ($status < 200 || $status >= 300) throw new RuntimeException('HTTP ' . $status . ': ' . $response);
    echo $response;
} catch (Throwable $error) {
    fwrite(STDERR, $error->getMessage() . PHP_EOL);
    exit(1);
}
Скачать пример
Python
# Python 3; standard library only.
import json
import os
import sys
from urllib.error import HTTPError, URLError
from urllib.parse import quote, urlencode
from urllib.request import HTTPRedirectHandler, Request, build_opener

def env(name):
    result = os.environ.get(name)
    if not result:
        raise ValueError("Set " + name)
    return result

class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

try:
    path = "/v1/invoices"

    query = {

    }
    url = "https://api.cryptanio.com" + path + ("?" + urlencode(query) if query else "")
    headers = {
        "Authorization": "Bearer " + env("CRYPTANIO_API_KEY"),
        "Accept": "application/json",
        "Content-Type": "application/json",
        "Idempotency-Key": env("CRYPTANIO_OPERATION_ID"),
    }
    body = json.loads("{\"project\":\"2002\",\"invoice_currency\":\"USD\",\"invoice_amount\":\"12.50\",\"reference\":\"order-42\"}")
    body["project"] = env("CRYPTANIO_PROJECT_ID")
    data = json.dumps(body).encode("utf-8")
    request = Request(url, data=data, headers=headers, method="POST")
    with build_opener(NoRedirect()).open(request, timeout=30) as response:
        if not 200 <= response.status < 300:
            raise ValueError("HTTP " + str(response.status))
        sys.stdout.buffer.write(response.read())
except HTTPError as error:
    print("HTTP " + str(error.code) + ": " + error.read().decode("utf-8", errors="replace"), file=sys.stderr)
    sys.exit(1)
except (ValueError, URLError, OSError) as error:
    print(str(error), file=sys.stderr)
    sys.exit(1)
Скачать пример
Node.js
// Node.js 18+. Run on your server, never in a browser.
const env = name => {
  const result = process.env[name];
  if (!result) throw new Error(`Set ${name}`);
  return result;
};
try {
  let path = "/v1/invoices";

  const url = new URL(path, "https://api.cryptanio.com");

  const headers = {
    "Authorization": "Bearer " + env("CRYPTANIO_API_KEY"),
    "Accept": "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": env("CRYPTANIO_OPERATION_ID"),
  };
  const body = {
    "project": "2002",
    "invoice_currency": "USD",
    "invoice_amount": "12.50",
    "reference": "order-42"
  };
  body["project"] = env("CRYPTANIO_PROJECT_ID");
  const response = await fetch(url, {
    method: "POST", headers, redirect: "manual",
    signal: AbortSignal.timeout(30_000), body: JSON.stringify(body),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  if (response.body) {
    for await (const chunk of response.body) process.stdout.write(chunk);
  }
} catch (error) {
  console.error(error.message);
  process.exitCode = 1;
}
Скачать пример

Ответы и ошибки

201 Успешный результат.
ПолеТипОбязательноеОписание
checkout_urlstringНетПлатёжная страница Cryptanio. При создании инвойса с выбором способа плательщиком и идентичном повторе возвращается интерактивная ссылка: по ней можно выбрать способ до обнаружения перевода. При создании с готовыми реквизитами и во всех GET/списках ссылка отдельная, только для чтения. Передавайте ссылку только нужному плательщику; она не открывает аккаунт или API-ключ. Подтверждайте оплату через API инвойса или проверенный webhook, а не переход браузера.
uri
idstringДаНепрозрачный идентификатор; сохраняйте как строку.
minLength: 1
statusstringДаpending — ожидает оплату; seen — обнаружено; partial — частичная; paid — оплачено; underpaid/overpaid/late — требуется решение; expired — срок истёк; canceled — отменён.
pending, seen, paid, underpaid, partial, overpaid, expired, late, canceled
project_idstringДаНепрозрачный идентификатор; сохраняйте как строку.
minLength: 1
referencestringНетНомер заказа.
customerobjectНет
productobjectНет
payerobjectНет
metadataobjectНетДо 20 пар, JSON не более 8192 байт. Не передавайте секреты.
invoice_currencystringНетВалюта котировки заказа.
invoice_amountstringНетТочная десятичная сумма строкой; не используйте float.
pattern: ^[0-9]+(?:\.[0-9]+)?$
chainstringДаКод сети.
assetstringДаПлатёжный актив.
addressstringДаАдрес для оплаты.
payment_routeobjectНетОбязательный реквизит блокчейн-платежа из автоматического источника: tag, memo, комментарий TON или reference Solana Pay. Сохраняйте его вместе с адресом получателя; номер заказа reference является отдельным полем.
payment_uristringНетЗапрос Solana Pay с получателем, точной суммой, mint поддерживаемого токена и обязательным reference. Для платёжного QR используйте этот URI вместо обычного адреса.
uri
amountstring | stringДаФактическая сумма к отправке; может отличаться от asked для различения инвойсов. Пустая до выбора способа.
amount_rawstring | stringДаЦелое число минимальных единиц строкой. Пустая до выбора способа.
askedstring | stringДаИсходно запрошенная криптосумма. Пустая до выбора способа.
decimalsintegerДаЧисло десятичных знаков актива.
minimum: 0
tolerancestringНетДопуск в минимальных единицах; обратите внимание на отличие от request.tolerance.
pattern: ^[0-9]+$
sandboxbooleanДаТестовый инвойс не подтверждает реальный blockchain-платёж.
needs_decisionbooleanНетТребуется решение для underpaid, overpaid или late.
paidstringНетПолученная сумма в минимальных единицах.
pattern: ^[0-9]+$
tx_idstringНетИдентификатор платежа.
paid_atstringНетДата и время UTC в RFC 3339.
date-time
expires_atstringДаДата и время UTC в RFC 3339.
date-time
created_atstringДаДата и время UTC в RFC 3339.
date-time
201 application/json
{
  "id": "2100",
  "status": "pending",
  "project_id": "2002",
  "reference": "order-42",
  "chain": "ethereum",
  "asset": "USDC",
  "address": "0x52908400098527886E0F7030069857D2E4169EE7",
  "amount": "12.5",
  "amount_raw": "12500000",
  "asked": "12.5",
  "decimals": 6,
  "sandbox": true,
  "expires_at": "2026-10-06T11:00:00Z",
  "created_at": "2026-10-06T10:00:00Z"
}
400 Некорректный запрос (bad_request, unsupported_asset).
ПолеТипОбязательноеОписание
errorobjectДа
400 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
401 Нет корректного активного API-ключа (unauthorized).
ПолеТипОбязательноеОписание
errorobjectДа
401 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
403 Ключ не разрешает операцию, проект, услугу или IP; email не подтверждён.
ПолеТипОбязательноеОписание
errorobjectДа
403 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
409 Конфликт состояния, параметров повтора или лимит платёжного ресурса (conflict, limit_reached, service_inactive).
ПолеТипОбязательноеОписание
errorobjectДа
409 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
429 Слишком много запросов (rate_limited); повторить после Retry-After.
ПолеТипОбязательноеОписание
errorobjectДа
429 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
500 Внутренняя ошибка (internal).
ПолеТипОбязательноеОписание
errorobjectДа
500 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}
503 Временная недоступность (unavailable); возможен повтор с задержкой.
ПолеТипОбязательноеОписание
errorobjectДа
503 application/json
{
  "error": {
    "code": "forbidden",
    "message": "this API key is read-only"
  }
}

Как исправлять ошибки и безопасно повторять запросы

Вложенные объекты

Invoice

ПолеТипОбязательноеОписание
checkout_urlstringНетПлатёжная страница Cryptanio. При создании инвойса с выбором способа плательщиком и идентичном повторе возвращается интерактивная ссылка: по ней можно выбрать способ до обнаружения перевода. При создании с готовыми реквизитами и во всех GET/списках ссылка отдельная, только для чтения. Передавайте ссылку только нужному плательщику; она не открывает аккаунт или API-ключ. Подтверждайте оплату через API инвойса или проверенный webhook, а не переход браузера.
uri
idstringДаНепрозрачный идентификатор; сохраняйте как строку.
minLength: 1
statusstringДаpending — ожидает оплату; seen — обнаружено; partial — частичная; paid — оплачено; underpaid/overpaid/late — требуется решение; expired — срок истёк; canceled — отменён.
pending, seen, paid, underpaid, partial, overpaid, expired, late, canceled
project_idstringДаНепрозрачный идентификатор; сохраняйте как строку.
minLength: 1
referencestringНетНомер заказа.
customerobjectНет
productobjectНет
payerobjectНет
metadataobjectНетДо 20 пар, JSON не более 8192 байт. Не передавайте секреты.
invoice_currencystringНетВалюта котировки заказа.
invoice_amountstringНетТочная десятичная сумма строкой; не используйте float.
pattern: ^[0-9]+(?:\.[0-9]+)?$
chainstringДаКод сети.
assetstringДаПлатёжный актив.
addressstringДаАдрес для оплаты.
payment_routeobjectНетОбязательный реквизит блокчейн-платежа из автоматического источника: tag, memo, комментарий TON или reference Solana Pay. Сохраняйте его вместе с адресом получателя; номер заказа reference является отдельным полем.
payment_uristringНетЗапрос Solana Pay с получателем, точной суммой, mint поддерживаемого токена и обязательным reference. Для платёжного QR используйте этот URI вместо обычного адреса.
uri
amountstring | stringДаФактическая сумма к отправке; может отличаться от asked для различения инвойсов. Пустая до выбора способа.
amount_rawstring | stringДаЦелое число минимальных единиц строкой. Пустая до выбора способа.
askedstring | stringДаИсходно запрошенная криптосумма. Пустая до выбора способа.
decimalsintegerДаЧисло десятичных знаков актива.
minimum: 0
tolerancestringНетДопуск в минимальных единицах; обратите внимание на отличие от request.tolerance.
pattern: ^[0-9]+$
sandboxbooleanДаТестовый инвойс не подтверждает реальный blockchain-платёж.
needs_decisionbooleanНетТребуется решение для underpaid, overpaid или late.
paidstringНетПолученная сумма в минимальных единицах.
pattern: ^[0-9]+$
tx_idstringНетИдентификатор платежа.
paid_atstringНетДата и время UTC в RFC 3339.
date-time
expires_atstringДаДата и время UTC в RFC 3339.
date-time
created_atstringДаДата и время UTC в RFC 3339.
date-time
ID

Непрозрачный идентификатор. Формат не гарантирован; не преобразуйте в число.

string Непрозрачный идентификатор. Формат не гарантирован; не преобразуйте в число.

InvoiceStatus

pending — ожидает оплату; seen — обнаружено; partial — частичная; paid — оплачено; underpaid/overpaid/late — требуется решение; expired — срок истёк; canceled — отменён.

string pending — ожидает оплату; seen — обнаружено; partial — частичная; paid — оплачено; underpaid/overpaid/late — требуется решение; expired — срок истёк; canceled — отменён.

Customer

ПолеТипОбязательноеОписание
idstringДаИдентификатор покупателя в вашей системе.
maxLength: 120
Product

ПолеТипОбязательноеОписание
idstringНетИдентификатор товара в вашей системе.
maxLength: 120
namestringНетНазвание товара.
maxLength: 200
quantityintegerНетКоличество единиц.
minimum: 1; maximum: 1000000
Payer

ПолеТипОбязательноеОписание
commentstringДаКомментарий плательщика.
maxLength: 500
InvoiceMetadata

До 20 пар, JSON не более 8192 байт. Не передавайте секреты.

object До 20 пар, JSON не более 8192 байт. Не передавайте секреты.

Decimal

string

RawAmount

string

InvoiceRequest

ПолеТипОбязательноеОписание
projectstringНетID проекта Payments; рекомендуется задавать явно. Для проектного ключа используется его проект.
chainstringНетКод сети.
minLength: 1
assetstringНетПоддерживаемый платёжный актив: native, символ или известный идентификатор. Допустимые активы зависят от сети; отсутствие поля выбирает native.
По умолчанию: native
amountstringНетПоложительная криптосумма в единицах asset; точность не выше decimals актива.
pattern: ^[0-9]+(?:\.[0-9]+)?$
referencestringНетНомер заказа в вашей системе; не заменяет Idempotency-Key.
maxLength: 120
addressstringНетНеобязательный адрес из платёжного пула проекта. Без него адрес выбирает сервис.
tolerancestringНетДопустимая недоплата в единицах asset, строго меньше amount. Нулевой допуск задаётся отсутствием поля.
pattern: ^[0-9]+(?:\.[0-9]+)?$
customerobjectНет
productobjectНет
payerobjectНет
metadataobjectНетДо 20 пар, JSON не более 8192 байт. Не передавайте секреты.
invoice_currencystringНетТрёхбуквенный код валюты котировки заказа; только вместе с invoice_amount.
pattern: ^[A-Za-z]{3}$
invoice_amountstringНетПоложительная сумма заказа в invoice_currency. Вместе с chain и amount сохраняет котировку клиента; без реквизитов задаёт фиксированную стоимость инвойса для расчёта выбранного плательщиком актива.
maxLength: 80; pattern: ^[0-9]+(?:\.[0-9]+)?$
expires_inintegerНетСрок оплаты в минутах с успешной выдачи реквизитов. Отсутствие или 0 использует настройку проекта (по умолчанию 60), максимум 10080. Старый режим с готовым способом также считает отрицательное значение отсутствующим; интерактивный режим его отклоняет.
По умолчанию: 60; maximum: 10080
Error

ПолеТипОбязательноеОписание
errorobjectДа