Read organization analytics users

Returns one page of an organization's members, with what each member did during a date range.

Padlet builds the member list in the background. If it is not ready, the response is 202 Accepted with an empty data list, meta.pending is ["users"], and Retry-After says how many seconds to wait. Then send the same request again. An empty list on a 202 does not mean the organization has no members.

Only current members are listed. A member who has left is not included, even for a date range before they left. Owners show as admin; there is no separate owner role.

Pilot: works only for organizations Padlet has enrolled. To enroll, contact Padlet support.

The API key must belong to an admin of the organization, or a teacher for a classroom. An unknown organization, one that is not enrolled, and a key without access all return the same 404.

🚧

Pilot: enrollment required

This endpoint works only for organizations Padlet has enrolled. To enroll, email [email protected]. Until then, every call returns 404.

📘

API key

Get one from your developer settings and send it as the X-API-KEY header. The key must belong to an admin of the organization, or a teacher for a classroom.

🔄

A 202 means "not ready yet"

Padlet builds the member list in the background. If it is not ready, the response is 202 Accepted with an empty data list, meta.pending is ["users"], and the Retry-After header says how many seconds to wait. Wait, then send the same request again.

An empty list on a 202 does not mean the organization has no members.

Returns one page of an organization's members, with what each member did during a date range.

This list does not add up to memberCount. memberCount counts members who joined on or before to. This list shows every current member, whenever they joined. So meta.totalCount and memberCount can differ.

Query parameters

ParameterNotes
from, toStart and end days, inclusive, as YYYY-MM-DD. Send both or neither. Default: the past 365 days
status[]active or inactive. Sending both is the same as sending neither
userType[]admin, maker, teacher, student, contributor, guest. Owners count as admin
qSearch names and emails. Not case-sensitive
sortname (default), email, userType, signupDate, lastActivityDate, padlets, posts, comments, reactions
orderasc (default) or desc
pageStarts at 1 (default)
perPageDefault 25, maximum 100

To send several values, repeat the parameter with brackets: status[]=active&status[]=inactive. One value can go without brackets.

Date range rules:

  • The range can be at most 24 months long.
  • from cannot be earlier than January, five years ago.
  • to cannot be later than the current month.

Other rules:

  • Out-of-range values are rejected, not adjusted. A perPage above 100, a page below 1, or an unknown sort, order, status or userType returns 400.
  • (page - 1) * perPage cannot exceed 1,000,000.
  • Every role is accepted for every organization type. A role the organization cannot have returns no rows. For example, maker in a classroom.
  • Members with no value in the sort column come first when order is asc, and last when it is desc. For example, with sort=lastActivityDate, members who never did anything come first or last.

Row attributes

Each row's id is the member's user hashid.

AttributeNotes
nameDisplay name. Falls back to the username if blank
usernamePadlet username. Can be null
emailCan be null
userTypeThe member's role. Owners show as admin
activetrue if the member created a padlet, post, comment or reaction in the range
signupDateUTC date the member signed up for Padlet. Not the date they joined this organization
lastActivityDateThe member's latest activity in this organization, at any time. Ignores the range
padletsPadlets created in the range
postsPosts written in the range
commentsComments written in the range
reactionsReactions given in the range

What the list covers

  • Current members only. A member who has left is not listed, even for a date range before they left.
  • active means creating something. Only padlets, posts, comments and reactions count. A member who only viewed padlets is inactive.
  • lastActivityDate is not tied to the range. It can fall before or after it. It also counts time spent on a padlet, so an inactive member can still have a date. It is null only if the member has no activity in the organization at all.
  • There is no owner role. Owners show as admin, so userType[]=admin returns admins and the owner together. You cannot filter for the owner alone.

Meta

FieldNotes
statusready, pending (still being built), or failed
dateRangeThe date range the counts cover
pageThe page returned
perPageRows per page
totalCountRows matching your filters, across all pages
totalPagesceil(totalCount / perPage)
pending["users"] on a 202, with retryAfter
errors["users"] if building the list failed. data is empty

A failed list returns 200, not a 5xx. Always check meta.status before reading data. An empty data with failed is an error, not an empty organization.

Errors

CodeMeaning
400Unknown sort, order, status or userType, page or perPage below 1, perPage above 100, offset past 1,000,000, or a bad date range
401API key missing or revoked
404Organization not found, not enrolled, or your key has no analytics access to it. All three look the same
406Unsupported Accept header. Send application/vnd.api+json or leave it out
429More than 60 requests in an hour for this API key and organization. This limit is separate from the metrics endpoint's. Retry-After says how many seconds to wait

Example

curl "https://api.padlet.dev/v1/organizations/$ORG_ID/analytics/users?from=2026-01-01&to=2026-03-31&status[]=active&sort=posts&order=desc&perPage=2" \
  -H "X-API-KEY: $PADLET_API_KEY"
{
  "data": [
    {
      "id": "user_abcd1234efgh5678",
      "type": "organizationAnalyticsUser",
      "attributes": {
        "name": "Ada Lovelace",
        "username": "ada",
        "email": "[email protected]",
        "userType": "teacher",
        "active": true,
        "signupDate": "2025-09-14",
        "lastActivityDate": "2026-03-02",
        "padlets": 4,
        "posts": 37,
        "comments": 12,
        "reactions": 58
      }
    },
    {
      "id": "user_wxyz9876stuv5432",
      "type": "organizationAnalyticsUser",
      "attributes": {
        "name": "Alan Turing",
        "username": "alan",
        "email": "[email protected]",
        "userType": "student",
        "active": true,
        "signupDate": "2025-08-21",
        "lastActivityDate": "2026-03-01",
        "padlets": 2,
        "posts": 19,
        "comments": 5,
        "reactions": 23
      }
    }
  ],
  "meta": {
    "status": "ready",
    "dateRange": { "from": "2026-01-01", "to": "2026-03-31" },
    "page": 1,
    "perPage": 2,
    "totalCount": 348,
    "totalPages": 174
  }
}

Exporting every member

Request page=1, 2, and so on until you pass meta.totalPages. Keep from, to and every filter the same on each request. If you change a filter partway, the pages shift and you can miss or repeat members.

Path Params
string
required
length between 16 and 22

Hashid of the organization where you are an admin, or a teacher for a classroom. Read it
from GET /me?include=organizations, which lists every wksp_ organization your key
belongs to. org_ organizations on padlet.org are not supported yet.

Query Params
string

Start day, inclusive, as YYYY-MM-DD. Send both from and to, or neither for the past 365 days. Cannot be earlier than January, five years ago.

string

End day, inclusive, as YYYY-MM-DD. The range can be at most 24 months long. Cannot be later than the current month.

status[]
array of strings

Filter by activity status. Repeatable. Sending both values is the same as sending neither.

status[]
Allowed:
userType[]
array of strings

Filter by role. Repeatable. There is no owner value; owners show as admin.

userType[]
Allowed:
string

Search names and emails. Not case-sensitive.

string
enum
Defaults to name

Column to sort by. Rows with no value come first with asc and last with desc.

string
enum
Defaults to asc
Allowed:
integer
≥ 1
Defaults to 1

Page number, starting at 1. (page - 1) * perPage cannot exceed 1,000,000.

integer
1 to 100
Defaults to 25
Responses

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/vnd.api+json