API Capusta.Space: принимай переводы
и собирай донаты через свой сайт

Capusta.Space — универсальное решение для работы с онлайн-переводами и платежами. API построено на REST-принципах, работает с реальными объектами и обладает предсказуемым поведением. С помощью этого API можно отправлять запросы на оплату, получать информацию о созданных счетах, а также многое другое.
API в качестве основного протокола использует HTTP, поэтому подходит для разработки на любом языке программирования, который умеет работать с HTTP-библиотеками (например cURL).
  • 1
    API поддерживает POST и GET-запросы
  • 2
    POST-запросы используют JSON-аргументы, GET-запросы работают со строками запросов.
  • 3
    API всегда возвращает ответ в формате JSON, независимо от типа запроса
Базовый URL для API:
https://api.capusta.space/v1/partner
Проверить возможности REST API Capusta.Space можно с помощью Swagger

Авторизация

Каждому проекту, созданному пользователем сервиса Capusta.Space, выдается уникальный секретный токен для авторизации. Его можно получить в настройках проекта Личного кабинета.
У тебя ещё нет токена?! Получи его сразу после регистрации в сервисе Capusta.Space!
Каждый запрос к Capusta.API должен быть авторизован данным токеном. Авторизация производится при помощи HTTP-заголовка Authorization. Например:

 Authorization: Bearer partner@mail.com:TOKEN
Секретный токен отвечает за безопасность данных. Храни его в защищенном месте и не публикуй на сторонних ресурсах.

Создать платеж

Для создания платежа необходимо отправить POST-запрос вида
POST /payment

        {
            "id": "uniq_string",
            "amount": {
                "amount": 1000,
                "currency": "RUB"
            },
            "expire": "2020-06-17T15:45:41.000+03:00",
            "description": "...",
            "projectCode": "myproject",
            "sender": {
                "name": "...",
                "phone": "...",
                "email": "...",
                "comment": "..."
            },
            "contentUrl": "...",
            "custom": {
                "id": 1,
                "shopName": "myshop",
                "shopDescription": "Clothes",
	         // Любой набор параметров
            },
            "successUrl": "https://my-site.com/payment/success",
            "failUrl": "https://my-site.com/payment/error"
        }

Важно: суммы, передаваемые в запросах и ответах API, выражаются в копейках, поэтому, например, для выставления счета на 10 руб. в amount указывается значение 1000
где:

currency* - валюта (RUB, UZS),

projectCode* - символьный идентификатор проекта (выдается вместе с токеном, доступен в настройках личного кабинета и является частью постоянной ссылки на перевод произвольных сумм в адрес проекта).

Необязательные параметры:

Партнер может идентифицировать платеж со своей стороны необязательным параметром id, который впоследствии может быть использован для проверки статуса платежа и будет доставляться в уведомлениях.

amount - сумма платежа в минорных единицах (копейки). Если amount не будет передан, то будет создан счет на перевод произвольной суммы.

expire - дата, после которой невозможна оплата счета. Указывается в формате YYYY-MM-DDTHH:MI:SS.sss±ZZ:ZZ, где ZZ:ZZ - параметр, отвечающий за смещение по стандарту UTC (формат ISO 8601). ❗❗❗ Необходимо указывать дату, находящуюся в будущем от текущего времени, иначе API отвечает кодом 400.

description - описание платежа (максимум 255 симоволов),

sender - используется для сбора ИЛИ передачи информации об отправителях средств. Подробнее тут

С помощью contentUrl можно указать ссылку или код iframe с платным цифровым контентом (например, c электронной книгой, видео, закрытым telegram-каналом и т.п.), который должен быть показан в результате оплаты счета.

custom — позволяет указывать дополнительную информацию по платежу. Поле custom и его содержимое также отправляется на callback url, указанный вами, после изменения статуса платежа.

❗❗Содержимое поля custom необходимо указывать в виде JSON-объекта. Длина JSON-объекта custom не должна превышать 255 символов без пробелов и переводов строк. JSON-объект custom должен быть первого уровня вложенности (не содержать вложенных JSON-объектов)

successUrl и failUrl позволяют указать адрес страницы, на которую будет перенаправлен пользователь в случае успешной/неуспешной оплаты счета соответственно.

❗❗❗ Содержимое полей successUrl и failUrl должно быть валидными URL-строками. В случае указания неправильного URL, от API вернется ответ с кодом 400 (Bad Request).

В ответ метод отдает объект платежа вида:

 {
    "amount": {
        "amount": 1000,
        "commission": 0,
        "currency": "RUB"
    },
    "created_at": "2019-09-22T13:50:16.119Z",
    "description": "...",
    "id": "some_string",
    "projectId": 6,
    "status": "CREATED",
    "payUrl": "https://get.capusta.space/bill/uuid"
}
Пример реализации метода на разных языках:

using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace CapustaNetCore
{
    static class Program
    {
        public class PaymentRequest
        {
            public class AmountObj
            {
                [JsonPropertyName("currency")]
                public string Currency { get; set; }

                [JsonPropertyName("amount")]
                public long Amount { get; set; }
            }

            [JsonPropertyName("projectCode")]
            public string ProjectCode { get; set; }

            [JsonPropertyName("description")]
            public string Description { get; set; }

            [JsonPropertyName("amount")]
            public AmountObj Amount { get; set; }
        }

        static async Task Main()
        {
            string email = "YOUR_EMAIL";
            string token = "YOUR_TOKEN";

            var request = new PaymentRequest
            {
                ProjectCode = "YOUR_PROJECT_CODE",
                Description = "It's easy, man!",
                Amount = new PaymentRequest.AmountObj
                {
                    Amount = 1000L,
                    Currency = "RUB"
                }
            };

            var serializedData = JsonSerializer.Serialize(request);

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Authorization", $"Bearer {email}:{token}");

                var response = await client.PostAsync("https://api.capusta.space/v1/partner/payment",
                    new StringContent(serializedData, Encoding.UTF8, "application/json")).ConfigureAwait(false);

                response.EnsureSuccessStatusCode();

                var data = await response.Content.ReadAsStringAsync();

                Console.WriteLine(data);
                Console.ReadLine();
            }
        }
    }
}


<?php
$email = 'YOUR_EMAIL_HERE';
$token = 'YOUR_TOKEN_HERE';
$projectCode = 'YOUR_PROJECT_CODE_HERE';
$amount = 1000; //minimum 10 rub!

