📘

Note:

Step 1. Obtain the necessary information

Headers
accept Indicates the types of content the client can accept. I.e. application/scim+json
authorization You will only be able to use Oneflow's SCIM API with a valid SCIM API token. You can create a SCIM API token in the Oneflow web application. See Authentication to learn more.
content-type Indicates the type of data that the client sends to the server. I.e. application/json
Path parameters
USER_ID The unique ID of the user inside Oneflow. You can find the user ID using the users endpoint.
Query parameters
sortBy
Indicates which field the list of users will be sorted by. I.e. displayName
sortOrder
Determines the order in which the list of users will be sorted. I.e. ascending, descending
startIndex
Indicates the starting position in the list as a number. I.e. 1
count
Indicates the total number of records returned in the response. I.e. 100
Body
active The status of the user account within Oneflow.
displayName(required) The name of the user.
externalID The unique ID of the group in your identity provider or application.
id The unique ID of the group inside Oneflow.
title
Contains the user's job title.
username(required)
The unique username of the user. I.e. [email protected]
locale
The selected language for the account indicated as a locale identifier. I.e. "en" for English, "sv" for Swedish
schema A schema represents the user configuration. The schema used varies depending on the request type.
For PATCH requests:

"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"]
For POST requests:
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"]
or
"schemas"["urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"]

phoneNumbers
primary
Indicates whether the phone number is set as primary or not. I.e. true or false
type
Indicates the type of phone number. I.e. work, home
value Contains the user's phone number.
groups
$ref Reference to the URI of the group the user belongs to.
type Indicates the type of resource. I.e. a group
value Contains the Oneflow group ID.
meta
created Indicates when the user was created in the system.
lastModified Indicates when the user's information was last changed.
location Indicates the location of the user as a URI.
resourceType
Indicates the resource type. I.e. a user

Step 2. Run the code

Create user

  • To create a user, send a POST request to the Users endpoint with the SCIM API token in the request’s header.
  • Pass the user's attributes (i.e. username) to the relevant SCIM attribute of the request.

🚧

Note:

  • The displayName, and userName attributes are mandatory.
curl --request POST \
     --url https://api.oneflow.com/scim/v1/Users \
     --header 'accept: application/scim+json' \
     --header 'authorization: Bearer [TOKEN]' \
     --header 'content-type: application/json' \
     --data '
{
  "active": true,
  "meta": {
    "resourceType": "User"
  },
  "displayName": "Jane Doe",
  "userName": "[email protected]",
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ]
}
'
import requests

url = "https://api.oneflow.com/scim/v1/Users"

payload = {
    "active": True,
    "meta": { "resourceType": "User" },
    "displayName": "Jane Doe",
    "userName": "[email protected]",
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"]
}
headers = {
    "accept": "application/scim+json",
    "content-type": "application/json",
    "authorization": "Bearer [TOKEN]"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
  • Refer to the Data model for the complete list of SCIM attributes in Oneflow.

Get user

  • To get the attributes of a specific user, send a GET request to the Users endpoint along with their ID as a path parameter.
    • I.e. In the following example, replace [User_ID] with the Oneflow user's ID.
curl --request GET \
     --url https://api.oneflow.com/scim/v1/Users/[USER_ID] \
     --header 'accept: application/scim+json' \
     --header 'authorization: Bearer [TOKEN]'
import requests

url = 'https://api.oneflow.com/scim/v1/Users/[USER_ID]'
headers = {
    'accept': 'application/scim+json',
    'authorization': 'Bearer [token]'
}
response = requests.get(url, headers=headers)

print(response.status_code)
print(response.text)

Patch user (deactivate)

  • Note that users cannot be permanently or physically deleted from the database.
  • A soft delete operation is achieved by sending a PATCH request to the Users endpoint to set the active attribute to false.
  • This effectively deactivates the user on Oneflow, however will not delete their data.
curl --request PATCH \
 --url 'https://api.oneflow.com/scim/v1/Users/[USER_ID]' \
--header 'accept: application/scim+json' \
--header 'authorization: Bearer [TOKEN]' \
--header 'content-type: application/json' \
--data '{
  "Operations": [
    {
      "op": "replace",
      "path": "active",
      "value": "false"
    }
  ],
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ]
}'
import requests

url = "https://api.oneflow.com/scim/v1/Users/[USER_ID]"

payload = {
    "Operations": [
        {
            "op": "replace",
            "path": "active",
            "value": "false"
        }
    ],
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"]
}
headers = {
    "accept": "application/scim+json",
    "content-type": "application/json",
    "authorization": "Bearer [TOKEN]"
}

response = requests.patch(url, json=payload, headers=headers)
print(response.text)

Update user

❗️

Note

Sending a PUT request will overwrite the entire record. if some fields are omitted from the request, then these will be saved as null.

To avoid data loss, send a GET request first and use this response as the base for the PUT request, or send a PATCH request to partially modify a user record.

  • You can update an existing user by sending a PUT request to the Users endpoint.
  • To modify one or more attributes (partially update) of a user, send a PATCH request to the Users endpoint.
  • Include the operation in the op parameter (add, remove, or replace), the attribute you wish to modify in the path parameter, along with its new value.
