API

Получить официальный график комиссий площадки

GET /websites/{code}/fee-schedule — Получить официальный график комиссий площадки

Операция

GET /websites/{code}/fee-schedule

Поведение

Возвращает комиссии, которые платформа сейчас публикует для одной площадки, по одному слоту на каждое назначение: deposit, sale и withdraw.

  • Каждый опубликованный слот содержит полностью развёрнутую официальную цепочку расчёта: все операторы комиссий, операторы конвертации и группы операторов конвертации с их значениями и валютами, поэтому одного запроса достаточно, чтобы воспроизвести расчёт платформы.
  • Слот, цепочка которого имеет id 0, явно бесплатен: платформа ничего не взимает за это назначение, а у цепочки нет шагов.
  • Слот равен null, если у платформы нет опубликованной официальной цепочки расчёта для этого назначения: комиссия неизвестна или площадка его не предлагает. null никогда не означает «бесплатно».
  • Каждая цепочка указывает свою start_currency: валюту, в которой должна быть цена, чтобы цепочка применялась (null: любая валюта).
  • Поля владения и управления не включаются.

404 означает, что площадки с таким кодом нет.

Использование

{
  "authentication": "public",
  "credit_cost": 0,
  "premium": false,
  "recommended_interval_seconds": 300,
  "rate_limit": null,
  "unit_pricing": null
}

Запрос

{
  "parameters": [
    {
      "name": "code",
      "in": "path",
      "required": true,
      "schema": {
        "type": "string",
        "description": "Код площадки из списка `GET /websites`.",
        "title": "Code"
      },
      "description": "Код площадки из списка `GET /websites`."
    }
  ]
}

Ответы

{
  "200": {
    "description": "Успешный ответ",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/Envelope_FeeScheduleOut_"
        }
      }
    }
  },
  "404": {
    "description": "Запрошенный ресурс не существует",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "422": {
    "description": "Параметр или тело запроса некорректны",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  },
  "503": {
    "description": "Сервис временно недоступен; повторите позже",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/ErrorEnvelope"
        }
      }
    }
  }
}

Модели