$headers = [
    'Authorization: Bearer '.$email . ':' . $token,
    'Content-Type: application/json; charset=utf-8',
];

$url = "https://api.capusta.space/v1/partner/payment"; //payment url
$requestArray = [
    'projectCode' => $projectCode,
    'amount' => [
        'currency' => 'RUB',
        'amount' => $amount,
    ],
    'description' => 'its easy, man!',
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,json_encode($requestArray));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);

print  $server_output ;

import requests

EMAIL = 'YOUR_EMAIL_HERE'
TOKEN = 'YOUR_TOKEN_HERE'
PROJECT_CODE = 'YOUR_PROJECT_CODE_HERE'

url = 'https://api.capusta.space/v1/partner/payment'

payload = {
    'projectCode': PROJECT_CODE,
    'amount': {
        'currency': 'RUB',
        'amount': 1000
    },
    'description': 'its easy, man!'
}

headers = {
    'Authorization': f'Bearer {EMAIL}:{TOKEN}',
}

response = requests.request("POST", url, json=payload, headers=headers)

print(response.json())

import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class Main {

    public static void main(String... args) throws IOException {
        
        String email = "YOUR_EMAIL_HERE";
        String token = "YOUR_TOKEN_HERE";
        String projectCode = "YOUR_PROJECT_CODE_HERE";
        long amount = 1000L; //minimum 10 rub!

        JSONObject request = new JSONObject();
        request.put("projectCode", projectCode);
        request.put("description", "its easy, man!");
        JSONObject amountObject = new JSONObject();
        amountObject.put("amount", amount);
        amountObject.put("currency", "RUB");
        request.put("amount", amountObject);

        URL url = new URL("https://api.capusta.space/v1/partner/payment"); // payment url
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setDoOutput(true);
        con.setRequestMethod("POST");
        con.setRequestProperty("Content-Type", "application/json; utf-8");
        con.setRequestProperty("Authorization", "Bearer " + email + ":" + token);
        
        try(OutputStream os = con.getOutputStream()) {
            byte[] input = request.toString().getBytes(StandardCharsets.UTF_8);
            os.write(input, 0, input.length);
        }

        try(BufferedReader br = new BufferedReader(
                new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8))) {
            StringBuilder response = new StringBuilder();
            String responseLine = null;
            while ((responseLine = br.readLine()) != null) {
                response.append(responseLine.trim());
            }
            System.out.println(response.toString());
        }

        con.disconnect();
    }
}
для работы необходима одна зависимость, пример подключения для Maven:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20201115</version>
</dependency>
Пример на этом языке скоро будет нами добавлен. Вы можете предложить свой
Если статус платежа "CREATED", то необходимо перенаправить пользователя на payUrl
Этот метод можно протестировать!

Создать мультисчёт

API Causta.Space предоставляет возможность создавать "мультисчета" - это счета, которые можно оплачивать неограниченное количество раз по одной и той же ссылке. Тело запроса на создание мультисчёта полностью аналогичное телу запроса создания платежа:
POST /bill

  {
            "id": "uniq_string",
            "amount": {
                "amount": 1000,
                "currency": "RUB"
            },
             "expire": "2020-06-17T15:45:41.000+03:00",
             "description": "...",
             "projectCode": "myproject",
             "sender": {
                "name": "...",
                "phone": "...",
                "email": "...",
                "comment": "..."
            },
             "contentUrl": "...",
             "custom": {
                "id": 1,
                "shopName": "myshop",
                "shopDescription": "Clothes",
	         // Любой набор параметров
            },
            "successUrl": "https://my-site.com/payment/success",
            "failUrl": "https://my-site.com/payment/error"
}
В данном случае id - это идентификатор счета, а не платежа. Так же, как и в методе создания платежа он может передаваться, а может генерироваться автоматически. Платежам же в таком случае системой будет генерироваться уникальный строковый идентификатор. В уведомлениях на callback_url в тело так же будет добавлен billId - идентификатор мультисчёта.

Остальные параметры — идентичны запросу создания платежа.
Этот метод можно протестировать!

Создать подписку

Любой счет, создаваемый с помощью методов /bill и /payment, можно превратить в подписку. Подписка позволяет в автоматическом режиме с заданной периодичностью осуществлять повторные переводы заданной суммы. Для этого в тело запроса нужно добавить объект subscription, отвечающий за создание подписки.
POST /payment | POST /bill

{
    "amount": {
        "amount": 1000,
        "currency": "RUB"
    },
    "projectCode": "myproject",
    "subscription": {
        "per": "MONTHLY",
        "oneTimePayment": true,
        "trialDays": 3
    }
}
  • per — периодичность (опционально) — DAILY, WEEKLY, MONTHLY, SEMI-ANNUALLY, ANNUALLY, SELECTIVELY (ежедневно, еженедельно, ежемесячно, раз в полгода, ежегодно или предоставить выбор отправителю средств).

  • oneTimePayment — возможность оплаты счета без подписки (true/false), т.е. отправителю будет предложено оформить подписку или совершить единоразовый перевод на выбор

  • trialDays — пробный период (необязательный), количество дней, на которое следует отложить первый платёж
Внимание! В случае отсутствия ключа per, создается подписка без периодичности (обычный рекуррент), однако эта возможность недоступна по умолчанию и предоставляется только по запросу в support@capusta.space.
  • Developer:
    Ok, как отменить подписку?
    Capusta:
    POST /subscription/cancel

    {
    "projectCode": "string",
    "projectId": numeric,
    "subscriberId": numeric,
    "paymentId": "string"
    }

    Параметры projectCode и projectId являются взаимозаменяемыми.
    Параметры subscriberId и paymentId также являются взаимозаменяемыми.


    Уведомление мерчанта о подписке (callback) обогащено параметром subscriberId вне зависимости от разрешения на использование рекуррентов. Пример:

    {
    "transactionId": "09af4329-cd4d",
    "callbackId": 1884,
    "amount": { "amount": 100000, "currency": "RUB" },
    "status": "SUCCESS",
    "subscriberId": 566,
    "billId": "dc50ee84-b64e"
    }

    В качестве определения подписки для ее отмены мерчант может использовать, как указывалось ранее, два различных параметра - subscriberId (приходит в коллбеке в случае оформления подписки) и другой параметр - paymentId (может быть как идентификатор транзакции установочного платежа, так и идентификатор транзакции очередного списания)

Создать тарифы

Вы можете предложить плательщику несколько вариантов сумм для оплаты на выбор. Для этого используйте ключ billTariffs (массив) в методах /bill и /payment.
POST /payment | POST /bill

