In order to make requests, OAuth credentials must be obtained by registering an application with Faithlife. For more on OAuth, see Authentication.
The Faithlife API is separated into two sections: Accounts and Community. The Accounts API encompasses user and group data, such as creating a group or user or determining what groups a user is a member of. The Community API encompasses all social interaction between accounts, such as commenting and creating notes.
API requests and responses that have a content section are JSON-encoded and must have the content type set to application/json
.
Accounts requests are prefixed by https://accountsapi.logos.com/v2/
Community requests are prefixed by https://api.faithlife.com/community/v2/
API endpoints require requests to be signed in conformance to the OAuth 1.0a standard.
Requests may use the PLAINTEXT
or HMACSHA1
signature methods.
Temporary Credentials URL | https://auth.faithlife.com/v1/temporarytoken |
Authorize URL | https://auth.faithlife.com/v1/authorize |
Access Credentials URL | https://auth.faithlife.com/v1/accesstoken |
curl https://accountsapi.logos.com/v2/users/me -H "Authorization: OAuth \ oauth_consumer_key=\"{consumer_token}\",\ oauth_signature=\"{consumer_secret}%26{access_secret}\",\ oauth_signature_method=\"PLAINTEXT\",\ oauth_version=\"1.0\",\ oauth_token=\"{access_token}\""
All responses contain the X-RateLimit-Remaining
and X-RateLimit-Limit
headers. These headers indicates how many requests remain for the current hour and how many requests per hour are allowed, respectively.
For example, curl -i https://accountsapi.logos.com/v2/users/me
should return:
HTTP/1.1 200 OK Status: 200 OK X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 999
Field | Type | Required | Description |
---|---|---|---|
avatarUrl | string | no | |
avatarUrlLarge | string | no |
All fields denoted as the type in the API documentation are strings that conform to the ISO 8601 date / time interchange format and are formatted to the second in Coordinated Universal Time (UTC). In short, all strings will be formatted as YYYY-MM-DDTHH:MM:SSZ
, where YYYY represents the year, MM represents the month, DD represents the day, HH represents the hour , MM represents the minute, and SS represents the second.
Field | Type | Required | Description |
---|---|---|---|
alias | string | no | |
avatarUrls | Avatar Urls | no | |
city | string | no | |
countryAbbrev | string | no | |
description | string | no | |
string | no | ||
expirationDate | Date | no | |
formattedAddress | string | no | |
groupId | string | yes | |
isPinned | bool | no | |
kind | string | no | |
latitude | double | no | |
longitude | double | no | |
name | string | no | |
organizationUrl | string | no | |
phone | string | no | |
preferredMembershipKind | string | no | |
privacy | string | no | |
rawLocation | string | no | |
shortDescription | string | no | |
startDate | Date | no | |
stateAbbrev | string | no | |
timeZone | string | no | |
token | string | no |
Field | Type | Required | Description |
---|---|---|---|
alias | string | yes | User's display name. |
avatarUrls | Avatar Urls | no | |
birthDay | int | no | |
birthMonth | int | no | |
birthYear | int | no | |
dayPhone | string | no | |
denomination | string | no | |
description | string | no | |
string | no | ||
eveningPhone | string | no | |
gender | string | no | |
homePageUrl | string | no | |
id | string | yes | |
isMarried | bool | no | |
isSolicitable | bool | no | |
location | string | no | |
name | string | yes | Users's real name |
organization | string | no | |
organizationUrl | string | no | |
shortDescription | string | no | |
title | string | no | |
token | string | no | A token that may be used in some routes in place of an id, intended to be more human readable. |
Field | Type | Required | Description |
---|---|---|---|
accountId | string | no | Account to be invited. |
inviteId | string | no | |
user | User | no | |
group | Group | no | |
emailInvite | EmailInvite | no |
Field | Type | Required | Description |
---|---|---|---|
total | int | no | |
invites | Invite | yes | List of Invites. |
message | string | no |
Field | Type | Required | Description |
---|---|---|---|
membershipId | string | yes |
Field | Type | Required | Description |
---|---|---|---|
string | no | Email address to send invite to. | |
emailInviteToken | string | no |
GET /users/me
This method returns general information about the current user.
The response is a user object.
curl https://accountsapi.logos.com/v2/users/me
200 OK { "alias": "John Doe", "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg" }, "birthDay": 1, "birthMonth": 1, "birthYear": 1985, "email": "someone@example.com", "gender": "M", "id": "12", "isSolicitable": false, "name": "John Doe", "organization": "Logos", "organizationUrl": "http://www.logos.com", "title": "Software Developer", "token": "example", }
GET /users/{userId}
This method returns general information about the specified user.
The response is a user object.
curl https://accountsapi.logos.com/v2/users/3
200 OK { "alias": "Bob Pritchett", "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg" }, "description": {}, "homePageUrl": "http://www.bobpritchett.com", "id": "3", "location": "Bellingham, Washington", "name": "Bob Pritchett", "organization": "Logos Bible Software", "organizationUrl": "https://www.logos.com", "shortDescription": "CEO of Logos Bible Software, author of Fire Someone Today. Interested in entrepreneurship, ebooks, technology, and food." "title": "President/CEO" "token": "bobpritchett", }
GET /users
This method searches all users or returns general information about specified users based upon query parameters.
The response is a collection of user objects.
ids | string | no | A comma delimited list of user id strings |
q | string | no | Free-form search text |
offset | int | no | |
limit | int | no |
Exactly one of "ids" or "q" must be specified.
curl https://accountsapi.logos.com/v2/users?ids=3
200 OK { "users": [{ "alias": "Bob Pritchett", "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg" }, "description": {}, "homePageUrl": "http://www.bobpritchett.com", "id": "3", "location": "Bellingham, Washington", "name": "Bob Pritchett", "organization": "Logos Bible Software", "organizationUrl": "http://www.logos.com", "shortDescription": "CEO of Logos Bible Software, author of Fire Someone Today. Interested in entrepreneurship, ebooks, technology, and food." "title": "President/CEO", "token": "bobpritchett", }] }
POST /groups
This method creates a group.
The response is a group object.
name | string | yes | |
privacy | string | yes |
curl -X POST https://accountsapi.logos.com/v2/groups { "name": "My Group", "privacy": "open" }
201 Created { "id": "GROUP ID", "token": "my-group-token" }
GET /groups/{groupId}
This method returns general information about the specified group.
The response is a group object.
curl https://accountsapi.logos.com/v2/groups/bham-foodies
200 OK { "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg" }, "city": "Bellingham", "countryAbbrev": "US", "description": "A place for dedicated food lovers to recommend new places to eat or their favorite diners in town.", "formattedAddress": "Bellingham, WA, USA", "groupId": "998714", "isInviteOnly": false, "isPinned": false, "kind": "specialInterest", "latitude": 48.759551999999999, "longitude": -122.488224, "name": "Bham Food Lovers", "preferredMembershipKind": "member", "privacy": "open", "searchName": "Bham Food Lovers", "stateAbbrev": "WA", "token": "bham-foodies" }
GET /groups
This method lists groups that meet the specified criteria.
The response is a collection of group objects.
ids | string | no | A comma delimited list of group id strings |
q | string | no | Free-form search text |
offset | int | no | |
limit | int | no |
Exactly one of "ids" or "q" must be specified.
curl https://accountsapi.logos.com/v2/groups?q=bham
200 OK { "total": 1, "groups": [ { "alias": "Bham Food Lovers", "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg", }, "city": "Bellingham", "countryAbbrev": "US", "dateCreated": "2012-02-24T17:49:27Z", "dateModified": "2012-04-30T18:52:49Z", "description": "A place for dedicated food lovers to recommend new places to eat or their favorite diners in town.", "formattedAddress": "Bellingham, WA, USA", "groupId": "998714", "isInviteOnly": false, "isPinned": false, "kind": "specialInterest", "latitude": 48.759551999999999, "longitude": -122.488224, "name": "Bham Food Lovers", "preferredMembershipKind": "member", "privacy": "open", "stateAbbrev": "WA", "token": "bham-foodies" } ] }
GET /users/{userId}/groups
This method lists the groups that the specified user is a member of.
The response is a collection of group objects.
offset | int | no | |
limit | int | no |
curl https://accountsapi.logos.com/v2/users/9999999999/groups
200 OK { "total": 1, "groups": [ { "alias": "Bham Food Lovers", "avatarUrls": { "avatarUrl": "http://example.com/avatar.jpg", "avatarUrlLarge": "http://example.com/avatarLarge.jpg", }, "city": "Bellingham", "countryAbbrev": "US", "dateCreated": "2012-02-24T17:49:27Z", "dateModified": "2012-04-30T18:52:49Z", "description": "A place for dedicated food lovers to recommend new places to eat or their favorite diners in town.", "formattedAddress": "Bellingham, WA, USA", "groupId": "998714", "isInviteOnly": false, "isPinned": false, "kind": "specialInterest", "latitude": 48.759551999999999, "longitude": -122.488224, "name": "Bham Food Lovers", "preferredMembershipKind": "member", "privacy": "open", "stateAbbrev": "WA", "token": "bham-foodies" } ] }
GET /invites
This method lists the current user's pending invites.
The response is an inviteCollection object.
offset | int | no | |
limit | int | no |
curl https://accountsapi.logos.com/v2/invites
200 OK { "total": 1, "invites": [ { "inviteId": "123", "user": { "id": "456", "alias": "John Doe", "name": "John Doe", }, "group": { "groupId": "789", } } ] }
GET /groups/{groupId}/invites
This method lists the group's pending invites.
The response is an inviteCollection object.
offset | int | no | |
limit | int | no |
curl https://accountsapi.logos.com/v2/groups/123/invites
200 OK { "total": 1, "invites": [ { "inviteId": "123", "user": { "id": "456", "alias": "John Doe", "name": "John Doe", }, "group": { "groupId": "789", } } ] }
POST /groups/{groupId}/invites
This method creates invites for a group.
invites | InviteCollection | no |
curl -X POST https://accountsapi.logos.com/v2/groups/123/invites { "invites": [ { "accountId": "456" }, { "emailInvite": { "email": "exampleUser@example.com" } } ] }
202 Accepted
POST /invites/{inviteId}/accept
This method accepts and invitation to a group.
The response is a membership object.
curl -X POST https://accountsapi.logos.com/v2/invites/123/accept
201 Created { "membershipId": "123", }
DELETE /memberships/{membershipId}
This method removes a user's group membership.
curl -X DELETE https://accountsapi.logos.com/v2/memberships/123
204 No Content
id | string | yes | |
sourceAccountId | string | no | |
sourceDestinationId | string | no | |
text | string | yes | |
url | string | no |
id | string | yes |
id | string | yes | |
destinationAccountId | string | no | |
metadata | Metadata | no | A collection of metadata. |
resourceLocations | Resource Location | no | A collection of resource locations. |
sourceAccountId | string | no | |
text | string | yes | |
title | string | yes | |
url | string | no |
Raw | string | yes | |
Text | string | yes |
reference | Reference | no | |
resource | string | yes | |
offset | string | no | |
selectionLength | string | no | |
version | string | no |
This method posts a comment to an account.
The response is a comment object.
POST /comments
destinationAccountId | string | yes | |
sourceAccountId | string | yes | |
text | string | yes | |
url | string | no |
curl -X POST https://api.faithlife.com/community/v2/comments { "destinationAccountId": "USER OR GROUP ID", "sourceAccountId": "USER OR GROUP ID", "text": "This is a comment", }
201 Created { "id": "COMMENT ID" }
This method gets the newsfeed for the specified group.
The response is a collection of comment objects.
GET /groups/{groupId}/newsfeed
offset | int | no | |
limit | int | no |
curl https://api.faithlife.com/community/v2/groups/999999/newsfeed
200 OK { "items": [{ "kind": "comment", "comment": { "destinationAccountId": "999999", "sourceAccountId": "3", "text": "This is a comment" }, ... ], "total": 10 }
This method gets the notes for the specified group.
The response is a collection of note objects.
GET /groups/{groupId}/notes
offset | int | no | |
limit | int | no |
curl https://api.faithlife.com/community/v2/groups/999999/notes
200 OK { "notes": [{ "id": "1234", "destinationAccountId": "999999", "sourceAccountId": "3", "text": "This is a note" "metadata": [{ "kind": "BibliaReference", "data": { "Url": "http://bible.faithlife.com/books/esv/Mark%202.1", "CoverUrl": "http://covers.logoscdn.com/lls_1.0.710/50x80/cover.jpg", "Content": "And when he returned to Capernaum after some days, it was reported that he was at home.", "Reference": "Mark 2:1", "ResourceTitle": "English Standard Version", "ResourceShortTitle": "ESV" } }], "resourceLocations": [{ "resource": "esv", "version": "1.0", "reference": { "raw": "bible+esv.62.2.1", "text": "Mark 2:1" } }] }, ... ], "total": 5 }