Skip to content

Quickstart

1 min readLast updated Sep 9, 2026

Get from zero to your first API calls in a sandbox tenant. If you don’t have one yet, request access.

Set the region and tenant once. Use uk for a UK tenant or au for an Australian tenant.

Terminal window
export EFIMIS_REGION=uk
export EFIMIS_TENANT=your-tenant-alias
export EFIMIS_CURRENCY=GBP # Use AUD for an Australian tenant where applicable.
export EFIMIS_API_BASE="https://api.${EFIMIS_REGION}.efimis.com/${EFIMIS_TENANT}/api/v1"

Exchange your client credentials for a bearer token. See Authentication for the full token request shape.

Terminal window
export EFIMIS_TOKEN="$(curl --fail-with-body -sS -X POST "$EFIMIS_AUTH_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=$EFIMIS_CLIENT_ID" \
--data-urlencode "client_secret=$EFIMIS_CLIENT_SECRET" \
--data-urlencode "scope=$EFIMIS_API_SCOPE" \
| jq -er '.access_token')"

A client is an entity in the role of a client. First create the entity, then assign the client role.

Terminal window
# Create entity
ENTITY_ID=$(curl --fail-with-body -sS -X POST "$EFIMIS_API_BASE/entities" \
-H "Authorization: Bearer $EFIMIS_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"entityType\":\"Individual\",\"firstName\":\"Gordon\",\"lastName\":\"Smith\",\"currency\":\"$EFIMIS_CURRENCY\",\"email\":\"gordon.smith@example.com\"}" \
| jq -er .data.id)
# Assign client role
CLIENT_ID=$(curl --fail-with-body -sS -X POST "$EFIMIS_API_BASE/clients" \
-H "Authorization: Bearer $EFIMIS_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"entityId\":\"$ENTITY_ID\"}" \
| jq -er .data.id)

New clients must be activated before they can own matters.

Terminal window
curl --fail-with-body -sS -X POST "$EFIMIS_API_BASE/clients/$CLIENT_ID/activate" \
-H "Authorization: Bearer $EFIMIS_TOKEN"

Matters require a valid division from your tenant. Obtain a division ID from your firm configuration or the REST API reference.

Terminal window
export EFIMIS_DIVISION_ID="division_..."
MATTER_ID=$(curl --fail-with-body -sS -X POST "$EFIMIS_API_BASE/matters" \
-H "Authorization: Bearer $EFIMIS_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"clientId\":\"$CLIENT_ID\",\"divisionId\":\"$EFIMIS_DIVISION_ID\",\"title\":\"Smith v. Johnson\"}" \
| jq -er .data.id)
echo "Matter: $MATTER_ID"

Use an employee ID that belongs to your tenant. itemType: 0 is a timed-fee entry, and 36000000000 ticks is one hour.

Terminal window
export EFIMIS_EMPLOYEE_ID="employee_..."
curl --fail-with-body -sS -X POST "$EFIMIS_API_BASE/workitems" \
-H "Authorization: Bearer $EFIMIS_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"matterId\":\"$MATTER_ID\",\"employeeId\":\"$EFIMIS_EMPLOYEE_ID\",\"itemType\":0,\"entryDate\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"durationTicks\":36000000000,\"units\":1,\"rate\":{\"Amount\":250,\"Currency\":\"$EFIMIS_CURRENCY\"},\"title\":\"Initial matter review\"}"