Activity Claim
Description
The main lexicon where everything is connected to. This is the hypercert record that tracks impact work.
An activity claim is the atomic record in the hypercerts data model: a durable, referenceable statement that a clearly bounded piece of work is planned, ongoing, or completed.
It defines the work using four core dimensions:
- Who performed (or will perform) the work
- What was done (or will be done)
- When it happened (or will happen)
- Where it took place (or will take place)
By making work precisely scoped and inspectable, activity claims become stable reference points that others can build on: they can be linked to outcome claims, supported with measurements and attachments, and assessed through plural evaluations.
Lexicon
Lexicon ID: org.hypercerts.claim.activity
Key: any
Properties
title | string | ✅ | Title of the hypercert | |
|---|---|---|---|---|
shortDescription | string | ✅ | Short blurb of the impact work done. | |
description | string | ❌ | Optional longer description of the impact work done. | |
image | union | ❌ | The cover photo of the hypercert as a URI or image blob | |
workScope | object | ❌ | Logical scope of the work using label-based conditions. See Defining Work Scopes for details. | Object with allOf, anyOf, noneOf arrays of labels |
startDate | string | ✅ | When the work began | |
endDate | string | ✅ | When the work ended | |
contributions | array | ❌ | A strong reference to the contributions done to create the impact in the hypercerts | References must conform to org.hypercerts.claim.contribution |
rights | ref | ❌ | A strong reference to the rights that this hypercert has | References must conform to org.hypercerts.claim.rights |
location | ref | ❌ | A strong reference to the location where the work for done hypercert was located | References must conform to app.certified.location |
createdAt | string | ✅ | Client-declared timestamp when this record was originally created |
Notes
- All timestamps use the
datetimeformat (ISO 8601) - Strong references (
com.atproto.repo.strongRef) include both the URI and CID of the referenced record - Union types allow multiple possible formats (e.g., URI or blob)
- Array items may have constraints like
maxLengthto limit the number of elements - String fields may have both
maxLength(bytes) andmaxGraphemes(Unicode grapheme clusters) constraints
Examples
- A group of software developers maintained the open-source library NumPy in 2025.
- An organization stewarded a forest from 2020 to 2025 in location X.
In the first example, the where dimension is irrelevant — and therefore can be left empty. It means that no matter where the work was performed, it is included in the hypercert. Similarly, the what dimension could be empty for the forest stewards. It would mean that any activity that this organization did in that location is included in the hypercert.
In both cases, each component can be precisely identified:
- Who:
- the software developers (e.g., each identified by a DID or Github user account)
- the stewardship organization (e.g., a DID representing the organization)
- What:
- maintaining the NumPy library (referenced via its GitHub repository → https://github.com/numpy/numpy)
- stewarding a specific forest area
- When:
- the calendar year 2025
- the period 2020–2025
- Where:
- empty for software maintenance
- geographic coordinates identifying the specific forest location
Code Example
The SDK is in active development. Package names and API methods may change.
Create an activity claim record:
import { BskyAgent } from '@atproto/api'
const agent = new BskyAgent({ service: 'https://pds.example.com' })
await agent.login({ identifier: 'your-handle', password: 'your-app-password' })
const response = await agent.api.com.atproto.repo.createRecord({
repo: agent.session.did,
collection: 'org.hypercerts.claim.activity',
record: {
// Title of the hypercert
title: 'Open Source Library Maintenance',
// Short description of the impact work
shortDescription: 'Maintained and improved the core library throughout 2025',
// Logical scope of the work
workScope: {
allOf: ['library-maintenance'],
anyOf: [],
noneOf: [],
},
// When the work began
startDate: '2025-01-01T00:00:00Z',
// When the work ended
endDate: '2025-12-31T23:59:59Z',
// Timestamp when this record was created
createdAt: new Date().toISOString(),
},
})
console.log('Created:', response.data.uri)