> ## Documentation Index
> Fetch the complete documentation index at: https://developers.apob.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Models and elements API

> Find accessible ready models and reusable image, video, and audio elements for generation.

Use [API key authentication](/api-reference/authentication) for the queries on
this page. A model identifies a reusable character or voice. Elements provide
additional media references. See the [concept guide](/concepts/models-and-elements).

## List your ready models

```graphql PersonalModels theme={null}
query PersonalModels($page: PageFetchingInfo!) {
  getUserByPrivateId {
    personalModels(isDeleted: false, isTaskCompletedOnly: true, pageFetchingInfo: $page) {
      list {
        id
        name
        type
        usage
        isPublic
        task {
          status
          progress { finishCode }
        }
      }
      hasMore
    }
  }
}
```

```json Variables theme={null}
{
  "page": { "pageSize": 20 }
}
```

Select an image model for image/video workflows and a `textSpeech` model for
voice input. A completed training task must have `status: finished` and
`finishCode: 0` before the model is used. `isTaskCompletedOnly` is a filter;
inspect the returned task outcome as well.

`personalModels` also accepts `searchInfo`, `usage`, `usages`, `tags`, and
`orderType`. Use `communityModels` under the same account field to discover
community models, with `searchInfo`, `usage`, `tags`, `orderType`, and
`pageFetchingInfo`. Visibility and workflow compatibility still apply.

## Inspect a model

```graphql ModelById theme={null}
query ModelById($modelId: ID!) {
  getUserByPrivateId {
    model(id: $modelId) {
      id
      name
      type
      usage
      isPublic
      task {
        id
        status
        progress { finishCode }
      }
    }
  }
}
```

```json Variables theme={null}
{
  "modelId": "<MODEL_ID>"
}
```

A missing, deleted, or inaccessible model can return `null`. An ID alone does
not establish permission or readiness.

## List your elements

```graphql PersonalElements theme={null}
query PersonalElements($fileType: FileType, $page: PageFetchingInfo!) {
  getUserByPrivateId {
    personalElements(fileType: $fileType, pageFetchingInfo: $page) {
      list {
        id
        name
        category
        fileType
        isPublic
      }
      hasMore
    }
  }
}
```

```json Variables theme={null}
{
  "fileType": "image",
  "page": { "pageSize": 20 }
}
```

Choose `image`, `video`, or `audio` for the exact media type you need. `audio`
does not include video. Omit `fileType` to read across types. Both
`personalElements` and `communityElements` accept `category`, `fileType`,
`platform`, and `pageFetchingInfo`; community elements are public references.

## Pagination

`PageFetchingInfo` has `pageSize` (default `30`), optional `previousId`, and
optional `pageNumber` (starting at `1`). For cursor pagination, send the final
item's `id` as `previousId` on the next read, keep the same filters and ordering,
and stop when `hasMore` is false. Follow each field's pagination contract;
[media history](/api-reference/tasks-and-results#reconcile-your-media-history)
uses a separate cursor input and returns `nextCursorId`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.