Skip to content

Firstup API (v2)

Beta Notice: This portal is currently in beta. Some functionality, like Try it is temporarily disabled.


API Concepts and Overview

Each API concept can be found in our Docs; we give an overview of each API, the expected behavior and what is possible.

Technical details are found in this reference, but some complex technicalities are further explained in our docs.

Further technical guidance on SCIM patching, pagination and filtering can be found in our docs:

Technical Details

From this page you can download the OpenAPI specification for the Firstup API. This can be imported into tools such as Postman to generate a collection of test queries or converted into an SDK using Swagger Codegen. Alternatively, you can use the try me function in this platform.

Authorization

All API endpoints use the JSON content type and require an auth token. See Authentication and Authorization for more details on token management. The token and content type should be explicitly set in the request headers. For example:

  curl -X GET "https://partner.socialchorus.com/v2/channels" -H "accept: application/json" -H "Authorization: Bearer <ACCESS TOKEN>"
Download OpenAPI description
Languages
Servers

https://developers.firstup.io/

Content Publishing

The Content Publishing API provides access to content the same way Program Studio does, enabling the creation and updating of articles, links, videos, and images.

  • Security: Users with a publisher or higher role can work with content in this admin-like function. A 403 code is returned for content-related requests to users without a publisher or higher role. Permissions are not granular; any authenticated user may read, update, or take action on any existing content. See user roles and access for more guidance.

  • States: Content is initially created in the draft state. It becomes fully visible in feeds when it has passed the review state (meaning that it requires review) and is in the published state. Content can also pass through archived (similar to deleted), scheduled (content to be published in the future automatically), processing (refers to media that is still being processed or uploaded; like content in the draft state, this content does not become published until processing has completed), and processing error (media or similar objects that fail during the processing phase; this content cannot be transitioned to another state) states.

  • Sources: Content sources include submitted (by users); Pinterest,RSS,Facebook,Twitter, and Instagram (for content harvested from external sources); SocialChorus CPCM (for content that is republished between programs); studio (for admin-created content); and OAuth Client (for content published via the Partner API or other OAuth client).

For contextual guidance on content publishing, and for use case examples, refer to our Content Publishing Overview page.

Operations

Feeds

The Feeds API provides access to lists of content similar to how a user sees them in the Firstup experience application. Feeds are specific to the authenticated user and a user can only see what the platform gives them access to.

At their core, feeds are built using filters to find the exact topics and type of posts your application wishes to expose to its users. One of the basic filters is the channels.id filter, but there are additional filters like content_type and visibility. There are also preset configurations called named feeds, which uses the name query parameter and are convenient wrappers around a set of filters. These include things like "trending" posts, "following", and "myfeed". The full list of feed names is outlined in the listFeedPosts documentation.

Feeds are paginated, but have no total records as they are an inherently dynamic list of posts.

Actions like liking, bookmarking, and responding to polls can be taken on individual posts in the same way they can be taken on the experience applications.

For contexctual guidance on feeds, and for use examples, refer to our feeds overview page.

Operations

User Management

The User Management API adheres to the SCIM 2.0 protocol unless otherwise stated, and provides management and provisioning of users in a program.

Managing users requires that the acting user have a role of Program Manager or Administrator, and users can only create or update users with a role less than or equal to their own.

For further guidance on User Management, refer to:

Operations

User Groups

The Group Management API adheres to the SCIM 2.0 protocol unless otherwise stated, and provides management and provisioning of Groups and its members (Users) within a Program.

Managing Groups requires that the acting User have a role of Program Manager or Administrator, and Group read and/or write access.

Note: User groups are SCIM groups only. Currently this API does not support creating audiences.

Operations

Returns a list of Groups

Request

Returns a list of all accessible Groups in the acting User's Program.

Security
oauth2_as_a_server or oauth2_as_a_user
Query
startIndexinteger

Specifies the 1-based index of the page of results to be returned.

countinteger

Specifies the maximum number of results to be returned.

curl -i -X GET \
  'https://developers.firstup.io/scim/v2/Groups?startIndex=0&count=0' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Success

Bodyapplication/scim+json
schemasArray of strings
Example: ["urn:ietf:params:scim:api:messages:2.0:ListResponse"]
ResourcesArray of objects(Scim.Group.Resource)
Response
application/scim+json
{ "schemas": [ "urn:ietf:params:scim:api:messages:2.0:ListResponse" ], "Resources": [ {} ] }

