Offers API Last updated: 2026-03-16
Overview
Our Offers API returns offers in JSON format with full filtering, pagination, and incremental sync support. You can save this info in your database and sort/filter it however you want.
Request Params
Endpoint /api/v1/offers| Param | Required | Type | Description |
|---|---|---|---|
| site_key | Yes | String | Site public key of your placement. |
| site_secret | Yes | String | Site secret key of your placement. |
| type | No | String | Filter by type: offer (default) or multireward. Multireward offers include events array. |
| limit | No | Integer | Number of offers to return (1-500). Default: 100. Alias: take. |
| offset | No | Integer | Skip the first N results for pagination. Default: 0. Alias: skip. |
| country | No | String | ISO 2-letter country code (e.g. US, DE, BR). Returns only offers available in that country. |
| device | No | String | Filter by device: android, ios, or desktop. |
| category | No | String | Filter by category name (e.g. games, surveys). |
| min_payout | No | Float | Minimum payout in USD (e.g. 0.50). Returns only offers with payout >= this value. |
| updated_since | No | String | ISO 8601 date (e.g. 2026-03-10T00:00:00Z). Returns only offers updated after this date. Useful for incremental sync. |
GET REQUEST EXAMPLE
WITH FILTERS
Error Codes
| Code | HTTP | Description |
|---|---|---|
| MISSING_CREDENTIALS | 400 | Both site_key and site_secret are required. |
| INVALID_CREDENTIALS | 401 | No site found with the provided key and secret. |
| SITE_PENDING | 403 | Site is pending approval. Contact support. |
| INVALID_TYPE | 422 | Invalid type value. Accepted: offer, multireward. |
| INVALID_DATE | 422 | updated_since must be a valid ISO 8601 date. |
| RATE_LIMIT_EXCEEDED | 429 | Rate limit exceeded. Maximum 10 requests per hour. |
Error Response Sample
Response Format
Content-type application/json{
"success": true,
"version": "v1",
"total": 245,
"offset": 0,
"limit": 100,
"has_more": true,
"offers": [
{
"id": 1,
"title": "Install Game App",
"description": "Download and reach level 5",
"image": "https://www.pro.adswedmedia.com/asset/images/offers/example.jpg",
"payout": 0.85,
"currency": "USD",
"level": "easy",
"stars": 4,
"categories": ["games"],
"countries": ["US", "GB", "CA"],
"devices": ["android", "ios"],
"payment_term": "net30",
"android_min_os": "8.0",
"ios_min_os": null,
"tracking_url": "https://www.pro.adswedmedia.com/redirect/manual-offer/1/user/{user_id}/site/YOUR_KEY",
"updated_at": "2026-03-15T14:30:00+00:00",
"created_at": "2026-03-01T10:00:00+00:00"
}
]
}
Multireward Response (with events)
{
"id": 42,
"title": "Reach Level 30",
"payout": 5.00,
"events": [
{ "offer_id": 42, "payout": 0.50, "description": "Install" },
{ "offer_id": 42, "payout": 2.00, "description": "Reach Level 10" },
{ "offer_id": 42, "payout": 2.50, "description": "Reach Level 30" }
]
}
Response Headers
| Header | Description |
|---|---|
| X-Api-Version | Current API version (1.0) |
| X-RateLimit-Limit | Maximum requests allowed per hour |
| X-RateLimit-Remaining | Remaining requests in current window |
Response Fields
| Field | Description |
|---|---|
| success | true on success, false on error. |
| total | Total number of offers matching filters (before pagination). |
| offset | Current offset used for pagination. |
| limit | Current limit used for pagination. |
| has_more | true if more offers are available beyond current page. |
| payout | Payout in USD (after publisher commission applied). |
| image | Full URL to the offer image. |
| countries | Array of ISO 2-letter country codes. Empty array = available worldwide. |
| devices | Array of devices: android, ios, desktop. Empty = all. |
| tracking_url | Offer tracking link. Replace {user_id} with your user's ID. |
| events | Multireward offers only. Array of milestone events with individual payouts. |