Getting Started

Introduction

The NICKL API gives control over the all integration points with your company. NICKL provides all resources via a GraphQL Server and a select few via REST Authentication Endpoints.

To jump in immediately utilizing our API, please obtain an API Token via your company settings page. This can be found @ https://nickl.io/{company_name}/settings/integration

Then head over to our API Explorer to begin utilizing the API.

API Basics

Our API is exposed as an HTTP/1 and HTTP/2 service over SSL. Our GraphQL API is available @ https://api.nickl.io/graphql

Overview

Intro to GraphQL

GraphQL is a query language for APIs. What does this mean for you? Unlike regular SOAP or REST APIs, GraphQL gives you the ultimate flexibility in being able to specify in your API requests specifically what data you need, and get back exactly that.

As a query language, it provides you with a lot of flexibility that most normal APIs will not. Without needing to recreate endpoints, you can provide developers with the same functionality as a bulk endpoint. Your queries will be cleaner and easier to understand by combining multiple queries into one request.

HTTP and TLS

The NICKL API supports HTTP versions 1, 1.1, and 2, although HTTP/2 is preferred.

TLS 1.1 and 1.2 are supported, although TLS protocol 1.2 is recommended.

For more information on TLS support, refer to the SSL Labs report.

Making Requests

There are a few different ways to make requests into the GraphQL API:

  • Using client libraries
  • Sending JSON
  • Sending raw GraphQL queries

Using client libraries

Client libraries will provide you with the fastest and most comprehensive way to access the API and can assist in handling auth, formatting your requests and your responses.

The Apollo client libraries are available for:

Additional clients are available for:

Sending JSON

You can send your GraphQL requests as JSON to our API and have it correctly interpolate variables passed into it. To do so, set the "Content-Type" header to "application/json" and format the query as such:

{
    "query": "publisher(input: $input) {
        name
        isActive
        website
    }",
    "variables": {
        "slug": "merionwest"    
    }
}

Sending raw GraphQL queries

You can send your GraphQL requests as JSON to our API and have it correctly interpolate variables passed into it. To do so, set the "Content-Type" header to "application/json" and format the query as such:

{
  publisher(input: { slug: "merionwest" }) {
    name
    website
    isActive
  }
}

Endpoints

Queries

Content (content)

Content Input

Key
Type
Required
Description
id
ID
Yes
ID of the pieces(s) of content.

Content Output

Key
Type
Description
id
ID
ID of the pieces of content.
createdAt
Date
The time the content was created on
modifiedAt
Date
The last time the content was edited on
isPublished
Boolean
Is the content published for access
metaData
MetaData
Title, author, body, and preview of the content.
publisherContentId
String
Your internal ID for this content piece
canonicalUrl
String
The root URL to your content is uploaded to
tags
[ID]
A list of tags for sorting and content access.
edits
[Edit]
A list of edits made post-creation of the content in the NICKL system.

Get a single piece of content such as a podcast or article

Sample Input
{
  content (
    id: "00000000-0000-0000-0000-000000000000"
  ) {
    id
    createdAt
    modifiedAt
    isPublished
    metaData {
      title
      author
      preview
      headerMedia
      body
    }
    publisherContentId
    canonicalUrl
    tags
    edits
  }
}
Sample Output
{
  id, // The NICKL content id
  createdAt, // The time the content was created on NICKL
  modifiedAt, // The last time the content was edited on NICKL
  isPublished, // Is the content published for access
  metaData {
    title, // Title of the content
    author, // Content creator(s)
    preview, // Brief summary of the content
    headerMedia, // Thumbnail image for the content
    body, // Body of the content
  }
  publisherContentId, // Your ID for the content
  canonicalUrl, // The URL to your uploaded content
  tags, // The list of tags that help users find and have access to content
  edits, // A history of changes to the content
}
Sample Output
{
  id, // The NICKL content id
  createdAt, // The time the content was created on NICKL
  modifiedAt, // The last time the content was edited on NICKL
  isPublished, // Is the content published for access
  metaData {
    title, // Title of the content
    author, // Content creator(s)
    preview, // Brief summary of the content
    headerMedia, // Thumbnail image for the content
    body, // Body of the content
  }
  publisherContentId, // Your ID for the content
  canonicalUrl, // The URL to your uploaded content
  tags, // The list of tags that help users find and have access to content
  edits, // A history of changes to the content
}