curl --request PATCH \
     --url https://api.oneflow.com/scim/v1/Users/[USER_ID] \
     --header 'accept: application/scim+json' \
     --header 'authorization: Bearer [TOKEN] ' \
     --header 'content-type: application/json' \
     --data '{
  "Operations": [
    {
      "op": "replace",
      "path": "displayName",
      "value": "J Doe"
    }
  ],
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ]
}'
import requests

url = 'https://api.oneflow.com/scim/v1/Users/[USER_ID]'
headers = {
    'accept': 'application/scim+json',
    'authorization': 'Bearer [TOKEN]'
}

data = {
    'Operations': [
        {
            'op': 'replace',
            'path': 'displayName',
            'value': 'J Doe'
        }
    ]
   ],
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"]
}

response = requests.patch(url, headers=headers, data=data)

print(response.status_code)
print(response.text)

Example response

{
    "active": true,
    "displayName": "Jane Doe",
    "externalId": null,
    "groups": [
        {
            "$ref": "https://api.oneflow.com/scim/v1/Groups/227732",
            "type": "Group",
            "value": "227732"
        }
    ],
    "id": "998749",
    "locale": "en",
    "meta": {
        "created": "2023-07-14T05:10:41+00:00",
        "lastModified": "2023-08-25T07:29:54+00:00",
        "location": "https://api.oneflow.com/scim/v1/Users/998749",
        "resourceType": "User"
    },
    "phoneNumbers": [
        {
            "primary": true,
            "type": "work",
            "value": null
        }
    ],
    "roles": [],
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User"
    ],
    "title": null,
    "userName": "[email protected]"
}

List users

  • You can retrieve the list of users in your Oneflow account along with their attributes.
  • To sort or filter the list of users, use the query parameters specified in the API reference.
  • For instance, to list all users, send a GET request to the Users endpoint with the SCIM API token in the request’s header.
curl --request GET \
     --url 'https://api.oneflow.com/scim/v1/Users?sortBy=displayName&sortOrder=ascending&startIndex=1&count=100' \
     --header 'accept: application/scim+json' \
     --header 'authorization: Bearer [TOKEN]'
import requests

url = 'https://api.oneflow.com/scim/v1/Users?sortBy=displayName&sortOrder=ascending&startIndex=1&count=100'
headers = {
    'accept': 'application/scim+json',
    'authorization': 'Bearer [TOKEN]'
}
response = requests.get(url, headers=headers)

print(response.status_code)
print(response.text)

Example response

{
    "Resources": [
        {
            "active": true,
            "displayName": "Jane Doe",
            "externalId": null,
            "groups": [],
            "id": "975828",
            "locale": "en",
            "meta": {
                "created": "2022-12-02T07:52:16+00:00",
                "lastModified": "2022-12-02T07:52:16+00:00",
                "location": "https://api.oneflow.com/scim/v1/Users/975828",
                "resourceType": "User"
            },
            "phoneNumbers": [
                {
                    "primary": true,
                    "type": "work",
                    "value": null
                }
            ],
            "roles": [],
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:User"
            ],
            "title": "Sales Manager",
            "userName": "[email protected]"
        },
        {
            "active": true,
            "displayName": "John Doe",
            "externalId": null,
            "groups": [],
            "id": "972592",
            "locale": "en",
            "meta": {
                "created": "2022-10-28T06:21:54+00:00",
                "lastModified": "2022-10-28T06:21:54+00:00",
                "location": "https://api.oneflow.com/scim/v1/Users/972592",
                "resourceType": "User"
            },
            "phoneNumbers": [
                {
                    "primary": true,
                    "type": "work",
                    "value": null
                }
            ],
            "roles": [],
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:User"
            ],
            "title": "Marketing Manager",
            "userName": "[email protected]"
        },
        {
            "active": true,
            "displayName": "Oliver Queen",
            "externalId": null,
            "groups": [],
            "id": "972597",
            "locale": "en",
            "meta": {
                "created": "2022-10-28T06:21:54+00:00",
                "lastModified": "2022-10-28T06:21:55+00:00",
                "location": "https://api.oneflow.com/scim/v1/Users/972597",
                "resourceType": "User"
            },
            "phoneNumbers": [
                {
                    "primary": true,
                    "type": "work",
                    "value": null
                }
            ],
            "roles": [],
            "schemas": [
                "urn:ietf:params:scim:schemas:core:2.0:User"
            ],
            "title": "Software Engineer",
            "userName": "[email protected]"
        }
    ],
    "itemsPerPage": 3,
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "startIndex": 1,
    "totalResults": 100
}

Response codes

StatusMeaningDescription
200OKOperation completed successfully.
201CreatedReturns the created/updated user, optionally filtered by values in attributes or excludedAttributes parameters.
204No contentThe group was deleted successfully.
400Bad RequestInvalid format or content of the request.
401UnauthorizedThe SCIM token is invalid.
404Not foundThe requested entity is missing.
409ConflictA conflict occurred with the current state of the target resource.

See Handling errors with error codes for reasons and resolutions.