# GET /v1/projects/:projectId/leased-accounts (/docs/api/reference/leased-accounts/list-leased-accounts)



<Endpoint method="GET" path="/v1/projects/:projectId/leased-accounts" auth="Bearer" scope="leased:write" phase="1" />

List leased accounts assigned to the project. This is the source of truth for what you're paying for and when the next monthly renewal hits.

Leased accounts also appear in [`GET /v1/projects/:id/social-accounts`](/docs/api/reference/social-accounts/list-social-accounts) with `leased: true`, which is the right endpoint if you just want a list of "accounts I can publish to" without caring about billing.

<Callout type="info">
  Assigned accounts appear here after Layers fulfills a [request](/docs/api/reference/leased-accounts/request-lease). If a request just completed and the account isn't showing yet, poll again before treating it as missing.
</Callout>

<Parameters
  title="Path"
  rows="[
  { name: 'projectId', type: 'string', required: true, description: 'Project whose leased accounts you want.' },
]"
/>

<Parameters
  title="Query"
  rows="[
  { name: 'status', type: 'string', enum: ['assigned', 'disconnected'], description: 'Filter. Defaults to assigned only.' },
]"
/>

## Example request [#example-request]

<Tabs items="['curl', 'TypeScript', 'Python']">
  <Tab value="curl">
    ```bash
    curl "https://api.layers.com/v1/projects/prj_254a4ce1-f4ca-42b1-9e36-17ca45ef3d39/leased-accounts" \
      -H "Authorization: Bearer lp_..."
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts
    const { items } = await layers.leasedAccounts.list({
      projectId: "prj_254a4ce1-f4ca-42b1-9e36-17ca45ef3d39",
    });

    const monthlyBurn = items.reduce((sum, a) => sum + a.monthlyPriceCents, 0);
    ```
  </Tab>

  <Tab value="Python">
    ```python
    result = layers.leased_accounts.list(project_id="prj_254a4ce1-f4ca-42b1-9e36-17ca45ef3d39")
    monthly_burn_cents = sum(a["monthlyPriceCents"] for a in result["items"])
    ```
  </Tab>
</Tabs>

## Response [#response]

<Response status="200" description="Assigned accounts">
  ```json
  {
    "items": [
      {
        "socialAccountId": "sa_9c1e42a0-b7f3-4e5d-a2c1-8b4f5e6c7d8e",
        "projectId": "prj_254a4ce1-f4ca-42b1-9e36-17ca45ef3d39",
        "handle": "coffee.reviews.daily",
        "platform": "tiktok",
        "followers": 12840,
        "status": "assigned",
        "assignedAt": "2026-04-20T16:12:02Z",
        "nextRenewalAt": "2026-05-20T16:12:02Z",
        "monthlyPriceCents": 15000
      },
      {
        "socialAccountId": "sa_9c1e42a0-b7f3-4e5d-a2c1-8b4f5e6c7d8e",
        "projectId": "prj_254a4ce1-f4ca-42b1-9e36-17ca45ef3d39",
        "handle": "brew.at.home",
        "platform": "tiktok",
        "followers": 8412,
        "status": "assigned",
        "assignedAt": "2026-04-20T16:12:02Z",
        "nextRenewalAt": "2026-05-20T16:12:02Z",
        "monthlyPriceCents": 15000
      }
    ]
  }
  ```
</Response>

`monthlyPriceCents` is the amount debited from your partner wallet on `nextRenewalAt`. To stop the next renewal, [release the account](/docs/api/reference/leased-accounts/release-leased-account) before that date.

## Errors [#errors]

| Status | Code              | When                                  |
| ------ | ----------------- | ------------------------------------- |
| 401    | `UNAUTHENTICATED` | Missing or invalid key.               |
| 403    | `FORBIDDEN_SCOPE` | Key lacks `leased:write`.             |
| 404    | `NOT_FOUND`       | `projectId` not in your organization. |

## See also [#see-also]

* [`POST /v1/projects/:id/leased-accounts/request`](/docs/api/reference/leased-accounts/request-lease) - request more accounts
* [`DELETE /v1/leased-accounts/:id`](/docs/api/reference/leased-accounts/release-leased-account) - release and stop billing
* [`GET /v1/projects/:id/social-accounts`](/docs/api/reference/social-accounts/list-social-accounts) - unified view with connected accounts
