---
title: "Read a direct recharge product — Anis Developers"
description: "Read the product and the recipient fields you must collect before requesting a direct recharge. Billing products (`billing`) are not available yet."
url: https://developers.anis.ly/reference/read-direct-recharge-product/
language: en
---

> Every page of this documentation: https://developers.anis.ly/llms.txt

[API reference](https://developers.anis.ly/reference.md) · Direct recharge

# Read a direct recharge product

`GET /v1/wallets/{walletId}/direct-recharge-products/{productId}`

Read the product and the recipient fields you must collect before requesting a direct recharge. Billing products (`billing`) are not available yet.

- **Permission:** `direct_recharges:read`
- **Authentication:** Signed read
- **Anis’s answer:** Not signed
- **Staff-set limits it counts toward:** All requests
- **.NET SDK:** `anis.DirectRechargeProducts.GetAsync(walletId, productId)`

## Parameters

| Name | In | Type | Notes |
| --- | --- | --- | --- |
| `walletId` (required) | `path` | UUID | A UUID, lower-case with hyphens. |
| `productId` (required) | `path` | UUID | A UUID, lower-case with hyphens. |

## Request

Signed with your key. No body, no nonce.

Headers: `Signature-Input`, `Signature`, `X-Anis-Date`, `Accept-Language` (optional). The SDKs set all of them for you.

**Body:** none.

## Responses

| Status | Meaning | Body |
| --- | --- | --- |
| 200 | Success. | [DirectRechargeProduct](#type-directrechargeproduct) |
| 400 | Refused: the signed request is badly built. | [Problem](#refusals) |
| 401 | Refused: not authenticated. | [Problem](#refusals) |
| 403 | Refused: not allowed. | [Problem](#refusals) |
| 404 | Refused: not found, or not yours. | [Problem](#refusals) |
| 422 | Refused: the request breaks a rule. | [Problem](#refusals) |
| 429 | Refused: a limit was reached. | [Problem](#refusals) |
| 503 | No decision: a dependency was unavailable. | [Problem](#refusals) |

The answers of this call are not signed — no `Signature` or `Signature-Input` header, success or refusal. There is nothing to verify; TLS protects them. `Content-Digest` and `X-Request-Id` are still present.

## Refusals

A refusal of this call is a problem without a signature. Branch on its `code`; each links to what it means and what to do.

| Error | Code | Status |
| --- | --- | --- |
| [Invalid credentials](https://developers.anis.ly/errors/invalid-credentials.md) | `invalid_credentials` | 401 |
| [Malformed signed request](https://developers.anis.ly/errors/malformed-signed-request.md) | `malformed_signed_request` | 400 |
| [Insufficient scope](https://developers.anis.ly/errors/insufficient-scope.md) | `insufficient_scope` | 403 |
| [Source address not allowed](https://developers.anis.ly/errors/source-ip-not-allowed.md) | `source_ip_not_allowed` | 403 |
| [Rate limited](https://developers.anis.ly/errors/rate-limited.md) | `rate_limited` | 429 |
| [Validation failed](https://developers.anis.ly/errors/validation-failed.md) | `validation_failed` | 422 |
| [Service unavailable](https://developers.anis.ly/errors/dependency-unavailable.md) | `dependency_unavailable` | 503 |
| [Request timeout](https://developers.anis.ly/errors/request-timeout.md) | `request_timeout` | 504 |
| [Internal error](https://developers.anis.ly/errors/internal-error.md) | `internal_error` | 500 |
| [Account not authorised](https://developers.anis.ly/errors/binding-not-authorized.md) | `binding_not_authorized` | 403 |
| [Account inactive](https://developers.anis.ly/errors/account-inactive.md) | `account_inactive` | 403 |
| [Wallet not granted](https://developers.anis.ly/errors/wallet-not-granted.md) | `wallet_not_granted` | 404 |
| [Not found](https://developers.anis.ly/errors/resource-not-found.md) | `resource_not_found` | 404 |
| [Currency not supported](https://developers.anis.ly/errors/currency-not-supported.md) | `currency_not_supported` | 422 |

## Types

### DirectRechargeProduct

| Field | Type | Notes |
| --- | --- | --- |
| `id` (required) | UUID | The identifier of this product, category or location. |
| `title` (required) | string | The direct recharge product's display text. |
| `description` | string | The direct recharge product's display text. |
| `type` (required) | string | external or billing, as returned. Billing products (`billing`) are not available yet. Values: `external`, `billing` |
| `category` | [DirectRechargeCategory](#type-directrechargecategory) | The direct recharge product's category. |
| `payoutCurrency` (required) | [DirectRechargeCurrency](#type-directrechargecurrency) | The named payout currency; it has no invented ISO code. |
| `available` (required) | boolean | Whether this wallet can buy the product. A missing tier or Fazaa-only price is unavailable. |
| `limits` | [DirectRechargeLimits](#type-directrechargelimits) | This wallet tier's amount limits, when a matching tier exists. |
| `recipientFields` (required) | list of [DirectRechargeRecipientField](#type-directrechargerecipientfield) | Ordered dynamic fields to show and validate for this product. |

### DirectRechargeCategory

| Field | Type | Notes |
| --- | --- | --- |
| `id` (required) | UUID | The identifier of this product, category or location. |
| `name` (required) | string | The display name supplied for this item. |
| `icon` | string | The category image URL, when supplied. |

### DirectRechargeCurrency

| Field | Type | Notes |
| --- | --- | --- |
| `name` (required) | string | The display name supplied for this item. |

### DirectRechargeLimits

| Field | Type | Notes |
| --- | --- | --- |
| `minimumTotal` | [Money](#type-money) | The allowed lower or upper LYD wallet total. |
| `maximumTotal` | [Money](#type-money) | The allowed lower or upper LYD wallet total. |
| `minimumPayout` | string | The lower or upper payout amount string in the product's named currency. |
| `maximumPayout` | string | The lower or upper payout amount string in the product's named currency. |

### Money

| Field | Type | Notes |
| --- | --- | --- |
| `amount` (required) | string | A decimal string, never a JSON number. Wallet balances may be negative while allowed debt is used. Prices and totals follow each route's amount rules. |
| `currency` (required) | string | An uppercase three-letter currency code, such as `LYD`. Read a wallet’s currency from `balance.currency`. |
| `asOf` | string (date-time) | When this price or balance was read. |

### DirectRechargeRecipientField

| Field | Type | Notes |
| --- | --- | --- |
| `key` (required) | string | The exact field key supplied by the direct recharge product definition. |
| `name` | [LocalizedText](#type-localizedtext) | The Arabic and English display labels, omitting empty languages. |
| `kind` (required) | string | text, list or note; show the appropriate input or guidance. Values: `text`, `list`, `note` |
| `for` (required) | string | recipient or sender, as supplied by the product. Values: `recipient`, `sender` |
| `order` (required) | integer | The display order of the field. |
| `validation` | string | The validation expression, when supplied. |
| `validationMessage` | [LocalizedText](#type-localizedtext) | The localized validation message, when supplied. |

### LocalizedText

| Field | Type | Notes |
| --- | --- | --- |
| `ar` | string | The Arabic text; omitted when empty. |
| `en` | string | The English text; omitted when empty. |
