> ## Documentation Index
> Fetch the complete documentation index at: https://openrouter.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.
# Presets
> Presets endpoints
## Overview
Presets endpoints
### Available Operations
* [List](#list) - List presets
* [Get](#get) - Get a preset
* [CreatePresetsChatCompletions](#createpresetschatcompletions) - Create a preset from a chat-completions request body
* [CreatePresetsMessages](#createpresetsmessages) - Create a preset from a messages request body
* [CreatePresetsResponses](#createpresetsresponses) - Create a preset from a responses request body
* [ListVersions](#listversions) - List versions of a preset
* [GetVersion](#getversion) - Get a specific version of a preset
## List
Lists all presets for the authenticated user, ordered by most recently updated first.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"github.com/OpenRouterTeam/go-sdk/optionalnullable"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.List(ctx, optionalnullable.From(openrouter.Pointer[int64](0)), openrouter.Pointer[int64](50))
if err != nil {
log.Fatal(err)
}
if res != nil {
for {
// handle items
res, err = res.Next()
if err != nil {
// handle error
}
if res == nil {
break
}
}
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| --------- | ---------------------------------------------------------- | -------------------- | --------------------------------------------- | ------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `offset` | optionalnullable.OptionalNullable\[`int64`] | :heavy\_minus\_sign: | Number of records to skip for pagination | 0 |
| `limit` | `*int64` | :heavy\_minus\_sign: | Maximum number of records to return (max 100) | 50 |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*operations.ListPresetsResponse](../../models/operations/listpresetsresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## Get
Retrieves a preset by its slug with its currently designated version inline.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.Get(ctx, "my-preset")
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| --------- | ---------------------------------------------------------- | -------------------- | ------------------------------------- | --------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. | my-preset |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*components.GetPresetResponse](../../models/components/getpresetresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## CreatePresetsChatCompletions
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"github.com/OpenRouterTeam/go-sdk/models/components"
"github.com/OpenRouterTeam/go-sdk/optionalnullable"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.CreatePresetsChatCompletions(ctx, "my-preset", components.ChatRequest{
Messages: []components.ChatMessages{
components.CreateChatMessagesSystem(
components.ChatSystemMessage{
Content: components.CreateChatSystemMessageContentStr(
"You are a helpful assistant.",
),
Role: components.ChatSystemMessageRoleSystem,
},
),
components.CreateChatMessagesUser(
components.ChatUserMessage{
Content: components.CreateChatUserMessageContentStr(
"Hello!",
),
Role: components.ChatUserMessageRoleUser,
},
),
},
Model: openrouter.Pointer("openai/gpt-5.4"),
Temperature: optionalnullable.From(openrouter.Pointer[float64](0.7)),
})
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| ------------- | ----------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
| `chatRequest` | [components.ChatRequest](../../models/components/chatrequest.mdx) | :heavy\_check\_mark: | N/A | \{
"max\_tokens": 150,
"messages": \[
\{
"content": "You are a helpful assistant.",
"role": "system"
},
\{
"content": "What is the capital of France?",
"role": "user"
}
],
"model": "openai/gpt-4",
"temperature": 0.7
} |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.ForbiddenResponseError | 403 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.ConflictResponseError | 409 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## CreatePresetsMessages
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"github.com/OpenRouterTeam/go-sdk/models/components"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.CreatePresetsMessages(ctx, "my-preset", components.MessagesRequest{
MaxTokens: openrouter.Pointer[int64](1024),
Messages: []components.MessagesMessageParam{
components.MessagesMessageParam{
Content: components.CreateMessagesMessageParamContentUnion5Str(
"Hello!",
),
Role: components.MessagesMessageParamRoleUser,
},
},
Model: "anthropic/claude-4.6-sonnet",
System: openrouter.Pointer(components.CreateSystemStr(
"You are a helpful assistant.",
)),
})
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| ----------------- | ------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
| `messagesRequest` | [components.MessagesRequest](../../models/components/messagesrequest.mdx) | :heavy\_check\_mark: | N/A | \{
"max\_tokens": 1024,
"messages": \[
\{
"content": "Hello, how are you?",
"role": "user"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7
} |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.ForbiddenResponseError | 403 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.ConflictResponseError | 409 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## CreatePresetsResponses
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"github.com/OpenRouterTeam/go-sdk/models/components"
"github.com/OpenRouterTeam/go-sdk/optionalnullable"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.CreatePresetsResponses(ctx, "my-preset", components.ResponsesRequest{
Input: openrouter.Pointer(components.CreateInputsUnionStr(
"Hello!",
)),
Instructions: optionalnullable.From(openrouter.Pointer("You are a helpful assistant.")),
Model: openrouter.Pointer("openai/gpt-5.4"),
})
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| ------------------ | --------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
| `responsesRequest` | [components.ResponsesRequest](../../models/components/responsesrequest.mdx) | :heavy\_check\_mark: | N/A | \{
"input": \[
\{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7,
"tools": \[
\{
"description": "Get the current weather in a given location",
"name": "get\_current\_weather",
"parameters": \{
"properties": \{
"location": \{
"type": "string"
}
},
"type": "object"
},
"type": "function"
}
],
"top\_p": 0.9
} |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*components.CreatePresetFromInferenceResponse](../../models/components/createpresetfrominferenceresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.ForbiddenResponseError | 403 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.ConflictResponseError | 409 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## ListVersions
Lists all versions of a preset, ordered by version number ascending (oldest first).
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"github.com/OpenRouterTeam/go-sdk/optionalnullable"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.ListVersions(ctx, "my-preset", optionalnullable.From(openrouter.Pointer[int64](0)), openrouter.Pointer[int64](50))
if err != nil {
log.Fatal(err)
}
if res != nil {
for {
// handle items
res, err = res.Next()
if err != nil {
// handle error
}
if res == nil {
break
}
}
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| --------- | ---------------------------------------------------------- | -------------------- | --------------------------------------------- | --------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. | my-preset |
| `offset` | optionalnullable.OptionalNullable\[`int64`] | :heavy\_minus\_sign: | Number of records to skip for pagination | 0 |
| `limit` | `*int64` | :heavy\_minus\_sign: | Maximum number of records to return (max 100) | 50 |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*operations.ListPresetVersionsResponse](../../models/operations/listpresetversionsresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |
## GetVersion
Retrieves a specific version of a preset by its slug and version number.
### Example Usage
```go theme={null}
package main
import(
"context"
"os"
openrouter "github.com/OpenRouterTeam/go-sdk"
"log"
)
func main() {
ctx := context.Background()
s := openrouter.New(
openrouter.WithSecurity(os.Getenv("OPENROUTER_API_KEY")),
)
res, err := s.Presets.GetVersion(ctx, "my-preset", "1")
if err != nil {
log.Fatal(err)
}
if res != nil {
// handle response
}
}
```
### Parameters
| Parameter | Type | Required | Description | Example |
| --------- | ---------------------------------------------------------- | -------------------- | ------------------------------------- | --------- |
| `ctx` | [context.Context](https://pkg.go.dev/context#Context) | :heavy\_check\_mark: | The context to use for the request. | |
| `slug` | `string` | :heavy\_check\_mark: | URL-safe slug identifying the preset. | my-preset |
| `version` | `string` | :heavy\_check\_mark: | Version number of the preset. | 1 |
| `opts` | \[][operations.Option](../../models/operations/option.mdx) | :heavy\_minus\_sign: | The options for this request. | |
### Response
**[\*components.GetPresetVersionResponse](../../models/components/getpresetversionresponse.mdx), error**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------------- | ----------- | ---------------- |
| sdkerrors.BadRequestResponseError | 400 | application/json |
| sdkerrors.UnauthorizedResponseError | 401 | application/json |
| sdkerrors.NotFoundResponseError | 404 | application/json |
| sdkerrors.InternalServerResponseError | 500 | application/json |
| sdkerrors.APIError | 4XX, 5XX | \*/\* |