Packages (packages)

Packages Input

Key
Type
Required
Description
ids
[ID]
No
ID(s) of the pieces(s) of content. If no ids provided, it will get all of them.

Packages Output

Key
Type
Description
id
ID
ID of the package.
createdAt
Date
The time the package was created.
modifiedAt
Date
The last time the package was edited.
name
String
Name of the package.
description
String
Description of the package.
slug
LowercaseString
Package slug.
isDefault
Boolean
Whether or not the package is the default option.
isPublished
Boolean
Whether the package is available for viewing/sale.
coverPhoto
String
Cover photo for the package.
packageHighlights
[String]
List of package promotional highlights.
price
Int
Package price.
defaultPriceId
String
Default price of the package.
prices
[PackagePrice]
List of current/past prices of the package.
planId
String
Package plan id.
subscriberCount
Int
Number of subscribers to the package.
tags
[ID]
Tags the package grants access to.
hexColor
String
Hex color of the package.
titleHexColor
String
Title hex color of the package.
logo
String
Package logo.
interval
String
Interval unit for charging, ex: 'MONTHLY'.
intervalCount
Int
Interval count for charging.

Get package(s)

Sample Input
{
  packages(ids: ["0c2ca7de-51ef-41bb-ab2e-4251193a1d94"]) {
    id
    createdAt
    modifiedAt
    name
    description
    slug
    isDefault
    isPublished
    coverPhoto
    packageHighlights
    price
    defaultPriceId
    prices {
      id
      amount
      createdAt
      deletedAt
    }
    planId
    subscriberCount
    tags
    hexColor
    titleHexColor
    logo
    interval
    intervalCount
  }
}
Sample Output
{
    "data": {
      "packages": [
        {
          "id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
          "createdAt": "2017-03-04T05:38:53.656Z",
          "modifiedAt": null,
          "name": "basic",
          "description": "Id maiores iure tempore harum occaecati.",
          "slug": "basic",
          "isDefault": false,
          "isPublished": true,
          "coverPhoto": null,
          "packageHighlights": [
            "Possimus qui voluptatem deserunt alias eaque dignissimos."
          ],
          "price": 1,
          "defaultPriceId": "015c4656-30ca-4b66-a3d0-3999a556432f",
          "prices": [
            {
              "id": "015c4656-30ca-4b66-a3d0-3999a556432f",
              "amount": 1,
              "createdAt": "2017-06-19T10:08:03.467Z",
              "deletedAt": null
            }
          ],
          "planId": "plan_EO0F6jEWKPda26",
          "subscriberCount": null,
          "tags": [
            "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
          ],
          "hexColor": null,
          "titleHexColor": null,
          "logo": null,
          "interval": "month",
          "intervalCount": 1
      }
    ]
  },
    "extensions": {}
  }

Tags (tags)

Tags Input

Key
Type
Required
Description
ids
[ID]
No
ID(s) of the tag(s). If no ids provided, it will get all of them.

Tags Output

Key
Type
Description
id
ID
ID of the tag.
publisherId
ID
The tag owner's id.
createdAt
Date
Created date for the tag.
modifiedAt
Date
The last time the tag was modified.
name
String
The unique name of the tag.

Get tag(s)

Sample Input
{
	tags(ids: ["0c2ca7de-51ef-41bb-ab2e-4251193a1d94"]) {
		id
		publisherId
		createdAt
		modifiedAt
		name
	}
}
Sample Output
{
    "data": {
      "tags": [
        {
          "id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
		  "publisherId": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
          "createdAt": "2017-03-04T05:38:53.656Z",
          "modifiedAt": null,
          "name": "basic",
      }
    ]
  },
    "extensions": {}
  }

User (user)

User Input

Key
Type
Required
Description
userId
ID
No
User's id.
username
String
No
User's username.
email
String
No
User's email.

User Output

