# 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 ops has 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">
  Lease provisioning is handled by Layers operations. Assigned accounts land here after ops fulfills a [request](/docs/api/reference/leased-accounts/request-lease). If a request just completed and the account isn't showing yet, wait a minute — the assignment and the list view become consistent within about 30 seconds.
</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_01HX9Y7K8M2P4RSTUV56789AB/leased-accounts" \
      -H "Authorization: Bearer lp_live_01HX9Y6K7EJ4T2_4QZpN..."
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts
    const { items } = await layers.leasedAccounts.list({
      projectId: "prj_01HX9Y7K8M2P4RSTUV56789AB",
    });

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

  <Tab value="Python">
    ```python
    result = layers.leased_accounts.list(project_id="prj_01HX9Y7K8M2P4RSTUV56789AB")
    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_01HXZS8N3C5R6STUV7WXYZ9AB",
        "projectId": "prj_01HX9Y7K8M2P4RSTUV56789AB",
        "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_01HXZS8N3C5R6STUV7WXYZ9AC",
        "projectId": "prj_01HX9Y7K8M2P4RSTUV56789AB",
        "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) — ask ops for 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
