Skip to main content
POST
/
members
/
sync
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "email": "member@example.com",
  "name": "Taylor Member",
  "role": "employee"
}
'
{
  "data": {
    "member": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "organizationId": 123,
      "email": "jsmith@example.com",
      "name": "<string>",
      "role": "<string>",
      "approvalStatus": "<string>",
      "profilePicture": "<string>",
      "description": "<string>",
      "customFields": {}
    },
    "created": true,
    "access": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "organizationId": 123,
      "userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "planId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "status": "<string>",
      "stripeSubscriptionId": "<string>",
      "currentPeriodStart": "2023-11-07T05:31:56Z",
      "currentPeriodEnd": "2023-11-07T05:31:56Z",
      "cancelAt": "2023-11-07T05:31:56Z",
      "canceledAt": "2023-11-07T05:31:56Z",
      "jobsRemaining": 123,
      "metadata": {}
    },
    "payment": {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "organizationId": 123,
      "userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "jobId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "planId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "amount": 123,
      "currency": "<string>",
      "status": "<string>",
      "paymentProvider": "<string>",
      "stripeSessionId": "<string>",
      "stripePaymentIntentId": "<string>",
      "metadata": {}
    }
  }
}
Use this when one external workflow should make the member record correct in one request. Typical uses:
  • create a member if they do not exist yet
  • update role, approval state, profile data, or custom fields
  • attach or update a subscription
  • record a payment at the same time

Core Inputs

email
string
required
Primary identifier for the member.
name
string
Display name. If omitted, Kardow falls back to the email prefix.
role
string
employee, business, both, jobseeker, or employer.
approvalStatus
string
Explicitly set approved, pending, or rejected when your workflow controls approval.
customFields
object
Extra answers or profile fields to store with the member.
access
object
Optional subscription sync block. Use stripePriceId, paypalPlanId, planId, or planName to identify the plan.
payment
object
Optional payment block. jobId, amount, and currency are required if you send it.

Examples

Create a basic member

cURL
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "member@example.com",
    "name": "Taylor Member",
    "role": "employee"
  }'

Create an employer and force approval

cURL
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "owner@example.com",
    "role": "business",
    "approvalStatus": "approved",
    "customFields": {
      "company_size": "51-200",
      "website": "https://example.com"
    }
  }'

Grant paywall access in the same call

cURL
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "subscriber@example.com",
    "role": "employee",
    "access": {
      "stripePriceId": "price_paywall_monthly",
      "status": "active"
    }
  }'

Create a bundle subscription and payment together

cURL
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  -d '{
    "email": "poster@example.com",
    "role": "business",
    "approvalStatus": "approved",
    "access": {
      "stripePriceId": "price_bundle_10",
      "status": "active"
    },
    "payment": {
      "jobId": "44444444-4444-4444-4444-444444444444",
      "amount": 199,
      "currency": "USD",
      "status": "completed",
      "paymentProvider": "invoice"
    }
  }'

Update an existing member without changing billing

cURL
curl --request POST \
  --url https://api.kardow.com/members/sync \
  --header "Content-Type: application/json" \
  --header "x-api-key: your-api-key-here" \
  --data '{
    "email": "member@example.com",
    "name": "Taylor Updated",
    "role": "both",
    "customFields": {
      "department": "Product"
    }
  }'

Response Shape

data.member
object
required
The organization-scoped member record.
data.access
object
The updated subscription when an access block is sent.
data.payment
object
The created payment when a payment block is sent.
data.created
boolean
required
true when the member was newly created in this organization.

Example response

{
  "data": {
    "member": {
      "id": "11111111-1111-1111-1111-111111111111",
      "organizationId": 42,
      "email": "member@example.com",
      "name": "Taylor Member",
      "role": "employee",
      "approvalStatus": "approved",
      "profilePicture": null,
      "description": null,
      "customFields": null
    },
    "access": null,
    "payment": null,
    "created": true
  }
}

Authorizations

x-api-key
string
header
required

API key for authentication. Get yours from Settings > API Keys in the Kardow dashboard.

Body

application/json
email
string<email>
required
userId
string<uuid>
name
string
role
enum<string>
Available options:
employee,
business,
both,
jobseeker,
employer
approvalStatus
enum<string>
Available options:
approved,
pending,
rejected
profilePicture
string<uri> | null
description
string | null
customFields
object
access
object
payment
object

Response

Updated existing member

data
object
required