Key
Type
Description
id
ID
ID of the user.
name
String
The user's name.
firstName
String
The user's first name.
description
String
Optional description about the user.
website
String
Optional user's website.
username
String
The user's unique name on NICKL.
email
String
The user's unique email on NICKL.
createdAt
Date
The user's signup date.
lastSeen
Date
The last time the user logged into the website.
isOnline
Boolean
Bool for if the user is currently on the website.
timezone
Int
Timezone offset.

Get user

Sample Input
{
	user(input: {
		userId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
	}) {
		id
		name
		firstName
		description
		website
		username
		email
		createdAt
		lastSeen
		isOnline
		timezone
	}
}
Sample Output
{
	"data": {
		"user": {
			"id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
			"name": "John Smith",
			"firstName": "John",
			"description": "Id maiores iure tempore harum occaecati.",
			"website": "www.nickl.io",
			"username": "JohnSmith302",
			"email": "JohnSmith@nickl.io",
			"createdAt": "2017-03-04T05:38:53.656Z",
			"lastSeen": "2017-03-04T05:38:53.656Z",
			"isOnline": false,
			"timezone": -240
      }
	},
	"extensions": {}
}

User Has Content Access (userHasContentAccess)

User Has Content Access Input

Key
Type
Required
Description
userId
ID
No
Id of the user. If no id provided, it will check for an anonymous user.
contentId
ID
Yes
Id of the pieces of content.

User Has Content Access Output

Key
Type
Description
userHasContentAccess
Boolean
Whether the user has access to the content.

Get user's access.

Sample Input
{
	userHasContentAccess(input: {
		userId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
		contentId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
	})
}
Sample Output
{
	"data": {
		"userHasContentAccess": true
	},
    "extensions": {}
  }

User Payments (userPayments)

User Payments Input

Key
Type
Required
Description
userId
ID
Yes
ID of the user.

User Payments Output

Key
Type
Description
id
ID
Id of the payment.
userId
ID
Id of the user.
amount
Float
Payment total.
cart
ID
Purchases and promotions.
paymentDate
ID
Date of the payment.
paymentMethod
String
The method of payment.
transactionType
String
The transaction's type.
isRecurring
Boolean
Whether this payment was triggered by a subscription or a first time / one off payment.

Get package(s)

Sample Input
{
	userPayments(userId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94") {
		id
		userId
		amount
		cart {
			content {
				id
				amount
				retail
			}
			packages {
				id
				amount
				retail
			}
			promo {
				id
				amountOff
				created
				publisherId
				redemptions
				description
				percentOff
				validUntil
			}
			total
		}
		paymentDate
		paymentMethod
		transactionType
		isRecurring
	}
}
Sample Output
{
	"data": {
		  "tags": [
			{
				"id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
				"userId": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
				"amount": 10,
				"cart": {
					"content": [],
					"packages": [
						{
						"id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
						"amount": 10,
						"retail": 10
						}
					],
				"promo": null,
				"total": 10
				}
				"paymentDate": "2017-03-04T05:38:53.656Z",
				"paymentMethod": "STRIPE",
				"transactionType": "SALE",
				"isRecurring": true
			}
		]
	},
    "extensions": {}
  }

Mutations

Edit Content (editContent)

Edit Content Input

Key
Type
Required
Description
contentId
ID
Yes
The Nickl content id.
canonicalUrl
String
Yes
Your URL to the content.
title
String
No
Title of the content.
author
String
No
Author(s) of the content.
body
String
No
Body of the content.
preview
String
No
Brief description to advertise the content.

Edit Content Output

Key
Type
Description
id
ID
ID of the pieces of content.
createdAt
Date
The time the content was created on
modifiedAt
Date
The last time the content was edited on
isPublished
Boolean
Is the content published for access
metaData
MetaData
Title, author, body, and preview of the content.
publisherContentId
String
Your internal ID for this content piece
canonicalUrl
String
The root URL to your content is uploaded to
tags
[ID]
A list of tags for sorting and content access.
edits
[Edit]
A list of edits made post-creation of the content in the NICKL system.

Edit content.

