# `Polarex.Benefits`
[🔗](https://github.com/giusdp/polarex/blob/main/lib/polarex/operations/benefits.ex#L1)

Provides API endpoints related to benefits

# `benefits_create`

```elixir
@spec benefits_create(
  body ::
    Polarex.BenefitCustomCreate.t()
    | Polarex.BenefitDiscordCreate.t()
    | Polarex.BenefitDownloadablesCreate.t()
    | Polarex.BenefitFeatureFlagCreate.t()
    | Polarex.BenefitGitHubRepositoryCreate.t()
    | Polarex.BenefitLicenseKeysCreate.t()
    | Polarex.BenefitMeterCreditCreate.t(),
  opts :: keyword()
) ::
  {:ok,
   Polarex.BenefitCustom.t()
   | Polarex.BenefitDiscord.t()
   | Polarex.BenefitDownloadables.t()
   | Polarex.BenefitFeatureFlag.t()
   | Polarex.BenefitGitHubRepository.t()
   | Polarex.BenefitLicenseKeys.t()
   | Polarex.BenefitMeterCredit.t()}
  | {:error, Polarex.HTTPValidationError.t()}
```

Create Benefit

Create a benefit.

**Scopes**: `benefits:write`

## Request Body

**Content Types**: `application/json`

# `benefits_delete`

```elixir
@spec benefits_delete(id :: String.t(), opts :: keyword()) ::
  :ok
  | {:error,
     Polarex.HTTPValidationError.t()
     | Polarex.NotPermitted.t()
     | Polarex.ResourceNotFound.t()}
```

Delete Benefit

Delete a benefit.

> [!WARNING]
> Every grants associated with the benefit will be revoked.
> Users will lose access to the benefit.

**Scopes**: `benefits:write`

# `benefits_get`

```elixir
@spec benefits_get(id :: String.t(), opts :: keyword()) ::
  {:ok,
   Polarex.BenefitCustom.t()
   | Polarex.BenefitDiscord.t()
   | Polarex.BenefitDownloadables.t()
   | Polarex.BenefitFeatureFlag.t()
   | Polarex.BenefitGitHubRepository.t()
   | Polarex.BenefitLicenseKeys.t()
   | Polarex.BenefitMeterCredit.t()}
  | {:error, Polarex.HTTPValidationError.t() | Polarex.ResourceNotFound.t()}
```

Get Benefit

Get a benefit by ID.

**Scopes**: `benefits:read` `benefits:write`

# `benefits_grants`

```elixir
@spec benefits_grants(id :: String.t(), opts :: keyword()) ::
  {:ok, Polarex.ListResourceBenefitGrant.t()}
  | {:error, Polarex.HTTPValidationError.t() | Polarex.ResourceNotFound.t()}
```

List Benefit Grants

List the individual grants for a benefit.

It's especially useful to check if a user has been granted a benefit.

**Scopes**: `benefits:read` `benefits:write`

## Options

  * `is_granted`: Filter by granted status. If `true`, only granted benefits will be returned. If `false`, only revoked benefits will be returned. 
  * `customer_id`: Filter by customer.
  * `member_id`: Filter by member.
  * `page`: Page number, defaults to 1.
  * `limit`: Size of a page, defaults to 10. Maximum is 100.

# `benefits_list`

```elixir
@spec benefits_list(opts :: keyword()) ::
  {:ok, Polarex.ListResourceBenefit.t()}
  | {:error, Polarex.HTTPValidationError.t()}
```

List Benefits

List benefits.

**Scopes**: `benefits:read` `benefits:write`

## Options

  * `organization_id`: Filter by organization ID.
  * `type`: Filter by benefit type.
  * `id`: Filter by benefit IDs.
  * `exclude_id`: Exclude benefits with these IDs.
  * `query`: Filter by description.
  * `page`: Page number, defaults to 1.
  * `limit`: Size of a page, defaults to 10. Maximum is 100.
  * `sorting`: Sorting criterion. Several criteria can be used simultaneously and will be applied in order. Add a minus sign `-` before the criteria name to sort by descending order.
  * `metadata`: Filter by metadata key-value pairs. It uses the `deepObject` style, e.g. `?metadata[key]=value`.

# `benefits_update`

```elixir
@spec benefits_update(
  id :: String.t(),
  body ::
    Polarex.BenefitCustomUpdate.t()
    | Polarex.BenefitDiscordUpdate.t()
    | Polarex.BenefitDownloadablesUpdate.t()
    | Polarex.BenefitFeatureFlagUpdate.t()
    | Polarex.BenefitGitHubRepositoryUpdate.t()
    | Polarex.BenefitLicenseKeysUpdate.t()
    | Polarex.BenefitMeterCreditUpdate.t(),
  opts :: keyword()
) ::
  {:ok,
   Polarex.BenefitCustom.t()
   | Polarex.BenefitDiscord.t()
   | Polarex.BenefitDownloadables.t()
   | Polarex.BenefitFeatureFlag.t()
   | Polarex.BenefitGitHubRepository.t()
   | Polarex.BenefitLicenseKeys.t()
   | Polarex.BenefitMeterCredit.t()}
  | {:error, Polarex.HTTPValidationError.t() | Polarex.ResourceNotFound.t()}
```

Update Benefit

Update a benefit.

**Scopes**: `benefits:write`

## Request Body

**Content Types**: `application/json`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
