Public API v1 • SDK Module

SDK Abstracts

Build abstract listings and program-book pages: accepted abstracts, optionally with authors.

What it does

The Abstracts module is designed for public-facing content: only abstracts with status acceptedare returned.

Use it for an "Abstracts" page, a PDF program book generator, or a mobile-app abstract browser.

Scopes

  • abstracts:read – required
  • abstracts:write – for submissions + uploads

Module gate: the Abstracts module must be enabled.

List accepted abstracts

GET/api/public/v1/abstracts/abstracts

Pagination supports limit and offset. Default limit is 50, max is 200. Ordering is newest first.

SDK
ts
const res = await confera.abstracts.listAccepted({ limit: 50, offset: 0 });
console.log(res.data);

Get accepted abstract by ID

GET/api/public/v1/abstracts/abstracts/:abstractId

Use this for detail pages and deep links.

SDK
ts
const abs = await confera.abstracts.getAcceptedById("ABS123", { include: "authors" });
console.log(abs.data);

Include authors

Add include=authors (or the SDK param) to attach authors. This is convenient but can increase payload size.

SDK
ts
// List + authors
const res = await confera.abstracts.listAccepted({ limit: 50, include: "authors" });

// One + authors
const abs = await confera.abstracts.getAcceptedById("ABS123", { include: "authors" });
cURL
bash
curl "https://your-domain/api/public/v1/abstracts/abstracts?include=authors&limit=50" \
  -H "X-API-Key: cat_..."

Upload an attachment

POST/api/public/v1/abstracts/attachments/upload-url

This mints a short-lived signed upload URL for abstract-attachments. Upload the bytes with PUT, then store the returned storageUriin your submission payload.

SDK (1 call)
ts
// 1) Create signed URL + upload bytes
const { storageUri } = await confera.abstracts.uploadAttachment({
  registrationId: "REG_ID",
  kind: "attachment",
  filename: "abstract.pdf",
  contentType: "application/pdf",
  data: fileBytes,
});

// 2) Use storageUri in submit()
console.log(storageUri);

Submit an abstract

POST/api/public/v1/abstracts/submissions

Submissions are scoped to a registrationId and respect the conference submission config (closed/deadline).

SDK
ts
const res = await confera.abstracts.submit({
  registrationId: "REG_ID",
  title: "A Randomized Trial of ...",
  track: "Clinical",
  presentationType: "poster",
  keywords: ["oncology", "trial"],
  objectiveText: "...",
  methodsText: "...",
  resultsText: "...",
  conclusionText: "...",
  studyType: "clinical",
  declarations: {
    originalityDeclared: true,
    concurrentSubmissionDeclared: false,
    ethicsApprovalDeclared: true,
    patientConsentDeclared: true,
  },
  attachments: {
    uri: "storage://abstract-attachments/...",
    supportingImageUri: null,
  },
  authors: [
    { fullName: "Jane Doe", email: "jane@example.com", affiliationInstitutionId: "UNI_ID" },
    { fullName: "John Doe", email: "john@example.com", affiliationInstitutionId: "UNI_ID" },
  ],
  presentingAuthorIndex: 0,
});

console.log(res.data); // { id, status, eligibility }

List submissions for a registration

GET/api/public/v1/abstracts/submissions
SDK
ts
const res = await confera.abstracts.listSubmissions({
  registrationId: "REG_ID",
  include: "authors",
  limit: 50,
});
console.log(res.data);

Get submission by ID

GET/api/public/v1/abstracts/submissions/:abstractId
SDK
ts
const abs = await confera.abstracts.getSubmission("ABS_ID", { include: "authors" });
console.log(abs.data);

Program book tips

Generate a PDF program book

Fetch all accepted abstracts on the server, then render into HTML/PDF. For large conferences, paginate in batches of 200.

Cache + revalidate

Abstract content is not ultra-real-time. Cache for minutes/hours and allow manual refresh.