# Mandarin.Kassir (receipts)
# Getting started
Mandarin transmits fiscal data to cloud online cash registers. Supported providers:
A Mandarin agent cash register is also available — connect without your own cash register (see below).
Receipt generation schemes:
| Scheme | When to use |
|---|---|
| Automatic generation | The fiscalInformation block is passed in a payment, refund, or payout request |
| Independent generation | The receipt is created in a separate request after the operation |
# BIFIT Online
What you need before integration
- Mandarin account — registration (opens new window);
- Account in “BIFIT Kassa” — instructions (opens new window);
- Rented cloud cash register registered with the Federal Tax Service and connected to an OFD — instructions (opens new window).
Connection steps
- Obtain a cash register token in “BIFIT Kassa” — instructions (opens new window).
- Send the token and Client ID (opens new window) to Mandarin Support (opens new window) or your account manager.
- Add the
fiscalInformationobject to requests — see Automatic receipt generation.
# ATOL Online
What you need before integration
- Mandarin account — registration (opens new window);
- Account in “ATOL Online” — registration (opens new window);
- Rented cloud cash register registered with the Federal Tax Service and connected to an OFD — instructions (opens new window).
Connection steps
- Obtain cash register data from the “Integrator settings” file in the ATOL Online account — instructions (opens new window) (pp. 75–76).
- Send the file and Client ID (opens new window) to Mandarin Support (opens new window) or your account manager.
- Add the
fiscalInformationobject to requests — see Automatic receipt generation.
# Mandarin agent cash register
Connect an online cash register under an agent scheme without renting your own cash register equipment. The receipt shows:
- agent — Mandarin LLC, INN 7708816952;
- supplier — your company.
The receipt displays the number, amount, date, operation type (income / expense / refund), and other fiscal details.
For automatic receipt generation, pass fiscalInformation according to the agent receipt instructions. When using the Mandarin cash register, the shipper block is not passed in the payment request — supplier data is configured on the Mandarin side.
For independent receipt generation via the api.psp.io API, the shipper block is required: it must contain your company details as the supplier of goods/services. See Independent receipt generation.
Important!
When using the Mandarin cash register, specify only Common (general taxation system) in the taxationSystem parameter. Other values will cause receipt generation to fail.
# Reference data
# Taxation systems reference
| Value | Description |
|---|---|
Common | General taxation system (OSN) |
Simplified | Simplified taxation system (STS), “Income” |
SimplifiedMinusOutlay | Simplified taxation system (STS), “Income minus expenses” |
UnifiedImputedIncome | Unified tax on imputed income (UTII) |
UnifiedAgricultural | Unified agricultural tax (UAT) |
Patent | Patent taxation system (PSN) |
# VAT rates reference
| Value | Description |
|---|---|
None | No VAT |
Vat0 | VAT at 0% |
vat5 | VAT at 5% |
vat7 | VAT at 7% |
Vat10 | VAT at 10% |
Vat20 | VAT at 20% |
Vat22 | VAT at 22% |
vat105 | VAT at calculated rate 5/105 |
vat107 | VAT at calculated rate 7/107 |
# Calculation methods reference
| Value | Description |
|---|---|
PREPAY_FULL | Full prepayment before the subject of payment is transferred |
PREPAY_PARTIAL | Partial prepayment before the subject of payment is transferred |
AVANS | Advance payment |
FULL_PAY | Full payment, including any advance (prepayment) at the time the subject of payment is transferred |
PARTIAL_SETTLEMENT_AND_CREDIT | Partial payment at transfer with subsequent credit payment |
TRANSFER_ON_CREDIT | Transfer without payment at transfer with subsequent credit payment |
CREDIT_PAYMENT | Payment after transfer on credit (loan repayment) |
# Payment subjects reference
| Value | Description |
|---|---|
AGENCY | Agency fee |
COMPOUND_SUBJECT | Compound subject of payment |
EXCISABLE_PRODUCT | Excisable goods |
GAMBLING_RATE | Gambling bet |
GAMBLING_WIN | Gambling winnings |
INSURANCE_CONTRIBUTIONS | Insurance contributions |
JOB | Work |
LOTTERY_TICKET | Lottery ticket |
LOTTERY_WIN | Lottery winnings |
NON_OPERATING_INCOME | Non-operating income |
OTHER_SUBJECT | Other subject of payment |
PAYMENT | Payment |
PLEDGE | Pledge |
PRODUCT | Product |
PROPERTY_LAW | Property right |
PROVISION_RID | Provision of intellectual property |
RESORT_FEE | Resort fee |
SERVICE | Service |
TRADE_FEE | Trade fee |
# Receipt types and their purpose
The system supports the following fiscal receipt types:
| Receipt type | When generated | Description |
|---|---|---|
| Income | When funds are received from the buyer | Standard receipt for payment of goods/services. Generated on successful payment. |
| Income refund | When funds are returned to the buyer | Receipt confirming refund of previously paid funds. Generated on payment cancellation or refund. |
| Expense | When funds are disbursed (e.g. payout to supplier or withdrawal) | Receipt confirming an expense operation. Generated on payouts. |
| Expense refund | When previously disbursed funds are returned | Receipt confirming return of funds from a counterparty. Generated on payout cancellation. |
| Income correction receipt | To correct errors in previously generated income receipts | Generated when the original receipt contained an error (receipt was not issued, wrong amount, VAT rate, name, etc.) and the operation must be correctly reflected in the fiscal system. |
| Expense correction receipt | To correct errors in previously generated expense receipts | Same as income correction, but for expense operations. |
| Income refund correction receipt | To correct errors in income refund receipts | Corrects an incorrectly issued refund or when no receipt was issued for the refund. |
| Expense refund correction receipt | To correct errors in expense refund receipts | Corrects an incorrectly issued expense refund or when no receipt was issued for the refund. |
# Automatic receipt generation
A receipt is generated automatically on successful operation if the fiscalInformation object is passed in a request to POST https://secure.mandarinpay.com/api/transactions.
# Supported operations
payment.action | Operation | Fiscal receipt type |
|---|---|---|
pay | Card charge (payment) | Income |
reversal | Unblock after two-stage authorization (preauth). Funds were not charged to the card | Income refund |
refund | Refund to the buyer for a successfully completed charge (pay), including partial refund | Income refund |
payout | Payout to card | Expense |
The fiscalInformation object contains the taxation system (taxationSystem) and an array of receipt line items (items). Each line describes the name, quantity, line amount, and VAT rate.
# Authentication
Requests are authenticated with the x-auth header. See Request authentication for how to build the value.
Two APIs — different fields for operation type
The documentation describes two different APIs. Do not use values from one API in the other.
1. Automatic receipt generation (this section)
Endpoint: POST https://secure.mandarinpay.com/api/transactions
Operation type is set in payment.action: pay, reversal, refund, payout.
The receipt is generated automatically with the payment if the fiscalInformation block is passed.
2. Independent receipt generation
Endpoint: POST https://api.psp.io/receipts/public/receipts
Receipt type is set by the action field (number) or ActionType (string) — one of them is sufficient.
| Receipt type | action | ActionType |
|---|---|---|
| Income | 1 | Receipt |
| Income refund | 2 | Refund |
| Expense | 3 | Purchase |
| Expense refund | 4 | PurchaseRefund |
Field mapping
For independent generation, the same values are used but field names differ: taxSystem instead of taxationSystem, name instead of description, price instead of totalPrice.
# fiscalInformation parameters
| Parameter | Required | Description |
|---|---|---|
fiscalInformation | If needed | Fiscal data block. Pass when a receipt is required |
fiscalInformation.taxationSystem | Yes | Taxation system for the entire receipt. See reference |
fiscalInformation.items[] | Yes | Array of line items |
fiscalInformation.items[].description | Yes | Name of the product, work, or service |
fiscalInformation.items[].quantity | Yes | Quantity. Fractional values are allowed |
fiscalInformation.items[].totalPrice | Yes | Line amount (string with two decimal places, e.g. "800.00") |
fiscalInformation.items[].vat | Yes | VAT rate. See VAT reference |
fiscalInformation.items[].calculationMethod | No | Calculation method. Default: FULL_PAY. See reference |
fiscalInformation.items[].paymentSubject | No | Payment subject. Default: SERVICE. See reference |
Synchronous response and asynchronous callback notification may contain a wider set of parameters than the example.
# Request examples
# Example: payment (pay)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'content-type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data '{
"payment": {
"action": "pay",
"orderId": "e36887bbed618ea111",
"price": "200.00"
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"fiscalInformation": {
"taxationSystem": "Common",
"items": [
{
"quantity": 1,
"vat": "Vat20",
"description": "Delivery",
"totalPrice": "200.00",
"calculationMethod": "PREPAY_FULL",
"paymentSubject": "SERVICE"
}
]
}
}'
Response on successful transaction creation (200 OK)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
# Example: unblock after preauth (reversal)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'content-type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data '{
"payment": {
"action": "reversal",
"orderId": "e36887bbed618ea112",
"price": "200.00"
},
"target": {
"transaction": "43913ddc000c4d3990fddbd3980c1725"
},
"fiscalInformation": {
"taxationSystem": "Common",
"items": [
{
"quantity": 1,
"vat": "Vat20",
"description": "Funds unblock",
"totalPrice": "200.00",
"paymentSubject": "SERVICE"
}
]
}
}'
# Example: refund for completed payment (refund)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'content-type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data '{
"payment": {
"action": "refund",
"orderId": "e36887bbed618ea113",
"price": "200.00"
},
"target": {
"transaction": "43913ddc000c4d3990fddbd3980c1725"
},
"fiscalInformation": {
"taxationSystem": "Common",
"items": [
{
"quantity": 1,
"vat": "Vat20",
"description": "Service refund",
"totalPrice": "200.00",
"paymentSubject": "SERVICE"
}
]
}
}'
# Example: payout (payout)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'content-type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data '{
"payment": {
"action": "payout",
"orderId": "e36887bbed618ea114",
"price": "200.00"
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"target": {
"card": "0eb51e74-e704-4c36-b5cb-8f0227621518"
},
"fiscalInformation": {
"taxationSystem": "Common",
"items": [
{
"quantity": 1,
"vat": "Vat20",
"description": "Payout",
"totalPrice": "200.00",
"paymentSubject": "SERVICE"
}
]
}
}'
Response when the transaction is not created (400 Bad request)
{
"error": "Invalid request"
}
# Automatic agent receipt generation
Use this section if you act as an intermediary: you accept payment for another party's goods or services (marketplace, aggregator, payment agent).
The receipt is generated the same way as in the standard automatic scenario, with the same payment.action values (pay, reversal, refund, payout). Each items line additionally includes agentType, and the shipper block depends on the scenario (see the table below).
# When to specify shipper
| Scenario | agentType | shipper |
|---|---|---|
| Your own BIFIT / ATOL cash register, automatic receipt with payment | AGENT | Yes — supplier data |
| Mandarin cash register, automatic receipt with payment | AGENT | No — supplier is configured in Mandarin |
| Mandarin cash register, independent generation | AGENT | Yes — your company data |
Important!
When using the Mandarin agent cash register:
- Automatic receipt (
fiscalInformationblock in payment / payout request): theshipperblock is not passed. - Independent receipt generation (API
api.psp.io/receipts/public/receipts): theshipperblock is required — specify your company as the supplier of goods/services.
# Parameters (in addition to fiscalInformation)
| Parameter | Required | Description |
|---|---|---|
items[].agentType | Conditional | Agent type. For most scenarios — AGENT |
items[].shipper | Conditional | Supplier data. Required with your own cash register; not passed for automatic receipt with Mandarin cash register |
items[].shipper.name | Yes, if shipper is present | Supplier organization name |
items[].shipper.inn | Yes, if shipper is present | Supplier INN |
items[].shipper.phones[] | Yes, if shipper is present | Supplier phone numbers (array of strings) |
# agentType values
| Value | Description |
|---|---|
AGENT | Payment agent |
BANK_PAYMENT_AGENT | Bank payment agent |
BANK_PAYMENT_SUBAGENT | Bank payment subagent |
PAYMENT_AGENT | Payment agent (other type) |
PAYMENT_SUBAGENT | Payment subagent |
ATTORNEY | Attorney |
COMMISSIONER | Commissioner |
Synchronous response and asynchronous callback notification may contain a wider set of parameters than the example.
# Authentication
Requests are authenticated with the x-auth header. See Request authentication for how to build the value.
# Request examples
# Example: agent payment (pay)
curl --request POST \
--url https://secure.mandarinpay.com/api/transactions \
--header 'content-type: application/json' \
--header 'x-auth: {{x_auth}}' \
--data '{
"payment": {
"action": "pay",
"orderId": "e36887bbed618ea115",
"price": "600.00"
},
"customerInfo": {
"email": "user@example.com",
"phone": "+79001234567"
},
"fiscalInformation": {
"taxationSystem": "Common",
"items": [
{
"quantity": 1,
"vat": "None",
"description": "Payment",
"totalPrice": "600.00",
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"agentType": "AGENT",
"shipper": {
"name": "Romashka LLC",
"inn": "1234567890",
"phones": ["+79111111111"]
}
}
]
}
}'
Response on successful transaction creation (200 OK)
{
"id": "43913ddc000c4d3990fddbd3980c1725",
"userWebLink": "https://secure.mandarinpay.com/Pay?transaction=0eb51e74-e704-4c36-b5cb-8f0227621518",
"jsOperationId": "9874694yr87y73e7ey39ed80"
}
# Independent receipt generation
This feature lets you generate a fiscal receipt for an operation that has already been completed — when automatic generation failed, was not configured, or a separate receipt is required by business logic.
Important: independent generation does not replace automatic fiscalization at the time of payment. Use it only when justified and in compliance with cash register legislation.
Main scenarios:
Standard receipt for an operation not fiscalized automatically
If a receipt was not created at the time of payment or payout for technical reasons, you can generate it manually on the day of the operation — as a standard income, expense, or refund receipt (depending on the operation type).Correction receipt
Used only when the situation cannot be corrected with a standard receipt — in particular, when the operation day has passed or incorrect details were recorded in a previously issued receipt.
Correction receipt is not a fallback option
A correction receipt must not be issued arbitrarily or instead of a timely standard receipt.
- If the operation was performed today and no receipt was issued — generate a standard receipt, not a correction.
- A correction receipt requires a legal basis: correcting an error in data previously sent to the OFD, or reflecting a settlement for which no receipt was issued within the required period.
- The request must include a
correctionblock with the basis type (Self— self-correction,Prescription— per tax authority order), the date of the corrected settlement, and optionally the basis document number.
Improper use of correction receipts may violate cash register requirements. If in doubt, consult your accountant or Mandarin Support (opens new window).
A correction receipt is required when you need to correct in a previously generated receipt or when no receipt was issued:
- settlement amount;
- VAT rate;
- product, work, or service name;
- receipt type (e.g. expense was issued instead of income);
- a settlement for which no receipt was issued on the day of the operation.
# Authentication
- For POST requests (create receipts): scope
receipts:public_receipts.write - For GET requests (view status and receipt list): scope
receipts:public_receipts.read
Both scopes must be requested during OAuth 2.0 authentication.
General request structure:
- All receipt creation requests are sent via POST to:
https://api.psp.io/receipts/public/receipts - The request body contains required and optional parameters describing the receipt, line items, and customer and cashier information.
# Payment and refund receipt generation
A receipt can be agent or non-agent (standard).
# Agent receipt
When needed: when you accept money not for your own goods/services but for someone else's (you are an intermediary).
Also when using the Mandarin cash register, where you are the supplier of goods/services and Mandarin is the agent (intermediary).
Example: marketplace, service aggregator, payment agent.
In the API: pass agentType and the shipper block (name, INN, phone of the final recipient).
Important!
When using the Mandarin agent cash register:
- Automatic receipt (
fiscalInformationblock in payment / payout request): theshipperblock is not passed. - Independent receipt generation (this section): the
shipperblock is required — specify your company as the supplier of goods/services.
# Non-agent receipt (standard)
When needed: when you sell your own goods or services.
Example: online store, own delivery, consulting, etc.
In the API: pass the request body without agentType and shipper.
# Request parameters
| Parameter | Required | Description |
|---|---|---|
taxSystem | Yes | Taxation system. Possible values: Common (OSN), Simplified (STS Income), SimplifiedMinusOutlay (STS Income minus expenses), UnifiedImputedIncome (UTII), UnifiedAgricultural (UAT), Patent (PSN) |
action | Conditional | Receipt type (specify either ActionType or action):• 1 — Income (payment)• 2 — Income refund• 3 — Expense• 4 — Expense refundRequired for refunds, expenses, and corrections. Optional for income. |
ActionType | Conditional | Receipt type (specify either ActionType or action):• Receipt — Income (payment)• Refund — Income refund• Purchase — Expense• PurchaseRefund — Expense refundRequired for refunds, expenses, and corrections. Optional for income. |
isMandarinAgent | No | Use Mandarin terminal for agent fiscalization scheme. |
cashierName | No | Cashier name. |
cashierInn | No | Cashier INN. |
customerPhone | Conditional | Customer phone number. Required if customerEmail is not specified. |
customerEmail | Conditional | Customer email. Required if customerPhone is not specified. |
clientId | Yes | Client ID. |
merchantId | Yes | Merchant ID. |
mandarinId | Yes | Operation ID in Mandarin (e.g. TransactionId or OperationId) to which the receipt is linked. |
# Line item parameters (items)
| Parameter | Required | Description |
|---|---|---|
items.calculationMethod | Yes | Calculation method. Possible values: FULL_PAY, PREPAY_FULL, PREPAY_PARTIAL, AVANS, PARTIAL_SETTLEMENT_AND_CREDIT, TRANSFER_ON_CREDIT, CREDIT_PAYMENT. |
items.agentType | Conditional | Counterparty type for agent receipts. Use AGENT. Required for agent receipts. |
items.shipper.name | Conditional | Supplier company name (final recipient of funds). Required if agentType is specified. |
items.shipper.inn | Conditional | Supplier INN. Required if agentType is specified. |
items.shipper.phones | Conditional | Array of supplier phone numbers as strings. Required if agentType is specified. |
items.paymentSubject | Yes | Payment subject. Possible values: SERVICE, PRODUCT, JOB, PAYMENT, AGENCY, etc. Full list — payment subjects reference. |
items.name | Yes | Product, work, or service name. |
items.price | Yes | Unit price. Limit: 2 decimal places (e.g. 123.45). |
items.quantity | Yes | Quantity. Fractional values are allowed (e.g. 0.5). |
items.vat | Yes | VAT rate. Possible values: None, Vat0 (0%), vat5 (5%), vat7 (7%), Vat10 (10%), Vat20 (20%), Vat22 (22%), vat105 (5/105), vat107 (7/107). |
# Correction receipt parameters
To generate a correction receipt, add the action (or ActionType) field and the correction block to the request.
| Parameter | Required | Description |
|---|---|---|
action | Conditional | Type of operation being corrected (specify either ActionType or action):• 1 — Income (payment)• 2 — Income refund• 3 — Expense• 4 — Expense refund |
ActionType | Conditional | Type of operation being corrected (specify either ActionType or action):• Receipt — Income (payment)• Refund — Income refund• Purchase — Expense• PurchaseRefund — Expense refund |
correction | Yes | Correction data block. Contains information about the basis for correction. |
correction.type | Yes | Correction type: • 1 — Self (self-initiated)• 2 — Prescription (per authority order) |
correction.documentDate | Yes | Date of the corrected settlement. Format: YYYY-MM-DD (e.g. 2026-06-22). |
correction.documentNumber | No | Basis document number for correction. Specify the fiscal sign (FP) of the erroneous receipt if it was generated. If no receipt was issued, pass an empty value. |
# Request examples
# Example: agent income receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"action": 1,
"isMandarinAgent": true,
"cashierName": "Mandarin",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"agentType": "AGENT",
"shipper": {
"name": "Supplier LLC",
"inn": "7724923302",
"phones": ["+79001234567"]
},
"paymentSubject": "SERVICE",
"name": "Service",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
]
}'
Response on successful request creation (200 OK)
{
"data": {
"id": 139
}
}
# Example: agent income refund receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"action": 2,
"isMandarinAgent": true,
"cashierName": "Mandarin",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"agentType": "AGENT",
"shipper": {
"name": "Supplier LLC",
"inn": "7724923302",
"phones": ["+79001234567"]
},
"paymentSubject": "SERVICE",
"name": "Service",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
]
}'
# Example: agent income correction receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"isMandarinAgent": true,
"action": 1,
"cashierName": "Mandarin",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"agentType": "AGENT",
"shipper": {
"name": "Supplier LLC",
"inn": "7724923302",
"phones": ["+79001234567"]
},
"paymentSubject": "SERVICE",
"name": "Service",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
],
"correction": {
"type": 1,
"documentDate": "2026-06-22",
"documentNumber": "1234567890"
}
}'
# Example: non-agent income receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"action": 1,
"cashierName": "Ivanov I.I.",
"cashierInn": "1234567890",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"name": "Service payment",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
]
}'
# Example: non-agent income refund receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"action": 2,
"cashierName": "Ivanov I.I.",
"cashierInn": "1234567890",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"name": "Service refund",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
]
}'
# Example: non-agent income correction receipt
curl --request POST \
--url https://api.psp.io/receipts/public/receipts \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}' \
--header 'content-type: application/json' \
--data '{
"taxSystem": "Common",
"action": 1,
"cashierName": "Ivanov I.I.",
"cashierInn": "1234567890",
"customerPhone": "79001234567",
"customerEmail": "user@example.com",
"clientId": "1234",
"merchantId": "1234",
"mandarinId": "43913ddc000c4d3990fddbd3980c1725",
"items": [
{
"calculationMethod": "FULL_PAY",
"paymentSubject": "SERVICE",
"name": "Service payment",
"price": 1000.00,
"quantity": 1,
"vat": "Vat20"
}
],
"correction": {
"type": 1,
"documentDate": "2026-06-22",
"documentNumber": "1234567890"
}
}'
# Getting receipt status
Returns the current fiscalization status of a receipt by Mandarin operation ID.
# Authentication
- Scope:
receipts:public_receipts.read - OAuth 2.0 token — see request authentication
Endpoint: GET https://api.psp.io/receipts/public/receipts/{mandarinId}/status
# Parameters
| Parameter | Required | Description |
|---|---|---|
mandarinId | Yes (in URL) | Operation ID in Mandarin (TransactionId or OperationId from callback notification) |
# Possible status values
| Value | Description |
|---|---|
SUCCESS | Receipt generated successfully |
FAIL | Generation error |
NEW | Receipt is being processed |
Request
curl --request GET \
--url https://api.psp.io/receipts/public/receipts/43913ddc000c4d3990fddbd3980c1111/status \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}'
Response on success (200 OK)
{
"data": {
"status": "SUCCESS"
},
"error": null
}
# Getting receipt list
Returns a list of receipts with line item details. Supports filtering and pagination.
# Authentication
- Scope:
receipts:public_receipts.read - OAuth 2.0 token — see request authentication
Endpoint: GET https://api.psp.io/receipts/public/receipts
# Filtering
Filters are passed in the filter_by query parameter as key=value, with conditions separated by & (URL-encoded as %26).
Example: receipts with status New created within the specified interval:
filter_by=mandarin_status=New&created_start_date>2023-09-08T10:53:47.748839Z&created_end_date<2023-09-08T10:55:47.748839Z
# filter_by parameters
| Parameter | Required | Description |
|---|---|---|
mandarinId | No | Operation ID in Mandarin |
provider_id | No | Receipt ID at the cash register provider |
mandarin_status | No | Status: New, Success, Fail |
created_start_date | No | Period start (ISO 8601, e.g. 2023-09-08T10:53:47.748839Z) |
created_end_date | No | Period end (ISO 8601) |
action_type | No | Receipt type: Receipt (income), Refund (income refund), Purchase (expense), PurchaseRefund (expense refund) |
limit_to | No | Records per page. Default: 20 |
cursor | No | Pagination cursor (prev / next from the previous response) |
# Pagination
The response cursor object contains next and prev fields — pass the value in the cursor parameter to get the next or previous page.
Request
curl --request GET \
--url 'https://api.psp.io/receipts/public/receipts?filter_by=mandarin_status=New%26created_start_date%3E2023-09-08T10:53:47.748839Z%26created_end_date%3C2023-09-08T10:55:47.748839Z' \
--header 'accept: */*' \
--header 'authorization: Bearer {{access_token}}'
Response on success (200 OK)
{
"receipts": [
{
"mandarinId": "11913ddc000c4d3990fddbd3980c1111",
"providerId": "486179",
"providerType": "Bifit",
"actionType": "Receipt",
"status": "SUCCESS",
"mandarinStatus": "Success",
"amount": 200.00,
"customerEmail": "user@example.com",
"customerPhone": "+79001234567",
"items": [
{
"name": "ITO commission for transaction 23071572 in favor of Client 1234",
"price": 200.00,
"quantity": 1.0,
"vat": "VAT20"
}
],
"taxationSystem": "Common",
"clientId": "033861",
"merchantId": "7429",
"id": 714010,
"createdAt": "2023-10-18T18:59:55.641495Z"
}
],
"cursor": {
"count": 1,
"total": 1,
"next": null,
"prev": null
}
}
← Payments Tokenization →