PlatformXeDocs
Get API Key

Federation Members

Invite organizations into a federation group, accept invitations, and leave or remove members.

Members are organizations that participate in a federation group. Each member has a unique prefix used to namespace its modules.

Membership needs consent from both sides. The group owner invites an organization, and the invited organization accepts with its own API key. Until it accepts, the membership is INVITED and the owner cannot pull modules from it, push role assignments into it, or push fraud configuration to it.

Scope: permissions:manage

Rate limit: 500/hr

Membership lifecycle

StatusSet byPull / push / fraud push
INVITEDOwner calls POST …/membersSkipped. A targeted pull or push returns NOT_FOUND
ACTIVEInvited organization calls POST …/members/acceptIncluded

The owner's own membership is ACTIVE from the moment the group is created. Memberships that existed before 2026-09-15 were migrated as ACTIVE.

Invite a member

POST /api/v1/permissions/federation/groups/:id/members

Only the group owner may invite.

FieldTypeRequiredDescription
organizationIdstringYesThe org ID to invite
prefixstringYes2-4 uppercase letters, unique within the group
curl -X POST https://api.platformxe.com/api/v1/permissions/federation/groups/fed_abc123/members \
  -H "Content-Type: application/json" \
  -H "x-api-key: pxk_live_owner_key" \
  -d '{
    "organizationId": "org_lettings456",
    "prefix": "LT"
  }'
await px.permissions.addFederationMember('fed_abc123', {
  organizationId: 'org_lettings456',
  prefix: 'LT',
});

HTTP 201. The membership starts as INVITED:

{
  "success": true,
  "data": {
    "id": "mem_002",
    "groupId": "fed_abc123",
    "organizationId": "org_lettings456",
    "prefix": "LT",
    "role": "member",
    "status": "INVITED",
    "joinedAt": "2026-09-15T08:00:00.000Z"
  }
}

Prefix rules

  • Must be 2-4 uppercase letters (A-Z)
  • Must be unique within the group
  • Cannot be changed after creation — remove and re-invite to change prefix
  • Used in federated keys: LT:BOOKINGS:CREATE

Accept an invitation

POST /api/v1/permissions/federation/groups/:id/members/accept

Call this with the invited organization's own API key. The accepting organization is always the one that owns the key, and any request body is ignored, so no organization can accept on another's behalf. The response is the membership with status: "ACTIVE".

curl -X POST https://api.platformxe.com/api/v1/permissions/federation/groups/fed_abc123/members/accept \
  -H "x-api-key: pxk_live_lettings_key"
StatusCodeWhen
200—Accepted
404NOT_FOUNDThe group does not exist, or your organization holds no invitation to it
409CONFLICTThe membership is already active

Leave a group, or decline an invitation

DELETE /api/v1/permissions/federation/groups/:id/members

A member removes its own membership by passing its own organizationId. This works for an INVITED membership (declining) and an ACTIVE one (leaving). The owner cannot leave its own group.

The group owner can also remove any other member with the same call.

organizationId may be sent as a query parameter or in the JSON body.

curl -X DELETE "https://api.platformxe.com/api/v1/permissions/federation/groups/fed_abc123/members?organizationId=org_lettings456" \
  -H "x-api-key: pxk_live_lettings_key"
await px.permissions.removeFederationMember('fed_abc123', 'org_lettings456');
CallerTargetResult
Any member (invited or active)Itself200 — removed
OwnerAnother member200 — removed
OwnerItself403 FORBIDDEN — the owner cannot be removed
OwnerAn organization outside the group404 NOT_FOUND — "Organization is not a member of this group"
A memberAnother member403 FORBIDDEN
An organization outside the groupAnyone404 NOT_FOUND — same answer as for a group that does not exist

You cannot remove the owning organization from its own group. To transfer ownership, delete and recreate the group under a different owner.

Listing members

Members, with their status, are returned as part of the group detail and sync status responses:

{
  "success": true,
  "data": {
    "id": "fed_abc123",
    "name": "Caldera Ecosystem",
    "members": [
      { "id": "mem_001", "organizationId": "org_owner456", "prefix": "OWNER", "role": "owner", "status": "ACTIVE" },
      { "id": "mem_002", "organizationId": "org_lettings456", "prefix": "LT", "role": "member", "status": "ACTIVE" },
      { "id": "mem_003", "organizationId": "org_concierge789", "prefix": "CC", "role": "member", "status": "INVITED" }
    ]
  }
}

Group existence is not disclosed

An organization that is neither the owner nor a member (invited or active) of a group receives NOT_FOUND (HTTP 404) from every group endpoint. That is the same answer as for a group id that does not exist, so group ids cannot be probed. A member that is not the owner receives FORBIDDEN (HTTP 403) for owner-only operations.

Error responses

CodeHTTPDescription
VALIDATION_ERROR400Missing organizationId / prefix, or the prefix is not 2-4 uppercase letters
FORBIDDEN403Not on Enterprise plan; a member attempting an owner-only operation; removing the owner
NOT_FOUND404Group does not exist or you are not in it; no invitation to accept; target organization is not a member
CONFLICT409Organization already in the group; prefix already taken; membership already active