Applicants

Represents a list of applicants or leads registered in DreamApply.

URI
/api/v9/applicants

GET List applicants

List applicants using the filters set as parameters. The number of applicants is represented in the X-Count header.

There is a hard limit of 32768 items returned, which is capped to 8192 if the expand parameter is used.

Syntax
GET /api/v9/applicants
Host: apply.example.edu
Authorization: DREAM apikey="..."

Parameters

NameRequired/OptionalDescriptionNotes
bySinceOptionalAn ISO datetime or the (sequential) ID from which you want to start fetching from (inclusive)[4]
byUntilOptionalAn ISO datetime or the (sequential) ID up to which to fetch to (inclusive)[4]
byCitizenshipsOptionalList of ISO 3166-1 alpha-2 country codes[1]
byEmailsOptionalList of emails[1]
byTrackerIDsOptionalList of tracker IDs[1], [2] 
byTrackerCodesOptionalList of tracker codes[1], [2]
limitOptionalHow many applicants to return (Allowed range is normally 1..32768, 32768 being the default). If the expand parameter is used, the limit is 8192.
expandOptionalExpand the chosen relational element(s), for example applicant,offer[3]

Notes

  • Note [1]: Lists can be either comma or space separated. All list items are combined with logical OR operators — in other words an application is considered matching if it matches to any of the values in the list.
  • Note [2]: you may use either tracker IDs or codes to reference trackers. However IDs are guaranteed not to change while the tracker codes offer no such guarantee.
  • Note [3]: Some elements in the returned objects are links to other API requests. Using the expand parameter, it is possible to expand this data to the actual records, saving additional API requests. The full list of possible expansions is trackers,documents,consents,invoices,wishes. You can set one or multiple expansions, combining them in a comma-separated fashion to the expand parameter. Note also that using this parameter caps to limit to 8192 due to performance reasons.
  • Note [4]: An ISO 8601 compatible datetime (inclusive) or the applicant ID to start from (inclusive). The date is applied to the registration time of the applicant, so you can only fetch applicants registered in the last N days, weeks or months. The applicant IDs are sequential integers, so you can simply save the last applicant ID you processed, and issue the next request with bySince=$lastID+1.

Example request

Request
curl
curl \
  -X GET \
  -H "Authorization: DREAM apikey=\"YOUR-API-KEY\"" \
  "https://apply.example.edu/api/v9/applicants?bySince=2025-10-01T00:00:00Z&byCitizenships=US,GB&expand=consents&limit=5"

Response headers

HeaderValueDescription
Content-Typeapplication/jsonMedia type of the resource
Content-Length1456Size of the response body in bytes
X-Count15Number of matching applicants

Response codes

Response codeDescription
200 OKThe list of applicants was successfully returned
400 Bad RequestOne of query parameters is invalid, see the error description

Example response

Response
{
  "123": {
    "id": 123,
    "type": "Child",
    "registered": "2025-10-15T10:33:16+00:00",
    "name": {
      "full": "John Smith",
      "given": "John",
      "middle": null,
      "family": "Smith",
      "parent": "John Smith"
    },
    "email": "john.smith@email.com",
    "phone": "+123.123345678",
    "reference": "3406038",
    "matriculation": null,
    "citizenship": "GB",
    "notes": null,
    "applications": "/api/v9/applicants/123/applications",
    "trackers": "/api/v9/applicants/123/trackers",
    "photo": "/api/v9/applicants/123/photo",
    "consents": {
      "1": {
        "decided": "2025-10-15T10:33:16+00:00",
        "decision": "Accept",
        "consent": "/api/v9/applicants/consents/1"
      },
      "2": {
        "decided": "2025-10-15T10:33:16+00:00",
        "decision": "Reject",
        "consent": "/api/v9/applicants/consents/2"
      },
      "4": {
        "decided": "2025-10-15T10:33:16+00:00",
        "decision": "Reject",
        "consent": "/api/v9/applicants/consents/4"
      }
    },
    "invoices": "/api/v9/applicants/123/invoices",
    "wishes": "/api/v9/applicants/123/wishes",
    "documents": "/api/v9/applicants/123/documents"
  }
}

POST Create an applicant

Create a new applicant/lead. The owner of the new account will be notified via email, using the applicant-welcome-api template. The welcome letter will also contain the account credentials needed for the applicant to start using his/her new account. Please include any additional instructions in the template — you can configure all templates using the admin interface (look for the Settings > Templates menu).

The URI for the new applicant account that was created is returned in the Location header.

Note that since this API request will send an email before returning, it is slightly slower than other API requests. This is a deliberate choice to avoid storing the (secrets-containing) email in more intermediate queues than required, while also guaranteeing that if the request succeeds, the email was accepted upstream.

If an applicant/lead with this email address exists, a 409 Conflict will be returned, along with the URI of the offending applicant in the Location header.

Syntax
  POST /api/v9/applicants
  Host: apply.example.edu
  Authorization: DREAM apikey="..."

Parameters

NameRequired/OptionalDescription
emailRequiredA valid email address. Must be unique (see above).
citizenshipOptionalThis is optional, but highly recommended. The citizenship affects all deadlines/fees displayed for the applicant. If not provided, it will be asked when the applicant is logging in. Accepts an ISO 3166-1 alpha-2 country code.
nameRequiredFull name of the lead/applicant. 1 to 50 characters. You must provide either name or both name_given/family.
name_givenRequiredGiven name of the lead/applicant. 1 to 50 characters. You must provide either name or both name_given/family.
name_familyRequiredFamily name of the lead/applicant. 1 to 50 characters. You must provide either name or both name_given/family.
phoneOptionalPhone number of the lead/applicant, for example +372 123456789. Up to 30 characters.
notesOptionalAny notes accompanying the lead/applicant. Up to 2048 characters.
referenceOptionalA reference code (often an external ID). Can also be managed individually, read more.
matriculationOptionalA matriculation number. Can also be managed individually, read more.
tracker_IDOptionalID of a tracker object to be associated with the applicant.

Example request

Request
curl
curl \
  -X POST \
  -H "Authorization: DREAM apikey=\"YOUR-API-KEY\"" \
  "https://apply.example.edu/api/v9/applicants?email=john.smith@email.com&citizenship=GB&name=John%20Smith"

Response headers

HeaderValueDescription
Content-Typeapplication/jsonMedia type of the resource
Content-Length0Size of the response body in bytes
Location/api/applicants/12345URI of the created applicant

Response codes

Response codeDescription
201 CreatedA new applicant/lead was successfully created
409 ConflictThis email address is already assigned to another applicant