Skip to content

Colectica API Reference

The calls the Bauhaus Back-Office makes to Colectica Repository. All of them go through colectica-client, the SDK that owns the only HTTP client to Colectica and handles authentication — application code never deals with tokens.

Paths below are relative to the API root, <baseUrl><apiPath> (by default https://…/api/v1/). The token endpoint is the exception: it sits on the server root.

POST {{COLECTICA_URL}}/token/createtoken
Content-Type: application/json
{ "username": "…", "password": "…" }

The returned access token is cached in memory and sent as Authorization: Bearer … on every call. On a 401 or 403 the client invalidates it, obtains a fresh one, and retries the call once.

In token authentication mode this endpoint is not used: the bearer token is fetched from Keycloak instead — see Connect to a Colectica Repository.

POST {{COLECTICA_URL}}/api/v1/_query
Content-Type: application/json
{ "itemTypes": ["a51e85bb-6259-4488-8df2-f08cb43485f8"], "searchLatestVersion": true }

Returns the latest version of every item of the given types. Used to list groups and study units.

POST {{COLECTICA_URL}}/api/v1/_query/advanced
Content-Type: application/json
{ "itemTypes": ["…"], "searchLatestVersion": true, "resultsIncludeAll": true }

Same search, but resultsIncludeAll asks Colectica for the rich per-item property bags — notably DateProperties.versionDate, which the plain _query does not return. Used to list physical instances with their modification date.

GET {{COLECTICA_URL}}/api/v1/item/{agency}/{id}
GET {{COLECTICA_URL}}/api/v1/item/{agency}/{id}/{version}

One item, with its DDI 3.3 XML in the Item field. Without a version, the latest is returned.

POST {{COLECTICA_URL}}/api/v1/item/_getList
Content-Type: application/json
{ "identifiers": [ { "agencyId": "fr.insee", "identifier": "586a…", "version": 3 } ] }

Batch fetch of full items. This is the second half of every set read.

GET {{COLECTICA_URL}}/api/v1/set/{agency}/{id}
GET {{COLECTICA_URL}}/api/v1/set/{agency}/{id}/{version}

Returns the references of every item reachable from the root — not their content. Bauhaus then feeds those references to item/_getList. Reading a physical instance is exactly this two-step: set/ then _getList.

GET {{COLECTICA_URL}}/api/v1/ddiset/{agency}/{id}

Returns the complete DDI set as a single document. Used for groups. The response is read as raw bytes and decoded as UTF-8 explicitly, because Colectica omits the charset and the default would be ISO-8859-1.

POST {{COLECTICA_URL}}/api/v1/_query/relationship/bysubject/descriptions
POST {{COLECTICA_URL}}/api/v1/_query/relationship/byobject/descriptions
Content-Type: application/json
{
"itemTypes": ["8b108ef8-b642-4484-9c49-f88e4bf7cf1d"],
"targetItem": { "agencyId": "fr.insee", "identifier": "6755…" }
}
DirectionMeaningUsed for
bysubjectItems the target references — its childrenWalking down Group → LogicalProduct → scheme → item
byobjectItems that reference the target — its parentsAnswering “who uses this code list / category / sentinel representation?”

itemTypes filters server-side, so the response carries only the references that matter. This is the cheap alternative to downloading a whole set/ just to read each item’s type. The response also carries the items’ ItemName and Label dictionaries, which spares a separate label query.

POST {{COLECTICA_URL}}/api/v1/item
Content-Type: application/json
{
"Items": [
{
"ItemType": "a51e85bb-6259-4488-8df2-f08cb43485f8",
"AgencyId": "fr.insee",
"Version": 2,
"Identifier": "586a6306-c67d-4fda-a0ce-7e96564bda58",
"Item": "<Fragment xmlns:r=\"ddi:reusable:3_3\" xmlns=\"ddi:instance:3_3\">…</Fragment>",
"VersionDate": "2026-05-13T12:51:36.9134615Z",
"VersionResponsibility": "abcde",
"IsPublished": false,
"IsDeprecated": false,
"IsProvisional": false,
"ItemFormat": "DC337820-AF3A-4C0B-82F9-CF02535CDE83"
}
],
"options": { "namedOptions": ["RegisterOrReplace"] }
}
FieldTypeDescription
ItemTypeUUIDDDI type — see DDI Item Types
AgencyIdStringResponsible organisation, fr.insee by default
VersionIntegerVersion number
IdentifierUUIDItem identifier
ItemXML StringThe DDI 3.3 fragment
VersionDateISO DateTimeStamped by Bauhaus — Colectica does not fill it in
VersionResponsibilityStringFrom server.versionResponsibility. Also written inside the fragment, as r:VersionResponsibility right after r:Version
IsPublished / IsDeprecated / IsProvisionalBooleanItem state flags
ItemFormatUUIDFormat of the Item payload

RegisterOrReplace replaces the item when it already exists and creates it otherwise. A save sends one request carrying every item it touches — the physical instance, its variables, the code lists and categories, the schemes that had to be provisioned — so the write is atomic.

POST {{COLECTICA_URL}}/api/v1/item/_updateState
Content-Type: application/json
{
"ids": [ { "agencyId": "fr.insee", "identifier": "…", "version": 1 } ],
"state": true,
"applyToAllVersions": true
}

Sets an item’s state — used to deprecate the groups and study units of a local seeding run.

<Fragment xmlns:r="ddi:reusable:3_3" xmlns="ddi:instance:3_3">
<Group isUniversallyUnique="true" versionDate="2026-05-13T12:51:36.9134615Z" xmlns="ddi:group:3_3">
<r:URN>urn:ddi:fr.insee:586a6306-c67d-4fda-a0ce-7e96564bda58:1</r:URN>
<r:Agency>fr.insee</r:Agency>
<r:ID>586a6306-c67d-4fda-a0ce-7e96564bda58</r:ID>
<r:Version>1</r:Version>
<r:VersionResponsibility>abcde</r:VersionResponsibility>
<r:Citation>
<r:Title>
<r:String xml:lang="en-GB">Household budget survey</r:String>
<r:String xml:lang="fr-FR">Enquête Budget de famille</r:String>
</r:Title>
</r:Citation>
</Group>
</Fragment>