{
    "projectCode": "myproject",
    "billTariffs": [
        {
            "amount": {
                "amount": 1000,
                "currency": "RUB"
            },
            "name": "test1",
            "description": "test1"
        },
        {
            "amount": {
                "amount": 2000,
                "currency": "RUB"
            },
            "name": "tes2t",
            "description": "test2",
            "contentUrl": "https://www.youtube.com/watch?v=nDbidIKDBPs"
        },
        {
            "amount": {
                "amount": 2000,
                "currency": "RUB"
            },
            "name": "tes2t",
            "description": "test2",
            "contentUrl": "https://www.youtube.com/watch?v=nDbidIKDBPs",
            "subscription": {
                "per": "WEEKLY",
                "oneTimePayment": false
            }
        }
    ]
}
Объект каждого тарифа может содержать:
  • amount — сумма тарифа

  • name — название тарифа

  • description — описание тарифа

  • contentUrl — ссылка на контент для данного тарифа

  • subscription — объект, отвечающий за создание подписки, содержит поля:

    • per — периодичность — DAILY, WEEKLY, MONTHLY или SELECTIVELY.

    • oneTimePayment — возможность оплаты счета без подписки (true/false), т.е. отправителю будет предложено оформить подписку или совершить единоразовый перевод на выбор

❗❗❗ В случае указания одновременно внешнего блока subscription (вне списка тарифов) и блока billTariffs, пользователь получит ошибку с HTTP-кодом 400 и текстом "You are not allowed to specify both billTariffs and subscription. "
Ещё примеры запросов с тарифами:

Создать счёт для чаевых

Вы можете предложить плательщику оставить чаевые в зависимости от суммы в чеке. Для этого используйте ключ tipPercents (массив) в методах /bill и /payment.
POST /payment | POST /bill

{
  "id": "uniq_string",
  "amount": {
    "amount": 100000,
    "currency": "RUB"
  },
  "expire": "2020-06-17T15:45:41.000+03:00",
  "description": "...",
  "projectCode": "myproject",
  "tipPercents": [
    3,
    5,
    7
  ]
}
, где
  • amount — сумма в чеке клиента, от которой считаются предлагаемые чаевые к оплате;
  • tipPercents — перечисление вариантов чаевых в процентах от суммы в чеке, которые в один клик сможет выбрать донатер на странице перевода.

Согласно примеру, плательщику будет предложено задонатить 3%, 5% или 7% от 1 000 рублей.

Форма оформления заказа и для сбора доната: запрос дополнительных сведений о плательщиках

Чтобы запросить имя отправителя перевода, email, телефон и позволить ему оставить комментарий, сообщение или свой адрес, добавь в тело запроса /payment или /bill объект sender. Например:
POST /payment

 {
            "id": "uniq_string",
            "amount": {
                "amount": 1000,
                "currency": "RUB"
            },
            "description": "...",
            "projectCode": "myproject",
            "sender": {
                "name": "...",
                "phone": "...",
                "email": "...",
                "comment": "...",
            }  
        }

Внимание! В примере указаны все допустимые поля. В реальном запросе можно использовать только нужные.

Используй вместо comment поле "message": "...", чтобы предлагать пользователю оставить сообщение.

Используй вместо comment поле "address": "...", чтобы предлагать пользователю указать адрес доставки.
Поля могут передаваться как пустыми (плательщику нужно будет заполнить их), так и предзаполненными (плательщик сможет скорректировать значения в них, при необходимости).
Если у пользователя запрашивается email, после успешной оплаты на него него будет автоматически выслана квитанция.

Параметры необязательно включать в запрос, если они настроены тобой по умолчанию в личном кабинете
Этот метод можно протестировать!

Создание выплаты

Внимание! Данный метод недоступен по умолчанию и предоставляется по запросу в support@capusta.space
Для создания выплаты необходимо отправить POST-запрос вида:
POST /payout

{
    "id": "your-transaction-id",
    "amount": {
        "amount": 10000,
        "currency": "RUB"
    },
    "projectCode": "lalala",
    "pan": "1111111111111111",
    "description": "any description"
}
где amount - сумма выплаты в минорных единицах,
currency - код валюты (в настоящее время только RUB),
projectCode - идентификатор проекта (вместо него может быть использован projectId, если известен числовой идентификатор проекта),
pan - номер карты,
id - уникальный идентификатор выплаты
а description - любое текстовое описание для выплаты.

Параметр id не является обязательным, однако в случае создания выплаты мы настоятельно рекомендуем указывать его для того, чтобы иметь возможность получить статус выплаты в случае, если по каким-то причинам ответ от метода не был получен.

В качестве результата метод возвращает объект выплаты, обогащенный идентификатором операции:

{
    "id": "some_string",
    "amount": {
        "amount": 10000,
        "currency": "RUB"
    },
    "projectCode": "lalala"
}
Этот метод можно протестировать!

Расчёт комиссии за выплату

Перед осуществлением выплаты можно узнать комиссию сервиса Capusta.Space . Для этого используйте следующий GET-запрос:
GET /payout/commission

https://api.capusta.space/v1/partner/payout/commission?project-code=kotiki&pan=4200000000000000&amount=100000
где project-сode - идентификатор проекта (вместо него может быть использован project-id, если известен числовой идентификатор проекта),
pan - номер карты,
amount - планируемая сумма выплаты.

В качестве результата метод возвращает ответ, содержаний поле commission:

{
    "amount": 100000,
    "commission": 5000,
    "pan": 4200000000000000,
    "projectCode": "kotiki"
}

Создание возврата

Для осуществления возврата необходимо отправить POST-запрос вида:
POST /refund

{
  "transactionId": "string",
  "projectCode": "string",
  "reason": "string",
  "email": "string"
}
где
  • transactionId - строковый идентификатор платежа, по которому необходимо осуществить возврат;
  • projectCode - код проекта, инициирующего возврат (опциональный параметр, вместо него может быть использован projectId - числовой идентификатор проекта);
  • reason - причина возврата;
  • email - почта для отправки квитанции о возврате клиенту (необязательное поле)

Пример ответа:

{
  "refundId": "string",
  "amount": 1000,
  "commission": 5000
}
где
  • refundId - строковый идентификатор возврата;
  • amount - сумма возврата;
  • commission - комиссия возврата
С помощью метода осуществляется возврат всей суммы операции отправителю средств. За возвраты взимается комиссия по тарифам выплат. Возврат части суммы от операции, в настоящий момент, недоступен.

