SOCIAL MEDIA

Reddit - post a comment as a registered app API

Posts a comment through Reddit's documented OAuth2 API using a refresh token, with the caller's own User-Agent. Verifies the token's account against expectedUsername before creating anything, and turns Reddit's HTTP-200 `json.errors` refusals (locked thread, subreddit ban, rate limit) into classified failures. No browser, no captcha, no cookies.

redditoauthcommentsocial
Try it freeGet an API key

How to call it

Send one POST to api.upapi.io/reddit-oauth-post-comment.post with your key in the X-Api-Key header and the parameters below as a JSON body. Each call spends 4 weighted units of your monthly quota. The operation times out after 60 seconds. Responses are not cached; every call runs the operation.

endpoint
POST https://api.upapi.io/reddit-oauth-post-comment.post

Reddit - post a comment as a registered app API reference

Request parameters

text
stringrequired — The comment body, markdown, exactly as it will appear.
thingId
stringrequired — Fullname of what is being replied to: t3_<id> for a post, t1_<id> for another comment. This is the complete address of the parent -- unlike the cookie path, no page URL is needed or accepted.
clientId
stringrequired — Reddit app client id
proxyUrl
string — Optional exit IP. Omit for the worker's default egress -- the OAuth lane has no per-account IP requirement of its own.
userAgent
stringrequired — The User-Agent this request is made with, sent verbatim. REQUIRED and never defaulted -- Reddit's API rules ask for a descriptive UA naming the app.
clientSecret
stringrequired — Reddit app client secret. Never logged.
refreshToken
stringrequired — OAuth2 refresh token for the posting account. Never logged, never returned.
expectedUsername
stringrequired — The account this comment must be attributed to. REQUIRED, unlike on the read operation: a refresh token is opaque, so without this a mis-filed credential posts under an identity nobody chose -- and every gate upstream reasoned about a different account. Compared against the name Reddit itself reports, before anything is created.

Response fields

postedAs
stringrequired — The username Reddit reported for the token, echoed so a caller records who actually spoke rather than who it believed it had asked for.
commentId
stringrequired — The new comment's id, without the t1_ prefix
elapsedMs
integerrequired
permalink
stringrequired — Absolute permalink to the comment. Reddit returns a site-relative path; it is made absolute here so no caller has to know which host to prepend.
createdUtc
numberrequired — Creation time Reddit recorded, epoch seconds UTC
parentThingId
stringrequired — The fullname this comment replies to
commentFullname
stringrequired — The new comment's fullname, e.g. t1_abc123

Example request and response

The example response is generated from this operation’s published output schema — it shows the shape and field names, not values from a recorded call.

json — example request body
{
  "text": "Hello, world",
  "thingId": "example",
  "clientId": "example",
  "userAgent": "example",
  "clientSecret": "example",
  "refreshToken": "example",
  "expectedUsername": "example"
}
json — example response shape
{
  "postedAs": "example",
  "commentId": "example",
  "elapsedMs": 1,
  "permalink": "example",
  "createdUtc": 1,
  "parentThingId": "example",
  "commentFullname": "`t1_abc123`"
}

Code snippets

cURL
curl
curl -X POST https://api.upapi.io/reddit-oauth-post-comment.post \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: YOUR_API_KEY' \
  -d '{ "text": "Hello, world", "thingId": "example", "clientId": "example", "userAgent": "example", "clientSecret": "example", "refreshToken": "example", "expectedUsername": "example" }'
JavaScript
javascript
const response = await fetch('https://api.upapi.io/reddit-oauth-post-comment.post', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY',
  },
  body: JSON.stringify({
  "text": "Hello, world",
  "thingId": "example",
  "clientId": "example",
  "userAgent": "example",
  "clientSecret": "example",
  "refreshToken": "example",
  "expectedUsername": "example"
}),
});

const data = await response.json();
console.log(data);
Python
python
import requests

response = requests.post(
    'https://api.upapi.io/reddit-oauth-post-comment.post',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'YOUR_API_KEY',
    },
    json={
  "text": "Hello, world",
  "thingId": "example",
  "clientId": "example",
  "userAgent": "example",
  "clientSecret": "example",
  "refreshToken": "example",
  "expectedUsername": "example"
},
)

print(response.json())
Go
go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	payload := []byte(`{ "text": "Hello, world", "thingId": "example", "clientId": "example", "userAgent": "example", "clientSecret": "example", "refreshToken": "example", "expectedUsername": "example" }`)

	req, _ := http.NewRequest("POST", "https://api.upapi.io/reddit-oauth-post-comment.post", bytes.NewBuffer(payload))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var result map[string]any
	json.Unmarshal(body, &result)
	fmt.Println(result)
}
PHP
php
<?php

$payload = json_encode([
    'text' => 'Hello, world',
    'thingId' => 'example',
    'clientId' => 'example',
    'userAgent' => 'example',
    'clientSecret' => 'example',
    'refreshToken' => 'example',
    'expectedUsername' => 'example',
]);

$ch = curl_init('https://api.upapi.io/reddit-oauth-post-comment.post');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Content-Type: application/json',
        'x-api-key: YOUR_API_KEY',
    ],
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
var_dump($data);
Ruby
ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.upapi.io/reddit-oauth-post-comment.post')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request['x-api-key'] = 'YOUR_API_KEY'
request.body = { "text": "Hello, world", "thingId": "example", "clientId": "example", "userAgent": "example", "clientSecret": "example", "refreshToken": "example", "expectedUsername": "example" }.to_json

response = http.request(request)
puts JSON.parse(response.body)
Java
java
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

OkHttpClient client = new OkHttpClient();
ObjectMapper mapper = new ObjectMapper();

String json = "{ \"text\": \"Hello, world\", \"thingId\": \"example\", \"clientId\": \"example\", \"userAgent\": \"example\", \"clientSecret\": \"example\", \"refreshToken\": \"example\", \"expectedUsername\": \"example\" }";

RequestBody body = RequestBody.create(json, MediaType.get("application/json"));
Request request = new Request.Builder()
    .url("https://api.upapi.io/reddit-oauth-post-comment.post")
    .post(body)
    .addHeader("Content-Type", "application/json")
    .addHeader("x-api-key", "YOUR_API_KEY")
    .build();

try (Response response = client.newCall(request).execute()) {
    Map<?, ?> result = mapper.readValue(response.body().string(), Map.class);
    System.out.println(result);
}
C#
csharp
using System.Net.Http;
using System.Net.Http.Json;
using System.Text.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var payload = JsonSerializer.Deserialize<object>("{ \"text\": \"Hello, world\", \"thingId\": \"example\", \"clientId\": \"example\", \"userAgent\": \"example\", \"clientSecret\": \"example\", \"refreshToken\": \"example\", \"expectedUsername\": \"example\" }");
var response = await client.PostAsJsonAsync("https://api.upapi.io/reddit-oauth-post-comment.post", payload);

var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result);

Frequently asked questions

How much does the Reddit - post a comment as a registered app API cost per call?

Each call spends 4 weighted units of your plan's monthly quota. Full pricing is at https://upapi.io/pricing.

How do I authenticate to the Reddit - post a comment as a registered app API?

Send your key in the X-Api-Key header. A free guest key is available without creating an account.

Are Reddit - post a comment as a registered app API responses cached?

No — every call runs the operation live; responses are not cached.

More Social Media APIs

Browse every Social Media API →