Create a member
POST /members
Requires the members:write permission. The response data contains member, passInstance and assignment outcome flags. Member creation can succeed even if optional pass or membership assignment fails; inspect passIssued and membershipGrantFailed.
Authorization
X-API-Key required
Request Body
| Field | Type | Required | Limits | Description |
|---|---|---|---|---|
title | Mr, Ms, Mrs, Miss, Sir, Madam, Dr, Rev | No | Optional member title or honorific. | |
name | string | Yes | min length 1 | Member full name. Required by the public API. firstName and lastName may also be provided and are stored separately. |
firstName | string | No | max length 120 | Optional member first name stored separately from the full name. |
lastName | string | No | max length 120 | Optional member last name stored separately from the full name. |
email | string (email) | Yes | Member email address. Used for pass delivery emails when a pass is issued. | |
address | object | No | ||
contactPreferences | object | No | ||
memberId | string | No | Unique member identifier. Must not contain spaces. | |
memberSince | string (date-time) | No | Date the member joined. Defaults to now when omitted. | |
type | Member, Visitor | No | Member category. Defaults to Member when omitted. | |
status | active, inactive | No | Accepted by route validation, but newly created members are stored as active. Use PUT /members/{id} to change status | |
location | string | No | max length 100 | Member location or branch. |
phone | string | No | max length 50 | Member phone number. |
dateOfBirth | string (date) | No | Member date of birth. | |
gender | male, female, other, prefer_not_to_say | No | Member gender. | |
notes | string | No | max length 5000 | Internal member notes. |
flagged | boolean | No | Whether the member is flagged for staff attention. | |
flagNote | string | No | max length 500 | Optional note shown when the member is flagged. |
customFields | object | No | Organisation-defined custom field values keyed by custom field key. Use customFields only for fields configured by the organisation; use first-party fields such as phone, dateOfBirth, gender, and notes at the top level. | |
issuePass | boolean | No | Set to true to issue a pass immediately after creating the member. | |
passTemplateId | string | No | Required when issuePass is true. Use the id from the List pass templates endpoint. | |
expiryDate | string (date-time) | No | Optional pass expiry date used when issuePass is true. | |
photo | string | No | Base64 image data URL. On update, an empty string removes the photo and existing URLs leave it unchanged | |
membershipTypeId | string | No | Optional membership assignment after saving the member | |
membershipPricingOptionId | string | No | Pricing option id within the selected membership type | |
membershipManualPayment | object | No | ||
expiryDateFieldKey | string | No | Visible date custom field used for pass expiry; takes precedence over expiryDate when issuePass is true |
Request Examples
curl -X POST "https://api.remypass.com/api/v1/public/members" \
-H "Accept: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Mr",
"name": "John Doe",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"address": {
"addressLine1": "23 Gastons Road",
"addressLine2": "",
"city": "London",
"region": "Greater London",
"postalCode": "SW1A 1AA",
"country": "United Kingdom"
},
"contactPreferences": {
"email": true,
"post": true,
"phone": true
},
"memberId": "string",
"memberSince": "2026-01-01T12:00:00.000Z",
"type": "Member",
"status": "active",
"location": "Main Street",
"phone": "+447700900123",
"dateOfBirth": "1990-04-20",
"gender": "male",
"notes": "Prefers email contact",
"flagged": true,
"flagNote": "Check eligibility before issuing renewal",
"customFields": {
"membershipLevel": "Gold",
"favoriteLocation": "Main Street",
"newsletterOptIn": true
},
"issuePass": true,
"passTemplateId": "507f1f77bcf86cd799439011",
"expiryDate": "2026-01-01T12:00:00.000Z",
"photo": "string",
"membershipTypeId": "507f1f77bcf86cd799439011",
"membershipPricingOptionId": "string",
"membershipManualPayment": {
"method": "cash",
"amount": 1,
"currency": "507f1f77bcf86cd799439011",
"reference": "string",
"notes": "string"
},
"expiryDateFieldKey": "string"
}'Use Case Examples
Create a new member
curl -X POST https://api.remypass.com/api/v1/public/members \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Dr. Sarah Johnson",
"firstName": "Sarah",
"lastName": "Johnson",
"email": "sarah.johnson@example.com",
"title": "Dr",
"memberId": "MEM001",
"memberSince": "2024-01-15T00:00:00.000Z",
"phone": "+447700900123",
"dateOfBirth": "1990-04-20",
"gender": "female",
"notes": "Prefers email contact",
"type": "Member",
"status": "active",
"customFields": {
"department": "Engineering",
"membershipLevel": "Premium"
}
}'
Create member with immediate pass issuance
curl -X POST https://api.remypass.com/api/v1/public/members \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Ms",
"name": "Emily Chen",
"email": "emily.chen@example.com",
"memberId": "MEM002",
"issuePass": true,
"passTemplateId": "507f1f77bcf86cd799439012",
"expiryDate": "2024-12-31T23:59:59.000Z"
}'
Responses
| Status | Description |
|---|---|
201 | Member created. |
400 | Bad request. The top-level message explains what is invalid and, where applicable, the errors array contains structured field details. |
401 | Missing or invalid API key. |
403 | The caller is not allowed to access this resource. |
429 | Rate limit exceeded. |
500 | Server error. |
201 Response Example
{
"success": true,
"message": "string",
"data": {
"member": {
"_id": "507f1f77bcf86cd799439011",
"title": "Mr",
"name": "John Doe",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"address": {
"addressLine1": "23 Gastons Road",
"addressLine2": "",
"city": "London",
"region": "Greater London",
"postalCode": "SW1A 1AA",
"country": "United Kingdom"
},
"contactPreferences": {
"email": true,
"post": true,
"phone": true
},
"memberId": "MEM001",
"memberSince": "2024-01-15T00:00:00.000Z",
"type": "Member",
"status": "active",
"location": "Main Street",
"phone": "+447700900123",
"dateOfBirth": "1990-04-20",
"gender": "male",
"notes": "Prefers email contact",
"flagged": true,
"flagNote": "Check eligibility before issuing renewal",
"customFields": {
"membershipLevel": "Gold",
"favoriteLocation": "Main Street",
"newsletterOptIn": true
},
"passes": [
{
"passInstance": {},
"issuedAt": null,
"issuedBy": null,
"status": null,
"expiryDate": null
}
],
"createdAt": "2026-01-01T12:00:00.000Z",
"updatedAt": "2026-01-01T12:00:00.000Z",
"walletSummary": {
"total": 1,
"added": 1,
"status": "no_pass"
},
"photo": "string",
"linkedMemberGroupId": "507f1f77bcf86cd799439011"
},
"passInstance": {
"_id": "507f1f77bcf86cd799439013",
"serialNumber": "string",
"status": "active",
"member": "string",
"pass": "string",
"recipientName": "string",
"recipientEmail": "user@example.com",
"expiryDate": "2026-01-01T12:00:00.000Z",
"issuedAt": "2026-01-01T12:00:00.000Z",
"walletUrls": {
"apple": "string",
"google": "string"
},
"maxUses": 1,
"usesRemaining": 1,
"redeemedCount": 1,
"lastRedeemedAt": "2026-01-01T12:00:00.000Z",
"passType": "generic",
"customFields": {},
"eventTime": "2026-01-01T12:00:00.000Z",
"eventName": "string",
"seatInfo": {
"seat": "string",
"section": "string",
"row": "string",
"gate": "string"
},
"recipientTitle": "string",
"voided": true,
"voidedAt": "2026-01-01T12:00:00.000Z",
"isNonMemberTicket": true,
"currentStamps": 1,
"lifetimeStampsEarned": 1,
"lastStampUpdate": "2026-01-01T12:00:00.000Z",
"createdAt": "2026-01-01T12:00:00.000Z",
"updatedAt": "2026-01-01T12:00:00.000Z",
"membershipManaged": true,
"memberMembershipId": "string"
},
"passIssued": true,
"membershipGrant": {},
"membershipGranted": true,
"membershipGrantFailed": true,
"membershipGrantError": "string",
"message": "string"
}
}
Response Fields
| Field | Type | Description | Attributes |
|---|---|---|---|
success | boolean | ||
message | string | ||
data | object | Show child attributes
|