SheepAPI Documentation

SheepAPI is the platform that supports sheepCRM, sheepTeams and sheepApp and the many partners that connect to Sheep data. The API is divided into two parts: the core system API and the self-service API. For apps wanting to provide an interface for a single contact the self service API will be of most use. The core API gives access to all data.

Discord

We are experimenting with a Discord chat server to help our users. Join and say hello: https://discord.gg/GE8g88Ktds

New API Documentation

These documents are being replaced with OpenAPI documentation at https://sls-api.sheepcrm.com/.well-known/docs.html If there are contradictions please let us know and assume the newer OpenAPI documents are correct.

Getting started

You need to have already registered for a Sheep database and have an active user account. We’ll use the wonderful httpie http client in this document. See their site for installation instructions for your platform. Sheep APIs follow the RESTful design model wherever possible. HTTP verbs should be expected to work on all resources unless otherwise documented. We recommend testing API calls using httpie before implementing in code. If you need to submit a bug report please provide a working (failing) httpie example.

We recommend httpie and the syntax is cleaner and generally simpler to read. If you are a cURL fan or can’t install httpie we recommend the Everything cURL book for tips on using cURL.

The examples will frequently refer to $FLOCK in the URL. You should replace this with the database that you want to work with. On a Mac use export FLOCK=example (replacing example…) then most URL examples can be copied directly.

Check Sheep is up

and check that your environment is working properly.

http https://api.sheepcrm.com/api/v1/ping/

HTTP/1.1 200 OK
{
    "message": "pong"
}

Checking your permissions

Once you have successfully ‘pinged’ the API try an authenticated call. To do this you will need to set two environment variables or replace the tokens with your actual values in the example. (If you don’t have an API key you can set your own by logging into SheepCRM then navigate to the Profile settings or see Get an auth token in these docs.).

export FLOCK=example
export API_KEY=my-secret-api-key
http https://api.sheepcrm.com/api/v1/$FLOCK/ Authorization:"Bearer $API_KEY"
http https://api.sheepcrm.com/api/v1/example/ Authorization:"Bearer my-secret-api-key"

You are expecting a HTTP 200 response with a list of resources as your response. A 403 FORBIDDEN response indicates a problem with your API key or your permissions.

HTTP Access codes

200

OK

201

create

403

forbidden - you do not have access to this resource (check you Auth/API Key)

404

not found (also returned on bad user credentials)

409

conflict (auth and structure ok but a problem with the data values)

4xx

client error

5xx

Sheep error up

HTTP Verbs

GET

Read

PUT

Update

POST

Create. Note: The system tries to stop accidental duplicates so a POST will check before creating. If you need to create a record which the system may think is a dupe then either send more data (to show uniqueness) or create with unique data and then update. (legacy_uid is a good field that you can control).

DELETE

Delete

Terminology

api_key

The bearer token provided by the auth call. The bearer token must be supplied as a header for all authenticated calls.

flock

The client identifier/database also known as a bucket

resource_type

These are the data type / tables / models used by Sheep. person, organisation, booking, ticket, payment are all examples of resource types.

resource

A single record of a given resource type

primary resources

person, organisation, booking, group

secondary resources

e.g. payment, ticket, membership These are records which attach to primary resources

sheep uri

Sheep URIs are used extensively to refer to resources they are comprised of /$FLOCK/{resource_type}/{uid}/

slugified uri

A Sheep URI as a string $FLOCK-{resource_type}-{uid}

API Throttling

We reserves the right to modify the rate limits at any time. For the up-to-date information on rate limits, you can review the HTTP response headers returned from rate-limited endpoints.

If you receive a rate limit-related response header, it will include numeric information detailing your status.

x-rate-limit-limit

The maximum number of requests available in the current time frame per hour and per minute

x-rate-limit-remaining

The number of remaining requests in the current time frame.

x-rate-limit-reset

The number of seconds (approximately) until the limit resets

The rate limit string:

e.g. [ ‘40, 400;window=60, 1000;window=3600’ ] 40 calls remaining, the minute window limit is 400, the hour window is 1000