Chats
Send Message
Send a new message to a chat.
AuthorizationBearer <token>
You can retrieve your token by visiting the OnlyFansAPI Console and clicking API Keys -> Create API Key.
In: header
Path Parameters
accountstring
The Account ID
chat_idstring
The ID of the chat (usually a fan's OnlyFans User ID)
textstring
The message text content
lockedText?boolean
Whether the text should be shown or hidden
price?integer
Price for paid content (0 or between 3-200). In case this is not zero, mediaFiles is required
mediaFiles?array<string>
Array of media file upload prefixed_ids, or OF media IDs (required if price is not 0). Will be hidden if price
is provided.
previews?array<string>
Array of media file upload prefixed_ids, or OF media IDs (required if price is not 0). Will be shown if price
is provided. All previews
values must also exist in the mediaFiles
array.
Response Body
curl -X POST "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello!"
}'
const body = JSON.stringify({
"text": "Hello!"
})
fetch("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages", {
body
})
package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages"
body := strings.NewReader(`{
"text": "Hello!"
}`)
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
import requests
url = "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages"
body = {
"text": "Hello!"
}
response = requests.request("POST", url, json = body, headers = {
"Content-Type": "application/json"
})
print(response.text)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.time.Duration;
import java.net.http.HttpRequest.BodyPublishers;
var body = BodyPublishers.ofString("""{
"text": "Hello!"
}""");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages"))
.header("Content-Type", "application/json")
.POST(body)
.build();
try {
HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());
System.out.println("Status code: " + response.statusCode());
System.out.println("Response body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
using System;
using System.Net.Http;
using System.Text;
var body = new StringContent("""
{
"text": "Hello!"
}
""", Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.PostAsync("https://app.onlyfansapi.com/api/acct_XXXXXXXXXXXXXXX/chats/458485726/messages", body);
var responseBody = await response.Content.ReadAsStringAsync();
{
"data": {
"responseType": "message",
"text": "<p>Message text</p>",
"giphyId": null,
"lockedText": true,
"isFree": true,
"price": 0,
"isMediaReady": true,
"mediaCount": 0,
"media": [],
"previews": [],
"isTip": false,
"isReportedByMe": false,
"isCouplePeopleMedia": false,
"queueId": 123,
"isMarkdownDisabled": true,
"releaseForms": [],
"fromUser": {
"id": 339543013,
"_view": "s"
},
"isFromQueue": false,
"id": 123,
"isOpened": false,
"isNew": true,
"createdAt": "2025-02-03T23:29:53+00:00",
"changedAt": "2025-02-03T23:29:53+00:00",
"cancelSeconds": 119,
"isLiked": false,
"canPurchase": false,
"canPurchaseReason": "free",
"canReport": false,
"canBePinned": true,
"isPinned": false
},
"_pagination": {
"next_page": "https://app.onlyfansapi.com/api/acct_XXXXXXXXXXX/chats/XXXXXXXXX/messages?limit=10&id=XXXXXXXXX"
},
"_meta": {
"_credits": {
"used": 1,
"balance": 1,
"note": "Always"
},
"_cache": {
"is_cached": false,
"note": "Cache disabled for this endpoint"
},
"_rate_limits": {
"limit_minute": 1000,
"limit_day": 50000,
"remaining_minute": 999,
"remaining_day": 49999
}
}
}
{
"error": "VALIDATION_ERROR",
"message": "The text field is required.",
"description": "The request parameters failed validation.",
"errors": {
"text": [
"The text field is required."
]
},
"_meta": {
"_credits": {
"used": 0,
"balance": 9554,
"note": "Always"
},
"_cache": {
"is_cached": false,
"note": "Cache disabled for this endpoint"
},
"_rate_limits": {
"limit_minute": 1000,
"limit_day": 50000,
"remaining_minute": 999,
"remaining_day": 49999
}
}
}