curl --request GET \
--url https://api.tassyir.io/apps/2026-10/offers \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tassyir.io/apps/2026-10/offers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "<string>",
"storeId": "<string>",
"kind": "<string>",
"method": "<string>",
"title": "<string>",
"label": {
"ar": "<string>",
"fr": "<string>",
"en": "<string>"
},
"status": "<string>",
"currency": "<string>",
"quantity": {
"priceMode": "<string>",
"tiers": [
{
"pieces": 0,
"label": {
"ar": "<string>",
"fr": "<string>",
"en": "<string>"
},
"total": "<string>",
"percentOff": 123,
"amountOffEach": "<string>",
"preselected": true,
"freeDelivery": true
}
]
},
"freeDelivery": {
"thresholdKind": "<string>",
"thresholdPieces": 0,
"thresholdAmount": "<string>",
"delivery": "<string>",
"wilayas": [
"<string>"
]
},
"productDiscount": {
"valueType": "<string>",
"percent": 123,
"amount": "<string>",
"maxAmount": "<string>",
"showCountdown": true
},
"orderDiscount": {
"valueType": "<string>",
"percent": 123,
"amount": "<string>",
"maxAmount": "<string>",
"minimumKind": "<string>",
"minimumPieces": 0,
"minimumAmount": "<string>"
},
"bxgy": {
"buyPieces": 0,
"getPieces": 0,
"getDiscountType": "<string>",
"getPercent": 123,
"getPrice": "<string>",
"maxPerOrder": 0
},
"addon": {
"priceType": "<string>",
"price": "<string>",
"percent": 123,
"amountOff": "<string>",
"maxQuantity": 0,
"beforeSubmit": true,
"afterSubmit": true
},
"appRule": {
"typeHandle": "<string>",
"rule": "<unknown>"
},
"combinesWith": {
"product": true,
"order": true,
"delivery": true
},
"eligibility": {
"audience": "<string>",
"channels": [
"<string>"
],
"wilayas": [
"<string>"
],
"deliveryMethods": [
"<string>"
]
},
"targets": [
{
"role": "<string>",
"type": "<string>",
"id": "<string>"
}
],
"codeCount": 0,
"totalUsageLimit": 0,
"perBuyerLimit": 0,
"startsAt": "2023-11-07T05:31:56Z",
"endsAt": "2023-11-07T05:31:56Z",
"publishedAt": "2023-11-07T05:31:56Z",
"pausedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"appOwned": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"nextCursor": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"detail": "<string>",
"code": "INVALID_CURSOR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "APP_TOKEN_INVALID",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"detail": "<string>",
"code": "PERMISSION_DENIED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"detail": "<string>",
"code": "BUSINESS_RATE_LIMITED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 460,
"detail": "<string>",
"code": "STORE_SCOPE_FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 500,
"detail": "<string>",
"code": "INTERNAL_ERROR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "API_BUSY",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}List offers
The merchant’s per-store pricing offers (quantity offers, free delivery, product discounts), newest first, drafts included. A store-limited installation reads the offers of its stores. Codes are not exposed (their count is), and neither is any usage: never a buyer.
Needs the read_offers scope (permission offers:read).
curl --request GET \
--url https://api.tassyir.io/apps/2026-10/offers \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.tassyir.io/apps/2026-10/offers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"data": [
{
"id": "<string>",
"storeId": "<string>",
"kind": "<string>",
"method": "<string>",
"title": "<string>",
"label": {
"ar": "<string>",
"fr": "<string>",
"en": "<string>"
},
"status": "<string>",
"currency": "<string>",
"quantity": {
"priceMode": "<string>",
"tiers": [
{
"pieces": 0,
"label": {
"ar": "<string>",
"fr": "<string>",
"en": "<string>"
},
"total": "<string>",
"percentOff": 123,
"amountOffEach": "<string>",
"preselected": true,
"freeDelivery": true
}
]
},
"freeDelivery": {
"thresholdKind": "<string>",
"thresholdPieces": 0,
"thresholdAmount": "<string>",
"delivery": "<string>",
"wilayas": [
"<string>"
]
},
"productDiscount": {
"valueType": "<string>",
"percent": 123,
"amount": "<string>",
"maxAmount": "<string>",
"showCountdown": true
},
"orderDiscount": {
"valueType": "<string>",
"percent": 123,
"amount": "<string>",
"maxAmount": "<string>",
"minimumKind": "<string>",
"minimumPieces": 0,
"minimumAmount": "<string>"
},
"bxgy": {
"buyPieces": 0,
"getPieces": 0,
"getDiscountType": "<string>",
"getPercent": 123,
"getPrice": "<string>",
"maxPerOrder": 0
},
"addon": {
"priceType": "<string>",
"price": "<string>",
"percent": 123,
"amountOff": "<string>",
"maxQuantity": 0,
"beforeSubmit": true,
"afterSubmit": true
},
"appRule": {
"typeHandle": "<string>",
"rule": "<unknown>"
},
"combinesWith": {
"product": true,
"order": true,
"delivery": true
},
"eligibility": {
"audience": "<string>",
"channels": [
"<string>"
],
"wilayas": [
"<string>"
],
"deliveryMethods": [
"<string>"
]
},
"targets": [
{
"role": "<string>",
"type": "<string>",
"id": "<string>"
}
],
"codeCount": 0,
"totalUsageLimit": 0,
"perBuyerLimit": 0,
"startsAt": "2023-11-07T05:31:56Z",
"endsAt": "2023-11-07T05:31:56Z",
"publishedAt": "2023-11-07T05:31:56Z",
"pausedAt": "2023-11-07T05:31:56Z",
"archivedAt": "2023-11-07T05:31:56Z",
"appOwned": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"nextCursor": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 400,
"detail": "<string>",
"code": "INVALID_CURSOR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 401,
"detail": "<string>",
"code": "APP_TOKEN_INVALID",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 403,
"detail": "<string>",
"code": "PERMISSION_DENIED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 429,
"detail": "<string>",
"code": "BUSINESS_RATE_LIMITED",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 460,
"detail": "<string>",
"code": "STORE_SCOPE_FORBIDDEN",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 500,
"detail": "<string>",
"code": "INTERNAL_ERROR",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}{
"type": "<string>",
"title": "<string>",
"status": 503,
"detail": "<string>",
"code": "API_BUSY",
"docs": "<string>",
"fix": "<string>",
"requestId": "<string>",
"errors": [
"<string>"
]
}Authorizations
An app access token from POST /apps/oauth/token, valid 1 hour. An offline token acts as the app; an online token acts as the app on behalf of one dashboard user (the intersection of both permission sets).
Query Parameters
One status: draft, scheduled (starts later), active, paused or ended (an archived offer is ended). Omitted: every offer.
draft, scheduled, active, paused, ended Only this kind: quantity, free_delivery, product_discount, order_discount, bxgy, addon or app.
quantity, free_delivery, product_discount, order_discount, bxgy, addon, app Only code offers (code) or automatic ones (automatic).
automatic, code Only the offers of this store. A store outside the installation's stores is 460 STORE_SCOPE_FORBIDDEN.
^\d{1,24}$Return only these top-level fields, separated by commas; the id is always kept. The response schema describes the whole resource. An unknown name is 400 INVALID_FIELDS. Fields: id, storeId, kind, method, title, label, status, currency, quantity, freeDelivery, productDiscount, orderDiscount, bxgy, addon, appRule, combinesWith, eligibility, targets, codeCount, totalUsageLimit, perBuyerLimit, startsAt, endsAt, publishedAt, pausedAt, archivedAt, appOwned, createdAt, updatedAt.
1000Page size, 1 to 100 (default 50). A value outside that range is 400, never clamped.
1 <= x <= 100The nextCursor of the previous page, unchanged, with the same filters. Opaque; bound to this list and its filters (400 INVALID_CURSOR otherwise).
512