Sample Input
{
  editContent (input: {
	contentId: "f37eb440-d7f7-4975-b615-762190807b05"
	metaData: {
		title: "Superbowl Results 2"
	}
  }) {
	id
	createdAt
	modifiedAt
	isPublished
	metaData {
	  title
	  author
	  preview
	  headerMedia
	  body
	}
	publisherContentId
	canonicalUrl
	tags
	edits
  }
}
Sample Output
{
    "data": {
      "editContent": [
        {
          "id": "f37eb440-d7f7-4975-b615-762190807b05",
          "createdAt": "2017-03-04T05:38:53.656Z",
          "modifiedAt": null,
          "isPublished": true,
          "metaData": {
			"title": "Superbowl Results 2",
			"author": "John Smith",
			"body": "Possimus qui voluptatem deserunt alias eaque dignissimos.",
			"preview": "Id maiores iure tempore harum occaecati."
		  },
          "publisherContentId": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
          "canonicalUrl": "www.nickl.io",
          "tags": ["6989b5c5-9f69-4ba1-b5a1-f8bf48d09602", "f6a89739-16ac-4af5-bbb6-4fed5024651a"],
		  "edits": null
      }
    ]
  },
    "extensions": {}
  }

Publish Content (publishContent)

Publish Content Input

Key
Type
Required
Description
publisherContentId
ID
Yes
Your id for the content to identify/find it later.
canonicalUrl
String
Yes
Your URL to the content.
isPublished
Boolean
Yes
Whether or not the content should be published for viewing.
tags
[ID]
No
The list of tags that help users find and have access to content.
title
String
Yes
Title of the content.
author
String
Yes
Author(s) of the content.
body
String
Yes
Body of the content.
preview
String
No
Brief description to advertise the content.

Publish Content Output

Key
Type
Description
id
ID
ID of the pieces of content.
createdAt
Date
The time the content was created on
modifiedAt
Date
The last time the content was edited on
isPublished
Boolean
Is the content published for access
metaData
MetaData
Title, author, body, and preview of the content.
publisherContentId
String
Your internal ID for this content piece
canonicalUrl
String
The root URL to your content is uploaded to
tags
[ID]
A list of tags for sorting and content access.
edits
[Edit]
A list of edits made post-creation of the content in the NICKL system.

Publish content.

Sample Input
{
  publishContent(input: {
	publisherContentId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
	canonicalUrl: "www.nickl.io"
	isPublished: true
	tags: ["Sports", "News"]
	metaData: {
		title: "Superbowl Results"
		author: "John Smith"
		body: "Possimus qui voluptatem deserunt alias eaque dignissimos."
		preview: "Id maiores iure tempore harum occaecati."
	}
  }) {
	id
	createdAt
	modifiedAt
	isPublished
	metaData {
	  title
	  author
	  preview
	  headerMedia
	  body
	}
	publisherContentId
	canonicalUrl
	tags
	edits
  }
}
Sample Output
{
    "data": {
      "publishContent": [
        {
          "id": "f37eb440-d7f7-4975-b615-762190807b05",
          "createdAt": "2017-03-04T05:38:53.656Z",
          "modifiedAt": null,
          "isPublished": true,
          "metaData": {
			"title": "Superbowl Results",
			"author": "John Smith",
			"body": "Possimus qui voluptatem deserunt alias eaque dignissimos.",
			"preview": "Id maiores iure tempore harum occaecati."
		  },
          "publisherContentId": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
          "canonicalUrl": "www.nickl.io",
          "tags": ["6989b5c5-9f69-4ba1-b5a1-f8bf48d09602", "f6a89739-16ac-4af5-bbb6-4fed5024651a"],
		  "edits": null
      }
    ]
  },
    "extensions": {}
  }

Remove Subscription (removeSubscription)

Remove Subscription Input

Key
Type
Required
Description
packageId
ID
Yes
The Nickl package id.
userId
ID
Yes
The Nickl user being unsubscribed.

Remove Subscription Output

Key
Type
Description
id
ID
ID of the user.
name
String
The user's name.
firstName
String
The user's first name.
description
String
Optional description about the user.
website
String
Optional user's website.
username
String
The user's unique name on NICKL.
email
String
The user's unique email on NICKL.
createdAt
Date
The user's signup date.
lastSeen
Date
The last time the user logged into the website.
isOnline
Boolean
Bool for if the user is currently on the website.
timezone
Int
Timezone offset.

