GET /api/v1/p2p/ads
Retrieve a paginated list of active P2P advertisements. Results include basic user info for each ad owner.
Authentication
Not required.
Request
| Parameter | Type | In | Description |
|---|---|---|---|
type | string | query | Filter by ad type: "buy" or "sell" |
fiat_currency | string | query | Filter by fiat currency (e.g. "RUB") |
amount | integer | query | Filter ads whose min/max range covers this amount (kopecks) |
payment_method | string | query | Filter by payment method (e.g. "sber") |
max_payment_duration | integer | query | Filter by max payment duration in minutes (e.g. 15, 30) |
is_active | string | query | Filter by active status: "true" or "false" |
author_nickname | string | query | Filter by ad author's nickname |
sort_by | string | query | Sort order: "rating", "orders_count", or "best_price" |
limit | integer | query | Maximum number of ads to return (default: 20) |
offset | integer | query | Number of ads to skip for pagination (default: 0) |
Example
curl "https://example.com/api/v1/p2p/ads?type=sell&fiat_currency=RUB&limit=10&offset=0"
Response
200 OK
Returns an object with ads array. Each ad includes embedded user info.
{
"ads": [
{
"id": 42,
"user_id": 7,
"type": "sell",
"fiat_currency": "RUB",
"exchange_rate": 9350,
"min_amount": 50000,
"max_amount": 50000000,
"remaining_amount": 50000000,
"payment_methods": ["sber", "tinkoff"],
"instructions": "Transfer to the card number shown after order creation.",
"is_active": true,
"moderation_status": "approved",
"is_platform_ad": false,
"created_at": "2026-04-04T12:00:00Z",
"updated_at": "2026-04-04T12:00:00Z",
"user": {
"id": 7,
"name": "trader42",
"nickname": "trader42",
"avatar_url": "https://cdn.example.com/avatars/7.png",
"completed_orders": 128,
"p2p_avg_rating": 4.9
},
"user_avg_rating": 4.9
}
]
}
Errors
| Status | Code | Description |
|---|---|---|
| 400 | INVALID_REQUEST | Invalid query parameters (e.g. unknown type) |