Portal User Documents

Base URL: https://api.cornerspot.net

Authentication: requests use a bearer token, for example Authorization: Bearer YOUR_API_KEY.

List portal-user documents

GET /c/api/v1/portal/users/{user_id}/documents

Returns a paginated list of documents attached to the given portal user, ordered by position then updated_at descending. Requires the portal_users_read scope and the Member Portal module.

Path parameters

FIELDTYPEDESCRIPTION
user_idstring · requiredPortal user id. All documents in this collection belong to this portal user.

Query parameters

FIELDTYPEDESCRIPTION
pageinteger1-based page number.
per_pageintegerPage size (1–100, default 25).

Code samples

curl --request GET \
  --url 'https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, headers=headers, method="GET")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents")

request = Net::HTTP::Get.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

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

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
200 OKa page of portal-user documents
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_read scope
404 Not Foundno such portal user in this team

Upload a document for a portal user

POST /c/api/v1/portal/users/{user_id}/documents

Attaches a new document to the given portal user.

Supply either a file multipart part or a pre-created Active Storage portal_document[signed_id] (direct upload).

415 when the detected MIME type is not in the allowed list (images, PDF, Office formats, plain text, CSV, Markdown). 413 when the file exceeds 10 MB. 400 when neither file nor signed_id is provided. 422 when the signed_id value is not a valid Active Storage blob token.

title defaults to the filename stem when omitted. position (optional) inserts the document at that 1-based slot, shifting existing documents down.

Requires the portal_users_write scope and the Member Portal module.

Path parameters

FIELDTYPEDESCRIPTION
user_idstring · requiredPortal user id. All documents in this collection belong to this portal user.

Request body

This endpoint accepts a multipart/form-data request body.

Code samples

curl --request POST \
  --url 'https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents' \
  --header 'Authorization: Bearer YOUR_API_KEY'
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

const data = await response.json();
console.log(data);
// Node.js 18+ (native fetch)
const response = await fetch('https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  }
});

if (!response.ok) {
  throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();
console.log(data);
import json
import urllib.request

url = "https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents"
headers = {
    "Authorization": "Bearer YOUR_API_KEY",
}

request = urllib.request.Request(url, headers=headers, method="POST")

with urllib.request.urlopen(request) as response:
    data = json.loads(response.read().decode("utf-8"))
    print(data)
require "json"
require "net/http"

uri = URI("https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents")

request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer YOUR_API_KEY"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
  http.request(request)
end

puts JSON.parse(response.body)
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://api.cornerspot.net/c/api/v1/portal/users/1f2e3d4c-5b6a-4789-9c0d-1e2f3a4b5c6d/documents',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer YOUR_API_KEY',
    ],
]);

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

$data = json_decode($response, true);
print_r($data);

Responses

STATUSDESCRIPTION
201 Createdcreated
400 Bad Requestno file or signed_id was provided
401 Unauthorizedmissing or invalid API key
402 Payment Requiredthe team's plan doesn't include the Member Portal module
403 Forbiddenthe key lacks the portal_users_write scope
413 Content Too Largethe uploaded file exceeds the 10 MB limit
415 Unsupported Media Typethe file type is not allowed
422 Unprocessable Contentinvalid signed_id (not a valid Active Storage blob token)

Was this article helpful?