Получение статуса платежей и выплат

Обновленная версия метода. Предыдущая — поддерживается.
Для обновлённого метода необходимо использовать базовый URL

https://api.capusta.space/v2/partner
Получить статус по любой из транзакций или статус по счету возможно с помощью GET-запроса:

GET /status?transaction-id=...
Пример запроса:

https://api.capusta.space/v2/partner/status?transaction-id=e0cb82ac-7be5
Ответ для обычной транзакции содержит в себе информацию о счете + информацию о конкретной транзакции.
Пример ответа, где transactionId — ключ, в котором хранится технический идентификатор транзакции системы:

{
    "id": "e0cb82ac-7be5",
    "transactionId": "e0cb82ac-7be5",
    "partnerPaymentId": null,
    "amount": {
        "amount": 1000,
        "commission": 0,
        "currency": "RUB"
    },
    "status": "NEW",
    "description": "test",
    "contentUrl": null,
    "projectId": 1,
    "projectCode": "test",
    "payUrl": "https://capu.st/bille0cb82ac-7be5",
    "sender": null,
    "expire": null,
    "custom": "{\"id\":1,\"shopname\":\"test_shop\",\"description\":\"shop_description\"}",
    "multiBill": true,
    "billPaymentEnabled": true,
    "createdAt": "2020-05-15T06:43:42.000+0000",
    "transactions": [
        {
            "id": "d4431bfc-f261",
            "amount": {
                "amount": 1000,
                "commission": 0,
                "currency": "RUB"
            },
            "status": "SUCCESS",
            "createdAt": "2020-09-07T16:24:37.000+0000",
            "updatedAt": "2020-09-07T16:24:37.000+0000"
        }
    ],
    "totalTransactionCount": 1,
    "transactionCountPerPage": 25
}
Ответ для счёта или по установочному платежу (первый платёж по подписке) содержит информацию о счете (контент, признак мультисчета, expire и другое) + до 25 последних успешных транзакций, совершенных по данному счету.

Точное количество транзакций по счету/установочному платежу сообщается в параметре totalTransactionCount, а для расчета количества страниц передается transactionCountPerPage.

Если totalTransactionCount > 25, для получения следующих 25 транзакций по счету-подписке/установочному платежу, необходимо передавать в запросе параметр page.

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

https://api.capusta.space/v2/partner/status?transaction-id=e0cb82ac-7be5?page=2
Пример ответа:

{
    "id": "e0cb82ac-7be5",
    "transactionId": "e0cb82ac-7be5",
    "partnerPaymentId": null,
    "amount": {
        "amount": 1000,
        "commission": 0,
        "currency": "RUB"
    },
    "status": "NEW",
    "description": "test",
    "contentUrl": null,
    "projectId": 1,
    "projectCode": "test",
    "payUrl": "https://capu.st/bille0cb82ac-7be5",
    "sender": null,
    "expire": null,
    "custom": "{\"id\":1,\"shopname\":\"test_shop\",\"description\":\"shop_description\"}",
    "multiBill": true,
    "billPaymentEnabled": true,
    "createdAt": "2020-05-15T06:43:42.000+0000",
    "transactions": [
        {
            "id": "d4431bfc-f261",
            "amount": {
                "amount": 1000,
                "commission": 0,
                "currency": "RUB"
            },
            "status": "SUCCESS",
            "createdAt": "2020-09-07T16:24:37.000+0000",
            "updatedAt": "2020-09-07T16:24:37.000+0000"
        },
        {
            "id": "d4431bfc-f262",
            "amount": {
                "amount": 10000,
                "commission": 0,
                "currency": "RUB"
            },
            "status": "SUCCESS",
            "createdAt": "2020-10-07T16:24:37.000+0000",
            "updatedAt": "2020-10-07T16:24:37.000+0000"
        },
        {
            "id": "d4431bfc-f263",
            "amount": {
                "amount": 100000,
                "commission": 0,
                "currency": "RUB"
            },
            "status": "SUCCESS",
            "createdAt": "2020-11-07T16:24:37.000+0000",
            "updatedAt": "2020-11-07T16:24:37.000+0000"
        }
    ],
    "totalTransactionCount": 28,
    "transactionCountPerPage": 25
}
Пример ответа для выплаты:

{
    "id": "22738e1c-5945",
    "amount": {
        "amount": 5000,
        "commission": 5000,
        "currency": "RUB"
    },
    "description": "",
    "projectId": 91,
    "projectCode": null,
    "contentUrl": null,
    "sender": null,
    "custom": null,
    "expire": null,
    "testPayment": false,
    "status": "SUCCESS",
    "payUrl": null,
    "created_at": "2020-04-16T12:40:43.000+0000",
    "updated_at": "2020-04-16T12:40:43.000+0000"
}
NEW!⭐
Используйте в запросе статуса счета флаг withFailed (boolean), чтобы получить полный список транзакций (в том числе DECLINE) с описанием причин, по которым оплаты были отклонены.

https://api.capusta.space/v2/partner/status?transaction-id=e0cb82ac-7be5&withFailed=true

Пример ответа:

{
    "publicId": "e0cb82ac-7be5",
    "partnerPaymentId": "e0cb82ac-7be5",
    "amount": {
        "amount": 1000,
        "commission": 0,
        "currency": "RUB"
    },
    "status": "NEW",
    "description": "test",
    "contentUrl": null,
    "projectId": 1,
    "projectCode": "test",
    "payUrl": "https://capu.st/bille0cb82ac-7be5",
    "sender": null,
    "expire": null,
    "custom": "{\"id\":1,\"shopname\":\"test_shop\",\"description\":\"shop_description\"}",
    "multiBill": true,
    "billPaymentEnabled": true,
    "createdAt": "2020-05-15T06:43:42.000+0000",
    "transactions": [
        {
            "id": "d4431bfc-f261",
            "amount": {
                "amount": 1000,
                "commission": 0,
                "currency": "RUB"
            },
            "status": "DECLINE",
            "failureDescription": "Отказ банка в совершении операции. Причина не детализирована.",
            "createdAt": "2020-09-07T16:24:37.000+0000",
            "updatedAt": "2020-09-07T16:24:37.000+0000"
        }
    ]
}

Уведомления и переадресация

При любом изменении статуса транзакции на Сallback Url проекта отправляется оповещение следующего вида:

