PACE Partner API
API reference
Every endpoint, request and response in /api/v1/.
Authentication
Get an access token (client credentials)
/api/v1/oauth/token/No bearer token. Authenticate with your client credentials.
Exchange your client_id and client_secret for a bearer token valid for one hour. Send the credentials with HTTP Basic auth (preferred) or as form fields. scope is optional and space-separated; it may only narrow the scopes granted to your client.
Request body application/x-www-form-urlencoded
grant_type"client_credentials"requiredAlways client_credentials.
scopestringSpace separated. Narrows the token to fewer scopes than your client holds. Omit to receive all of them.
client_idstringOnly when not using HTTP Basic.
client_secretstringOnly when not using HTTP Basic.
Response 200
access_tokenstringrequiredSend as Authorization: Bearer <access_token>.
token_typestringAlways Bearer.
expires_inintegerrequiredLifetime in seconds (3600).
scopestringrequiredSpace separated scopes this token carries. Empty if none.
Status codes
200Success400invalid_request / unsupported_grant_type / invalid_scope401invalid_client429too many attempts
curl -s -X POST https://mypacehub.com/api/v1/oauth/token/ \
-u "$PACE_CLIENT_ID:$PACE_CLIENT_SECRET" \
-d grant_type=client_credentialsResponse 200
{
"access_token": "pace_at_2Vh0yQm7c1...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "programme.metrics.read"
}Response 401
{
"error": "invalid_client",
"error_description": "Client authentication failed."
}Client
Describe the calling client
/api/v1/me/Requires Authorization: Bearer <access_token>.
Returns the client this token belongs to, its organisation, the environment (sandbox for a simulation organisation: demo data only, no real patients) and the token's scopes. Use it to check your credentials work.
Response 200
api_versionstringrequiredMajor API version, "1".
client_idstringrequiredYour client identifier.
namestringrequiredThe name PACE gave this client.
audience"pharma" | "hospital" | "psp_partner"requiredWhich kind of partner this client is.
organizationobjectrequiredThe one organisation this client belongs to.
organization.namestringrequiredOrganisation name.
organization.slugstringrequiredStable organisation identifier.
environment"sandbox" | "live"requiredsandbox: demo data only, never real patients.
scopesstring[]requiredThis token's scopes.
token_expires_atstring (date-time)requiredWhen this access token stops working.
rate_limit_per_minuteintegerrequiredRequests per minute allowed for this client.
Status codes
200Success401Missing, invalid, expired or revoked token429Rate limit exceeded, see Retry-After
curl -s -X GET https://mypacehub.com/api/v1/me/ \
-H "Authorization: Bearer $PACE_ACCESS_TOKEN"Response 200
{
"api_version": "1",
"client_id": "pc_3f9a1c27b84e0d5a6c19f2e7",
"name": "Sandbox CRM",
"audience": "pharma",
"organization": {
"name": "Demo Pharma",
"slug": "demo-pharma"
},
"environment": "sandbox",
"scopes": [],
"token_expires_at": "2026-10-16T19:00:00Z",
"rate_limit_per_minute": 120
}