Publish Documents via API#
This guide demonstrates how a third-party client can publish an announcement with associated files to the Tablon using the udala.tablon REST API.
Scenario#
You have an external application that generates public announcements and needs to publish them on your Plone 6 Electronic Notice Board in multiple languages (for example, Basque eu and Spanish es).
1. Preparing the Payload#
The API accepts a dynamic JSON payload. You will need to encode any files in Base64 format.
Create a payload.json file:
{
"record_number": "2024/001",
"date_start": "2024-03-01T00:00:00",
"date_end": "2024-03-31T23:59:59",
"origin": "external",
"translations": {
"eu": {
"origin_department": "Kultura Saila",
"origin_details": "Udaletxea",
"description": "Kultur egitarauaren diru-laguntzak",
"publication_url": "https://www.donostia.eus"
},
"es": {
"origin_department": "Departamento de Cultura",
"origin_details": "Ayuntamiento",
"description": "Subvenciones para programas culturales",
"publication_url": "https://www.donostia.eus/es"
}
},
"documents": [
{
"language": null,
"filename": "deialdia_convocatoria.pdf",
"contents": "JVBERi0xLjMKJc...",
"titles": {
"eu": "Deialdia",
"es": "Convocatoria"
}
}
]
}
2. Sending the Request#
Use a tool like curl to post the payload to the @tablon endpoint. You must provide a valid authentication token (like a JWT or Basic Auth) with permissions to add content to the Tablon container.
curl -X POST "http://localhost:8080/Plone/@tablon" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <YOUR_TOKEN>" \
-d @payload.json
3. Handling the Response#
If successful, the API returns a 201 Created status code and a JSON response containing the generated Shared UUID and the physical URLs of the created Plone items. The returned url_{lang} keys are dynamic and will precisely match the language codes provided in your payload's translations dictionary.
{
"@id": "http://localhost:8080/Plone/@tablon/b2c3d4e5f6g7h8i9j0k1",
"uuid": "b2c3d4e5f6g7h8i9j0k1",
"url_eu": "http://localhost:8080/Plone/tablon_id/documento_tablon",
"url_es": "http://localhost:8080/Plone/es/tablon_id/documento_tablon"
}
You can now use uuid to fetch, update, or delete the document through the @tablon endpoint, completely independent of its physical URL or language.