Creates a Group

Request

Creates and provisions a new Group of Users. The request should include any properties to be set on the Group. Any property not provided would leave the value blank or use defaults.

The list of members could be empty or not present. Members are referenced with the identifierField, by either:

  • email
  • id
  • userName (the default if no identifierField is included)

This operation is asynchronous, the response will not include the list of members.

A JobId will be in the response's meta, to be able to get a JobReport (see the ad hoc endpoint below).

Indexing a Group's Users can take some time.

Security
oauth2_as_a_server or oauth2_as_a_user
Bodyapplication/json
displayNamestringrequired
Example: "Group of specific users"
descriptionstring
Example: "Group of iOS users from partner domain"
SocialChorus:1.0:Groupobject(Scim.Group.SocialChorusExtension)
externalIdstring
Example: "1234qweasd567"
membersArray of objects

An array of objects representing user identifiers to be included into a group. The identifiers allowed are the user "id", "email" and "userName" (defaulting to "userName").

Example: [{"value":"username3"},{"value":"username4"},{"value":"username33"}]
curl -i -X POST \
  https://developers.firstup.io/scim/v2/Groups \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "displayName": "Group of specific users",
    "description": "Group of iOS users from partner domain",
    "SocialChorus:1.0:Group": {
      "identifierField": "userName"
    },
    "externalId": "1234qweasd567",
    "members": [
      {
        "value": "username3"
      },
      {
        "value": "username4"
      },
      {
        "value": "username33"
      }
    ]
  }'

Responses

Group created

Bodyapplication/scim+json
schemasArray of strings

List of Schemas

Example: ["urn:ietf:params:scim:schemas:core:2.0:Group","SocialChorus:1.0:Group"]
idinteger

Group unique id

Example: 115
namestring

A name for the Group, generated from the given displayName.

Example: "group_of_users"
displayNamestring

A human-readable name for the Group.

Example: "Group of users"
externalIdstring

ID from provisioning system. This is the resource ID on the client system, not Firstup's ID.

Example: "1234qweasd567"
descriptionstring

Description for the Group.

Example: "Group of iOS users from partner domain"
membersArray of objects

An empty array, as members will be changed later, asynchronously

Example: []
metaobject
SocialChorus:1.0:Groupobject
Example: {}
Response
application/scim+json
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group", "SocialChorus:1.0:Group" ], "id": 115, "name": "group_of_users", "displayName": "Group of users", "externalId": "1234qweasd567", "description": "Group of iOS users from partner domain", "members": [], "meta": { "resourceType": "Group", "created": "2022-05-13T13:32:00.598Z", "lastModified": "2022-05-13T13:32:00.598Z", "location": "https://partner.socialchorus.com/scim/v2/Groups/115", "jobId": 4567 }, "SocialChorus:1.0:Group": {} }

Returns the details of the given Group, including its members

Request

Returns the group specified by the group_id. Groups are defined by the SCIM specification.

Security
oauth2_as_a_server or oauth2_as_a_user
Path
group_idstringrequired

ID of the group to look up.

curl -i -X GET \
  'https://developers.firstup.io/scim/v2/Groups/{group_id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Success

Bodyapplication/scim+json
idinteger

Group unique id

Example: 115
displayNamestring

A human-readable name for the Group. REQUIRED.

Example: "Group of users"
externalIdstring

ID from provisioning system. This is the resource ID on the client system, not Firstup's ID.

Example: "1234qweasd567"
descriptionstring

Description for the Group.

Example: "Group of iOS users from partner domain"
membersArray of objects

A list of members of the Group.

