Hello Visitor!

Creativeapplications.Net (CAN) is a community of creative practitioners working at the intersection of art, media and technology.
Login
Status
Register | Forgot Password
Online for 6,598 days (18 years, 0 months, 24 days), published 4,226 articles about 2,988 people, featuring 217 tools, supported by 1,741 members, and providing access to 460 students.
Categories
CAN (95) Education (32) Event (253) Member (350) News (884) NFT (256) Project (2630) Review (46) Theory (54) Tutorial (39)
Log
Links
Introduction
Browse Activity
Interact with Activity
Create Activity
Manage Profile
Explore
Search
Browse Archives
Mentions & Notifications
Session & App Configuration
Version History
Activity Log

CAN Member API

Version 2.5 (2026)  ·  Gateway: https://www.creativeapplications.net/wp-json

Terms of Use

By accessing the CAN Member API, you agree to the following conditions:

Permitted Uses

  • Personal research and data analysis
  • Creating custom notifications or alerts for your own use
  • Building tools that extend or complement CAN's functionality in novel ways
  • Academic research and educational projects
  • Integrations with other platforms that add unique value

Prohibited Uses

  • No replication of CAN services. You may not use this API to create, distribute, or operate any application, website, or service that replicates, emulates, or substitutes the functionality provided by CreativeApplications.Net, including but not limited to:
    • The CAN website (creativeapplications.net)
    • Any future official CAN applications or services
  • No competing products. You may not build alternative clients, readers, or interfaces that serve as replacements for official CAN platforms.
  • No bulk data harvesting. Systematic downloading of content for the purpose of creating derivative databases or services is prohibited.
  • No automated agents or "AI Skills." You may not use the API or site credentials to train, power, or operate automated AI agents, "agentic" software, or third-party automation frameworks (e.g., OpenClaw, MultiOn, or custom "Skills"). The Service is intended for direct interaction by human users; the delegation of account access to autonomous scripts for the purpose of navigating, summarizing, or interacting with the API is strictly prohibited.
  • No redistribution. Content accessed via this API may not be republished or redistributed without explicit permission.

Enforcement

CAN reserves the right to revoke API access at any time for violations of these terms or for any activity deemed harmful to the CAN community or platform.

Changes to Terms

These terms may be updated at any time. Continued use of the API constitutes acceptance of any modifications.

Authentication

Basic Authentication — All requests require a username and app-generated password

  1. Log in to creativeapplications.net
  2. Go to Edit Profile > App Password
  3. Generate a 24-character password
  4. Use username and password with curl, or pass as Authorization header
curl -u "username:app_password" https://www.creativeapplications.net/wp-json/wp/v2/activity-logs

Testing these URLs directly in a browser tab will result in a 401 rest_forbidden error. Authenticated requests must be made via scripts, terminal, or API clients.

  • Revocation: Regenerate a new password in your profile settings to invalidate the old one
  • Storage: Never commit app passwords to version control; use environment variables
  • Permissions: App password has the same permissions as your account

Rate Limiting

API requests are rate limited — 60 requests per 60 seconds. Exceeding it returns HTTP 429.

Silent Polling

By default, fetching page 1 of the activity feed stamps a server-side "last visited" timestamp for your account. This timestamp is used by the CAN website to show a dot indicator when new content has been published since your last visit. If you are building a background polling client (e.g. a menu bar app or notification tool), pass silent=1 to avoid clearing this indicator unintentionally.

curl -u "your_username:your_app_password" \
  "https://www.creativeapplications.net/wp-json/wp/v2/activity-logs?page=1&per_page=20&silent=1"

Recommended pattern for a polling client

1. On startup — sync last-visit state from the server

curl -u "your_username:your_app_password" \
  "https://www.creativeapplications.net/wp-json/can/v1/member/your_username"

Use the lastActivityVisit Unix timestamp from the response as your baseline.

2. On each background poll — fetch silently

curl -u "your_username:your_app_password" \
  "https://www.creativeapplications.net/wp-json/wp/v2/activity-logs?page=1&per_page=20&silent=1"

Count entries with an id greater than your last known ID, or a date newer than lastActivityVisit.

3. When the user acknowledges — stamp the visit

curl -u "your_username:your_app_password" \
  "https://www.creativeapplications.net/wp-json/wp/v2/activity-logs?page=1&per_page=1"

Fetch without silent=1 to update the server-side timestamp, clearing the website dot indicator.

Activity Response Fields

Activity log responses (the feed, channels, member activities and threads) include additional data fields based on the activity type. These fields are only present when relevant.

author_meta

Included when the activity is a profile update. Fields depend on the update type: User Location Updated → location, latitude, longitude; User Bio Updated → description; User Website URL Updated → url; User Discord Updated → discord; User TwitterX Updated → twitterx; User Instagram Updated → instagram; User Other Updated → other; User Skills Updated → skills (comma-separated string).

