Most Membership.io endpoints return JSON:API-style documents.
Use this request header:
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
application/json is also accepted by the backend for compatibility, but application/vnd.api+json is the canonical media type.
Resource response
A single resource response has data.id, data.type, and data.attributes.
{
"data": {
"id": "0197...",
"type": "hubs",
"attributes": {
"title": "Member Academy",
"slug": "member-academy",
"created_at": "2026-06-08T12:00:00Z"
}
}
}
List response
A list response returns data as an array. Paginated endpoints also include links and metadata.
{
"data": [],
"links": {
"self": "/api/v1/teams/team_123/contacts?page[size]=20",
"next": "/api/v1/teams/team_123/contacts?page[size]=20&page[after]=cursor"
},
"meta": {
"has_more": true
}
}
Write request
Many newer write endpoints use a JSON:API envelope:
{
"data": {
"type": "contacts",
"attributes": {
"email": "member@example.com",
"first_name": "Sam"
}
}
}
Some alpha endpoints still accept flat request bodies or return flat token bodies. Check the generated OpenAPI page for the exact endpoint before building a client.
Errors
Errors return an errors array. Each error has an HTTP status string, title, detail, optional code, and optional source pointer.
{
"errors": [
{
"status": "422",
"code": "validation_error",
"title": "Validation Error",
"detail": "Field required",
"source": {
"pointer": "/data/attributes/email"
},
"meta": {
"request_id": "req_..."
}
}
]
}