curl --request PUT \
--url https://api.example.com/api/proposals/{proposal_id} \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"status": "<string>",
"uploaded_files": {},
"text_inputs": {},
"metadata": {}
}
'{
"id": "<string>",
"proposalCode": "<string>",
"title": "<string>",
"description": "<string>",
"status": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"user_id": "<string>",
"user_email": "<string>",
"user_name": "<string>",
"uploaded_files": {},
"text_inputs": {},
"metadata": {},
"404 Not Found": {},
"403 Forbidden": {}
}Update an existing proposal’s title, description, status, uploaded files, text inputs, or metadata.
curl --request PUT \
--url https://api.example.com/api/proposals/{proposal_id} \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"status": "<string>",
"uploaded_files": {},
"text_inputs": {},
"metadata": {}
}
'{
"id": "<string>",
"proposalCode": "<string>",
"title": "<string>",
"description": "<string>",
"status": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"user_id": "<string>",
"user_email": "<string>",
"user_name": "<string>",
"uploaded_files": {},
"text_inputs": {},
"metadata": {},
"404 Not Found": {},
"403 Forbidden": {}
}Authorization: Bearer <token>
a1b2c3d4-e5f6-7890-abcd-ef1234567890PROP-20260304-A1B2rfp-document: Array of RFP document URLsconcept-document: Array of concept document URLsreference-proposals: Array of reference proposal URLs{
"rfp-document": ["s3://bucket/proposal/rfp.pdf"],
"reference-proposals": ["s3://bucket/proposal/ref1.pdf", "s3://bucket/proposal/ref2.pdf"]
}
initial-concept: User’s initial concept text{
"initial-concept": "This project aims to improve climate resilience..."
}
{
"custom_field": "value",
"processing_notes": "Additional information"
}
curl -X PUT https://api.igadregion.org/api/proposals/PROP-20260304-A1B2 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Climate Resilience Project",
"description": "Enhanced proposal for climate adaptation with new focus areas"
}'
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"proposalCode": "PROP-20260304-A1B2",
"title": "Updated Climate Resilience Project",
"description": "Enhanced proposal for climate adaptation with new focus areas",
"template_id": null,
"status": "draft",
"created_at": "2026-03-04T10:30:00.000Z",
"updated_at": "2026-03-04T16:20:00.000Z",
"user_id": "user_123",
"user_email": "[email protected]",
"user_name": "John Doe",
"uploaded_files": {
"rfp-document": ["s3://bucket/PROP-20260304-A1B2/rfp.pdf"],
"concept-document": ["s3://bucket/PROP-20260304-A1B2/concept.pdf"]
},
"text_inputs": {
"initial-concept": "Brief description of the project concept..."
},
"metadata": {
"rfp_analysis_status": "completed",
"concept_analysis_status": "processing"
}
}
{
"detail": "Proposal not found"
}
{
"detail": "Access denied"
}
updated_at field is automatically set to the current timestamp on every update.metadata field is replaced entirely with the new value provided, not merged. To preserve existing metadata, retrieve it first and include all fields in your update.