Create a community

Create a community under your brand from your own systems, with its type, access settings, and first members.

A community is the top-level space your members join; groups and their videos live inside it. This endpoint creates one the same way Manage > Communities > Create does in Brand Control Center. Use it to create communities from an onboarding flow, a campaign tool, or a migration script. Create communities and groups explains how the two fit together.

The account behind your access token becomes the community's leader, and your brand's owner account is added as a moderator a moment later. See Generate an access token for the token.

Endpoint

POST /api/thirdparty/community/create

EnvironmentBase URL
Productionhttps://api.begenuin.com
QAhttps://api.qa.begenuin.com

Send the token as a bearer token in the Authorization header, and the fields as a JSON body with the Content-Type: application/json header.

Parameters

ParameterTypeRequiredDescription
handlestringRequiredThe community's URL handle, 3 to 24 characters. Genuin stores it in lowercase, and it has to be unique across all of Genuin.
namestringRequiredThe display name. Leading and trailing spaces are trimmed, and at least one character has to remain.
typeintegerRequired1 for a public community, 2 for a private one. Members join a private community by invitation or by an approved join request.
actionsarrayRequiredWho can create groups in the community. See Actions.
descriptionstringOptionalUp to 400 characters. Hashtags in the text are kept as written.
tagsstringRequired with descriptionComma-separated discovery tags, such as trailrunning,races. Required when you send a description, otherwise optional.
dpstringOptionalFile name of the profile image. Upload it first; see Upload an image.
bannerstringOptionalFile name of the banner image, uploaded the same way.
usersarrayOptionalFirst members, each {"user_id": "<uuid>"} or {"phone_number": "<digits>"}. They're added after the response is sent.
community_idstringOptionalA UUID to use as the community's id, when your system assigns ids.
brand_idintegerOptionalDefaults to the brand your token belongs to. Another brand's id works only when your account is a user of that brand.
is_ai_generatedbooleanOptionalMarks the community as AI-generated. Default false.
is_ai_generated_dp, is_ai_generated_bannerbooleanOptionaltrue when the image came from Genuin's generation flow, so it's copied from the generation bucket. Default false.
languagestringOptionalLanguage code, such as en.
locationobjectOptional{"latitude": <-90 to 90>, "longitude": <-180 to 180>}.

Fields that aren't listed are dropped without an error. In particular, categories isn't a parameter of this endpoint.

Actions

actions sets who can create groups in the community. Send exactly one entry: the action_id for the community type, with one of its two options.

Community typeaction_idaccess_type_idWho can create groups
1 (public)11All community members
1 (public)12Admins only
2 (private)23All community members
2 (private)24Admins only

A missing action, a second action, or an access_type_id that doesn't belong to the action returns 412 with code 5166. Admins are the community's leader and moderators.

Upload an image

dp and banner name files that already exist in Genuin's media storage. To upload one, request a signed URL with the same bearer token, then send the bytes to it:

cURL
bash
curl -X POST https://api.begenuin.com/api/v3/users/video/upload/create_upload_url \
  -H "Authorization: Bearer {{GN_ACCESS_TOKEN}}" \
  -H "Content-Type: application/json" \
  -d '{ "contentType": "image/png", "path": "uploads/profile_images/community/{{DP_FILE}}" }'
cURL
bash
curl -X PUT "{{UPLOAD_URL}}" -H "Content-Type: image/png" --data-binary @dp.png

Pass the file name, such as trail-runners-dp.png, as dp. Banners go under uploads/community/banner/. The signed URL accepts one PUT and expires after a short time, so request it right before the upload.

Returns

Returns 200 OK with the new community's id, share URL, image URLs, colors, and the leader's member object. The community is live as soon as the response arrives: its share URL opens and the leader can post.

Three things finish asynchronously and can lag the response by a few seconds: the first members from users, the moderator role for your brand owner, and search indexing.

Request

cURL
bash
curl -X POST https://api.begenuin.com/api/thirdparty/community/create \
  -H "Authorization: Bearer {{GN_ACCESS_TOKEN}}" \
  -H "Content-Type: application/json" \
  -d '{
    "handle": "trail-runners",
    "name": "Trail Runners",
    "description": "Weekly routes, gear talk, and race recaps #trailrunning",
    "tags": "trailrunning,races",
    "type": 1,
    "actions": [{ "action_id": 1, "access_type_id": 1 }],
    "users": [{ "user_id": "{{USER_ID}}" }]
  }'

Response

Response
json
{
  "code": 200,
  "message": "XXXX-[Community has been created successfully.]",
  "data": {
    "community_id": "0a2be302-04af-4642-a436-1612554e48a6",
    "share_url": "https://community.example.com/community/trail-runners",
    "dp": null,
    "banner": null,
    "color_code": "#A4E6DA",
    "text_color_code": "#49CDB5",
    "leader": {
      "member_id": "0bf977ed-4887-4056-a8f4-1f0de71101f1",
      "name": "Example Brand",
      "bio": null,
      "nickname": "examplebrand",
      "phone": null,
      "is_brand_system_user": true,
      "is_avatar": false,
      "brand": { "brand_id": 1429, "brand_slug": "example-brand", "brand_user_logo": null },
      "profile_image": "https://media.begenuin.com/uploads/profile_images/1706610191569_Vector.png",
      "profile_image_s": "https://media.begenuin.com/uploads/profile_images/s/1706610191569_Vector.png",
      "profile_image_m": "https://media.begenuin.com/uploads/profile_images/m/1706610191569_Vector.png",
      "profile_image_l": "https://media.begenuin.com/uploads/profile_images/l/1706610191569_Vector.png"
    }
  }
}

share_url combines your brand's community domain with the community's slug, which Genuin derives from the name and handle. color_code is picked from Genuin's palette and backs the community card until a profile image is set. Keep community_id: every later call, such as adding members, adding moderators, or creating a group, takes it.

Errors

Every error response carries an HTTP status, a string code, a message, and a data object. Match on code.

HTTP statuscodeCauseFix
400 Bad RequestnoneA field failed validation. data.message names the failing fields, such as handle, type; there's no top-level code or message.Check the types, lengths, and required fields in the Parameters table.
401 Unauthorized5159You sent a brand_id your account isn't a user of.Omit brand_id, or use the brand your token belongs to.
404 Not Found5235brand_id doesn't match an active brand.Check the id.
409 Conflict5216The handle is taken. Message: XXXX-[community handle already exists.].Pick another handle.
409 Conflict5217The dp file name is already used by another community.Upload the image under a new file name.
412 Precondition Failed5166actions doesn't match the community type.Send one entry from the Actions table.
400 Bad Request1099The server couldn't process the request.Retry once. If it persists, contact the Genuin team with the request timestamp.

Limitations

  • One leader: The token's account is the leader, and the API can't transfer leadership. To let a person run the community, add them with Add moderators to a community.
  • Handle is fixed: There's no API to change a handle after creation.
  • Many-to-one brand: Communities belong to one brand. A community created with another brand's brand_id appears in that brand's Brand Control Center.
  • Rate limit: There's no rate limit on this endpoint.

See also

TRUST AND COMPLIANCE

© 2026 Genuin Inc.

Genuin Footer