{
  "id": 12345,
  "title": { "rendered": "User Location Updated by filip" },
  "author_meta": {
    "location": "London, UK",
    "latitude": "51.5074",
    "longitude": "-0.1278"
  }
}

term_data

Included for: People Saved, Tools Saved, Term Comment, Term Description Added.

{
  "id": 12345,
  "title": { "rendered": "People Saved by filip" },
  "term_data": {
    "name": "Zach Lieberman",
    "description": "Artist and educator based in New York...",
    "link": "https://www.creativeapplications.net/people/zach-lieberman/",
    "image_urls": [
      "https://www.creativeapplications.net/wp-content/uploads/...",
      "https://www.creativeapplications.net/wp-content/uploads/..."
    ]
  }
}

event_data

Included for: Event Added.

{
  "id": 12345,
  "title": { "rendered": "Event Added by filip" },
  "event_data": {
    "title": "Creative Coding Meetup",
    "excerpt": "Join us for an evening of creative coding...",
    "image_url": "https://www.creativeapplications.net/wp-content/uploads/...",
    "start_date": "2026-03-15",
    "end_date": "2026-03-15",
    "location": "London, UK",
    "event_type": "Meetup",
    "link": "https://www.creativeapplications.net/events/creative-coding-meetup/"
  }
}

memberData

Included for: Member Saved.

{
  "id": 12345,
  "title": { "rendered": "Member Saved by filip" },
  "memberData": {
    "name": "John Doe",
    "username": "johndoe",
    "description": "Creative developer based in Berlin...",
    "link": "https://www.creativeapplications.net/author/johndoe/",
    "location": "Berlin, Germany"
  }
}

gallery_images

Included when the activity references a post containing a WordPress gallery block. Returns medium-sized image URLs. Posts without galleries will not have this field.

{
  "id": 12345,
  "title": { "rendered": "Post Published by filip" },
  "gallery_images": [
    "https://www.creativeapplications.net/wp-content/uploads/2026/02/image1-1200x750.jpg",
    "https://www.creativeapplications.net/wp-content/uploads/2026/02/image2-1200x750.jpg"
  ]
}

activity_entry

Included for activities of type Activity Entry (posts created via the composer). thumbnail_url and thumbnail_filename are null when no image was attached. The author_meta object for activity entries only contains username; other profile fields are null. Entries also carry top-level live_url and code_block fields when set (both absent otherwise). live_url additionally appears on post activities when the referenced article has a live URL.

{
  "id": 12345,
  "title": { "rendered": "Activity Entry by filip" },
  "activity_entry": {
    "thumbnail_url": "https://www.creativeapplications.net/wp-content/uploads/2026/02/activity-filip-20260226.jpg",
    "thumbnail_filename": "activity-filip-20260226.jpg"
  },
  "live_url": "https://example.com/sketch",
  "code_block": "vec3 c = mix(a, b, t);",
  "author_meta": {
    "username": "filip"
  }
}

save_data

Always included. Indicates whether the current user has saved the referenced item (post, term, or member).

{
  "save_data": {
    "is_saved": false
  }
}

like_data

Always included. Note that like_count and liker_names are only visible to the post author for privacy reasons.

// Response for the post author:
{
  "like_data": {
    "is_liked": false,
    "like_count": 5,
    "is_author": true,
    "liker_names": ["user1", "user2", "user3", "user4", "user5"]
  }
}

// Response for other users:
{
  "like_data": {
    "is_liked": true,
    "is_author": false
  }
}

Error Codes

CodeNameDescription
200 OK Request successful
400 Bad Request Invalid parameters (e.g., missing required field). Check the response message for details.
401 Unauthorized Missing or invalid credentials. Verify username and app password.
403 Forbidden You don't have permission for this action (e.g., editing another user's profile)
404 Not Found Resource doesn't exist (e.g., invalid activity ID or username)
429 Too Many Requests Rate limit exceeded. Wait before retrying.
500 Server Error Something went wrong on the server. Try again later.

Error Response Format

{
  "code": "rest_forbidden",
  "message": "You must be logged in to view activity logs.",
  "data": {
    "status": 401
  }
}

Common Issues

401 Unauthorized

  • Double-check your username (case-sensitive)
  • Ensure you're using an App Password, not your regular login password
  • Verify the App Password hasn't been revoked
  • Make sure there are no extra spaces in credentials

403 Forbidden

  • You may be trying to access a resource you don't have permission for
  • Some security plugins may block requests — ensure your User-Agent header is set

404 Not Found

  • The activity ID or username doesn't exist
  • Check for typos in the endpoint URL

