# Get Wallet Activity
> Source: /api-reference/members/wallet/get-activity
> Get paginated recent activity for wallet
> Endpoint: GET /members/me/wallet/activity

## Overview [#overview]

Returns paginated recent activity for the authenticated member's wallet, including point earnings, redemptions, transfers, and adjustments.

This endpoint provides a user-friendly activity feed for displaying in member-facing applications.

## Authentication [#authentication]

Requires a valid Clerk JWT token in the Authorization header.

## Query Parameters [#query-parameters]

<ParamField query="limit" type="number">
  Maximum number of activities to return (default: 20, max: 100)
</ParamField>

<ParamField query="offset" type="number">
  Number of activities to skip for pagination (default: 0)
</ParamField>

<ParamField query="activityType" type="string">
  Filter by activity type
  
  Allowed values: `"earn"`, `"spend"`, `"transfer"`, `"adjustment"`
</ParamField>

<ParamField query="from" type="string">
  Start date for filtering activities (ISO 8601 format)
  
  Example: `"2024-01-01T00:00:00Z"`
</ParamField>

<ParamField query="to" type="string">
  End date for filtering activities (ISO 8601 format)
  
  Example: `"2024-12-31T23:59:59Z"`
</ParamField>

<RequestExample>

```bash cURL
curl -X GET "http://localhost:3000/v1/members/me/wallet/activity?limit=10&activityType=earn" \
  -H "Authorization: Bearer YOUR_CLERK_JWT"
```

```typescript TypeScript
const response = await fetch('http://localhost:3000/v1/members/me/wallet/activity?limit=10&activityType=earn', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_CLERK_JWT'
  }
});

const activity = await response.json();
```

</RequestExample>

## Response [#response]

<ResponseField name="items" type="array" required>
  List of activity items
  
  <Expandable title="array items">
    <ResponseField name="id" type="string" required>
      Activity ID
    </ResponseField>
    
    <ResponseField name="type" type="string" required>
      Activity type: "earn", "spend", "transfer", "adjustment"
    </ResponseField>
    
    <ResponseField name="amount" type="number" required>
      Point amount (positive for credits, negative for debits)
    </ResponseField>
    
    <ResponseField name="assetType" type="string" required>
      Asset type: "VALID" or "CREDIT"
    </ResponseField>
    
    <ResponseField name="description" type="string" required>
      Human-readable description of the activity
    </ResponseField>
    
    <ResponseField name="sourceType" type="string">
      Source of the activity: "reservation", "transfer", "offer", "adjustment", etc.
    </ResponseField>
    
    <ResponseField name="sourceId" type="string">
      ID of the source entity (reservation ID, transfer ID, etc.)
    </ResponseField>
    
    <ResponseField name="propertyName" type="string">
      Property name for reservation-related activities
    </ResponseField>
    
    <ResponseField name="reservationConfirmationCode" type="string">
      Confirmation code for reservation-related activities
    </ResponseField>
    
    <ResponseField name="createdAt" type="string" required>
      ISO 8601 timestamp when activity occurred
    </ResponseField>
    
    <ResponseField name="status" type="string" required>
      Activity status: "completed", "pending", "failed", "cancelled"
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="total" type="number" required>
  Total number of activities matching the filters
</ResponseField>

<ResponseField name="offset" type="number" required>
  Current pagination offset
</ResponseField>

<ResponseField name="limit" type="number" required>
  Current pagination limit
</ResponseField>

<ResponseExample>

```json 200 Response
{
  "items": [
    {
      "id": "activity_123",
      "type": "earn",
      "amount": 2500,
      "assetType": "VALID",
      "description": "Points earned from stay at Luxury Resort & Spa",
      "sourceType": "reservation",
      "sourceId": "12345",
      "propertyName": "Luxury Resort & Spa",
      "reservationConfirmationCode": "ABC123",
      "createdAt": "2024-04-15T14:30:00Z",
      "status": "completed"
    },
    {
      "id": "activity_124",
      "type": "spend",
      "amount": -1000,
      "assetType": "VALID",
      "description": "Redeemed: Suite Upgrade at Downtown Hotel",
      "sourceType": "offer",
      "sourceId": "offer_456",
      "propertyName": "Downtown Hotel",
      "createdAt": "2024-04-10T09:15:00Z",
      "status": "completed"
    },
    {
      "id": "activity_125",
      "type": "transfer",
      "amount": 500,
      "assetType": "VALID",
      "description": "Received transfer from Jane Doe",
      "sourceType": "transfer",
      "sourceId": "transfer_789",
      "createdAt": "2024-04-05T16:45:00Z",
      "status": "completed"
    },
    {
      "id": "activity_126",
      "type": "adjustment",
      "amount": 250,
      "assetType": "CREDIT",
      "description": "Welcome bonus - new member",
      "sourceType": "adjustment",
      "sourceId": "adj_012",
      "createdAt": "2024-04-01T10:00:00Z",
      "status": "completed"
    }
  ],
  "total": 47,
  "offset": 0,
  "limit": 10
}
```

</ResponseExample>

## Activity Types [#activity-types]

### Earn [#earn]
- **Source**: Completed stays, bonuses, transfers received
- **Amount**: Always positive
- **Display**: Green/positive styling
- **Examples**: "Points earned from stay", "Bonus points awarded"

### Spend [#spend]
- **Source**: Redemptions, transfers sent
- **Amount**: Always negative  
- **Display**: Red/negative styling
- **Examples**: "Redeemed: Suite Upgrade", "Transfer sent to..."

### Transfer [#transfer]  
- **Source**: Points sent to or received from other members
- **Amount**: Negative for sent, positive for received
- **Display**: Blue/neutral styling
- **Examples**: "Sent to John Doe", "Received from Jane Doe"

### Adjustment [#adjustment]
- **Source**: Administrative corrections, system adjustments
- **Amount**: Can be positive or negative
- **Display**: Orange/warning styling
- **Examples**: "Correction applied", "Promotional bonus"

## Asset Types [#asset-types]

### VALID [#valid]
- Points that count toward tier progression
- Earned from completed stays
- Have expiration dates

### CREDIT [#credit]  
- Promotional points that don't count toward tiers
- Often from bonuses or adjustments
- May have different expiration rules

## Status Values [#status-values]

### Completed [#completed]
- **Meaning**: Activity is finalized and points are available
- **Display**: Normal activity item

### Pending [#pending]
- **Meaning**: Activity is processing (e.g., recent checkout)
- **Display**: Grayed out or with pending indicator

### Failed [#failed]
- **Meaning**: Activity failed to process
- **Display**: Error state with retry option if applicable

### Cancelled [#cancelled]
- **Meaning**: Activity was cancelled (e.g., booking cancellation)
- **Display**: Strikethrough or cancelled indicator

## Pagination [#pagination]

Use `offset` and `limit` for pagination:
- First page: `offset=0&limit=20`
- Second page: `offset=20&limit=20`
- etc.

## Related Endpoints [#related-endpoints]

- [Get Balance](/api-reference/members/wallet/get-balance) - Current balance
- [Get Transactions](/api-reference/members/wallet/get-transactions) - Detailed transaction history
- [Get Wallet](/api-reference/members/wallet/get-wallet) - Full wallet details
