---
title: "Register a Custom OAuth App"
method: POST
path: "/v1/oauth-apps"
tags: ["oauth-apps"]
---

# Register a Custom OAuth App

`POST /v1/oauth-apps`

## Request

- Base URL: `https://api.typenode.ai`
- URL: `https://api.typenode.ai/v1/oauth-apps`
- Auth: HTTP bearer

## Request body

- RegisterCustomOAuthApp
  - `additional_body_params` object
  - `allowed_scopes` string[], required
  - `already_revoked_answer` object
    - `error` string, required
    - `status` integer, required
  - `auth_params` object
  - `authorize_url` string, required
  - `client_id` string, required
  - `granted_scope_separator` ' ' | ','
  - `id` string, required
  - `name` string, required
  - `pkce_required` boolean
  - `revocation_url` string
  - `scope_separator` ' ' | ','
  - `token_content_type` 'json' | 'form'
  - `token_endpoint_auth_method` 'basic' | 'header' | 'body' | 'none'
  - `token_url` string, required

## Response `200`

The registration outcome — visit open_url to enter the client secret, or already_registered.

- union
  - object
    - `oauth_app_id` string, required
    - `open_url` string
    - `status` 'secret_required', required
  - object
    - `oauth_app_id` string, required
    - `status` 'already_registered', required

## Other responses

- `401`: Authentication required.
- `default`: An error occurred (RFC 9457 problem+json).

## Changes

- **2026-10-20** `9b943024aa98`: 1 info
  - added the new optional request property `already_revoked_answer`

[Operation history](https://skmtc.dev/typenode/apis/typenode-management-api/changes/v1/oauth-apps/post.md)

---

[API](https://skmtc.dev/typenode/apis/typenode-management-api.md) · [All operations](https://skmtc.dev/typenode/apis/typenode-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/typenode/apis/typenode-management-api/revisions/9b943024aa98?raw)
