# List credit transactions

`GET https://api.endless.app/organizations/{organization_id}/credits/transactions`

Source: https://endless.app/docs/api/credits/transactions

List credit transactions. Scoped to the organization named by `organization_id`.

## Authentication

- `bearerAuth`: HTTP bearer (JWT)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `organization_id` | path | string | yes |  |
| `limit` | query | integer | no |  |
| `offset` | query | integer | no |  |
| `type` | query | "subscription" \| "purchase" \| "free_refill" \| "gift" \| "welcome_gift" \| "claim" \| "refunded_usage" \| "usage" \| "expiration" \| "opening_adjustment" \| "refunded_purchase" \| "refunded_subscription" \| "adjustment" | no |  |
| `user_id` | query | string | no |  |
| `team_id` | query | string | no |  |
| `end_date` | query | string (date-time) | no |  |
| `Endless-Api-Version` | header | string | no | Pin the caller to an API major (`1`). Omit to accept the current version. A major this deployment cannot serve is refused with 400 `unsupported_api_version`. |

## Responses

### 200 OK

Content type: `application/json` — object

- `transactions` (array<object>, required)
  - `id` (string (uuid), required)
  - `organization_id` (string, required)
  - `user_id` (string | null, required)
  - `team_id` (string (uuid) | null, required)
  - `type` ("subscription" | "purchase" | "free_refill" | "gift" | "welcome_gift" | "claim" | "usage" | "expiration" | "opening_adjustment" | "refunded_usage" | "refunded_purchase" | "refunded_subscription" | "adjustment", required)
  - `amount` (integer, required)
  - `remaining` (integer | null, required)
  - `grant_id` (string (uuid) | null, required)
  - `description` (string | null, required)
  - `feature` (string | null, required)
  - `generation_id` (string (uuid) | null, required)
  - `conversation_id` (string (uuid) | null, required)
  - `asset_id` (string (uuid) | null, required)
  - `message_id` (string (uuid) | null, required)
  - `tool_call_id` (string | null, required)
  - `stripe_checkout_session_id` (string | null, required)
  - `idempotency_key` (string | null, required)
  - `stripe_invoice_id` (string | null, required)
  - `expires_at` (string (date-time) | null, required)
  - `effective_at` (string (date-time), required)
  - `created_at` (string (date-time), required)
  - `user` (object | null, required)
    - `first_name` (string | null, required)
    - `last_name` (string | null, required)
    - `email` (string, required)
    - `image_url` (string, required)
  - `team` (object | null, required)
    - `name` (string, required)
    - `color` (string | null, required)
- `total` (number, required)
- `limit` (number, required)
- `offset` (number, required)
- `has_more_future` (boolean, required)

### Errors

- `400` (Error): The request is malformed, or failed input validation. `message` names the field and the rule it broke; `data.issues` carries them individually.
- `401` (Error): No bearer token, or a token that failed verification.
- `402` (Error): The workspace has no credits left, or the caller is over a spending limit.
- `403` (Error): Authenticated, but the caller's role in this workspace does not carry the permission this operation needs.
- `404` (Error): No resource with that id, or the caller cannot read it. The two are deliberately one answer, so an id cannot be probed for existence.
- `409` (Error): The request is well-formed, but the resource's current state forbids it — a taken name, a last admin, a limit already reached.
- `429` (Error): The caller has spent its rate-limit window. `Retry-After` says when to come back.
- `500` (Error): The request failed on our side. Safe to retry an idempotent operation with backoff.
