---
title: "Post a recruitment for a group exchange diary"
method: POST
path: "/exchange/board/posts"
tags: ["Exchange board"]
---

# Post a recruitment for a group exchange diary

`POST /exchange/board/posts`

## Request

- Base URL: `https://whatareyoudo.ing/api/v1`
- URL: `https://whatareyoudo.ing/api/v1/exchange/board/posts`
- Auth: HTTP bearer

One open post per account (EXCHANGE_BOARD_LIMIT `open_post`); not while in an exchange (EXCHANGE_ALREADY_ACTIVE). Contact details anywhere in it are refused (EXCHANGE_CONTACT_INFO). Tags are normalised (lower case, no leading #). Open for seven days, or until it starts. From the account's own session only (EXCHANGE_ACCOUNT_REQUIRED) and with current consent to the exchange terms (EXCHANGE_CONSENT_REQUIRED). 404 while EXCHANGE_BOARD_ENABLED is off.

## Request body

- ExchangeBoardPostRequest
  - `title` string, required
  - `body` string, required
  - `tags` string[]
  - `locale` 'ja' | 'en' | 'de' | 'zh' | 'ar' | 'es' | 'fr' | 'hi' | 'id' | 'it' | 'ko' | 'pt' | 'ru' | 'tr' | 'vi', required
  - `groupSize` integer, required
  - `cover` union
    - object
      - `preset` string, required
    - object
      - `assetId` string, uuid, required
    - unknown

## Response `201`

Created

- object
  - `data` ExchangeBoardMyPost, required
    - `id` string, uuid, required
    - `aliasName` string, required
    - `title` string, required
    - `body` string, required
    - `tags` string[], required
    - `locale` string, required
    - `groupSize` integer, required
    - `acceptedCount` integer, required
    - `status` 'open' | 'started' | 'closed' | 'expired', required
    - `createdAt` string, required
    - `expiresAt` string, required
    - `mine` boolean, required
    - `myApplication` object, nullable, required
      - `id` string, uuid, required
      - `postId` string, uuid, required
      - `postTitle` string, required
      - `postAliasName` string, required
      - `aliasName` string, required
      - `message` string, required
      - `status` 'pending' | 'accepted' | 'declined' | 'withdrawn', required
      - `postStatus` 'open' | 'started' | 'closed' | 'expired', required
      - `createdAt` string, required
      - `exchangeId` string, uuid, nullable, required
    - `coverPreset` string, nullable, required
    - `coverUrl` string, required
    - `applications` ExchangeBoardApplication[], required
      - `id` string, uuid, required
      - `aliasName` string, required
      - `message` string, required
      - `status` 'pending' | 'accepted' | 'declined' | 'withdrawn', required
      - `createdAt` string, required
    - `exchangeId` string, uuid, nullable, required
  - `meta` object, required
    - `requestId` string, required

## Changes

- **2026-10-20** `48dd8a54abea`: 3 info
  - added the new optional request property `cover`
  - added the required property `data/allOf[#/components/schemas/ExchangeBoardPost]/coverPreset` to the response with the `201` status
  - added the required property `data/allOf[#/components/schemas/ExchangeBoardPost]/coverUrl` to the response with the `201` status
- **2026-10-20** `a36285d04daa`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/whatareyoudo/apis/whatcha-api/changes/exchange/board/posts/post.md)

---

[API](https://skmtc.dev/whatareyoudo/apis/whatcha-api.md) · [All operations](https://skmtc.dev/whatareyoudo/apis/whatcha-api/llms.txt) · [OpenAPI document](https://skmtc.dev/whatareyoudo/apis/whatcha-api/revisions/48dd8a54abea?raw)
