Certification Intelligence

Find stored certification information by type, business record, renewal state, date, and recorded evidence filename.

Certification Intelligence supports four connected workflows:

  • GET /certification-types lists the organization's certification vocabulary.
  • GET /certification-records finds individual stored records.
  • GET /certification-records/{recordId} returns one exact record.
  • GET /certification-subjects finds customers, suppliers, products, customer addresses, warehouses, and supplier-product combinations with matching records.

Access

The endpoints require certifications:read plus the acting user's current access to the related customer, supplier, product, customer address, or supplier-product combination. Warehouse certification results also require warehouses:read and current Warehouse access. GET /me reports effectiveCapabilities.certifications.view and the available viewableSubjectTypes.

curl "$SHELFCYCLE_API_BASE_URL/certification-types?subjectType=supplier" \
  -H "Authorization: Bearer $SHELFCYCLE_API_KEY" \
  -H "X-ShelfCycle-Client: Supplier quality workspace"

Learn the organization's vocabulary

Use GET /certification-types before a broad search when the workflow needs the exact type title or ID used by the organization.

{
  "data": [
    {
      "id": "certification-type-id",
      "title": "Third Party Audit",
      "description": "Annual third-party quality audit",
      "enabled": true,
      "documentationRequired": true,
      "expiryNoticeDaysBefore": 30,
      "subjectType": "supplier",
      "type": "certification_type"
    }
  ],
  "meta": {
    "populationCount": 8,
    "returnedRecords": 1,
    "complete": true,
    "hasMore": false,
    "nextCursor": null,
    "evaluatedAt": "2026-08-24T16:30:00.000Z",
    "requestId": "request-id"
  }
}

Filter by subjectType using supplier, customer, product, customer_address, warehouse, or supplier_combination. Add includeDisabled=true only when the workflow needs historical type configuration. expiryNoticeDaysBefore supplies the notice window used to determine when a record is expiring.

Find stored records

Use GET /certification-records to search individual certification rows. Common filters include:

FilterUse it for
typeId or typeQueryOne exact certification type or matching type title and description.
subjectTypes and subjectIdOne or more business record classes, or one exact business record.
recordedStatusesRecorded PENDING, ACTIVE, or EXPIRED values.
effectiveStatesCurrent interpretation at the response's exact evaluation time: pending, current, expired, or incomplete.
renewalStatesRenewal timing at the same evaluation time: current, expiring, expired, renewed, or not_tracked.
expiresAtOrAfter and expiresAtOrBeforeExact date-time boundaries for expiration review.
evidenceRecordedStaterecorded, not_recorded, or invalid_metadata.
evidenceFileNameQueryAn explicit filename search when the source wording points to a recorded filename.
curl "$SHELFCYCLE_API_BASE_URL/certification-records?subjectTypes=supplier&subjectId=supplier-id&effectiveStates=current&limit=25" \
  -H "Authorization: Bearer $SHELFCYCLE_API_KEY"
{
  "data": [
    {
      "recordId": "certification-record-id",
      "resourceKind": "stored_certification_record",
      "type": {
        "id": "certification-type-id",
        "title": "Third Party Audit",
        "description": "Annual third-party quality audit",
        "enabled": true,
        "documentationRequired": true,
        "expiryNoticeDaysBefore": 30,
        "subjectType": "supplier"
      },
      "subject": {
        "subjectType": "supplier",
        "id": "supplier-id",
        "displayName": "Northstar Chemical",
        "externalId": "SUP-1042",
        "archived": false,
        "customerId": null,
        "locationId": null,
        "addressId": null
      },
      "recordedStatus": "ACTIVE",
      "effectiveState": "current",
      "renewalState": "expiring",
      "daysLeft": 24,
      "validFrom": "2026-01-01T00:00:00.000Z",
      "validTo": "2026-12-31T23:59:59.000Z",
      "recordCompleteness": "populated",
      "evidence": {
        "recordedState": "recorded",
        "fileName": "northstar-third-party-audit-2026.pdf"
      },
      "matchBasis": ["unfiltered"],
      "searchedFields": [],
      "createdAt": "2026-01-02T14:00:00.000Z",
      "updatedAt": "2026-01-02T14:00:00.000Z"
    }
  ],
  "meta": {
    "populationCount": 1,
    "returnedRecords": 1,
    "complete": true,
    "hasMore": false,
    "nextCursor": null,
    "evaluatedAt": "2026-08-24T16:30:00.000Z",
    "currentState": true,
    "snapshotIsolatedAcrossRequests": false,
    "requestId": "request-id"
  }
}

recordedStatus preserves the status stored on the record. effectiveState interprets the record at the exact meta.evaluatedAt time, including its expiration boundary. validFrom remains informational record context.

renewalState applies the certification type's expiryNoticeDaysBefore setting at the same evaluation time. daysLeft is the number of organization-calendar days until expiration. A past record reports renewed when a current certification of the same type exists for the same subject.

The evidence object reports whether a filename was recorded and returns that filename when available. Use it as stored record context. The certification endpoints do not return file links or file contents.

Record meaning

Certification results describe records stored in ShelfCycle. Present them as the organization's recorded certification information, with the returned status, dates, and evidence filename.

Find subjects with matching records

Use GET /certification-subjects when the workflow needs a customer, supplier, product, customer-address, warehouse, or supplier-product-combination view rather than one result per certification record. It accepts the same record filters and returns each available subject once.

curl "$SHELFCYCLE_API_BASE_URL/certification-subjects?typeQuery=Third%20Party%20Audit&effectiveStates=current&subjectTypes=supplier" \
  -H "Authorization: Bearer $SHELFCYCLE_API_KEY"

Each row includes matchingRecordCount, currentMatchingRecordCount, and latestCurrentValidTo. Use those returned counts directly when building summaries.

Warehouse subjects carry the warehouse identity. A supplier_combination subject carries a combination object with shipFromLocationId, shipFromLocationName, productId, and productDisplayName, so a workflow can keep the certification tied to the exact supplier origin and product.

For an exact subject question, first request that subject without a type or text filter to understand the complete visible record set. Then apply the requested type or date filters. This keeps a filtered zero result clearly tied to the selected subject and filter.

Inspect one exact record

After selecting a recordId, use GET /certification-records/{recordId} for the exact stored row:

curl "$SHELFCYCLE_API_BASE_URL/certification-records/certification-record-id" \
  -H "Authorization: Bearer $SHELFCYCLE_API_KEY"

The detail response uses the same type, subject, status, date, completeness, and evidence fields as the list row.

Continue and refresh

When meta.hasMore is true, call the same collection endpoint again with meta.nextCursor by itself. Do not combine a cursor with the original filters.

Certification records are read one page at a time. meta.populationCount and coverage.totalRecords are available only when the first page contains the complete matching result. Use returnedRecords, hasMore, and nextCursor for continued traversal.

Certification responses include meta.evaluatedAt, currentState: true, and snapshotIsolatedAcrossRequests: false. A continued traversal keeps its evaluation time for consistent effective-state interpretation. Restart from the original filters for a new current view.