Group Members

List group invitations

Changed on

Return a paginated list of invitations to join a group, newest first unless sort says otherwise. Only a group owner can call this — it is deliberately narrower than GET /api/v1/groups/members/{id}/, which any member of the group can read.

An invitation exists when add-member was called for an email that already has an account: that person is emailed and becomes a member only once they accept. See POST /api/v1/groups/add-member/{id}/ for how the two outcomes differ.

Every status is returned, not just the outstanding ones, because a declined or expired invitation is usually the answer to "why is this person not in the group". Use status to narrow it.

Note that status: 1 (Pending) and an expires_at in the past can occur together: the job that moves timed-out invitations to status: 4 (Expired) runs periodically, so an invitation that is past expires_at is no longer answerable even while it still reads as pending. Treat expires_at as authoritative.

The invitation token is never returned. Holding it is what accepts the invitation, so it is not part of this contract and will not be added to it.

The nested user is deliberately minimal — id, name and email only. An invitee has not joined the group and may yet decline, so the account state returned by other endpoints (balance, orders, blocked and verification flags) is not exposed here.

get/api/v1/groups/invitations/{id}/

Request

  • Base URL
    https://plagiarismcheck.org
  • Auth
    API key in header X-API-TOKEN

Path parameters

idinteger required

Numeric group ID.

Query parameters

status1 | 2 | 3 | 4 | 5

Optional invitation status filter. A value that is not one of the listed codes is ignored rather than rejected, so a client sending a stale constant gets the unfiltered list instead of a 400.

searchstring

Optional text search filter. Matching fields depend on the endpoint, for example filename, member name, email, or transaction text.

sort'status_label' | 'email' | 'role' | 'created_at'

Column to sort the invitations by. status_label sorts by the status code (Pending, Accepted, Declined, Expired, Cancelled), not alphabetically by label. Ties keep the default order, newest first. An unknown value is ignored rather than rejected, and the list keeps its default order.

dir'asc' | 'desc'

Sort direction, case-insensitive. Without it, created_at sorts desc and every other column asc. An unknown value is ignored rather than rejected. Applies to created_at when sort is not sent.

pageinteger

Page number for paginated endpoints. Defaults to 1 when omitted.

sizeinteger

Number of records per page. Defaults to 30 when omitted.

Response

The request succeeded and returned paginated group invitations.

successboolean

Example response

{
  "success": true,
  "data": {
    "invitations": [
      {
        "id": 8814,
        "email": "teacher@school.edu",
        "role": 2,
        "limit": 100,
        "status": 1,
        "status_label": "Pending",
        "source": 1,
        "source_label": "API v1",
        "sent_count": 2,
        "created_at": "1758412800000",
        "expires_at": "1759622400000",
        "responded_at": "1758499200000",
        "user": {
          "id": 4021,
          "name": "Jane Doe",
          "email": "teacher@school.edu"
        }
      }
    ]
  },
  "pagination": {
    "last": 3,
    "current": 1,
    "num_items_per_page": 30,
    "first": 1,
    "page_count": 3,
    "total_count": 67,
    "page_range": 3,
    "start_page": 1,
    "end_page": 3,
    "pages_in_range": [
      1,
      2,
      3
    ],
    "first_page_in_range": 1,
    "lastPage_in_range": 3,
    "current_item_count": 30,
    "first_item_number": 1,
    "last_item_number": 30
  }
}

Changes