{
            "amount": {
                "amount": 1000,
                "commission": 0,
                "currency": "RUB"
            },
            "transactionId": "some_string",
            "status": "SUCCESS",
            "custom": {
                "id": 1,
                "shopName": "myshop",
                "shopDescription": "Clothes",
           // Любой набор параметров
            },
            "signature":"4540f5a2853803eb409ddbd60dae63c3"
        }
где transactionId — это идентификатор платежа,
status — может принимать значения SUCCESS и FAIL
custom
— набор произвольных параметров, переданных при создании счета (передается, если был использован в методе /payment)
signature — подпись для проверки подлинности данных (подробнее)
Пример ответа для мультисчета:

{
            "amount": {
                "amount": 1000,
                "commission": 0,
                "currency": "RUB"
            },
            "transactionId": "some_string",
            "billId": "some_string",
            "status": "SUCCESS",
            "custom": {
                "id": 1,
                "shopName": "myshop",
                "shopDescription": "Clothes",
           // Любой набор параметров
            },
            "signature":"4540f5a2853803eb409ddbd60dae63c3"
        }
где transactionId — это идентификатор платежа,
billId — идентификатор оплачиваемого мультисчета.
status — может принимать значения SUCCESS и FAIL
custom — набор произвольных параметров, переданных при создании счета (передается, если был использован в методе /bill)

В качестве подтверждения подлинности запроса нужно проверить заголовок Authorization, который строится по тому же принципу, что и для вызовов API Capusta.Space.

Или использовать поле signature см. следующую статью.

Для проекта могут быть назначены Success Url и Fail Url — это адрес страницы сайта или проекта, который можно использовать для переадресации плательщика после проведения оплаты (по умолчанию, совпадает с ссылкой на проект). Плательщик попадет туда, нажав на кнопку "Вернуться на сайт".

Если оплата прошла успешно, плательщик сможет перейти на Success Url, а в случае ошибки платежа — на Fail Url.

Эти ссылки можно обогатить параметром ?payment_id=, куда будет подставляться id операции. Это поможет персонализировать страницу, на которую возвращается плательщик или настроить необходимую бизнес-логику.

Чтобы прописать Callback, Success и Fail URL, нажми кнопку или напиши нам в Telegram

Уведомления об отмене подписки

При отмене подписки на Callback URL отправляется уведомление следующего вида

{
  "callbackId": 4536,
  "amount": {
    "amount": 100000,
    "currency": "RUB",
    "commission": 0
  },
 "accountNumber": "420000xxxxxx0000",
  "status": "INACTIVE",
  "setupTransactionId": "c7166aee-0ff9",
  "subscriberId": 123,
  "signature": "61de2b5d782f60aedde677d3b944ddaf",
  "per": "MONTHLY"
}
где статус INACTIVE сообщает об отмене подписки

Алгоритм проверки подписи
(поле signature)

Для проверки данных, присланных в колбеке по платежу, необходимо собрать и отсортировать поля по ключу в одну строку в формате ключ1значение1ключ2значение2…ключNзначениеNmerchantEmailmerchantToken,

где
merchantEmail - твой е-мейл в системе.
merchantToken - твой токен в системе.
У тебя ещё нет токена?! Получи его сразу после регистрации в сервисе Capusta.Space!
при этом поля, содержащие вложенности, сортируются по связке "ключродителя_ключребенка". На примере блока sender:

"sender": {"name": "name","email": "email","lastname":null}
подстрока для хеширования будет выглядеть, как

"sender_emailemailsender_namename"
(отсортировано по алфавиту, ключ со значением null отброшен!)
Например, если колбек содержит json-массив со следующими данными:

{
"transactionId":"ef79befc-ae42",
"amount":{
  "amount":200000,
  "currency":"RUB",
  "commission":0
},
"status":"SUCCESS",
"sender":{
  "name":"Петр",
  "lastname":null,
},
"signature":"4540f5a2853803eb409ddbd60dae63c3"
}
То в результате сортировки и конкатенации ключа и значения должна получиться строка (значение поля signature отбрасывается):

amount_amount200000amount_commission0amount_currencyRUBsender_nameПетрstatusSUCCESStransactionIdef79befc-ae42
К этой строке нужно добавить значения merchantEmail и token, выданные при регистрации в системе. Напрмер, эти значения будут merchantEmail: "test@test.ru", и token: "abcd-efgh"

Результирующая строка для проверки подписи должна быть такой:

amount_amount200000amount_commission0amount_currencyRUBsender_nameПетрstatusSUCCESStransactionIdef79befc-ae42test@test.ruabcd-efgh
md5 от этого значения получается: 4540f5a2853803eb409ddbd60dae63c3

Сравнивая подписи, полученные в колбеке и в результате сборки проверочной подписи можно удостовериться в валидности информации о результате платежа.

Проверка баланса

В любой момент можно получить баланс вашего проекта. Для этого используйте GET-запрос /balance:

GET /balance?project-code=...
где project-code - символьный идентификатор проекта (выдается вместе с токеном, доступен в настройках личного кабинета и является частью постоянной ссылки на перевод произвольных сумм в адрес проекта).

В ответ вы получите баланс проекта в копейках:

{
    "balance": 121500,
    "currency": "RUB"
}

Получение реестра операций

Получить список операций за выбранный период возможно с помощью GET-запроса:

GET /registry?projectId=1
&from=2020-02-17T12:19:47.000%2B04:00
&to=2020-02-17T14:19:47.000%2B04:00

или

GET /registry?projectCode=kotiki
&from=2020-02-17T12:19:47.000%2B04:00
&to=2020-02-17T14:19:47.000%2B04:00
где projectId - идентификатор проекта (числовой),
projectCode - код проекта (строковый),
from - левая граница запрашиваемого временного интервала,
to - правая граница запрашиваемого временного интервала

❗❗❗ Для указания проекта необходимо использовать один из известных вам параметров - projectId или projectCode (в ЛК он называется ID проекта).

Даты указываются в формате YYYY-MM-DDTHH:MI:SS.sss±ZZZZ, где ZZZZ - параметр, отвечающий за смещение по стандарту UTC. (формат ISO 8601)

❗❗❗ При указании смещения по UTC необходимо экранировать знак "+", заменяя "+" на "%2B". Пример запроса со смещением вправо (знак "+"):

GET /registry?projectId=1
&from=2020-02-17T12:19:47.000%2B04:00
&to=2020-02-17T14:19:47.000%2B04:00
Пример запроса со смещением влево (знак "-"):

