---
# System prepended metadata

title: Cryptom Pay

---

## Cryptom Pay API Integration

## Payment Flow
```mermaid
sequenceDiagram
Client ->> POS: Authenticate [POST /auth]
POS -->> Client: Access and refresh tokens
Client ->> POS: Create transaction [POST /api/transaction/create]
POS -->> Client: Wallet address
Client ->> POS: Create QR Code [GET /qr/:transactionID]
POS -->> Client: QR Code image in PNG format
loop until isTransferComplete == true
Note over Client,POS: After showing qrcode, poll this endpoint. Timeout is handled on your side (=Client).
    Client ->> POS: Get Transaction [GET /api/transaction/detail/:transactionID]
    POS -->> Client: Transaction detail and status
end
alt if user cancells manually
    Client ->> POS: Cancel Transaction [DELETE /api/transaction/cancel/:transactionID]
    POS ->> Client: Cancellation status
end
```

## Transaction Completion Criteria
- if `isTransferComplete == true` it means the transfer is complete and there's no need to check `status` field.
- if `status == CANCELLED`, it means the transaction is cancelled.
- the other terminal statuses `[DONE, MANUAL_CHECK, TIMEOUT]` are not needed on the client side.
- if `status == TRANSFERRED`, it doesn't necessarily mean that the tranfer is complete, in case of a partial transfer, `isTransferComplete !== true`, but `status == TRANSFERRED`. Always use `isTransferComplete` for checking successful transaction.

## Example responses

**POST** `/auth`
#### Request (Body)
```json
{
    "email": "some@example.com",
    "password": "password"
}
```
#### Response
```json
{
    "status": true,
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjM4OWQyZTI1N2M4NTczOGFhYTAzNzQyIiwiZW1haWwiOiJ0ZXN0MUB0ZXN0LmNvbSIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNjczOTUzNTk5LCJleHAiOjE2Nzc1NTM1OTl9.epPEDrkCVOIGIkJFpTloYYzTQ2cQKNjx0cRcqRn77Q0",
    "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNjM4OWQyZTI1N2M4NTczOGFhYTAzNzQyIiwiZW1haWwiOiJ0ZXN0MUB0ZXN0LmNvbSIsInJvbGUiOiJ1c2VyIiwiaWF0IjoxNjczOTUzNTk5LCJleHAiOjE3NjAzNTM1OTl9.0g1gWi6_DdE2Tk7hPh9yk3c_RLQFjA70vNTJKsDdtdQ",
    "expires": {
        "accessToken": 3600000,
        "refreshToken": 86400000
    },
    "expiresIn": {
        "accessToken": 1673957199578,
        "refreshToken": 1674039999578
    }
}
```
**POST** `/api/transaction/create`
#### Request (Body)
```json
{
    "currency": "TRY",
    "currencyAmount": 300,
    "coin": "TRX",
    "network": "TRX".
    "userMobile": "+905363922143"
    "statusNote": "A sample description.",
}
```
#### Response
```json
{
    "status": true,
    "data": {
        "_id": "6338cb9cd4cb3327e706ddb1",
        "currency": "TRY",
        "currencyAmount": "200",
        "conversionRate": "0.02",
        "exchangeFee": "1.474",
        "clientType": "GATEWAY",
        "coin": "TRX",
        "network": "TRX",
        "coinAmount": "148.874",
        "commission": "4",
        "cryptomUserId": "2",
        "assignedToMerchant": "6338caa212f17299558072a6",
        "cashierID": "9999",
        "status": "PENDING",
        "acceptableThreshold": 1000,
        "totalTransferAmount": "0",
        "isTransferComplete": false,
        "timestamps": "1664666524",
        "timeout": "1664726524",
        "deleted": false,
        "date": "2022-10-01T23:22:04.081Z",
        "createdAt": "2022-10-01T23:22:04.081Z",
        "updatedAt": "2022-10-01T23:22:05.640Z",
        "sequenceID": 10006,
        "__v": 0,
        "reservedFrom": "2022-10-01T23:22:06.521Z",
        "reservedUntil": "2022-10-15T23:22:06.521Z",
        "wallet": {
            "ID": 428048732580321540,
            "coin": "TRX",
            "network": "TRX",
            "address": "TXaxqXSZkZAsXmnFWYc6MPFdSXkUP1H3gq",
            "createdAt": "2022-10-01T23:22:06.522Z",
            "updatedAt": "2022-10-01T23:22:06.522Z"
        },
        "id": "6338cb9cd4cb3327e706ddb1"
    }
}
```

