@bartv @RomanDavydchuk @jan @jake @Jon @ihortom @MutedJam still no update regarding this?
Please don’t ping staff like that.
TLDR
After a week grinding, it think its a dead end. Meaning even if you get the auth flow and token management working, you will not be able to post video publically to tiktok using APIs as it’s banned by TikTok.
My experiment
I created my local backend to proxy the auth and token request flow, and also added video upload function. My goal was to expose locally this endpoint so that n8n http node can simply use it to do all the work. Everything worked, and I am tyring to upload video now. Then i found out that, in order to post videos publically into an account, you will need to submit your API client to tiktok for audit. And they explicitly clamined that:
“API Clients must not be limited to test applications and should be intended for a wide audience, not limited to internal groups/private use.
Not acceptable: A utility tool to help upload contents to the account(s) you or your team manages.
”
So, n8n flow for auto video posting to own account is not allowed. So I expect in the furture even if n8n provided the official tiktok node, it will be limited to “read” rather than “write” actions. (eg. you can only getting user infos, metadata etc)
So sad, so bad, and I dont understand why tiktok does this as other platforms do not.
I got the same message as you, however I disagree with your last statement: “So I expect in the furture even if n8n provided the official tiktok node, it will be limited to “read” rather than “write” actions.”
On the contrary, if n8n develops an official TikTok node that would completely solve our problem! TikTok wants developers to make apps for a wide audience, not just internal use.
n8n needs to make a public node and submit it for Tiktok review. The problem is n8n, not TikTok.
I have bypassed the issue by using a refresh token. The problem is that TikTok does not fully comply with the OAuth2 specifications, which complicates the process of obtaining the authorization code, the access token, and the refresh token. To work around this, you need to create an HTTP node that uses the refresh token to retrieve a new access token for API calls. This approach effectively bypasses the issue with TikTok.
I managed to make TikTok OAuth2 work in n8n with a small workaround.
The problem was the client_key not being accepted when placed in the Client ID field of the OAuth2 credential.
What worked for me:
-
Set Client ID = 0
-
Add the client_key manually as a query parameter in Auth URI Query Parameters →
client_key=YOUR_CLIENT_KEY
-
Use Client Secret normally with your app’s client secret.
-
Add the scopes separated by commas (no spaces):
user.info.basic,video.upload,video.publish
-
Use the new OAuth2 endpoints from TikTok docs:
-
Authorization URL: https://www.tiktok.com/v2/auth/authorize/
-
Access Token URL: https://open.tiktokapis.com/v2/oauth/token/
-
-
Redirect URI: use the one generated by n8n (for me it was https:///rest/oauth2-credential/callback).
With this setup, I was able to complete the OAuth login and get valid tokens in sandbox mode ![]()
Hope this helps!
This solved my issue
I ran into the same issue where TikTok’s OAuth2 URLs expect client_key instead of the commonly used client_id.
I initially solved this by manually adding client_key as a query parameter inside the OAuth2 credential configuration.
However, I found that the Access Token URL also requires client_key which made the built-in OAuth2 credential unusable for TikTok.
So instead, I implemented a workaround without relying on n8n’s native OAuth2 credential, and it works perfectly:
My Working Solution
1. Create a dedicated workflow for TikTok OAuth authorization
This workflow is triggered by a Webhook node.
I used the Webhook URL as the OAuth redirect_uri inside my TikTok Developer App.
2. Build the TikTok Authorization URL manually
https://www.tiktok.com/v2/auth/authorize/?client_key=YOUR_CLIENT_KEY&scope=COMMA_SEPARATED_SCOPE&response_type=code&redirect_uri=YOUR_WEBHOOK_URL
When I open this URL in the browser and approve the permissions, TikTok redirects back to my webhook with a code parameter.
3. Extract the authorization code inside the workflow
Once the webhook receives the request, I parse out the code from the query parameters.
4. Exchange the code for Access + Refresh tokens
I send a simple HTTP POST request to TikTok’s token endpoint:
https://open.tiktokapis.com/v2/oauth/token/
with form-urlencoded parameters (including client_key, client_secret, code, and grant_type=authorization_code).
5. Store the tokens
After receiving the Access and Refresh tokens, I save them in a Data Table.
This allows me to reuse the tokens from any other workflow.
Whenever I need to re-authorize, I open the same authorization URL again and approve the permissions.
Result
This approach completely avoids TikTok’s unusual OAuth behaviour inside n8n’s generic OAuth2 credential and gives me a clean, reliable authorization flow.
The redirect_uri is also needed as a parameter
You can use your n8n WEBHOOK URL as redirect_uri
Yes, and it is what I did. Your message was very precious help. Thank you. My comment was about the required parameters at step 4. My first try didn’t work because the redirect_uri is also one of the parameters to send when exchanging the token : with form-urlencoded parameters (including client_key, client_secret, code, and grant_type=authorization_cod, and redirect_uri).
Did anyone try PM3K for the posting side of this?
Looks like this thread solves the OAuth part, but not the full TikTok publishing flow in low-code tools.
I tried PM3K and it seems to work well. So far it’s the cheapest way I’ve found to get production TikTok posting from n8n.
If anyone knows another option, I’d be interested.
Hi — *Bypassed TikTok API entirely*
In case anyone gets away completely from traditional lines, OR from paying upload-post or Blotato, I’m using Playwright browser automation. No API approval, no OAuth dance, no sandbox mode, no third-party posting service.
Vibe-coded it, download Playright library; setup a couple scripts in a local folder ; have n8n node execute script.
The idea: Playwright launches a real Chrome instance with a saved logged-in TikTok profile, navigates online to my TikTok Studio, attaches the video file, types the caption, and clicks Post. TikTok sees a normal browser session — because it is one. It’s basically 4 buttons. The tiktok vid (genAI earlier in flow) and the description (has tags in it)
The n8n side is two nodes:
Code node (“TikTok Payload”) — pulls the caption from your content workflow and the video file path, writes them to a small tiktok-payload.json on local.
Execute Command node (“Playwright TikTok”) — runs node tiktok-post.js, which is a Playwright script that reads that payload, opens Chrome with your saved profile, and does the actual posting. Uses rebrowser-playwright instead of vanilla Playwright for better bot detection handling on TikTok.
One-time setup is just logging into TikTok manually in the Chrome profile once — after that it’s fully headless and automated.
Been running this reliably as part of a pipeline that auto-posts to 6 socials. Happy to share more detail if useful.