GET /registry?projectId=1
&from=2020-02-17T12:19:47.000-04:00
&to=2020-02-17T14:19:47.000-04:00
Максимальный возможный временной интервал для запроса реестра — 1 / сутки.
В ответе будет получен список транзакций, совершенных пользователем за выбранный период времени, где transactionId — ключ, в котором хранится технический идентификатор транзакции системы, а в payUrl — ссылка на оплату счёта:

[
    {
        "id": "test123",
        "transactionId": "b69d3fd8-b138",
        "partnerPaymentId": "test123",
        "amount": {
            "amount": 1000,
            "commission": 0,
            "currency": "RUB"
        },
        "description": null,
        "projectId": 1,
        "projectCode": "test",
        "contentUrl": null,
        "sender": null,
        "custom": null,
        "expire": null,
        "status": "SUCCESS",
        "parent_id": null,
        "payUrl": "https://capu.st/billb69d3fd8-b138",
        "created_at": "2020-09-07T16:24:11.000+0000",
        "updated_at": "2020-09-07T16:24:11.000+0000"
    },
    {
        "id": "d4431bfc-f261",
        "transactionId": "d4431bfc-f261",
        "partnerPaymentId": null,
        "amount": {
            "amount": 1000,
            "commission": 0,
            "currency": "RUB"
        },
        "description": null,
        "projectId": 1,
        "projectCode": "test",
        "contentUrl": null,
        "sender": null,
        "custom": null,
        "expire": null,
        "status": "SUCCESS",
        "parent_id": null,
        "payUrl": "https://capu.st/billd4431bfc-f261",
        "created_at": "2020-09-07T16:24:37.000+0000",
        "updated_at": "2020-09-07T16:24:37.000+0000"
    }
]

Чтобы получить список транзакций со статусом DECLINE включительно, используйте флаг withFailed (boolean)

GET /registry?projectId=1
&from=2020-02-17T12:19:47.000%2B04:00
&to=2020-02-17T14:19:47.000%2B04:00
&withFailed=true

В ответ добавлен ключ failureDescription, в котором описана причина ошибки оплаты.

[
    {
        "id": "b69d3fd8-b138",
        "amount": {
            "amount": 1000,
            "commission": 0,
            "currency": "RUB"
        },
        "description": null,
        "projectId": 1,
        "projectCode": "test",
        "partnerPaymentId": null,
        "contentUrl": null,
        "sender": null,
        "custom": null,
        "expire": null,
        "status": "SUCCESS",
        "failureDescription": null,
        "parent_id": null,
        "created_at": "2020-09-07T16:24:11.000+0000",
        "updated_at": "2020-09-07T16:24:11.000+0000"
    },
    {
        "id": "d4431bfc-f261",
        "amount": {
            "amount": 1000,
            "commission": 0,
            "currency": "RUB"
        },
        "description": null,
        "projectId": 1,
        "projectCode": "test",
        "partnerPaymentId": null,
        "contentUrl": null,
        "sender": null,
        "custom": null,
        "expire": null,
        "status": "DECLINE",
        "failureDescription": "Отказ банка в совершении операции. Причина не детализирована.",
        "parent_id": null,
        "created_at": "2020-09-07T16:24:37.000+0000",
        "updated_at": "2020-09-07T16:24:37.000+0000"
    }
]

NEW!⭐
Для отображения тестовых транзакций, можно воспользоваться фильтром includeTestTransactions

GET /registry?projectId=1
&from=2020-02-17T12:19:47.000%2B04:00
&to=2020-02-17T14:19:47.000%2B04:00
&includeTestTransactions=true

Получение списка подписчиков

Для метода используйте базовый URL

https://api.capusta.space/v2/partner
Можно выгрузить список подписчиков. Для этого используйте GET-запрос /subscribers:

https://api.capusta.space/v2/partner/subscribers?project-code=kotiki
Его так же можно использовать с фильтром по почте клиента, чтобы проверять наличие подписки:

https://api.capusta.space/v2/partner/subscribers?project-code=kotiki&email=rysin@capusta.space
Его так же можно использовать с фильтром по идентификатору подписки, чтобы проверять наличие подписки:

https://api.capusta.space/v2/partner/subscribers?project-code=kotiki&subscriberId=1
(вместо project-сode может быть использован числовой project-id, если известен). Пример ответа:

{
    "count": 3,
    "countPerPage": 35,
    "page": 1,
    "subscribers": [
        {
            "id": 797,
            "accountNumber": "420000xxxxxx0000",
            "name": null,
            "email": "test@gmail.com",
            "overallAmount": 3000000,
            "status": "INACTIVE",
            "projectId": 1,
            "projectCode": "kotiki",
            "createdAt": "2021-03-04T12:09:16.000+0000",
            "nextDeliverAt": "2021-03-10T12:09:16.000+0000",
            "billTariff": {
                "id": 24408,
                "amount": 3000000,
                "commission": 0,
                "name": "бизнес",
                "description": "прокат на месяц",
                "contentUrl": "https://www.youtube.com/watch?v=nKMk3q7bHjA",
                "subscription": {
                    "id": 928,
                    "per": "MONTHLY",
                    "oneTimePayment": false
                },
                "subscriberCount": 0
            },
            "billCode": null,
            "setupPaymentId": "b96897bf-dc12",
            "setupPartnerPaymentId": null
        },
        {
            "id": 794,
            "accountNumber": "600000xxxxxx0007",
            "name": null,
            "email": "test@gmail.com",
            "overallAmount": 3165000,
            "status": "INACTIVE",
            "projectId": 1,
            "projectCode": "kotiki",
            "createdAt": "2021-03-04T12:09:16.000+0000",
            "nextDeliverAt": "2021-03-10T12:09:16.000+0000",
            "billTariff": {
                "id": 24408,
                "amount": 3000000,
                "commission": 0,
                "name": "бизнес",
                "description": "прокат на месяц",
                "contentUrl": "https://www.youtube.com/watch?v=nKMk3q7bHjA",
                "subscription": {
                    "id": 928,
                    "per": "MONTHLY",
                    "oneTimePayment": false
                },
                "subscriberCount": 0
            },
            "billCode": "23as45ef-3a48",
            "setupPaymentId": "10f97b7e-8188",
            "setupPartnerPaymentId": null
        },
        {
            "id": 792,
            "accountNumber": "420000xxxxxx0000",
            "name": null,
            "email": "test@gmail.com",
            "overallAmount": 11391100,
            "status": "INACTIVE",
            "projectId": 1,
            "projectCode": "kotiki",
            "createdAt": "2021-03-04T12:09:16.000+0000",
            "nextDeliverAt": "2021-03-10T12:09:16.000+0000",
            "billTariff": {
                "id": 24470,
                "amount": 11111100,
                "commission": 0,
                "name": "test",
                "description": "test",
                "contentUrl": "https://www.youtube.com/watch?v=nDbidIKDBPs",
                "subscription": {
                    "id": 942,
                    "per": null,
                    "oneTimePayment": false
                },
                "subscriberCount": 0
            },
            "billCode": "23as45ef-3a48",
            "setupPaymentId": "18fb2cea-1e21",
            "setupPartnerPaymentId": null
        }
    ]
}
Записи отдаются постранично. Без параметра page возвращается до 35 последних подписчиков.

