Skip to content

Projects

ProjectsFilters

Bases: BaseModel

Filter model for the Projects V3 endpoint (/v3/projects).

Field names mirror the V3 query parameters exactly. Notable V3 changes: - grantID removed (no longer a V3 parameter). - fromStartDate/toStartDate/fromEndDate/toEndDate changed from date to str (V3 accepts bare years, e.g. "2022"). - 13 new fields added (year filters, funder, country, fundinglevel{0,1,2}Id, projectOAMandatePublications).

Note

funder returned 0 results for all values tested as of 2026-07; prefer fundingShortName. Kept for forward compatibility.

Source code in src/aireloom/endpoints.py
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
class ProjectsFilters(BaseModel):
    """Filter model for the Projects V3 endpoint (``/v3/projects``).

    Field names mirror the V3 query parameters exactly. Notable V3 changes:
        - ``grantID`` removed (no longer a V3 parameter).
        - ``fromStartDate``/``toStartDate``/``fromEndDate``/``toEndDate`` changed
          from ``date`` to ``str`` (V3 accepts bare years, e.g. ``"2022"``).
        - 13 new fields added (year filters, ``funder``, ``country``,
          ``fundinglevel{0,1,2}Id``, ``projectOAMandatePublications``).

    Note:
        ``funder`` returned 0 results for all values tested as of 2026-07; prefer
        ``fundingShortName``. Kept for forward compatibility.
    """

    search: str | None = None
    title: str | None = None
    keywords: list[str] | None = None
    id: str | None = None
    code: str | None = None
    acronym: str | None = None
    callIdentifier: str | None = None
    fundingShortName: str | None = None
    fundingStreamId: str | None = None
    funder: str | None = None
    fromStartDate: str | None = None
    toStartDate: str | None = None
    fromEndDate: str | None = None
    toEndDate: str | None = None
    fromStartYear: str | None = None
    toStartYear: str | None = None
    fromEndYear: str | None = None
    toEndYear: str | None = None
    startYear: str | None = None
    endYear: str | None = None
    activeYear: str | None = None
    country: str | None = None
    fundinglevel0Id: str | None = None
    fundinglevel1Id: str | None = None
    fundinglevel2Id: str | None = None
    projectOAMandatePublications: str | None = None
    relOrganizationName: str | None = None
    relOrganizationId: str | None = None
    relCommunityId: str | None = None
    relOrganizationCountryCode: str | None = None
    relCollectedFromDatasourceId: str | None = None
    logicalOperator: Literal["AND", "OR", "NOT"] | None = None

    model_config = ConfigDict(extra="forbid")

acronym = None class-attribute instance-attribute

activeYear = None class-attribute instance-attribute

callIdentifier = None class-attribute instance-attribute

code = None class-attribute instance-attribute

country = None class-attribute instance-attribute

endYear = None class-attribute instance-attribute

fromEndDate = None class-attribute instance-attribute

fromEndYear = None class-attribute instance-attribute

fromStartDate = None class-attribute instance-attribute

fromStartYear = None class-attribute instance-attribute

funder = None class-attribute instance-attribute

fundingShortName = None class-attribute instance-attribute

fundingStreamId = None class-attribute instance-attribute

fundinglevel0Id = None class-attribute instance-attribute

fundinglevel1Id = None class-attribute instance-attribute

fundinglevel2Id = None class-attribute instance-attribute

id = None class-attribute instance-attribute

keywords = None class-attribute instance-attribute

logicalOperator = None class-attribute instance-attribute

model_config = ConfigDict(extra='forbid') class-attribute instance-attribute

projectOAMandatePublications = None class-attribute instance-attribute

relCollectedFromDatasourceId = None class-attribute instance-attribute

relCommunityId = None class-attribute instance-attribute

relOrganizationCountryCode = None class-attribute instance-attribute

relOrganizationId = None class-attribute instance-attribute

relOrganizationName = None class-attribute instance-attribute

search = None class-attribute instance-attribute

startYear = None class-attribute instance-attribute

title = None class-attribute instance-attribute

toEndDate = None class-attribute instance-attribute

toEndYear = None class-attribute instance-attribute

toStartDate = None class-attribute instance-attribute

toStartYear = None class-attribute instance-attribute

ProjectsClient

Bases: StandardResourceClient

Client for the OpenAIRE Projects API endpoint.

Attributes:

Name Type Description
_entity_path str

The API path for projects.

_entity_model type[Project]

Pydantic model for a single project.

_search_response_model type[ProjectResponse]

Pydantic model for the search response envelope.

Source code in src/aireloom/resources/projects_client.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class ProjectsClient(StandardResourceClient):
    """Client for the OpenAIRE Projects API endpoint.

    Attributes:
        _entity_path (str): The API path for projects.
        _entity_model (type[Project]): Pydantic model for a single project.
        _search_response_model (type[ProjectResponse]): Pydantic model for the
                                                        search response envelope.
    """

    _entity_path: str = PROJECTS
    _entity_model: type[Project] = Project
    _search_response_model: type[ProjectResponse] = ProjectResponse
    _batch_fields: dict[str, str] = {
        "code": "code",
        "openaire_id": "id",
    }