Sign Up
curl --request POST \
--url https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"password": "<string>",
"name": "<string>",
"username": "<string>",
"avatar": "<string>",
"bio": "<string>",
"location": {
"latitude": 123,
"longitude": 123
},
"birthdate": "<string>",
"metadata": {},
"secureMetadata": {}
}
'import requests
url = "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up"
payload = {
"email": "<string>",
"password": "<string>",
"name": "<string>",
"username": "<string>",
"avatar": "<string>",
"bio": "<string>",
"location": {
"latitude": 123,
"longitude": 123
},
"birthdate": "<string>",
"metadata": {},
"secureMetadata": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
password: '<string>',
name: '<string>',
username: '<string>',
avatar: '<string>',
bio: '<string>',
location: {latitude: 123, longitude: 123},
birthdate: '<string>',
metadata: {},
secureMetadata: {}
})
};
fetch('https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'password' => '<string>',
'name' => '<string>',
'username' => '<string>',
'avatar' => '<string>',
'bio' => '<string>',
'location' => [
'latitude' => 123,
'longitude' => 123
],
'birthdate' => '<string>',
'metadata' => [
],
'secureMetadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"accessToken": "<string>",
"refreshToken": "<string>",
"user": {
"id": "<string>",
"foreignId": {},
"role": "<string>",
"email": {},
"name": {},
"username": {},
"avatar": {},
"bio": {},
"metadata": {},
"reputation": {},
"isVerified": {},
"isActive": {},
"lastActive": {},
"suspensions": [
{}
],
"avatarFile": {},
"bannerFile": {},
"authMethods": [
"<string>"
],
"createdAt": "<string>"
}
}Auth Endpoints
Sign Up
Create a new user account with email and password
POST
/
:projectId
/
api
/
v7
/
auth
/
sign-up
Sign Up
curl --request POST \
--url https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"password": "<string>",
"name": "<string>",
"username": "<string>",
"avatar": "<string>",
"bio": "<string>",
"location": {
"latitude": 123,
"longitude": 123
},
"birthdate": "<string>",
"metadata": {},
"secureMetadata": {}
}
'import requests
url = "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up"
payload = {
"email": "<string>",
"password": "<string>",
"name": "<string>",
"username": "<string>",
"avatar": "<string>",
"bio": "<string>",
"location": {
"latitude": 123,
"longitude": 123
},
"birthdate": "<string>",
"metadata": {},
"secureMetadata": {}
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
password: '<string>',
name: '<string>',
username: '<string>',
avatar: '<string>',
bio: '<string>',
location: {latitude: 123, longitude: 123},
birthdate: '<string>',
metadata: {},
secureMetadata: {}
})
};
fetch('https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => '<string>',
'password' => '<string>',
'name' => '<string>',
'username' => '<string>',
'avatar' => '<string>',
'bio' => '<string>',
'location' => [
'latitude' => 123,
'longitude' => 123
],
'birthdate' => '<string>',
'metadata' => [
],
'secureMetadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up"
payload := strings.NewReader("{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.replyke.com/api/v6/:projectId/api/v7/auth/sign-up")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"<string>\",\n \"password\": \"<string>\",\n \"name\": \"<string>\",\n \"username\": \"<string>\",\n \"avatar\": \"<string>\",\n \"bio\": \"<string>\",\n \"location\": {\n \"latitude\": 123,\n \"longitude\": 123\n },\n \"birthdate\": \"<string>\",\n \"metadata\": {},\n \"secureMetadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"accessToken": "<string>",
"refreshToken": "<string>",
"user": {
"id": "<string>",
"foreignId": {},
"role": "<string>",
"email": {},
"name": {},
"username": {},
"avatar": {},
"bio": {},
"metadata": {},
"reputation": {},
"isVerified": {},
"isActive": {},
"lastActive": {},
"suspensions": [
{}
],
"avatarFile": {},
"bannerFile": {},
"authMethods": [
"<string>"
],
"createdAt": "<string>"
}
}Registers a new user within the specified project. On success, returns an access token, refresh token, and the created user object. The endpoint also accepts optional profile data and image file uploads for the avatar and banner.
Also returned with
Returned when the uploaded file cannot be parsed as an image. Also returned for the banner file with
Returned when
This endpoint accepts
multipart/form-data when uploading avatar or banner
images. Send application/json for text-only registration.Body Parameters
string
required
User’s email address. Must be a valid email format. Automatically lowercased.
string
required
User’s password.
string
Display name.
string
Unique username within the project. Automatically lowercased. Fails with 409
if already taken.
string
URL of the user’s avatar image. Ignored if
avatarFile is also provided.string
Short bio text.
object
string
ISO 8601 datetime string representing the user’s date of birth.
object
Public custom key-value data attached to the user.
object
Private custom key-value data. Not returned to other users.
file
Avatar image file (multipart). Maximum 50 MB. Must be a valid image format.
Requires
avatarFile.options to also be present.file
Banner image file (multipart). Maximum 50 MB. Must be a valid image format.
Requires
bannerFile.options to also be present.Response
On success, returns HTTP201 with:
boolean
true on successful registration.string
Short-lived JWT access token. Expires in 30 minutes.
string
Long-lived JWT refresh token. Expires in 30 days.
object
The created user’s profile.
Show properties
Show properties
string
Unique user ID (UUID).
string | null
External user ID, if set.
string
User role (e.g.,
"visitor").string | null
User’s email address.
string | null
Display name.
string | null
Username.
string | null
Avatar URL.
string | null
Bio text.
object | null
Public custom data.
number | null
Reputation score.
boolean | null
Whether the user is verified.
boolean | null
Whether the account is active.
string | null
ISO timestamp of last activity.
array
Active suspensions on the account.
object | null
Processed avatar file with variants.
object | null
Processed banner file with variants.
string[]
List of auth methods (e.g.,
["password"]).string
ISO timestamp of account creation.
Error Responses
Email Already In Use — 409
Email Already In Use — 409
{
"error": "Email already in use",
"field": "email",
"code": "DUPLICATE_EMAIL"
}
Username Already Taken — 409
Username Already Taken — 409
{
"error": "Username already taken",
"field": "username",
"code": "DUPLICATE_USERNAME"
}
Invalid Body — 400
Invalid Body — 400
{
"error": "...",
"code": "auth/invalid-body"
}
File Too Large — 413
File Too Large — 413
{
"error": "Avatar image exceeds 50MB limit.",
"code": "auth/file-too-large"
}
"Banner image exceeds 50MB limit." for the banner file.Invalid Image — 422
Invalid Image — 422
{
"error": "Avatar file is not a valid image: ...",
"code": "auth/invalid-image"
}
"Banner file is not a valid image: ...".Missing Image Options — 400
Missing Image Options — 400
{
"error": "Image options are required when uploading an avatar. Must include mode property.",
"code": "auth/missing-image-options"
}
avatarFile or bannerFile is uploaded without the corresponding .options field.Validation Failed — 400
Validation Failed — 400
{
"error": "User validation failed",
"code": "auth/validation-failed"
}
See Also
useAuthhook —signUpWithEmailAndPassword- Built-in Auth guide