Unsubsribe user.

Sample Input
{
  removeSubscription (input: {
	  packageId: "bbdbc367-2f8e-4283-825c-8de8822d8e45"
	  userId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
	  paymentMethod: STRIPE
  }) {
	id
	name
	firstName
	description
	website
	username
	email
	createdAt
	lastSeen
	isOnline
	timezone
	}
}
Sample Output
{
    "data": {
      "removeSubscription": {
		"id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
		"name": "John Smith",
		"firstName": "John",
		"description": "Id maiores iure tempore harum occaecati.",
		"website": "www.nickl.io",
		"username": "JohnSmith302",
		"email": "JohnSmith@nickl.io",
		"createdAt": "2017-03-04T05:38:53.656Z",
		"lastSeen": "2017-03-04T05:38:53.656Z",
		"isOnline": false,
		"timezone": -240
      }
  },
    "extensions": {}
  }

Setup Subscription (setupSubscription)

Setup Subscription Input

Key
Type
Required
Description
packageId
ID
Yes
The Nickl package id.
userId
ID
Yes
The Nickl user being subscribed.
promoCode
ID
No
Promo code to be used.
paymentMethod
ID
Yes
The type of payment being made.
useRewards
ID
No
Whether or not NICKL rewards balance should be used for the transaction.

Setup Subscription Output

Key
Type
Description
id
ID
ID of the user.
name
String
The user's name.
firstName
String
The user's first name.
description
String
Optional description about the user.
website
String
Optional user's website.
username
String
The user's unique name on NICKL.
email
String
The user's unique email on NICKL.
createdAt
Date
The user's signup date.
lastSeen
Date
The last time the user logged into the website.
isOnline
Boolean
Bool for if the user is currently on the website.
timezone
Int
Timezone offset.

Subscribe user.

Sample Input
{
  setupSubscription (input: {
	  packageId: "bbdbc367-2f8e-4283-825c-8de8822d8e45"
	  userId: "0c2ca7de-51ef-41bb-ab2e-4251193a1d94"
	  paymentMethod: STRIPE
  }) {
	id
	name
	firstName
	description
	website
	username
	email
	createdAt
	lastSeen
	isOnline
	timezone
	}
}
Sample Output
{
    "data": {
      "setupSubscription": {
		"id": "0c2ca7de-51ef-41bb-ab2e-4251193a1d94",
		"name": "John Smith",
		"firstName": "John",
		"description": "Id maiores iure tempore harum occaecati.",
		"website": "www.nickl.io",
		"username": "JohnSmith302",
		"email": "JohnSmith@nickl.io",
		"createdAt": "2017-03-04T05:38:53.656Z",
		"lastSeen": "2017-03-04T05:38:53.656Z",
		"isOnline": false,
		"timezone": -240
      }
  },
    "extensions": {}
  }

Authentication

Request a login

Endpoint
POST /registration

Request a new login for an user to get a token.

Request Parameters

Key
Required
Description
email
Yes
The user email.
tokenName
Yes
The desired name for the token. It will be displayed on the user account details.

Response Parameters

Key
Description
token
The token used to verify the user accepted the login request.
securityCode
The code the user is going to receive on the email. Must be displayed to the user so he can verify the request is the correct.
Example request:
curl -X POST "https://nickl.io/api/registration" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "user@mail.com",
  "tokenName": "Your Client App Name"
}'

Example response:

{
  "token": "T1dmvPu36nmyYisXAs7IRzcR",
  "securityCode": "Practical Saola"
}

Verify login

Endpoint
GET /registration/verify?email&token

Verify the user accepted the login request and get a authentication token. The user email address and the token received after requesting the login must be added to the URL as a query string with the names email and token.

Response Parameters

Key
Description
token
The user authentication token you can use as described in API Basics - Authentication.
Example request:
curl "https://nickl.io/api/registration/verify?email=user@mail.com&token=T1dmvPu36nmyYisXAs7IRzcR"

