Raw schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"GUIDE",
"QUESTION",
"BLOG",
"ANNONCE",
"MARCHE",
"SERVICE"
],
"description": "Post type."
},
"category": {
"type": "string",
"description": "Active Pionra category slug (must be permitted by the API key)."
},
"title": {
"type": "string",
"description": "Post title, 5β200 characters."
},
"bodyMarkdown": {
"type": "string",
"description": "Post body in Markdown, 20β20000 characters."
},
"language": {
"type": "string",
"enum": [
"fr",
"en",
"zh",
"ar",
"pt",
"es"
],
"description": "Content language."
},
"cityScope": {
"type": "string",
"description": "Optional city slug to scope the post."
},
"countryScope": {
"type": "string",
"description": "Optional ISO country code to scope the post."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional tags."
},
"city": {
"type": "string",
"description": "Optional free-form city label for ANNONCE, MARCHE, or SERVICE posts."
},
"housing_city": {
"type": "string",
"description": "Alias for city."
},
"locationCity": {
"type": "string",
"description": "Optional location label shown on the post; defaults to city."
},
"metroStation": {
"type": "string",
"description": "Optional nearby metro or transit station."
},
"housing_metro": {
"type": "string",
"description": "Alias for metroStation."
},
"price": {
"type": "number",
"description": "Optional price amount."
},
"housing_rent": {
"type": "number",
"description": "Alias for price."
},
"priceCurrency": {
"type": "string",
"description": "Optional ISO currency code. Defaults to EUR for ANNONCE, MARCHE, and SERVICE."
},
"negotiable": {
"type": "boolean",
"description": "Optional negotiable flag for classified-style posts."
},
"expiresAt": {
"type": "string",
"description": "Optional ISO date or date-time when the post should expire."
},
"housingType": {
"type": "string",
"description": "Optional housing type, for example studio, chambre, or colocation."
},
"housingSurface": {
"type": "number",
"description": "Optional housing surface area. Stored as an integer."
},
"housingRooms": {
"type": "number",
"description": "Optional room count. Stored as an integer."
},
"housingFurnished": {
"type": "boolean",
"description": "Optional furnished flag."
},
"housingAvailableFrom": {
"type": "string",
"description": "Optional ISO date or date-time when the housing becomes available."
},
"housing_available_at": {
"type": "string",
"description": "Alias for housingAvailableFrom."
},
"housingDeposit": {
"type": "number",
"description": "Optional housing deposit amount."
},
"jobContractType": {
"type": "string",
"description": "Optional job or service contract type."
},
"jobRemote": {
"type": "string",
"description": "Optional remote mode label, for example onsite, hybrid, or remote."
},
"jobSalaryMin": {
"type": "number",
"description": "Optional minimum salary. Stored as an integer."
},
"jobSalaryMax": {
"type": "number",
"description": "Optional maximum salary. Stored as an integer."
},
"coverEmoji": {
"type": "string",
"description": "Optional cover emoji, up to 16 characters."
},
"cover_emoji": {
"type": "string",
"description": "Alias for coverEmoji."
},
"coverImageUrl": {
"type": "string",
"format": "uri",
"description": "Optional cover image. Must be a public https:// URL to an image (jpeg/png/webp/gif/avif, max 8MB). Pionra fetches it server-side and stores it as the post cover; takes precedence over coverEmoji."
},
"cover_image_url": {
"type": "string",
"format": "uri",
"description": "Alias for coverImageUrl."
}
},
"required": [
"type",
"category",
"title",
"bodyMarkdown",
"language"
],
"additionalProperties": false
}