> For the complete documentation index, see [llms.txt](https://developerdocs.instructure.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developerdocs.instructure.com/services/journey/api/object_ids.md).

# Object IDs

Journey object identifiers come from two sources. Resources that Journey owns (programs, skills, experiences, dashboards, learning library collections) carry **Journey-issued UUIDs**. Resources that originate in Canvas LMS (users, accounts, courses) are referenced by their **Canvas-issued IDs**, which Journey persists and exposes verbatim — it does not mint a surrogate ID for them.

## Journey IDs

Native Journey entities use server-generated v4 UUID primary keys. This applies to programs, skills, experiences, learning library collections, and similar Journey-owned resources — for example `program.id`, `skill.id`, `experience.id`. A small number of internal tables use numeric keys instead; these are not exposed on the public API surface.

```json
"id": "8f3a4c2b-1e5d-4f6a-9b8c-2d3e4f5a6b7c"
```

UUIDs are stable for the lifetime of the row and are safe to store and reference from clients.

## Canvas-origin IDs

IDs sourced from Canvas LMS are kept in their original Canvas form:

* Canvas numeric global ID (e.g. user, account, course)
* Canvas user UUID
* Canvas root account UUID

Regardless of how a value is stored internally, it always crosses the API boundary as a **string**, preserving Canvas's global-ID precision without JavaScript number issues.

```json
"canvasId": "10000000000123",
"canvasAccountId": "10000000000001"
```

## Account / tenant scoping

Every Journey resource is scoped to a Canvas root account. The acting user's `root_account_uuid` is carried in the Canvas JWT (see [authentication](/services/journey/api/authentication.md)) and used to constrain queries. Where an endpoint operates on a sub-account, the `accountId` (a Canvas global ID) is supplied as a path or query parameter and checked against the caller's Canvas permissions — see [permissions](/services/journey/api/permissions.md).

## In JSON responses

REST endpoints return Journey UUIDs as UUID strings, and Canvas IDs as decimal strings (never JSON numbers). GraphQL resolvers accept and return Canvas IDs as the built-in `String` type rather than a custom scalar. See [graphql](/services/journey/api/graphql.md) for the schema reference.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developerdocs.instructure.com/services/journey/api/object_ids.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