Example: [{"value":"3","_$ref":"https://partner.socialchorus.com/scim/v2/Users/3"}]
metaobject
schemasArray of strings
Example: ["urn:ietf:params:scim:schemas:core:2.0:Group"]
Response
application/scim+json
{ "id": 115, "displayName": "Group of users", "externalId": "1234qweasd567", "description": "Group of iOS users from partner domain", "members": [ {} ], "meta": { "resourceType": "Group", "created": "2022-05-13T13:32:00.598Z", "lastModified": "2022-05-13T13:32:00.598Z", "location": "https://partner.socialchorus.com/scim/v2/Groups/115", "next": "https://partner.socialchorus.com/scim/v2/Groups/115?page=2" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group" ] }

Updates a Group

Request

Update an audience in the Program with partial changes using SCIM PatchOp.

Add or remove selected fields of the audience.

The list of members in the Group is referenced using the identifierField, by either:

  • email
  • id
  • userName (the default if no identifierField is included)

All operations are supported: add, remove, and replace.

Note that a replace will replace all the members of the Group by the value sent (a full replace).

This operation is asynchronous, the response will not include the list of members.

A JobId will be in the response's meta, to be able to get a JobReport (see the ad hoc endpoint below).

See the SCIM Patch Operation guide for more details.

Security
oauth2_as_a_server or oauth2_as_a_user
Path
group_idstringrequired

ID of the audience to patch

Bodyapplication/jsonrequired
schemasArray of strings
Example: ["urn:ietf:params:scim:api:messages:2.0:PatchOp"]
SocialChorus:1.0:Groupobject(Scim.Group.SocialChorusExtension)
OperationsArray of objects
curl -i -X PATCH \
  'https://developers.firstup.io/scim/v2/Groups/{group_id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "SocialChorus:1.0:Group": {
      "identifierField": "userName"
    },
    "Operations": [
      {
        "op": "add",
        "path": "members",
        "value": [
          {
            "value": "username3"
          }
        ]
      }
    ]
  }'

Responses

Success

Bodyapplication/json
schemasArray of strings

List of Schemas

Example: ["urn:ietf:params:scim:schemas:core:2.0:Group","SocialChorus:1.0:Group"]
idinteger

Group unique id

Example: 115
namestring

A name for the Group, generated from the given displayName.

Example: "group_of_users"
displayNamestring

A human-readable name for the Group.

Example: "Group of users"
externalIdstring

ID from provisioning system. This is the resource ID on the client system, not Firstup's ID.

Example: "1234qweasd567"
descriptionstring

Description for the Group.

Example: "Group of iOS users from partner domain"
membersArray of objects

An empty array, as members will be changed later, asynchronously

Example: []
metaobject
SocialChorus:1.0:Groupobject
Example: {}
Response
application/json
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group", "SocialChorus:1.0:Group" ], "id": 115, "name": "group_of_users", "displayName": "Group of users", "externalId": "1234qweasd567", "description": "Group of iOS users from partner domain", "members": [], "meta": { "resourceType": "Group", "created": "2022-05-13T13:32:00.598Z", "lastModified": "2022-05-13T13:32:00.598Z", "location": "https://partner.socialchorus.com/scim/v2/Groups/115", "jobId": 4567 }, "SocialChorus:1.0:Group": {} }

Deletes a Group

Request

Delete an audience in the Program

Security
oauth2_as_a_server or oauth2_as_a_user
Path
group_idstringrequired

ID of the audience to patch

curl -i -X DELETE \
  'https://developers.firstup.io/scim/v2/Groups/{group_id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Deleted

Updates a Group

Request

Updates and provisions an existing Group of Users. The request should include any properties to be set on the Group. Any property not provided would leave the value blank or use defaults.

The list of members could be empty or not present. Members are referenced with the identifierField, by either:

  • email
  • id
  • userName (the default if no identifierField is included)

This operation is asynchronous, the response will not include the list of members.

A JobId will be in the response's meta, to be able to get a JobReport (see the ad hoc endpoint below).

Indexing a Group's Users can take some time.

Security
oauth2_as_a_server or oauth2_as_a_user
Bodyapplication/json
displayNamestringrequired
Example: "Group of specific users"
descriptionstring
Example: "Group of iOS users from partner domain"
SocialChorus:1.0:Groupobject(Scim.Group.SocialChorusExtension)
externalIdstring
Example: "1234qweasd567"
membersArray of objects

An array of objects representing user identifiers to be included into a group. The identifiers allowed are the user "id", "email" and "userName" (defaulting to "userName").

Example: [{"value":"username3"},{"value":"username4"},{"value":"username33"}]
curl -i -X PUT \
  'https://developers.firstup.io/scim/v2/Groups/{group_id}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "displayName": "Group of specific users",
    "description": "Group of iOS users from partner domain",
    "SocialChorus:1.0:Group": {
      "identifierField": "userName"
    },
    "externalId": "1234qweasd567",
    "members": [
      {
        "value": "username3"
      },
      {
        "value": "username4"
      },
      {
        "value": "username33"
      }
    ]
  }'