## Transaction History
**GET** `/api/transaction?p1=v1&...`

#### Request (Query Params)
```json
{
    "id": <string>,
    "sequenceID": <number>,
    "currency": <string>,
    "currencyAmount": <number>,
    "clientType": <ClientType>,
    "coin": <string>,
    "network": <string>,
    "coinAmount": <number>,
    "status": <Status>,
    "userEmail": <string>,
    "userMobile": <string>,
    "reservedFrom": <string>,
    "reservedUntil": <string>,
    "walletAddress": <string>
}

type ClientType = OneOf['POS', 'GATEWAY']

type Status = Oneof['PENDING', 'TIMEOUT', 'TRANSFERRED', 'CONVERTING', 'CONVERTED', 'WALLET_CHARGED', 'DONE', 'MANUAL_CHECK', 'CANCELLED']

Note: These statuses are internal and subject to change.
```

#### Response
```json
{
    "status": true,
    "data": {
        "results": [
            {
                "_id": "6333825a211f29425a7aca20",
                "currency": "TRY",
                "currencyAmount": "195.8",
                "conversionRate": "2.1",
                "clientType": "GATEWAY",
                "coin": "TRX",
                "network": "TRX",
                "coinAmount": "160.52",
                "commission": "4.2",
                "cryptomUserId": "1",
                "assignedToMerchant": {
                    "_id": "633370faa57f56e76dc8beaa",
                    "cryptomUserId": "1",
                    "merchantName": "abc2",
                    "assignedToUser": "6333707ba1b31559f9493d2f",
                    "contactEmail": "test@heyo.com",
                    "website": "www.cryptom.com",
                    "callbackDomain": "pay.cryptom.com",
                    "defaultCallbackDomain": "pay.cryptom.com",
                    "countryCode": 90,
                    "contactNo": 5463925262,
                    "securityNo": 1,
                    "agentName": "Deniz Umut Dereli",
                    "status": "ACTIVE",
                    "accessType": "ALL",
                    "multipleLocation": "ALL",
                    "created_by": "63337059c9b7c79d371127b4",
                    "deleted": false,
                    "date": "2022-09-27T21:54:02.384Z",
                    "createdAt": "2022-09-27T21:54:02.391Z",
                    "updatedAt": "2022-09-27T22:14:25.488Z",
                    "updated_by": "63337059c9b7c79d371127b4"
                },
                "cashierID": "9999",
                "status": "PENDING",
                "statusNote": "A sample description.",
                "userMobile": "+905363925261",
                "acceptableThreshold": 1000,
                "created_by": {
                    "_id": "6333707ba1b31559f9493d2f",
                    "email": "testuse61r@test.com",
                    "role": "user",
                    "status": "ACTIVE",
                    "created_by": "63337059c9b7c79d371127b4",
                    "deleted": false,
                    "date": "2022-09-27T21:51:55.552Z",
                    "createdAt": "2022-09-27T21:51:55.558Z",
                    "updatedAt": "2022-09-27T21:51:55.558Z"
                },
                "timestamps": "1664320090",
                "deleted": false,
                "date": "2022-09-27T23:08:10.022Z",
                "createdAt": "2022-09-27T23:08:10.030Z",
                "updatedAt": "2022-09-27T23:08:11.555Z",
                "sequenceID": 10000,
                "__v": 0,
                "reservedFrom": "2022-09-27T23:08:12.554Z",
                "reservedUntil": "2022-10-11T23:08:12.554Z",
                "wallet": {
                    "ID": 427467512825878800,
                    "coin": "TRX",
                    "network": "TRX",
                    "address": "TBG1Wg3MdA3YwrVCbCmKqNkZ1fKyxhiuys",
                    "createdAt": "2022-09-27T23:08:12.555Z",
                    "updatedAt": "2022-09-27T23:08:12.555Z"
                }
            }
        ],
        "totalDocs": 1,
        "limit": 10,
        "page": 1,
        "totalPages": 1,
        "pagingCounter": 1,
        "hasPrevPage": false,
        "hasNextPage": false,
        "prevPage": null,
        "nextPage": null
    }
}
```