Best Practices

  • Cache responses when possible: Avoid fetching the same data repeatedly. Use conditional requests or local caching.
  • Use pagination for large datasets: Don't fetch thousands of items at once. Use per_page and page parameters.
  • Use silent=1 for background polling: If you're polling for new content in the background, use silent=1 to avoid clearing the 'new activity' indicator on the website.
  • Respect rate limits: If you get a 429 response, wait before retrying. The response includes a retry_after field.
  • Handle errors gracefully: Always check the response status code. API errors return JSON with code, message, and data fields.
  • Use filter parameters: Use the filter parameter instead of fetching all activities and filtering locally. This is faster and more efficient.

Support & Contact

If you encounter API bugs or unexpected behavior, please report them by email. Feature requests and ideas for new endpoints are welcome at the same address. API support is provided on a best-effort basis — for urgent account issues, use the standard contact form on the website.

Email: api@creativeapplications.net

Browse Activity

Fetch and filter the activity feed with pagination and various filter options. This is the core feature for reading what's happening on CAN.

GET /wp/v2/activity-logs

Fetch Activity Feed

Get paginated activity logs with optional filtering and sorting. This is the main endpoint for reading the activity stream.

GET /wp/v2/activity-logs/{id}

Get Single Activity

Fetch a specific activity log entry by ID with all metadata and conditional fields.

Interact with Activity

Like, comment, and save activities. React to and engage with other members' posts and updates.

POST /can/v1/toggle-like

Like/Unlike Activity

Like or unlike (Dap) an activity. This toggles your like status.

POST /can/v1/activity-comment

Post Comment

Post a comment on an activity. Supports @mentions.

GET /can/v1/activity-thread/{id}

Get Activity Thread

Get an activity and all its comments/replies, forming a complete conversation thread.

POST /can/v1/toggle-save

Save/Unsave Post

Save or unsave a post (article or event).

POST /can/v1/toggle-save-archive

Save/Unsave Member or Term

Save or unsave a member (author) or taxonomy term (People/Tools).

POST /can/v1/report-block

Report / Block a Member

Report that you have blocked a member. Sends a moderation report to the CAN team recording who blocked whom and from which activity. Hiding the blocked member's content is handled client-side; this endpoint records the report.

POST /can/v1/delete-activity

Delete Activity

Move an activity log entry to trash. Allowed for the entry's author (or CAN editors). Channel counts are updated accordingly, and the CAN team is notified when a member deletes their own entry. Returns 404 for an unknown ID and 403 when you're not the author.

Create Activity

Post new activity entries, upload images, and add content to your feed. Share text, photos, and code with the community.

POST /can/v1/post-activity-entry

Post Activity Entry

Create a new activity entry (text post, optionally with image). Max 500 characters, up to 5 #channels.

POST /can/v1/upload-activity-image

Upload Image

Upload an image for use in an activity entry. Returns attachment_id for use in post-activity-entry.

Manage Profile

Update your profile information, customize your theme, and manage account preferences.

GET /can/v1/new-activity-count

Count New Activities

Get the number of activities published since your last visit. Lightweight alternative to fetching the full feed.

POST /can/v1/update-profile

Update Profile

Update your profile information. Logs the change as a User activity.

GET /can/v1/theme

Get Custom Theme

Fetch the authenticated user's custom theme colour variables.

POST /can/v1/theme

Save Custom Theme

Save custom theme colour variables. Posting an empty object clears the theme.

DELETE /can/v1/theme

Clear Custom Theme

Remove your saved custom theme entirely, reverting to the site defaults. Equivalent to posting an empty variables object.

Explore

Discover members, browse channels, and search for content. Find people and topics of interest.

GET /can/v1/member/{username}

Get Member Profile

Get a member's profile information including bio, skills, location, social links, and metadata.

GET /can/v1/member-activities/{user_id}

Get Member's Activity Feed

Get a member's activity feed, filtered to their contributions.

GET /can/v1/channels

List Channels

Get all channels sorted by activity count. Channels are automatically created when #channelname is used in activity entries.

GET /can/v1/channels/{channel}

Get Channel Feed

Fetch paginated activity for a specific channel.

GET /can/v1/stats

Community Stats

Aggregated community statistics: headline summary (days active, participants, total actions), a 90-day activity graph, community and content stats, site analytics goals, and activity counts by type. Powers the stats screen in the iOS app.

Search

Token-based search across the whole CAN ecosystem — articles, books, events, jobs, People/Tools/Tags, members, and activity. Multiple comma-separated tokens are combined with AND.

GET /can/v1/search

Search

Search across articles, books, events, jobs, terms (People/Tools/Tags), members, and activity. Results come back grouped per section, each with a has_more flag for pagination. Excerpts wrap matched tokens in <mark> tags — strip or style them client-side. Responses are cached server-side for 5 minutes. Members only (401 when logged out).

