The MARLO REST API uses token-based authentication. Every request must carry a QA token that identifies the caller and the CGIAR program (CRP, Platform, or Center) they are authorised to access. Tokens are issued via a dedicated endpoint and are scoped to a single program — a token issued forDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/CCAFS/MARLO/llms.txt
Use this file to discover all available pages before exploring further.
CCAFS cannot be used to read or write data for HarvestPlus.
Obtaining a QA token
Tokens are issued byPOST /api/v2/controllist/qatoken/. You must already have a MARLO user account with the REST API permission to call this endpoint.
Tokens are tied to a CRP/Platform/Center via the
smocode field, which is the program’s SMO identifier string. A user can hold tokens for multiple programs, but each token is valid for exactly one program scope.Request
The SMO identifier of the CGIAR program for which the token is issued (e.g.,
"CCAFS").The MARLO username of the account that will own the token.
The email address associated with the account.
The display name associated with the account.
Response
A successful200 OK response returns a QATokenAuthDTO object:
Internal numeric ID of the token record.
The bearer token string to use in subsequent API calls.
The CRP/program identifier the token is scoped to.
Username of the token owner.
Email of the token owner.
Display name of the token owner.
Token creation timestamp (
yyyy-MM-dd HH:mm:ss, America/Bogota timezone).Last update timestamp (
yyyy-MM-dd HH:mm:ss, America/Bogota timezone).Token expiry timestamp (
yyyy-MM-dd HH:mm:ss, America/Bogota timezone).Internal ID of the associated MARLO application user.
Using the token in API requests
Pass the token as aBearer token in the Authorization header on every API request:
Error responses
401 Unauthorized
The request did not include a valid token, or the token has expired.POST /api/v2/controllist/qatoken/ or contact your MARLO administrator to issue a fresh token.
403 Forbidden
The token is valid but the authenticated user lacks the required permission for the operation. Read endpoints requireFULL_READ_REST_API_PERMISSION; create, update, and delete endpoints require FULL_CREATE_REST_API_PERMISSION.
Token scope
Each QA token is scoped to a single CGIAR program identified bycrpId. The scope controls:
- Which entity paths you can call — only the
{CGIAREntity}matching your token’scrpId. - Which operations are allowed — determined by your user’s permission set (
FULL_READvsFULL_CREATE). - Expiry — tokens carry an
expirationDate. After that date, all requests return 401.
GET /institutions and GET /institution-types) do not require a program-scoped path, but still require a valid token.