Build integrations · Partner
SAPP read and metadata API
Read tenants, users, and memberships, then patch integration metadata without overwriting core ONE fields.
SAPP, the Skyfallen Account Provisioning Protocol, is the provisioning API for lifecycle systems that need a reliable view of ONE users, tenants, memberships, permissions, and integration metadata.
PATCH /api/user/018fd4c0-e2da-7c7d-8b8e-0f033193b383 HTTP/1.1
Host: idms.skyfallen.one
Accept: application/json
Content-Type: application/json
X-Skyfallen-Client-Id: 9f2f0d28-8d32-4c6d-a4af-0b3a82c102f4
X-Skyfallen-Client-Secret: sapp_client_secret
{
"metadata": {
"hris_id": "HR-100044",
"division": "Design",
"temporary_import_id": null
}
}
{
"status": "success",
"data": {
"id": "018fd4c0-e2da-7c7d-8b8e-0f033193b383",
"first_name": "Mavi",
"last_name": "Gökyüzü",
"email": "[email protected]",
"metadata": {
"hris_id": "HR-100044",
"division": "Design"
},
"memberships": [
{
"tenant_id": "018fd4c2-57de-7bc4-8e53-4e5758c0f624",
"role": "owner"
}
]
}
}
Authentication
Send API key credentials in headers:
For compatibility with older tenant signup clients, client_id and client_secret are also accepted as request inputs. Headers are preferred because several SAPP endpoints are GET requests.
X-Skyfallen-Client-Id: {client_id}
X-Skyfallen-Client-Secret: {client_secret}
Accept: application/json
Content-Type: application/json
| Method | Path | Purpose |
|---|---|---|
GET |
/api/tenants |
Return every tenant visible to the API key. |
GET |
/api/tenant/{tenant} |
Return one tenant. |
PATCH |
/api/tenant/{tenant} |
Merge tenant metadata. |
GET |
/api/users |
Return every user, including memberships. |
GET |
/api/user/{user} |
Return one user, including memberships. |
PATCH |
/api/user/{user} |
Merge user metadata. |
GET |
/api/tenant/{tenant}/members |
Return memberships for one tenant, including user records and permissions. |
Reading tenants
GET /api/tenant/018fd4c2-57de-7bc4-8e53-4e5758c0f624 HTTP/1.1
Host: idms.skyfallen.one
Accept: application/json
X-Skyfallen-Client-Id: 9f2f0d28-8d32-4c6d-a4af-0b3a82c102f4
X-Skyfallen-Client-Secret: sapp_client_secret
A tenant response contains identity, billing, verification, branding, workforce, legacy SAML migration, and metadata fields.
Important tenant fields include:
| Field | Meaning |
|---|---|
id |
Tenant identifier. |
status |
not_verified, not_allowed, active, or disabled. |
type |
direct, commercial, or enterprise. |
region |
Skyfallen service region, for example INTL, TR, or UK. |
secr |
Skyfallen Enterprise Customer Reference, when present. |
subdomain |
Workforce vanity subdomain, when configured. |
workforce_identity |
Whether workforce portal mode is enabled. |
metadata |
Integration-owned tenant metadata. |
Reading users
GET /api/users HTTP/1.1
Host: idms.skyfallen.one
Accept: application/json
X-Skyfallen-Client-Id: 9f2f0d28-8d32-4c6d-a4af-0b3a82c102f4
X-Skyfallen-Client-Secret: sapp_client_secret
User responses include account profile fields and memberships. Hidden storage fields such as password hashes, remember tokens, verification codes, phone verification codes, and Persona references are not exposed.
Important user fields include:
| Field | Meaning |
|---|---|
id |
User identifier. |
status |
email_not_verified, no_tenant, active, or disabled. |
email |
Primary email address. |
secondary_emails |
Secondary addresses linked to the account. |
phone_verified_at |
Phone verification timestamp, when present. |
password_set |
Whether the user has set a password. |
metadata |
Integration-owned user metadata. |
memberships |
Tenant memberships included in user reads. |
Reading memberships
GET /api/tenant/018fd4c2-57de-7bc4-8e53-4e5758c0f624/members HTTP/1.1
Host: idms.skyfallen.one
Accept: application/json
X-Skyfallen-Client-Id: 9f2f0d28-8d32-4c6d-a4af-0b3a82c102f4
X-Skyfallen-Client-Secret: sapp_client_secret
Memberships connect users to tenants and carry a role identifier plus permissions.
| Field | Meaning |
|---|---|
id |
Membership identifier. |
tenant_id |
Tenant identifier. |
user_id |
User identifier. |
role_id |
Assigned tenant role UUID. |
role |
Compact role object with id and name. |
permissions |
Permission records. Each entry includes locked when the grant comes from the assigned role. * grants all permissions. |
user |
Full user object on tenant member reads. |
tenant |
Compact tenant object on user reads. |
Metadata patches
PATCH endpoints update metadata only. They do not edit core ONE profile, tenant, role, or permission fields.
Metadata must be a JSON object. Lists are rejected.
Keys with non-null values are added or replaced. Keys set to null are removed.
If every metadata key is removed, SAPP returns {} for metadata.
{
"metadata": {
"erp_id": "erp_tenant_8841",
"lifecycle": "production",
"old_flag": null
}
}
Error envelope
Authentication failures use the API key error envelope:
Validation errors on metadata patches identify the metadata field.
{
"status": "error",
"error": {
"title": "API key has expired",
"message": "This API key has expired. Generate a new key in the management panel.",
"code": "APIKEY:AUTH003"
}
}