В случае, если в ответе count больше 35, для получения следующих 35 необходимо передавать в запросе параметр page. Пример запроса:

https://api.capusta.space/v2/partner/subscribers?project-code=kotiki&page=2

Тестирование платежей и выплат

Есть возможность проверить взаимодействие с сервисом перед интеграцией в свой проект. Используй ключ test (тип boolean) при создании транзакций по методу /bill, /payment или /payout

❗❗❗ Обращаем внимание, что тестовые транзакции не показываются в списке операций в Личном кабинете и не влияют на баланс!

Пример использования ключа в теле запроса:

     {
            "id": "uniq_string",
            "amount": {
                "amount": 1000,
                "currency": "RUB"
            },
            "description": "...",
            "projectCode": "myproject",
	     "test": true
        }

Для завершения транзакций оплаты и выплат используй один из нижеперечисленных номеров банковских карт. Если для завершения транзакции требуется ввести срок действия карты и/или cvc, укажи произвольные, но валидные значения (нельзя указать прошлый год или двузначный код безопасности)
Карта
Статус при ответе
4200000000000000
4111111111111111
600000000000000007
2221000000000009
2200000000000004
4242424242424242
5555555555554444
2201382000000013
4012888888881881
5169147129584558
5000000000000009
2200000000000038
5105105105105100
4111110000000112
2200000000000012
2200000000000020
2200000000000053
Если всё получилось, все понравилось и есть боевая готовность к приему реальных денежных средств, просто прекрати передавать ключ test (эквивалентно false) и наслаждайся!

API для партнёров: создание новых пользователей и проектов

Внимание! Метод создания новых проектов недоступен по умолчанию и предоставляется по запросу в support@capusta.space
API Capusta.Space предоставляет возможность создания новых пользователей в системе. Для этого необходимо отправить запрос вида:
POST /project

{
    "email": "user@capusta.space",
    "projectLink": "https://project.link",
    "callbackUrl": "https://project.link/callback",
    "failUrl": "https://project.link/fail",
    "successUrl": "https://project.link/success",
    "title": "Название проекта",
    "logoLink": "https://project.link/logo.png"
}
где email — это email адрес нового пользователя,
projectLink — URL проекта нового пользователя, а callbackUrl, failUrl и successUrl — ссылки для получения уведомлений для данного проекта.

Мы автоматически импортируем название и логотип по указанной вами ссылке проекта, проверяя теги <title>, <og:image > и <link rel=icon>, однако вы можете управлять ими, используя параметр title — название проекта и logoLink — ссылка на изображение, которое нужно использовать в качестве логотипа.

В ответ возвращается структура вида:

{
    "merchantId": 1,
    "projectId": 1,
    "projectCode": "code",
    "token": "very_secret_token"
}
Если пользователя с email, указанном в запросе не существует, то он будет создан, в ответ будут возвращены его данные: merchantId - идентификатор продавца, projectId - идентификатор проекта, projectCode - символьный код проекта, token- секретный токен проекта.

Если же пользователь с таким email уже существует, то token в ответе возвращен не будет. Пользователю с существующим email-адресом придет уведомление о том, что твой проект хочет получить возможность создавать платежи от его имени, и только в случае согласия пользователя на твой callback_url придет уведомление с токеном пользователя:

{
    "merchantId": 1,
    "projectId": 1,
    "token": "token"
}
Чтобы легко определить, что это нотификация именно о подтверждении пользователя, а не, к примеру, о совершенном платеже, в URL параметры запроса добавляется переменная action=partner

Лайфхаки

Создание перевода с предзаполненной суммой и другими данными

Обращаться к API необязательно, если нужно указывать желаемую сумму перевода. С этой целью используй параметр ?amount= в постоянной ссылке для приема переводов, которая выдается всем проектам сразу после регистрации.

Разберем на примере. Проекту была выдана ссылка для приема переводов: https://get.capusta.space/demo. По ней, по умолчанию, для всех открывается форма с пустым полем для ввода суммы.

Если хочется, чтобы по умолчанию в форме было указано 150 рублей, "обогати" ссылку этой суммой (в копейках) с помощью параметра
?amount=15000. Получится вот так: https://get.capusta.space/demo?amount=15000.

Разницу можешь ощутить, перейдя по ссылкам ;)


По аналогии можно использовать и другие параметры.
name= — для предзаполнения имени.
phone= — для предзаполнения номера телефона.
email= — для предзаполнения адреса электронной почты.
comment= ИЛИ message= ИЛИ address= — для предзаполнения комментария ИЛИ сообщения ИЛИ адреса.
NEW!⭐
tipPercents= — для генерации формы с чаевыми от заданного amount (без него не работает), принимает до четырех целых чисел (рекомендуемое значение 7,10,15,20).

Чтобы использовать несколько параметров, перечисляй их с помощью символа & (например, ?name=Nikolay&phone=899199191111)

Отправителю средств можно запретить редактировать любое значение, добавив параметр readonly=. В нем нужно перечислить названия параметров, редактирование которых требуется запретить. Если таких несколько, используй между ними %2C (вместо запятой).

Таким образом, если мы хотим попросить Николая перевести нам 1000 рублей и оставить нам свой номер телефона, ссылка может выглядеть вот так: https://get.capusta.space/demo?
name=Nikolay&phone=&amount=100000
&readonly=name%2Camount
.

В ней с помощью параметра name=Nikolay мы обозначили имя отправителя (можно использовать кириллицу, но при условии декодирования url — подробности и инструментарий тут). С помощью параметра phone=, мы обозначили, что мы хотим узнать номер телефона Николая. С помощью параметра amount=100000, мы указали сумму 1000 рублей в копейках. А с помощью параметра readonly=name%2Camount, запретили Николаю изменять имя и сумму перевода.
Получилось? Ну ваще ты программист(ка)!!!

