POST
/demo
Simulated end-to-end flow (no payment, no real number)
Description
Returns canned responses matching the **exact field shapes** of `/subscribe`, `/sms/send`, and `/sms/receive`. Use it to scaffold and test your integration before subscribing — if your code parses the demo response correctly, it will parse the real one. Free, no auth required, no DB writes.
Authentication
None. Public endpoint, no auth required.
Code samples
Pick your runtime. Every sample is in the page source — switching tabs is for your eyes.
curl https://agentnumber.really.com/demo \
--request POSTinterface DemoResponse {
demo?: true;
simulated_subscribe?: { readonly token: string; readonly number: string; readonly expires_at: string; readonly renewed: boolean };
simulated_send?: { readonly message_id: string; readonly status: string };
simulated_receive?: { readonly messages: Record<string, unknown>[]; readonly count: number };
note?: string;
}
const response = await fetch('https://agentnumber.really.com/demo', {
method: 'POST'
});
if (!response.ok) {
throw new Error(`simulated end-to-end flow (no payment, no real number) failed: ${response.status}`);
}
const data = (await response.json()) as DemoResponse;
requests.post("https://agentnumber.really.com/demo")package main
import (
"fmt"
"io"
"net/http"
)
func main() {
requestUrl := "https://agentnumber.really.com/demo"
req, _ := http.NewRequest("POST", requestUrl, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}fetch('https://agentnumber.really.com/demo', {
method: 'POST'
})import { request } from 'undici'
const { statusCode, body } = await request('https://agentnumber.really.com/demo', {
method: 'POST'
})require 'uri'
require 'net/http'
url = URI("https://agentnumber.really.com/demo")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_bodyimport Foundation
var request = URLRequest(url: URL(string: "https://agentnumber.really.com/demo")!)
request.httpMethod = "POST"
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse,
200..<300 ~= httpResponse.statusCode else {
throw URLError(.badServerResponse)
}
print(String(data: data, encoding: .utf8) ?? "")val client = OkHttpClient()
val request = Request.Builder()
.url("https://agentnumber.really.com/demo")
.post(null)
.build()
val response = client.newCall(request).execute()POST /demo HTTP/1.1
Host: agentnumber.really.com
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://agentnumber.really.com/demo"))
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());#import <Foundation/Foundation.h>
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://agentnumber.really.com/demo"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://agentnumber.really.com/demo");
using var response = await client.SendAsync(request);#include <curl/curl.h>
int main(void) {
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL *curl = curl_easy_init();
if (!curl) {
curl_global_cleanup();
return 1;
}
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_URL, "https://agentnumber.really.com/demo");
CURLcode res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_global_cleanup();
return (int)res;
}import 'package:http/http.dart' as http;
void main() async {
final response = await http.post(Uri.parse('https://agentnumber.really.com/demo'));
print(response.body);
}let client = reqwest::Client::new();
let request = client.post("https://agentnumber.really.com/demo");
let response = request.send().await?;$ch = curl_init("https://agentnumber.really.com/demo");
curl_setopt($ch, CURLOPT_POST, true);
curl_exec($ch);
curl_close($ch);Responses
200 Simulated subscribe + send + receive flow.
{
"demo": true,
"simulated_subscribe": {
"token": "demo-token-not-real",
"number": "+15550000000",
"expires_at": "2027-04-30T18:24:01.000Z",
"renewed": false
},
"simulated_send": {
"message_id": "demo_msg_001",
"status": "queued"
},
"simulated_receive": {
"messages": [
{
"id": 1,
"from_number": "+15555550199",
"to_number": "+15550000000",
"body": "123456",
"message_id": "demo_inbound_001",
"created_at": "2026-04-30T18:24:01.000Z"
}
],
"count": 1
},
"note": "This is a simulated demo. Every field shape matches the real endpoints — use it to scaffold your integration, then subscribe for a real persistent number."
}