> 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/graphql.md).

# GraphQL

Journey exposes a GraphQL API alongside its REST surface. Both APIs are served by the same service, share the same authentication, and read from the same domain. See [rest\_api.md](/services/journey/api/rest_api.md) for when to pick one over the other.

{% hint style="warning" %}
**Experimental APIs.** Some areas of the API — currently the **Programs** surface (`programs`, `program`, `enrolledPrograms`, and the program create/update/delete/ duplicate mutations) — are experimental. Their shape and behavior may change without notice and deprecation guarantees. These operations are flagged `[Experimental]` in their schema descriptions ([`schema.gql`](https://github.com/instructure/api-docu-portal/tree/prod/gitbook/services/journey/schema.gql)).
{% endhint %}

## Endpoint

```http
POST https://journey-server-prod.us-east-1.core.inseng.io/graphql
```

Authentication uses the same Canvas JWT as REST — see [authentication.md](/services/journey/api/authentication.md). The GraphQL sandbox / playground and schema introspection are **enabled in non-production environments only**.

## When to use GraphQL vs REST

* **GraphQL** hosts list queries and relational reads where you want to pick fields and traverse relationships in one round trip. List queries use the cursor convention in [pagination.md](/services/journey/api/pagination.md).
* **REST** hosts single-resource lookups and integrations that need standard HTTP semantics. See [rest\_api.md](/services/journey/api/rest_api.md).

Most write operations are GraphQL mutations; reach for REST when you need HTTP semantics or are calling from a non-GraphQL client.

## Example query

```graphql
query MySkills {
  skills(completedOnly: false) {
    id
    name
    proficiencyLevel
    experiences { id title }
  }
}
```

```json
{
  "data": {
    "skills": [
      {
        "id": "8f3d2c10-2b9e-4f8a-9c41-1b6d4a2e5f01",
        "name": "TypeScript",
        "proficiencyLevel": "proficient",
        "experiences": [{ "id": "c2a1...", "title": "Refactored billing" }]
      }
    ]
  }
}
```

## Schema reference

To inspect the schema, point a GraphQL client at the running endpoint in a non-production environment and use introspection.

## Schema

The complete GraphQL schema (SDL) is published as [`schema.gql`](https://github.com/instructure/api-docu-portal/tree/prod/gitbook/services/journey/schema.gql). It is generated from the code-first resolvers with `pnpm schema:graphql` and regenerated on each release. Use it to explore available types, queries, and mutations, or to feed schema-aware tooling (codegen, linters, client generators).

## Errors

GraphQL operations typically return `200 OK`; failures appear in an `errors` array. Malformed requests (for example parse/validation failures) may return a non-200 status code. See [errors.md](/services/journey/api/errors.md) for examples and the full 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/graphql.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.