Интеграция с Tilda

У нас есть прямая интеграция с Tilda. Инструкция по подключению здесь https://help.capusta.space/tilda

Но если ты продаешь 2-3 товара и всегда оплачивается один из них — можно просто создать ссылки на их оплату и вставить их в кнопку на твоем сайте. А данные о покупателях собирать через форму прямо на платежной странице без изменения настроек твоего сайта. Если нужная форма в Tilda у тебя уже есть — вот как подключить к ней оплату.

Если нужно отправлять клиентов непросто на оплату заказов, а на оформление подписки, сумма которой зависит от количества товаров и/или способа их доставки, используй блок «Корзина: ST100» и следующую инструкцию.

Настройка оплаты заказов через блок «Корзина: ST100» в Tilda

Чтобы из корзины сайта, сделанного в Тильде (блок ST100), отправлять покупателей на оплату через Capusta.Space, нужно:

  1. В подразделе "Формы" настроек твоего Тильдо-сайта добавить сервис "Webhook"
  2. Прописать URL https://api.capusta.space/v1/callback/tilda и нажать "Сохранить". Согласиться на подключение сервиса "Webhook" ко всем формам.
  3. В списке подключенных сервисов перейти в настройки "Webhook: api.capusta.space/v1/callback/tilda", установить чекбоксы "Посылать UTM" и "Передавать данные по товарам в заказе - массивом" и нажать на кнопку "Изменить".
  4. В разделе "Платежные системы" настроек Тильдо-сайта выбрать "Безналичный расчет".
  5. В "URL успеха" вставить ссылку для принятия переводов из твоего проекта в Capusta.Space и сохранить изменения. Поля "Наименование оплаты" и "Сообщение об успехе" можно заполнить произвольно.
  6. На странице, где размещен блок с корзиной (ST100), необходимо разместить блок "HTML-код" (T123). Его можно вставить в футер сайта, если блок с корзиной используется на нескольких страницах.
  7. В HTML-блоке нажать кнопку для редактирования контента. Ввести код:
  8. <script type="text/javascript" src="https://my.capusta.space/tilda.js"></script>
  9. Нажать кнопку "Контент" в блоке с корзиной и в группе настроек "Подключенные сервисы" установить галку с "Webhook: api.capusta.space/v1/callback/tilda"
  10. Сохранить изменения и опубликовать страницы.
Готово! Заказы будут оплачиваться через сервис Capusta.Space

Оплата с подпиской в «Корзине: ST100» в Tilda

Чтобы из корзины сайта, сделанного в Тильде (блок ST100), отправлять покупателей на оформление подписки через Capusta.Space, выполните все шаги по настройке приема платежей по инструкции.

Затем проделайте следующее:

  1. Нажмите кнопку "Контент" в блоке с корзиной (ST100) → Поля для ввода.

  2. Добавьте дополнительное скрытое поле для ввода с названием subscription. В значение данного поля необходимо ввести строку true.

  3. Чтобы задать периодичность подписки, необходимо добавить еще одно скрытое поле с названием per. В значение данного поля введите одно из следующих значений:
    1. DAILY - списание по подписке ежедневно
    2. WEEKLY - списание по подписке еженедельно
    3. MONTHLY - списание по подписке ежемесячно

В случае отсутствия поля per, будет создан счет с подпиской с предоставлением пользователю возможности выбрать периодичность на платежной странице.

Настройка оплаты через блок «Форма» в Tilda

С этой инструкцией можно настроить любую форму в Tilda на прием платежей:

  1. В подразделе "Формы" настроек твоего Тильдо-сайта добавить сервис "Webhook"
  2. Прописать URL https://api.capusta.space/v1/callback/tilda и нажать "Сохранить". Согласиться на подключение сервиса "Webhook" ко всем формам.
  3. В списке подключенных сервисов перейти в настройки "Webhook: api.capusta.space/v1/callback/tilda", установить чекбоксы "Посылать UTM" и "Передавать данные по товарам в заказе - массивом" и нажать на кнопку "Изменить".
  4. На странице, где размещен блок с формой (например, BF204N) необходимо разместить блок "HTML-код" (T123). Его можно вставить в футер сайта, если блок с формой используется на нескольких страницах.
  5. В HTML-блоке нажать кнопку для редактирования контента. Ввести код:
  6. <script type="text/javascript" src="https://my.capusta.space/tilda.js"></script>
  7. В настройках полей для ввода формы BF204N (по кнопке "Контент") добавить скрытое поле с именем переменной capusta-payment-page и ввести в качестве значения адрес своей страницы для приема переводов через Capusta.Space (выдается сразу после регистрации).
  8. Форма BF204N должна содержать поле, в котором передается общая сумма выставляемого счета (она может как вводиться вручную, так быть скрытым или высчитываемым полем). Этому полю необходимо задать имя переменной — amount
  9. В группе "Подключенные сервисы" формы установить галку с "Webhook: api.capusta.space/v1/callback/tilda"
  10. Сохранить изменения и опубликовать страницы.
Готово! Теперь при отправке формы в Capusta.Space будут выставляться счета на оплату, а пользователи сразу переадресовываться на страницу оплаты.

Оплата с подпиской через блок «Форма» в Tilda

Чтобы создать подписку через Форму в Tilda, выполните все шаги по настройке приема платежей по инструкции.

Затем проделайте следующее:

  1. Нажмите кнопку "Контент" в блоке с формой (например, BF204N) → Поля для ввода.

  2. Добавьте дополнительное скрытое поле для ввода с названием subscription. В значение данного поля необходимо ввести строку true.

  3. Чтобы задать периодичность подписки, необходимо добавить еще одно скрытое поле с названием per. В значение данного поля введите одно из следующих значений:
    1. DAILY - списание по подписке ежедневно
    2. WEEKLY - списание по подписке еженедельно
    3. MONTHLY - списание по подписке ежемесячно

В случае отсутствия поля per, будет создан счет с подпиской с предоставлением пользователю возможности выбрать периодичность на платежной странице.

Есть пожелания по улучшению API?
Мы с радостью с ними ознакомимся! Оставь предложение через форму или напиши нам в Telegram
Как видишь, всё очень просто! Если у тебя ещё нет токена, получи его сразу после регистрации в сервисе Capusta.Space и приступай к интеграции :)