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
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
user_id | string · required | Portal user id. All documents in this collection belong to this portal user. |
Query parameters
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
page | integer | 1-based page number. |
per_page | integer | Page 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
| STATUS | DESCRIPTION |
|---|---|
200 OK | a page of portal-user documents |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_read scope |
404 Not Found | no 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
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
user_id | string · required | Portal 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
| STATUS | DESCRIPTION |
|---|---|
201 Created | created |
400 Bad Request | no file or signed_id was provided |
401 Unauthorized | missing or invalid API key |
402 Payment Required | the team's plan doesn't include the Member Portal module |
403 Forbidden | the key lacks the portal_users_write scope |
413 Content Too Large | the uploaded file exceeds the 10 MB limit |
415 Unsupported Media Type | the file type is not allowed |
422 Unprocessable Content | invalid signed_id (not a valid Active Storage blob token) |
