gitroomhq/postiz-app · error · BadBody

TikTok refused to publish your post

Error message

TikTok refused to publish your post

What it means

The synchronous post() wrapper polls postPending status every 20s; if the loop breaks out without reaching a terminal success state it throws 'TikTok refused to publish your post'. This is a polling-exhaustion failure on top of a pending direct post.

Source

Thrown at libraries/nestjs-libraries/src/integrations/social/tiktok.business.provider.ts:781

            id: response.id,
            releaseURL: check.releaseURL,
            postId: String(check.postId),
            status: 'success',
          },
        ];
      }

      // Cap below the 10-minute activity timeout of the old workflows using
      // this method: failing here (non-retryable) is safe, timing the activity
      // out is not - a retried activity would publish the post again.
      if (Date.now() - started > 8 * 60 * 1000) {
        break;
      }

      await timer(20000);
    }

    throw new BadBody(
      'tiktok-business-error-upload',
      JSON.stringify({}),
      Buffer.from(JSON.stringify({})),
      'TikTok refused to publish your post'
    );
  }

  // The trending list has no text search parameter - genre / country / date
  // range are the only filters - so the UI filters the returned list locally.
  @Tool({
    description:
      'Load commercial music library tracks that can be attached to a post via the "music" setting',
    dataSchema: [
      {
        key: 'genre',
        type: 'string',
        description:
          'Genre to filter the tracks by (for example POP, ROCK, ELECTRONIC), leave empty for all genres',

View on GitHub (pinned to 0f1647f749)

Solutions

  1. Query the direct-post status endpoint manually with the share_id to see the real state
  2. Retry the post if the status truly never completed
  3. Reduce media size to speed TikTok processing
Defensive patterns

Strategy: retry

Try / catch

try { await provider.post(...); } catch (e) { if (/refused to publish/.test(e.message)) { const st = await queryDirectPostStatus(shareId); if (st !== 'PUBLISHED') scheduleRetry(post); } throw e; }

Prevention

When it happens

Trigger: The status poll exits its loop (attempt cap or condition break) while the direct post is still pending or stuck, without an explicit FAILED status being observed.

Common situations: TikTok processing stalls, transient status endpoint errors shortening the loop, or slow moderation queues exceeding the poll budget.

Related errors


AI-assisted analysis of gitroomhq/postiz-app@0f1647f749 (2026-08-27). Data as JSON: /api/errors/c6408e7b55f51f91. Report an issue: GitHub.