Browse Archives

Browse published CAN articles and pages — project cards filtered by tools, people, or keywords, plus direct access to individual posts.

GET /can/v1/projects

Browse Projects

Fetch paginated project cards. Card-shaped, lightweight response with title, excerpt, thumbnail, author, tools, and people. tool and people may be combined — results match both. Responses are cached server-side for 10 minutes.

GET /can/v1/projects/tools

List Tools

Get all Tools that have at least one project, sorted by project count. Use this to discover valid tool slugs for filtering.

GET /wp/v2/posts/{id}

Get a Post

Fetch a standard post/article — use it to resolve articles referenced by an activity's object_id. Standard WordPress REST response format.

GET /wp/v2/pages/{id}

Get a Page

Fetch a page referenced by an activity's object_id. Standard WordPress REST response format.

Mentions & Notifications

Fetch and manage mentions and notifications. Stay updated when someone mentions you.

GET /can/v1/mentions

Get Mentions

Fetch activities where the current user is mentioned.

POST /can/v1/mark-mentions-read

Mark Mentions as Read

Clear the notification indicator for unread mentions.

Session & App Configuration

Validate credentials, create WordPress sessions for WebViews, and fetch server-managed app configuration like the live URL blocklist.

GET /wp/v2/users/me

Validate Credentials

Get the current user. A lightweight way to check that a username + App Password pair is valid before making other requests.

POST /can/v1/auth-session

Create Session

Create a WordPress session for the authenticated user — returns auth cookies. Used for WebView authentication, so an app can open logged-in website views without asking for credentials again.

GET /can/v1/live-url-blocklist

Live URL Blocklist

Fetch the server-managed list of blocked link domains. Domains in this list should be treated as unsafe when rendering user-submitted links. The list is updated server-side without requiring an app release.

Version History

Changes to the CAN Member API, most recent first.

Version 2.5 (2026)

  • Added GET /can/v1/projects — paginated, card-shaped list of published CAN articles (title, url, live_url, excerpt, thumbnail, author, people, tools, date); supports page, per_page (max 50), tool, people and search; scoped to the Project category; cached 10 minutes
  • Added GET /can/v1/projects/tools — all Tools with at least one project, sorted by count, for discovering valid tool values

Version 2.4 (2026)

  • Documented GET /can/v1/new-activity-count — number of activity logs published since your last feed visit
  • Documented POST /can/v1/theme — saves custom theme colour variables (validated key list); posting an empty object clears the theme
  • Corrected the /can/v1/theme note — custom themes can be set via the API (per-member only)

Version 2.3 (March 2026)

  • Added GET /can/v1/live-url-blocklist — server-managed list of blocked domains for safe link rendering
  • Added GET /can/v1/theme — the authenticated user's custom theme colour variables

Version 2.2 (March 2026)

  • Added GET /can/v1/channels — all channels sorted by post count
  • Added GET /can/v1/channels/{channel} — paginated activity feed for a channel, same enriched format as the main feed
  • Channels are created automatically on first use of #channelname in an entry or comment

Version 2.1 (February 2026)

  • Added POST /can/v1/post-activity-entry — new activity entries (text and/or image); rate limited to one post per 2 minutes (429 with retry_after)
  • Added POST /can/v1/upload-activity-image — image upload via multipart form data
  • URLs auto-linkified; @mentions trigger notifications; new activity_entry field in feed responses
  • Added silent=1 to /wp/v2/activity-logs for background polling; lastActivityVisit added to own member profile

Version 2.0 (February 2026)

  • Added /can/v1/member-activities/{user_id} — a member's activity feed, paginated, enriched format
  • Added id to member profile response

Version 1.9 (February 2026)

  • Gallery images now inline in activity log responses via gallery_images (medium size); removed the separate post-gallery endpoint

Version 1.7 (February 2026)

  • Added /can/v1/mentions and /can/v1/mark-mentions-read; Mentions filter option

Version 1.6 (February 2026)

  • Added the filter query parameter to activity logs — My Actions, My Daps, My Saved, action-type lists (comma-separated), persists across pagination

Version 1.5 (February 2026)

  • Added toggle-save and toggle-save-archive; save_data on activity responses; memberData for Member Saved; isSaved on member profiles

Version 1.4 (February 2026)

  • Added auth-session for WebView authentication; comprehensive documentation, Terms of Use, conditional response data docs

Version 1.3 (January 2026)

  • Added toggle-like, activity-comment, activity-thread, update-profile and member/{username}; like_data, author_meta, term_data and event_data on responses

Version 1.0 (January 2026)

  • Initial API release — Basic Auth with App Passwords, activity logs endpoint, standard WordPress posts/pages endpoints

Activity Log