Example response:

{
  "token": "sGkHhSH98wtJB0lyODZJ2bRe"
}

OAuth2

OAuth2 lets your application request authorization to private details (including entitlements) in a user's NICKL account. When using OAuth Apps, all actions are performed as the user who granted access to the OAuth App.

You'll need to register your app before getting started. For registration, please contact us.

You can reference an OAuth2 example application here and see the full OIDC configuration for NICKL here.

Authorization

Your app should redirect users to the following URL:

https://oauth.nickl.io/auth

You will pass the following values as query parameters.

Key
Type
Required
Description
client_id
String
Yes
ID of your application.
secret
String
Yes
The unique secret for your application.
redirect_uri
String
Yes
URL to redirect back.
state
String
No
Random string to be passed back upon completion. It is used to protect against CSRF attacks.

If the user grants your request, we redirect back to your site with a code parameter and with a state parameter if you provided one in previous step.

The process should be aborted if the states don't match.

Example request url:
https://oauth.nickl.io/auth?client_id=example_id&scope=openid&response_type=code&redirect_uri=https://example.com

Example successful redirect url:

https://example.com/oauth/callback?code=jMIukZ1DBCKXHje3X14BCkU0&state=t2eh4KHwNyGbo5g65VNvoFhl

Exchanging code for an access token

If all goes well, exchange the authorization code for an access token using the following API.

POST https://oauth.nickl.io/token

You will pass the following values to request body in the form of application/x-www-form-urlencoded. Note, the client_id and secret can alternatively be sent as a basic auth header.

Key
Type
Required
Description
client_id
ID
Yes
ID of your application.
client_secret
String
Yes
Secret of your application.
code
String
Yes
The code you received.

You'll receive a JSON response containing an access_token.

Example access token exchange request.
POST https://oauth.nickl.io/token
client_id=oac_s4cllbR9Ao8307IDSkluOQBS&client_secret=EOBPvZuBYAtb3SbYo8H1iWFP&code=jMIukZ1DBCKXHje3X14BCkU0

Example successful (200) response:

{
	access_token: 'Epa9BZZVSBk5qT6~r0q~1ki5t9DPteTYUe39Q0LR_PD',
	expires_in: 3600,
	id_token: 'eyJhbGciOi.eyJzdWIiOiI1MTUwMj.YyYi02OTdiL',
	scope: 'profile openid',
	token_type: 'Bearer'
}

Using access token

The access token allows you to make requests to the API on a behalf of a user, by providing the token in the Authorization header.

Errors

Generic Errors

These error codes are consistent for all endpoints.

Forbidden

You're not authorized to use the endpoint. This usually happens due to missing an user token.

Note: Similar to the HTTP 403 Forbidden error.
{
  "error": {
    "code": "forbidden",
    "message": "Not authorized"
  }
}

Rate Limited

You exceeded the maximum alloted requests.

The limit of request is per endpoint basis so you could continue using another endpoints even if some of them give you this error.

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded",
  }
}

Bad Request

There was an error with the request, the error.message would contain information about the issue.

{
  "error": {
    "code": "bad_request",
    "message": "An english description of the error that just occurred",
  }
}

Internal Server Error

This errors is similar to the HTTP 500 Internal Server Error error code.

{
  "error": {
    "code": "internal_server_error",
    "message": "An unexpected internal error occurred"
  }
}

Resource Not Found

The endpoint you're requesting does not handle the method you defined. The error message will contain the methods the endpoint responds to.

{
  "error": {
    "code": "method_unknown",
    "message": "This endpoint only responds to METHOD"
  }
}

Method Unknown

The endpoint you're requesting does not handle the method you defined. The error message will contain the methods the endpoint responds to.

{
  "error": {
    "code": "method_unknown",
    "message": "This endpoint only responds to METHOD"
  }
}

OAuth2 Errors

These errors could occur when using any OAuth2 related endpoint.

Client Not Found

The OAuth2 client ID could not be found or doesn't exists.

{
  "error": {
    "code": "not_found",
    "message": "OAuth client doesn't not found: CLIENT_ID"
  }
}