Skip to main content
POST
/
v2
/
users
Create a User
curl --request POST \
  --url https://api.dots.dev/api/v2/users \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "first_name": "Bob",
  "last_name": "Loblaw",
  "email": "bob@bobloblaw.com",
  "country_code": "1",
  "phone_number": "4154332334",
  "metadata": {
    "internal_id": "user_121344"
  }
}
'
import requests

url = "https://api.dots.dev/api/v2/users"

payload = {
"first_name": "Bob",
"last_name": "Loblaw",
"email": "bob@bobloblaw.com",
"country_code": "1",
"phone_number": "4154332334",
"metadata": { "internal_id": "user_121344" }
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Bob',
last_name: 'Loblaw',
email: 'bob@bobloblaw.com',
country_code: '1',
phone_number: '4154332334',
metadata: {internal_id: 'user_121344'}
})
};

fetch('https://api.dots.dev/api/v2/users', 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.dots.dev/api/v2/users",
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([
'first_name' => 'Bob',
'last_name' => 'Loblaw',
'email' => 'bob@bobloblaw.com',
'country_code' => '1',
'phone_number' => '4154332334',
'metadata' => [
'internal_id' => 'user_121344'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"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.dots.dev/api/v2/users"

payload := strings.NewReader("{\n \"first_name\": \"Bob\",\n \"last_name\": \"Loblaw\",\n \"email\": \"bob@bobloblaw.com\",\n \"country_code\": \"1\",\n \"phone_number\": \"4154332334\",\n \"metadata\": {\n \"internal_id\": \"user_121344\"\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Basic <encoded-value>")
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.dots.dev/api/v2/users")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"Bob\",\n \"last_name\": \"Loblaw\",\n \"email\": \"bob@bobloblaw.com\",\n \"country_code\": \"1\",\n \"phone_number\": \"4154332334\",\n \"metadata\": {\n \"internal_id\": \"user_121344\"\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.dots.dev/api/v2/users")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"Bob\",\n \"last_name\": \"Loblaw\",\n \"email\": \"bob@bobloblaw.com\",\n \"country_code\": \"1\",\n \"phone_number\": \"4154332334\",\n \"metadata\": {\n \"internal_id\": \"user_121344\"\n }\n}"

response = http.request(request)
puts response.read_body
{
  "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "first_name": "<string>",
  "last_name": "<string>",
  "email": "jsmith@example.com",
  "phone_number": {
    "country_code": "<string>",
    "phone_number": "<string>"
  },
  "default_payout_method_details": {
    "id": "<string>",
    "description": "<string>",
    "mask": "<string>",
    "email": "<string>",
    "phone_number": "<string>",
    "cash_tag": "<string>",
    "country": "<string>",
    "currency": "<string>",
    "rtp_enabled": true,
    "meta": "<unknown>"
  },
  "wallet": {
    "amount": 123,
    "withdrawable_amount": 123,
    "credit_balance": 123
  },
  "compliance": {
    "tax_id_collected": true,
    "address_collected": true,
    "date_of_birth_collected": true,
    "must_collect_1099": true,
    "1099_collected": true,
    "w8_ben_collected": true,
    "flagged": true,
    "id_verified": true,
    "has_criminal_activity": true,
    "background_check": {
      "updated": "2023-11-07T05:31:56Z"
    },
    "w9": {
      "business_name": "<string>",
      "tax_id_collected": true,
      "address_collected": true
    },
    "flags": {
      "ofac": true,
      "payout_method": true,
      "payout_method_cycle": true,
      "name_mismatch": true
    }
  },
  "metadata": "<string>",
  "payout_options_exclude_list": []
}

Authorizations

Authorization
string
header
required

Basic authentication header of the form Basic <encoded-value>, where <encoded-value> is the base64-encoded string username:password.

Body

application/json
first_name
string
required

The user's first name.

last_name
string
required

The user's last name.

email
string<email>
required

The user's email address.

country_code
string
required

The user's phone number country code. e.g. "1"

phone_number
string
required

The user's phone number. e.g. "4157223331".

username
string

Username to assign the user.

Required string length: 1 - 50
date_of_birth
string<date>

User's date of birth.

1099_adjustment_2024
integer

Income paid outside of the Dots platform in 2024.

Required range: x >= 1
metadata

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

payout_options_exclude_list
enum<string>[]

List of payout rails to hide from this user in the Dots iframe and block on payout creation. Empty or omitted means no restriction.

Available options:
ach,
paypal,
venmo,
cash_app,
intl_bank,
airtm,
payoneer,
crypto

Response

200 - application/json

OK

The created user object.

id
string<uuid>
first_name
string
last_name
string
email
string<email>
phone_number
object
default_payout_method
enum<string>
Available options:
ach,
paypal,
venmo,
cash_app,
intl_bank,
airtm,
payoneer,
crypto
default_payout_method_details
object
wallet
object
status
enum<string>
Available options:
verified,
unverified,
disabled,
in_review
compliance
object
metadata

Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.

payout_options_exclude_list
enum<string>[]

Payout rails hidden from this user. Stacks with app-level exclusions.

Available options:
ach,
paypal,
venmo,
cash_app,
intl_bank,
airtm,
payoneer,
crypto