Skip to main content

GET /api/cycles

Retrieves the paginated list of payment cycles.

Endpoint

GET /api/cycles

Headers

HeaderValueRequired
AuthorizationBearer {token}Yes

Query Parameters

Pagination

ParameterTypeDefaultDescription
pageinteger1Page number
itemsPerPageinteger30Items per page (max: 100)

Filters

ParameterTypeDescription
programmeIRIFilter by program
statutstringFilter by cycle status
statutValidationstringFilter by validation status
searchstringText search (code, name)

Status Values

ValueDescription
planifiePlanned cycle, not yet started
en_coursCycle in progress
termineCompleted cycle
annuleCancelled cycle

Validation Status Values

ValueDescription
brouillonIn preparation
en_attenteSubmitted, awaiting validation
valideValidated at all levels
rejeteRejected

Sorting

ParameterValuesDescription
order[dateDebut]asc, descSort by start date
order[createdAt]asc, descSort by creation date
order[code]asc, descSort by code

Success Response

Code: 200 OK

{
"@context": "/api/contexts/Cycle",
"@id": "/api/cycles",
"@type": "hydra:Collection",
"hydra:totalItems": 24,
"hydra:member": [
{
"@id": "/api/cycles/770e8400-e29b-41d4-a716-446655440001",
"@type": "Cycle",
"id": "770e8400-e29b-41d4-a716-446655440001",
"code": "CYC-2024-001",
"nom": "Cycle Janvier 2024",
"description": "Premier cycle de paiement de l'année 2024",
"dateDebut": "2024-01-01",
"dateFin": "2024-01-31",
"montantParBeneficiaire": "25000.00",
"statut": "termine",
"nbBeneficiairesPrevu": 850,
"nbBeneficiairesPaye": 842,
"montantTotalPrevu": "21250000.00",
"montantTotalPaye": "21050000.00",
"tauxExecution": 99.06,
"niveauValidation": 2,
"niveauxRequis": 2,
"statutValidation": "valide",
"genereAutomatiquement": false,
"programme": {
"@id": "/api/programmes/1",
"nom": "Transferts Monétaires 2024"
},
"createdAt": "2023-12-15T10:00:00+00:00"
}
],
"hydra:view": {
"@id": "/api/cycles?page=1",
"@type": "hydra:PartialCollectionView",
"hydra:first": "/api/cycles?page=1",
"hydra:last": "/api/cycles?page=1",
"hydra:next": "/api/cycles?page=2"
}
}

Examples

cURL - Simple List

curl https://sig.ucp-pch.org/api/cycles \
-H "Authorization: Bearer TOKEN"

cURL - With Filters

curl "https://sig.ucp-pch.org/api/cycles?statut=en_cours&statutValidation=valide" \
-H "Authorization: Bearer TOKEN"

JavaScript

const getCycles = async (filters = {}) => {
const params = new URLSearchParams();

if (filters.programme) params.append('programme', filters.programme);
if (filters.statut) params.append('statut', filters.statut);
if (filters.statutValidation) params.append('statutValidation', filters.statutValidation);
if (filters.search) params.append('search', filters.search);
if (filters.page) params.append('page', filters.page);

const response = await fetch(
`https://sig.ucp-pch.org/api/cycles?${params}`,
{
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
}
}
);

return response.json();
};

// Usage
const data = await getCycles({
statut: 'en_cours',
statutValidation: 'valide'
});

console.log(`Total: ${data['hydra:totalItems']} cycles`);
data['hydra:member'].forEach(cycle => {
console.log(`${cycle.code}: ${cycle.nom} - Rate: ${cycle.tauxExecution}%`);
});

Python

import requests

def get_cycles(token, **filters):
response = requests.get(
'https://sig.ucp-pch.org/api/cycles',
headers={'Authorization': f'Bearer {token}'},
params=filters
)
return response.json()

# Simple list
cycles = get_cycles(token)
print(f"Total: {cycles['hydra:totalItems']}")

# With filters
cycles = get_cycles(
token,
statut='en_cours',
statutValidation='valide'
)

for cycle in cycles['hydra:member']:
print(f"- {cycle['code']}: {cycle['nom']}")
print(f" Expected: {cycle['nbBeneficiairesPrevu']} | Paid: {cycle['nbBeneficiairesPaye']}")

Response Fields

General Information

FieldTypeDescription
idUUIDUnique identifier
codestringUnique cycle code
nomstringCycle name
descriptionstringDescription
dateDebutdateStart date
dateFindateEnd date

Amounts

FieldTypeDescription
montantParBeneficiairedecimalAmount per beneficiary
montantTotalPrevudecimalTotal expected amount
montantTotalPayedecimalTotal paid amount

Statistics

FieldTypeDescription
nbBeneficiairesPrevuintegerNumber of expected beneficiaries
nbBeneficiairesPayeintegerNumber of paid beneficiaries
tauxExecutionfloatExecution rate (%)

Validation

FieldTypeDescription
statutstringCycle status
statutValidationstringValidation status
niveauValidationintegerCurrent validation level
niveauxRequisintegerLevels required for complete validation

Notes

  • Cycles are linked to a program
  • The execution rate is automatically calculated (paid/expected * 100)
  • Multi-level validation is configurable per program
  • Cycles can be automatically generated (recurrence)