How to Handle Manual P2P Crypto Transactions on KoinX (with TDS & Reporting)
This guide is for users in India. It covers P2P crypto trades settled in INR, TDS under Section 194S, and how to reconcile these transactions in KoinX for accurate tax reporting.
What is a Manual P2P Trade?
A manual P2P trade is a direct crypto-for-INR transaction between two people, outside of a centralised exchange’s order book. Common examples:- You send crypto from your wallet to a buyer, and they pay you INR via UPI, IMPS, or NEFT.
- You pay someone INR, and they send crypto directly to your exchange wallet or personal wallet.
Scenario 1: You Sold Crypto via P2P (Outgoing)
You sent crypto from your wallet to a buyer and received INR in return. On KoinX, this outgoing movement will appear as a Withdraw since KoinX has no context of the INR settlement.How to fix it
Step 1: Check the auto-fetched transaction yet First check whether this withdrawal is linked to any deposit on another wallet you own. If it is an internal transfer between your own wallets, deleting it will cause mismatches. If it is genuinely a P2P sale and not an internal move, proceed to Step 2. Step 2: Delete the auto-fetched Withdraw or Transfer Go to Transactions, find the entry, and delete it to prevent a duplicate record. Step 3: Manually add a Sell transaction Add a new transaction with the following details:- Type: Trade
- Label: Sell
- Date: Date of the P2P trade
- Asset: The crypto you sold (e.g., USDT, BTC)
- Quantity Sold: The amount you sent
- INR Received: The gross INR amount credited to you before TDS
- TDS Deducted: If the buyer withheld 1% TDS, enter that amount here
- Transaction Hash (optional): On-chain TxID for audit trail
- Note (optional): e.g., “Manual P2P sale: 1 USDT for ₹100 via UPI, ₹1 TDS deducted by buyer”
Scenario 2: You Bought Crypto via P2P (Incoming)
You paid someone INR and they sent crypto to your wallet or exchange. On KoinX, this incoming crypto will appear as a Deposit since KoinX has no record of the INR you paid. When KoinX sees a deposit, it automatically picks up the fair market value of the crypto at that point in time. This may be different from the actual price you paid in the P2P trade. If left uncorrected, your cost basis will be wrong, which means your capital gains will also be off when you eventually sell. How you fix this depends on whether the wallet or exchange where you received the crypto is already connected to KoinX.Option 1: Edit the Deposit directly (simpler, recommended)
Use this if: The wallet or exchange where you received the crypto is already connected to KoinX, and the deposit is auto-fetched. This is the easier approach and works well for most users who do not need to build a complete transaction trail. Step 1: Find the auto-fetched Deposit transaction Go to Transactions and find the deposit that corresponds to your P2P buy. Step 2: Edit the price Click the three-dot menu and select Edit. Enter the exact INR amount you actually paid to acquire the crypto. This overrides the fair market value KoinX picked up automatically and sets the correct cost basis for your trade. That is all you need to do for this option.Option 2: Add manual transactions (complete transaction trail)
Use this if: The wallet or exchange where you received the crypto is not connected to KoinX, or you want to build a complete trail of the transaction from the P2P trade through to the final deposit. Step 1: Set up the wallet in KoinX If the wallet where you received the crypto is not connected to KoinX, you will need to add it. Go to Integrations, add the particular wallet where the funds were originally received. Step 2: Add a Buy transaction Under the wallet you just created (or the relevant connected wallet), manually add a Buy with the following details:- Type: Trade
- Label: Buy
- Date: Date of the P2P trade
- Asset: The crypto you received
- Quantity Bought: Amount of crypto you received
- INR Paid: The gross INR amount you paid before TDS
- Note (optional): e.g., “Manual P2P buy: 1 USDT for ₹100 via UPI, ₹1 TDS deducted by me”
- Type: Withdraw
- Date and time: A timestamp slightly before the Deposit time on the receiving exchange
- Asset and Quantity: Same as the Buy above
For automatic internal transfer matching to work, go to Tax Settings → Internal Transfer Settings and check that the time window and amount difference thresholds are configured correctly. The Withdraw timestamp must fall within the matching window before the Deposit time.
Understanding TDS in P2P Trades
Under Section 194S of the Income Tax Act, 1% TDS applies on crypto purchases in India.| Situation | Who deducts TDS |
|---|---|
| You are selling crypto | The buyer deducts 1% TDS and pays you the net amount |
| You are buying crypto | You deduct 1% TDS from the amount you pay the seller |
Common Issues
The internal transfer is not matching automatically
The internal transfer is not matching automatically
Check that the Withdraw timestamp is before the Deposit timestamp, and that the time gap between them falls within your Internal Transfer Settings time window (default is 120 minutes). Also check that the amounts are within the allowed difference threshold (default is 5%).
My P2P sell is showing as a transfer even after I relabelled it
My P2P sell is showing as a transfer even after I relabelled it
Relabelling changes the category but does not add the INR sale value or TDS. You need to manually add a Sell transaction with the correct details and delete the original auto-fetched entry.
I have multiple P2P trades and it is getting complicated
I have multiple P2P trades and it is getting complicated
Do them one at a time. Match each trade to its corresponding on-chain transaction before moving to the next. If you are unsure, reach out to our support team and we will help you work through it.
Summary
| Scenario | What KoinX shows | What you need to do |
|---|---|---|
| You sold crypto via P2P | Withdraw or Transfer | Delete it, add a Sell manually with INR amount and TDS |
| You bought crypto via P2P | Deposit | Keep the Deposit, add a Buy and a Withdraw so KoinX maps it as an internal transfer |