Responses

Group updated

Bodyapplication/scim+json
schemasArray of strings

List of Schemas

Example: ["urn:ietf:params:scim:schemas:core:2.0:Group","SocialChorus:1.0:Group"]
idinteger

Group unique id

Example: 115
namestring

A name for the Group, generated from the given displayName.

Example: "group_of_users"
displayNamestring

A human-readable name for the Group.

Example: "Group of users"
externalIdstring

ID from provisioning system. This is the resource ID on the client system, not Firstup's ID.

Example: "1234qweasd567"
descriptionstring

Description for the Group.

Example: "Group of iOS users from partner domain"
membersArray of objects

An empty array, as members will be changed later, asynchronously

Example: []
metaobject
SocialChorus:1.0:Groupobject
Example: {}
Response
application/scim+json
{ "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:Group", "SocialChorus:1.0:Group" ], "id": 115, "name": "group_of_users", "displayName": "Group of users", "externalId": "1234qweasd567", "description": "Group of iOS users from partner domain", "members": [], "meta": { "resourceType": "Group", "created": "2022-05-13T13:32:00.598Z", "lastModified": "2022-05-13T13:32:00.598Z", "location": "https://partner.socialchorus.com/scim/v2/Groups/115", "jobId": 4567 }, "SocialChorus:1.0:Group": {} }

Returns details on asynchronous jobs to modify a Group's members

Request

The calls to the POST, PUT or PATCH Groups Managements endpoints trigger a series of asynchronous jobs to create or update the list of the Group's members.

As these tasks are asynchronous, those API calls do not respond with the final list of the Group's members, but an unique Job identifier to inquire about the task.

This endpoint takes the jobId identifier, and returns details about the asynchronous job's execution.

The job could have already finished or still be running, and the response could include details on the number of members added, removed, processed, and error conditions (if any).

Security
oauth2_as_a_server or oauth2_as_a_user
Path
jobIdintegerrequired

The unique identifier of one asynchronous Job

curl -i -X GET \
  'https://developers.firstup.io/v2/Groups/JobReport/{jobId}' \
  -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'

Responses

Success

Bodyapplication/json
idinteger

Job unique identifier

Example: 127
groupIdinteger

Group unique identifier

Example: 3242
statusstring

Whether the asynchronous job is still ongoing or it has finished

Example: "finished"
requestTypestring

The type of request that launched the asynchronous job

Example: "group_update"
requestedChangesstring

JSON string wih details of the number of members to be changed by the API request

Example: "{\"create\":4,\"destroy\":7}"
requestReceivedAtstring

Date and time when the asynchronous job was launched

Example: "2024-04-11T12:59:28.043Z"
membersCreatedCountinteger

Number of members added to the group

Example: 0
membersRemovedCountinteger

Number of members removed from the group

Example: 1
membersProcessedCountinteger

Number of members processed. It could include additions, removals, or users ignored (for example, for being already in the group, or not being members of the program)

Example: 11
membersPendingCountinteger

Number of members pending to the processed

Example: 0
messagesstring

Additional details compiled during the job's execution, if any relevant applies, specially those related to the total number of members processed. For example: number of users not considered, for already being members, or users asked to be both added and removed, or system errors...

Example: "4 user(s) not added (already members?); 6 user(s) not removed (not members?)"
Response
application/json
{ "id": 127, "groupId": 3242, "status": "finished", "requestType": "group_update", "requestedChanges": "{\"create\":4,\"destroy\":7}", "requestReceivedAt": "2024-04-11T12:59:28.043Z", "membersCreatedCount": 0, "membersRemovedCount": 1, "membersProcessedCount": 11, "membersPendingCount": 0, "messages": "4 user(s) not added (already members?); 6 user(s) not removed (not members?)" }

Webhooks

The Webhooks API provides a mechanism for subscribing to events that occur within the Firstup platform to receive http payloads when those events occur. Use webhook subscriptions to trigger actions on your own application.

Webhook events are sent by the Firstup platform as POST requests to your webhook url. Each event contains a payload specific to that event. More information about the webhooks system, including a list of events that can be subscribed to, is available on the Webhooks page.

Operations

Assistant Inbox

Note: This API is getting deprecated and is replaced by the Notification Center.

Operations

User Roles

Operations

Notification Center

Operations