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

titlestringTitle of the hypercert
shortDescriptionstringShort blurb of the impact work done.
descriptionstringOptional longer description of the impact work done.
imageunionThe cover photo of the hypercert as a URI or image blob
workScopeobjectLogical scope of the work using label-based conditions. See Defining Work Scopes for details.Object with allOf, anyOf, noneOf arrays of labels
startDatestringWhen the work began
endDatestringWhen the work ended
contributionsarrayA strong reference to the contributions done to create the impact in the hypercertsReferences must conform to org.hypercerts.claim.contribution
rightsrefA strong reference to the rights that this hypercert hasReferences must conform to org.hypercerts.claim.rights
locationrefA strong reference to the location where the work for done hypercert was locatedReferences must conform to app.certified.location
createdAtstringClient-declared timestamp when this record was originally created

Notes

  • All timestamps use the datetime format (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 maxLength to limit the number of elements
  • String fields may have both maxLength (bytes) and maxGraphemes (Unicode grapheme clusters) constraints

Examples

  1. A group of software developers maintained the open-source library NumPy in 2025.
  2. 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:
    1. the software developers (e.g., each identified by a DID or Github user account)
    2. the stewardship organization (e.g., a DID representing the organization)
  • What:
    1. maintaining the NumPy library (referenced via its GitHub repository → https://github.com/numpy/numpy)
    2. stewarding a specific forest area
  • When:
    1. the calendar year 2025
    2. the period 2020–2025
  • Where:
    1. empty for software maintenance
    2. 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:

TypeScript
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)