{
  "CreditMeta": {
    "properties": {
      "cost": {
        "type": "integer",
        "title": "Cost",
        "description": "Сколько кредитов стоит этот запрос."
      },
      "remaining": {
        "type": "integer",
        "title": "Remaining",
        "description": "Расчётный остаток кредитов после этого запроса. Это ориентир, а не данные учёта: из-за параллельных запросов значение может немного отличаться."
      }
    },
    "type": "object",
    "required": [
      "cost",
      "remaining"
    ],
    "title": "CreditMeta",
    "description": "Учёт кредитов для платного запроса."
  },
  "Envelope_FeeScheduleOut_": {
    "properties": {
      "data": {
        "$ref": "#/components/schemas/FeeScheduleOut",
        "description": "Полезные данные эндпоинта."
      },
      "meta": {
        "$ref": "#/components/schemas/Meta",
        "description": "Метаданные запроса."
      }
    },
    "type": "object",
    "required": [
      "data",
      "meta"
    ],
    "title": "Envelope[FeeScheduleOut]"
  },
  "ErrorBody": {
    "properties": {
      "code": {
        "type": "string",
        "title": "Code",
        "description": "Стабильный машиночитаемый код ошибки. Ориентируйтесь на это значение, а не на `message`."
      },
      "message": {
        "type": "string",
        "title": "Message",
        "description": "Пояснение для человека. Формулировка может меняться."
      },
      "details": {
        "anyOf": [
          {
            "additionalProperties": true,
            "type": "object"
          },
          {
            "type": "null"
          }
        ],
        "title": "Details",
        "description": "Необязательный структурированный контекст, например список ошибок валидации или, для `credit_insufficient`, требуемое и оставшееся количество кредитов."
      }
    },
    "type": "object",
    "required": [
      "code",
      "message"
    ],
    "title": "ErrorBody",
    "description": "Подробности неудачного запроса."
  },
  "ErrorEnvelope": {
    "properties": {
      "error": {
        "$ref": "#/components/schemas/ErrorBody",
        "description": "Что пошло не так."
      },
      "meta": {
        "$ref": "#/components/schemas/Meta",
        "description": "Метаданные запроса."
      }
    },
    "type": "object",
    "required": [
      "error",
      "meta"
    ],
    "title": "ErrorEnvelope",
    "description": "Ответ с ошибкой: ошибка в `error` и метаданные запроса в `meta`."
  },
  "FeeScheduleOut": {
    "properties": {
      "website_code": {
        "type": "string",
        "title": "Website Code",
        "description": "Код площадки."
      },
      "slots": {
        "$ref": "#/components/schemas/FeeScheduleSlotsOut",
        "description": "Опубликованная официальная цепочка для каждого назначения."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "website_code",
      "slots"
    ],
    "title": "FeeScheduleOut",
    "description": "Официальные комиссии, которые платформа сейчас публикует для одной площадки,\nпо назначениям. Назначение равно `null`, если для него не опубликована\nофициальная цепочка."
  },
  "FeeScheduleSlotOut": {
    "properties": {
      "purpose": {
        "type": "string",
        "enum": [
          "deposit",
          "sale",
          "withdraw"
        ],
        "title": "Purpose",
        "description": "Назначение: `deposit`, `sale` или `withdraw`."
      },
      "calculation_chain": {
        "$ref": "#/components/schemas/PublicCalculationChainOut",
        "description": "Официальная цепочка расчёта для этого назначения."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "purpose",
      "calculation_chain"
    ],
    "title": "FeeScheduleSlotOut",
    "description": "Официальная цепочка, опубликованная для одного назначения."
  },
  "FeeScheduleSlotsOut": {
    "properties": {
      "deposit": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/FeeScheduleSlotOut"
          },
          {
            "type": "null"
          }
        ],
        "description": "Комиссии при пополнении; `null`, если ничего не опубликовано."
      },
      "sale": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/FeeScheduleSlotOut"
          },
          {
            "type": "null"
          }
        ],
        "description": "Комиссии при продаже; `null`, если ничего не опубликовано."
      },
      "withdraw": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/FeeScheduleSlotOut"
          },
          {
            "type": "null"
          }
        ],
        "description": "Комиссии при выводе; `null`, если ничего не опубликовано."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "deposit",
      "sale",
      "withdraw"
    ],
    "title": "FeeScheduleSlotsOut",
    "description": "Опубликованные официальные цепочки одной площадки по назначениям."
  },
  "Meta": {
    "properties": {
      "request_id": {
        "type": "string",
        "title": "Request Id",
        "description": "Уникальный идентификатор этого запроса, совпадает с заголовком ответа `X-Request-ID`. Указывайте его при обращении в поддержку."
      },
      "billable": {
        "anyOf": [
          {
            "type": "boolean"
          },
          {
            "type": "null"
          }
        ],
        "title": "Billable",
        "description": "Оплачивается ли запрос кредитами. Присутствует только у тарифицируемых эндпоинтов; `false` означает, что запрос бесплатен — например, потому что он ничего не стоит или его покрывает ваша подписка."
      },
      "credit": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/CreditMeta"
          },
          {
            "type": "null"
          }
        ],
        "description": "Стоимость запроса и расчётный остаток вашего баланса. Присутствует, только если `billable` равен `true`."
      }
    },
    "type": "object",
    "required": [
      "request_id"
    ],
    "title": "Meta",
    "description": "Метаданные запроса, которые есть в каждом ответе в обёртке."
  },
  "PublicCalculationChainOut": {
    "properties": {
      "id": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Id",
        "description": "Уникальный ID цепочки расчёта. `0` — встроенная цепочка без комиссий: платформа ничего не взимает за это назначение."
      },
      "name": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Name",
        "description": "Отображаемое название, если задано."
      },
      "start_currency": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Start Currency",
        "description": "Валюта, в которой цепочка ожидает цену; `null`, если она применима к любой валюте. На цену в другой валюте цепочка не распространяется."
      },
      "steps": {
        "items": {
          "oneOf": [
            {
              "$ref": "#/components/schemas/PublicFeeOperatorOut"
            },
            {
              "$ref": "#/components/schemas/PublicConvertOperatorOut"
            },
            {
              "$ref": "#/components/schemas/PublicConvertOperatorGroupOut"
            }
          ],
          "discriminator": {
            "propertyName": "kind",
            "mapping": {
              "convert": "#/components/schemas/PublicConvertOperatorOut",
              "convert_operator_group": "#/components/schemas/PublicConvertOperatorGroupOut",
              "fee": "#/components/schemas/PublicFeeOperatorOut"
            }
          }
        },
        "type": "array",
        "title": "Steps",
        "description": "Шаги в порядке выполнения; тип определяется полем `kind`."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "id",
      "name",
      "start_currency",
      "steps"
    ],
    "title": "PublicCalculationChainOut",
    "description": "Официальная цепочка расчёта в том виде, в каком она опубликована в графике комиссий."
  },
  "PublicConvertOperatorGroupOut": {
    "properties": {
      "kind": {
        "type": "string",
        "const": "convert_operator_group",
        "title": "Kind",
        "description": "Тип шага: всегда `convert_operator_group`."
      },
      "id": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Id",
        "description": "Уникальный ID группы."
      },
      "name": {
        "type": "string",
        "title": "Name",
        "description": "Отображаемое название."
      },
      "rule": {
        "type": "string",
        "enum": [
          "min",
          "max",
          "avg"
        ],
        "title": "Rule",
        "description": "Как выбирается результат среди участников, успешно выполнивших конвертацию: `min`, `max` или `avg`."
      },
      "members": {
        "items": {
          "$ref": "#/components/schemas/PublicConvertOperatorOut"
        },
        "type": "array",
        "title": "Members",
        "description": "Конвертации — участники группы, по порядку."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "kind",
      "id",
      "name",
      "rule",
      "members"
    ],
    "title": "PublicConvertOperatorGroupOut",
    "description": "Группа альтернативных конвертаций в опубликованном графике комиссий."
  },
  "PublicConvertOperatorOut": {
    "properties": {
      "kind": {
        "type": "string",
        "const": "convert",
        "title": "Kind",
        "description": "Тип шага: всегда `convert`."
      },
      "id": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Id",
        "description": "Уникальный ID оператора конвертации."
      },
      "name": {
        "type": "string",
        "title": "Name",
        "description": "Отображаемое название."
      },
      "from": {
        "$ref": "#/components/schemas/PublicCurrencyOut",
        "description": "Исходная валюта."
      },
      "to": {
        "$ref": "#/components/schemas/PublicCurrencyOut",
        "description": "Целевая валюта."
      },
      "mode": {
        "type": "string",
        "enum": [
          "auto",
          "fixed"
        ],
        "title": "Mode",
        "description": "`auto` конвертирует через `usd_rate` обеих валют; `fixed` умножает на `rate`."
      },
      "rate": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Rate",
        "description": "Количество единиц целевой валюты за одну единицу исходной, в виде десятичной строки; используется в режиме `fixed`."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "kind",
      "id",
      "name",
      "from",
      "to",
      "mode",
      "rate"
    ],
    "title": "PublicConvertOperatorOut",
    "description": "Шаг конвертации валюты в опубликованном графике комиссий."
  },
  "PublicCurrencyOut": {
    "properties": {
      "id": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Id",
        "description": "Уникальный ID валюты."
      },
      "code": {
        "type": "string",
        "title": "Code",
        "description": "Код валюты, например `USD`."
      },
      "name": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Name",
        "description": "Отображаемое название."
      },
      "kind": {
        "type": "string",
        "title": "Kind",
        "description": "Вид валюты, например `fiat`."
      },
      "usd_rate": {
        "type": "string",
        "title": "Usd Rate",
        "description": "Стоимость одной единицы в долларах США в виде десятичной строки."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "id",
      "code",
      "name",
      "kind",
      "usd_rate"
    ],
    "title": "PublicCurrencyOut",
    "description": "Валюта в том виде, в каком её использует опубликованный график комиссий."
  },
  "PublicFeeOperatorOut": {
    "properties": {
      "kind": {
        "type": "string",
        "const": "fee",
        "title": "Kind",
        "description": "Тип шага: всегда `fee`."
      },
      "id": {
        "anyOf": [
          {
            "type": "integer"
          },
          {
            "type": "null"
          }
        ],
        "title": "Id",
        "description": "Уникальный ID оператора комиссии."
      },
      "name": {
        "type": "string",
        "title": "Name",
        "description": "Отображаемое название."
      },
      "operator": {
        "type": "string",
        "enum": [
          "add",
          "sub",
          "mul",
          "div"
        ],
        "title": "Operator",
        "description": "Арифметическое действие над текущей суммой: `add`, `sub`, `mul` или `div`."
      },
      "value": {
        "type": "string",
        "title": "Value",
        "description": "Операнд арифметического действия в виде десятичной строки."
      },
      "currency_code": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "type": "null"
          }
        ],
        "title": "Currency Code",
        "description": "Валюта суммы для `add` и `sub`; `null` для `mul` и `div`."
      }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
      "kind",
      "id",
      "name",
      "operator",
      "value",
      "currency_code"
    ],
    "title": "PublicFeeOperatorOut",
    "description": "Шаг комиссии в опубликованном графике комиссий."
  }
}

Скачать публичную схему OpenAPI