Partner Directory API
- Base URL:
https://partner-directory-api.sls.epilot.io - Full API Docs: https://docs.epilot.io/api/partner-directory
Usageโ
import { epilot } from '@epilot/sdk'
epilot.authorize(() => '<token>')
const { data } = await epilot.partnerDirectory.approvePartner(...)
Tree-shakeable importโ
import { getClient, authorize } from '@epilot/sdk/partner-directory'
const partnerDirectoryClient = getClient()
authorize(partnerDirectoryClient, () => '<token>')
const { data } = await partnerDirectoryClient.approvePartner(...)
Operationsโ
Partners
approvePartnerrejectPartnersearchAssignablebatchGetAssignablegetPartnerByTokenactivatePartnersearchGeolocationForTextinvitePartnerV2
Partner Users
getPartnerUserscreatePartnerUserdeletePartnerUsergetPartnerRolescreatePartnerRoleupdatePartnerRoledeletePartnerRoleassignPartnerUserRolesunassignPartnerUserRoles
Schemas
InviteTokenPartnerPartnerIdOrganizationIdActivatePartnerPayloadPartnerInvitationPayloadAssignableBaseAssignableAssignableUserAssignablePartnerUserAssignableGroupAssignableOrganizationAssignableEcpPlaceholderSearchGeolocationGeolocationAddressAddressGeolocationPartnerUserCreatePartnerUserPayloadCreatePartnerRolePayloadUpdatePartnerRolePayloadGrantGrantWithDependenciesGrantConditionEqualsConditionRoleIdBaseRoleForCreatePartnerRoleAssignRolesPayloadUser
approvePartnerโ
Approves a pending partner request, allowing the partner to begin collaboration.
POST /v1/partners/{id}/approve
const { data } = await client.approvePartner({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"id": "e45a6dc2-3795-43a3-ae0f-6b6760f310fc",
"organization_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"description": "Regional solar installation partner for Bavaria",
"company_name": "Acme Solar GmbH",
"invitation_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"invitation_email": "user@example.com",
"email": "contact@acme-solar.de",
"owner_email": "owner@acme-solar.de",
"signed_up_email": "admin@acme-solar.de",
"partner_org_id": "456789",
"status": "Pending"
}
rejectPartnerโ
Rejects a pending partner request, declining the partnership.
POST /v1/partners/{id}/reject
const { data } = await client.rejectPartner({
id: '123e4567-e89b-12d3-a456-426614174000',
})
Response
{
"id": "e45a6dc2-3795-43a3-ae0f-6b6760f310fc",
"organization_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"description": "Regional solar installation partner for Bavaria",
"company_name": "Acme Solar GmbH",
"invitation_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"invitation_email": "user@example.com",
"email": "contact@acme-solar.de",
"owner_email": "owner@acme-solar.de",
"signed_up_email": "admin@acme-solar.de",
"partner_org_id": "456789",
"status": "Pending"
}
searchAssignableโ
Search for users and organizations that can be assigned to tasks, workflows, or entities.
POST /v1/partners/assignables:search
const { data } = await client.searchAssignable(
null,
{
q: 'john',
from: 0,
size: 25,
org_ids: ['123', '456'],
portalUsersEntityIdScope: 'f7c22299-ca72-4bca-8538-0a88eeefc947',
types: ['user', 'partner_user', 'partner_organization', 'ecp', 'group']
},
)
Response
{
"hits": 42,
"results": [
{
"type": "user",
"display_name": "John Smith",
"image_uri": {
"original": "https://epilot-staging-user-content.s3.eu-central-1.amazonaws.com/728/8043d909-71fc-4838-a363-1b15dc1d585c/epilot.png",
"thumbnail_32": "https://file.sls.epilot.io/v1/files/public/preview?w=32&h=32&key=/728/8043d909-71fc-4838-a363-1b15dc1d585c/epilot.png"
},
"org_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"activated_at": "2022-02-08T04:44:32.246Z",
"status": "Active",
"user_id": "456",
"email": "john.smith@example.com"
}
]
}
batchGetAssignableโ
Retrieve multiple assignable users or groups by their IDs in a single request.
POST /v1/partners/assignables:batchGet
const { data } = await client.batchGetAssignable(
null,
[
{
user_id: '456',
org_id: '123',
group_id: 'group-789'
}
],
)
Response
{
"hits": 3,
"results": [
{
"type": "user",
"display_name": "John Smith",
"image_uri": {
"original": "https://epilot-staging-user-content.s3.eu-central-1.amazonaws.com/728/8043d909-71fc-4838-a363-1b15dc1d585c/epilot.png",
"thumbnail_32": "https://file.sls.epilot.io/v1/files/public/preview?w=32&h=32&key=/728/8043d909-71fc-4838-a363-1b15dc1d585c/epilot.png"
},
"org_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"activated_at": "2022-02-08T04:44:32.246Z",
"status": "Active",
"user_id": "456",
"email": "john.smith@example.com"
}
]
}
getPartnerByTokenโ
Retrieves partner information using an invitation token.
GET /v1/partner-directory/public/getPartnerByToken
const { data } = await client.getPartnerByToken({
token: 'example',
})
Response
{
"id": "e45a6dc2-3795-43a3-ae0f-6b6760f310fc",
"organization_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"description": "Regional solar installation partner for Bavaria",
"company_name": "Acme Solar GmbH",
"invitation_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"invitation_email": "user@example.com",
"email": "contact@acme-solar.de",
"owner_email": "owner@acme-solar.de",
"signed_up_email": "admin@acme-solar.de",
"partner_org_id": "456789",
"status": "Pending"
}
activatePartnerโ
Activates a partner account using an invitation token.
POST /v1/partner-directory/public/activate
const { data } = await client.activatePartner(
{
token: 'example',
},
{
company_name: 'Acme Solar GmbH',
signed_up_email: 'admin@acme-solar.de',
organization_id: '456'
},
)
searchGeolocationForTextโ
Converts an address string to geographic coordinates (latitude and longitude).
POST /v1/geolocation/text:search
const { data } = await client.searchGeolocationForText(
null,
{
address: 'Auweg 1, 93055 Regensburg, DE'
},
)
Response
{
"lat": 49.013,
"lng": 12.101,
"addressLabel": "Auweg 1, 93055 Regensburg, Germany",
"relevance": 0.95
}
invitePartnerV2โ
Sends an invitation email to a partner organization to begin collaboration.
POST /v2/partners/{id}/invite
const { data } = await client.invitePartnerV2(
{
id: '123e4567-e89b-12d3-a456-426614174000',
},
{
language: 'de'
},
)
Response
{
"id": "e45a6dc2-3795-43a3-ae0f-6b6760f310fc",
"organization_id": "123",
"created_at": "2022-02-08T04:44:32.246Z",
"description": "Regional solar installation partner for Bavaria",
"company_name": "Acme Solar GmbH",
"invitation_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"invitation_email": "user@example.com",
"email": "contact@acme-solar.de",
"owner_email": "owner@acme-solar.de",
"signed_up_email": "admin@acme-solar.de",
"partner_org_id": "456789",
"status": "Pending"
}
getPartnerUsersโ
Retrieves all users belonging to a partner organization along with their assigned roles.
GET /v2/partners/{orgId}/users
const { data } = await client.getPartnerUsers({
orgId: 'example',
})
Response
{
"results": [
{
"id": "456",
"name": "John Doe",
"email": "user@partner.com",
"status": "Active",
"image": {
"original": "https://example.com/path",
"thumbnail_32": "https://example.com/path"
},
"roles": [
{
"id": "123:partner_admin",
"slug": "partner_admin",
"name": "Partner Administrator"
}
]
}
]
}
createPartnerUserโ
Creates a new user in a partner organization.
POST /v2/partners/{orgId}/users
const { data } = await client.createPartnerUser(
{
orgId: 'example',
},
{
email: 'newuser@partner.com',
language: 'de',
roles: ['123:partner_viewer']
},
)
Response
{
"id": "456",
"email": "user@example.com",
"display_name": "John Doe",
"status": "Active"
}
deletePartnerUserโ
Removes a user from a partner organization.
DELETE /v2/partners/{orgId}/users/{userId}
const { data } = await client.deletePartnerUser({
orgId: 'example',
userId: 'example',
})
Response
{}
getPartnerRolesโ
Retrieves all roles defined for a partner organization.
GET /v2/partners/{orgId}/roles
const { data } = await client.getPartnerRoles({
orgId: 'example',
})
Response
{
"results": [
{
"id": "123:partner_admin",
"slug": "partner_admin",
"name": "Partner Administrator",
"type": "share_role",
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:*",
"effect": "allow",
"conditions": [
{
"attribute": "workflows.primary.task_name",
"operation": "equals",
"values": ["Qualification"]
}
]
}
]
}
]
}
createPartnerRoleโ
Creates a new role for a partner organization.
POST /v2/partners/{orgId}/roles
const { data } = await client.createPartnerRole(
{
orgId: 'example',
},
{
name: 'Partner Administrator',
slug: 'partner_admin',
grants: [
{
action: 'entity-read',
resource: 'entity:123:contact:*',
effect: 'allow',
conditions: [
{
attribute: 'workflows.primary.task_name',
operation: 'equals',
values: ['Qualification']
}
],
dependencies: [
{
action: 'entity-read',
resource: 'entity:123:contact:*',
effect: 'allow',
conditions: [
{
attribute: 'workflows.primary.task_name',
operation: 'equals',
values: ['Qualification']
}
]
}
]
}
]
},
)
Response
{
"id": "123:partner_admin",
"slug": "partner_admin",
"name": "Partner Administrator",
"type": "share_role",
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:*",
"effect": "allow",
"conditions": [
{
"attribute": "workflows.primary.task_name",
"operation": "equals",
"values": ["Qualification"]
}
]
}
]
}
updatePartnerRoleโ
Updates an existing role in a partner organization.
PUT /v2/partners/{orgId}/roles/{roleId}
const { data } = await client.updatePartnerRole(
{
orgId: 'example',
roleId: 'example',
},
{
grants: [
{
action: 'entity-read',
resource: 'entity:123:contact:*',
effect: 'allow',
conditions: [
{
attribute: 'workflows.primary.task_name',
operation: 'equals',
values: ['Qualification']
}
],
dependencies: [
{
action: 'entity-read',
resource: 'entity:123:contact:*',
effect: 'allow',
conditions: [
{
attribute: 'workflows.primary.task_name',
operation: 'equals',
values: ['Qualification']
}
]
}
]
}
],
id: '123:owner',
name: 'Owner',
slug: 'owner'
},
)
Response
{
"id": "123:partner_admin",
"slug": "partner_admin",
"name": "Partner Administrator",
"type": "share_role",
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:*",
"effect": "allow",
"conditions": [
{
"attribute": "workflows.primary.task_name",
"operation": "equals",
"values": ["Qualification"]
}
]
}
]
}
deletePartnerRoleโ
Delete a role from a partner organization
DELETE /v2/partners/{orgId}/roles/{roleId}
const { data } = await client.deletePartnerRole({
orgId: 'example',
roleId: 'example',
})
Response
{
"id": "123:partner_admin",
"slug": "partner_admin",
"name": "Partner Administrator",
"type": "share_role",
"grants": [
{
"action": "entity-read",
"resource": "entity:123:contact:*",
"effect": "allow",
"conditions": [
{
"attribute": "workflows.primary.task_name",
"operation": "equals",
"values": ["Qualification"]
}
]
}
]
}
assignPartnerUserRolesโ
Assigns one or more roles to a user in a partner organization.
POST /v2/partners/{orgId}/users/{userId}/roles
const { data } = await client.assignPartnerUserRoles(
{
orgId: 'example',
userId: 'example',
},
{
roleIds: ['123:partner_admin', '123:partner_viewer']
},
)
Response
{
"results": [
{
"roleId": "string",
"success": true,
"data": {},
"error": {}
}
]
}
unassignPartnerUserRolesโ
Removes one or more roles from a user in a partner organization.
DELETE /v2/partners/{orgId}/users/{userId}/roles
const { data } = await client.unassignPartnerUserRoles(
{
orgId: 'example',
userId: 'example',
},
{
roleIds: ['123:partner_admin', '123:partner_viewer']
},
)
Response
{
"results": [
{
"roleId": "string",
"success": true,
"data": {},
"error": {}
}
]
}
Schemasโ
InviteTokenโ
A secure token used for partner invitation and activation. Sent via email to the invited partner.
type InviteToken = string
Partnerโ
Represents a partner organization in the partner directory.
Partners go through a lifecycle from invitation to active collaboration:
- Pending: Initial state when partner record is created
- Invited: Invitation email has been sent to the partner
- Request: Partner has requested to join
type Partner = {
id?: string
organization_id?: string
created_at?: string // date-time
description?: string
company_name?: string
invitation_token?: string
invitation_email?: string // email
email?: string // email
owner_email?: string // email
signed_up_email?: string // email
partner_org_id?: string
status?: "Pending" | "Request" | "Deleted" | "Invited" | "Rejected"
}
PartnerIdโ
Unique identifier for a partner record (UUID format)
type PartnerId = string
OrganizationIdโ
Unique identifier for an organization in the epilot platform
type OrganizationId = string
ActivatePartnerPayloadโ
Payload for activating a partner account using an invitation token
type ActivatePartnerPayload = {
company_name?: string
signed_up_email: string // email
organization_id: string
}
PartnerInvitationPayloadโ
Configuration options for sending a partner invitation
type PartnerInvitationPayload = {
language?: "en" | "de"
}
Assignableโ
A user, organization, or group that can be assigned to tasks, workflows, or entities.
The type field discriminates between different assignable types.
type Assignable = {
type: "user"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
user_id?: string
email?: string // email
} | {
type: "partner_user"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
partner_id?: string
user_id?: string
email?: string // email
} | {
type: "partner_organization"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
partner_id: string
email?: string // email
geolocations?: Array<{
address?: {
street?: { ... }
street_number?: { ... }
city?: { ... }
postal_code?: { ... }
country?: { ... }
}
lat: number
lng: number
addressLabel?: string
relevance?: number
}>
phone?: string
activity_radius?: number
} | {
type: "ecp"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
user_id: string
email?: string // email
} | {
type: "group"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
group_id?: string
}
BaseAssignableโ
Common properties shared by all assignable types
type BaseAssignable = {
type: string
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
}
AssignableUserโ
A user within the caller's organization that can be assigned to tasks or entities
type AssignableUser = {
type: "user"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
user_id?: string
email?: string // email
}
AssignablePartnerUserโ
A user from a partner organization that can be assigned to shared tasks or entities
type AssignablePartnerUser = {
type: "partner_user"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
partner_id?: string
user_id?: string
email?: string // email
}
AssignableGroupโ
A user group that can be assigned to tasks or entities. All members of the group will be notified/assigned.
type AssignableGroup = {
type: "group"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
group_id?: string
}
AssignableOrganizationโ
A partner organization that can be assigned to tasks or entities at the organization level. Useful when you want to assign work to a partner company rather than a specific individual.
type AssignableOrganization = {
type: "partner_organization"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
partner_id: string
email?: string // email
geolocations?: Array<{
address?: {
street?: { ... }
street_number?: { ... }
city?: { ... }
postal_code?: { ... }
country?: { ... }
}
lat: number
lng: number
addressLabel?: string
relevance?: number
}>
phone?: string
activity_radius?: number
}
AssignableEcpPlaceholderโ
An End Customer Portal (ECP) user that can be assigned to tasks or entities. These are external users who access the system through the customer portal.
type AssignableEcpPlaceholder = {
type: "ecp"
display_name: string
image_uri?: {
original: string // uri
thumbnail_32?: string // uri
}
org_id: string
created_at?: string // date-time
activated_at?: string // date-time
status?: "Active" | "Pending" | "Deactivated" | "Deleted"
user_id: string
email?: string // email
}
SearchGeolocationโ
Request payload for geocoding an address to coordinates
type SearchGeolocation = {
address: string
}
Geolocationโ
Geographic coordinates with optional metadata
type Geolocation = {
lat: number
lng: number
addressLabel?: string
relevance?: number
}
Addressโ
Structured postal address
type Address = {
street?: string
street_number?: string
city?: string
postal_code?: string
country?: string
}
AddressGeolocationโ
Combined address and geographic coordinates for a location
type AddressGeolocation = {
address?: {
street?: string
street_number?: string
city?: string
postal_code?: string
country?: string
}
lat: number
lng: number
addressLabel?: string
relevance?: number
}
PartnerUserโ
A user within a partner organization, including their assigned roles
type PartnerUser = {
id: string
name?: string
email: string // email
status: string
image?: {
original?: string // uri
thumbnail_32?: string // uri
}
roles: Array<{
id: string
slug: string
name: string
}>
}
CreatePartnerUserPayloadโ
Request payload for creating a new user in a partner organization
type CreatePartnerUserPayload = {
email: string // email
language?: "en" | "de"
roles?: string[]
}
CreatePartnerRolePayloadโ
Request payload for creating a new role in a partner organization
type CreatePartnerRolePayload = {
name: string
slug: string
grants: Array<{
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
dependencies?: Array<{
action: { ... }
resource?: { ... }
effect?: { ... }
conditions?: { ... }
}>
}>
}
UpdatePartnerRolePayloadโ
Request payload for updating an existing role in a partner organization
type UpdatePartnerRolePayload = {
grants: Array<{
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
}>
id?: string
name: string
slug: string
}
Grantโ
A permission grant that allows or denies a specific action on a resource.
Grants are the building blocks of roles and define what users can do within the system.
type Grant = {
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
}
GrantWithDependenciesโ
A grant with optional dependent grants that are automatically included when this grant is assigned
type GrantWithDependencies = {
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
dependencies?: Array<{
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
}>
}
GrantConditionโ
An additional condition that must be met for a grant to apply. Conditions allow fine-grained control over when permissions are active.
type GrantCondition = object
EqualsConditionโ
A condition that checks if an attribute equals one of the specified values. The grant only applies when the condition is satisfied.
type EqualsCondition = {
attribute: string
operation: "equals"
values: string[]
}
RoleIdโ
Unique identifier for a role, combining organization ID and role slug.
Format: <organization_id>:<slug>
type RoleId = string
BaseRoleForCreateโ
Base schema for creating or updating a role
type BaseRoleForCreate = {
id?: string
name: string
slug: string
grants: Array<{
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
}>
}
PartnerRoleโ
A role definition for users in a partner organization
type PartnerRole = {
id: string
slug: string
name: string
type?: string
grants: Array<{
action: string
resource?: string
effect?: "allow" | "deny"
conditions?: object[]
}>
}
AssignRolesPayloadโ
Request payload for assigning or unassigning roles to/from a user
type AssignRolesPayload = {
roleIds: string[]
}
Userโ
A user account in the epilot platform
type User = {
id?: string
email?: string // email
display_name?: string
status?: "Active" | "Pending" | "Deactivated"
}