API referenceAdmin import

Admin import

8 operations. Every schema and example on this page is generated from the platform contract.

White-glove: run the import.

Identical semantics to the merchant commit (no contact, no charges, 7-day undo).

Request body

store_idstring · uuidrequired
job_idstring · uuidrequired

Response, 200

startedbooleanrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/commit" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "job_id": "bb2be0dd-0000-4000-8000-d0c5000000bb"
  }'
Response, 200
{
  "started": true
}

White-glove: send claim invites.

Same wave guards as the merchant button; audit records the admin.

Request body

store_idstring · uuidrequired
job_idstring · uuidrequired
waveenumrequired
initialreminderreminder2

Response, 200

sentnumberrequired
already_claimednumberrequired
no_emailnumberrequired
failednumberrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/invites" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "job_id": "bb2be0dd-0000-4000-8000-d0c5000000bb",
    "wave": "initial"
  }'
Response, 200
{
  "sent": 1,
  "already_claimed": 1,
  "no_email": 1,
  "failed": 1
}

White-glove: wizard state for a store.

Job state + the store’s active gym plans for mapping.

Parameters

store_idstring · uuidqueryrequired

Response, 200

stateobjectrequired
5 child fields
jobobjectrequired
9 child fields
idstringrequired
store_idstringrequired
sourcestringrequired
statusenumrequired
draftparsingmappedpreviewedimportingdonefailedundone
countsobjectrequired
dry_run_reportobjectrequired
committed_atstring, nullablerequired
undo_deadlinestring, nullablerequired
created_atstringrequired
filesarray of objectrequired
5 child fields
idstringrequired
kindenumrequired
clientsautopayspassesvisits
original_namestringrequired
row_countnumberrequired
created_atstringrequired
plan_matchesarray of objectrequired
3 child fields
source_namestringrequired
actionenumrequired
mapcreateskip
matched_plan_idstring, nullablerequired
progressobjectrequired
3 child fields
totalnumberrequired
donenumberrequired
countsobjectrequired
funnelobjectrequired

Re-card funnel, present once the import is committed.

6 child fields
imported_membersnumberrequired
claimednumberrequired
active_billingnumberrequired
awaitingnumberrequired
monthly_value_pencenumberrequired
invitesobjectrequired
6 child fields
initial_atstring, nullablerequired
initial_sentnumberrequired
reminder_atstring, nullablerequired
reminder_sentnumberrequired
reminder2_atstring, nullablerequired
reminder2_sentnumberrequired
plansarray of objectrequired
4 child fields
idstringrequired
namestringrequired
price_pencenumberrequired
billing_cyclestringrequired
curl -G "https://www.membber.com/api/v1/admin-import/jobs" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  --data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"
Response, 200
{
  "state": {
    "job": {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "store_id": "6659c139-0000-4000-8000-d0c500000066",
      "source": "<source>",
      "status": "draft",
      "counts": {},
      "dry_run_report": {},
      "committed_at": "<committed_at>",
      "undo_deadline": "<undo_deadline>",
      "created_at": "<created_at>"
    },
    "files": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "kind": "clients",
        "original_name": "<original_name>",
        "row_count": 1,
        "created_at": "<created_at>"
      }
    ],
    "plan_matches": [
      {
        "source_name": "<source_name>",
        "action": "map",
        "matched_plan_id": "1c4475d6-0000-4000-8000-d0c50000001c"
      }
    ],
    "progress": {
      "total": 1,
      "done": 1,
      "counts": {}
    },
    "funnel": {
      "imported_members": 1,
      "claimed": 1,
      "active_billing": 1,
      "awaiting": 1,
      "monthly_value_pence": 1500,
      "invites": {
        "initial_at": "<initial_at>",
        "initial_sent": 1,
        "reminder_at": "<reminder_at>",
        "reminder_sent": 1,
        "reminder2_at": "<reminder2_at>",
        "reminder2_sent": 1
      }
    }
  },
  "plans": [
    {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "name": "Example name",
      "price_pence": 1500,
      "billing_cycle": "<billing_cycle>"
    }
  ]
}

White-glove: start/resume an import for a store.

Creates or resumes the draft job with acting_admin_id recorded.

Request body

store_idstring · uuidrequired

Response, 200

stateobjectrequired
5 child fields
jobobjectrequired
9 child fields
idstringrequired
store_idstringrequired
sourcestringrequired
statusenumrequired
draftparsingmappedpreviewedimportingdonefailedundone
countsobjectrequired
dry_run_reportobjectrequired
committed_atstring, nullablerequired
undo_deadlinestring, nullablerequired
created_atstringrequired
filesarray of objectrequired
5 child fields
idstringrequired
kindenumrequired
clientsautopayspassesvisits
original_namestringrequired
row_countnumberrequired
created_atstringrequired
plan_matchesarray of objectrequired
3 child fields
source_namestringrequired
actionenumrequired
mapcreateskip
matched_plan_idstring, nullablerequired
progressobjectrequired
3 child fields
totalnumberrequired
donenumberrequired
countsobjectrequired
funnelobjectrequired

Re-card funnel, present once the import is committed.

6 child fields
imported_membersnumberrequired
claimednumberrequired
active_billingnumberrequired
awaitingnumberrequired
monthly_value_pencenumberrequired
invitesobjectrequired
6 child fields
initial_atstring, nullablerequired
initial_sentnumberrequired
reminder_atstring, nullablerequired
reminder_sentnumberrequired
reminder2_atstring, nullablerequired
reminder2_sentnumberrequired
plansarray of objectrequired
4 child fields
idstringrequired
namestringrequired
price_pencenumberrequired
billing_cyclestringrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/jobs" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066"
  }'
Response, 200
{
  "state": {
    "job": {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "store_id": "6659c139-0000-4000-8000-d0c500000066",
      "source": "<source>",
      "status": "draft",
      "counts": {},
      "dry_run_report": {},
      "committed_at": "<committed_at>",
      "undo_deadline": "<undo_deadline>",
      "created_at": "<created_at>"
    },
    "files": [
      {
        "id": "00000d1b-0000-4000-8000-d0c500000000",
        "kind": "clients",
        "original_name": "<original_name>",
        "row_count": 1,
        "created_at": "<created_at>"
      }
    ],
    "plan_matches": [
      {
        "source_name": "<source_name>",
        "action": "map",
        "matched_plan_id": "1c4475d6-0000-4000-8000-d0c50000001c"
      }
    ],
    "progress": {
      "total": 1,
      "done": 1,
      "counts": {}
    },
    "funnel": {
      "imported_members": 1,
      "claimed": 1,
      "active_billing": 1,
      "awaiting": 1,
      "monthly_value_pence": 1500,
      "invites": {
        "initial_at": "<initial_at>",
        "initial_sent": 1,
        "reminder_at": "<reminder_at>",
        "reminder_sent": 1,
        "reminder2_at": "<reminder2_at>",
        "reminder2_sent": 1
      }
    }
  },
  "plans": [
    {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "name": "Example name",
      "price_pence": 1500,
      "billing_cycle": "<billing_cycle>"
    }
  ]
}

White-glove: decide a contract mapping.

Idempotent upsert; decided_by records the admin.

Request body

store_idstring · uuidrequired
job_idstring · uuidrequired
source_namestringrequired
actionenumrequired
mapskip
plan_idstring · uuid, nullablerequired

Response, 200

okbooleanrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/plan-match" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "job_id": "bb2be0dd-0000-4000-8000-d0c5000000bb",
    "source_name": "<source_name>",
    "action": "map",
    "plan_id": "e28fa9f1-0000-4000-8000-d0c5000000e2"
  }'
Response, 200
{
  "ok": true
}

White-glove: search stores.

Internal-admin store picker for the white-glove import.

Parameters

qstringqueryoptional

Name/code search; empty lists recent gym stores.

Response, 200

storesarray of objectrequired
6 child fields
idstringrequired
namestringrequired
codestringrequired
store_templatestring, nullablerequired
is_testbooleanrequired
statusstring, nullablerequired
curl -G "https://www.membber.com/api/v1/admin-import/stores" \
  -H "Authorization: Bearer $MEMBBER_TOKEN"
Response, 200
{
  "stores": [
    {
      "id": "00000d1b-0000-4000-8000-d0c500000000",
      "name": "Example name",
      "code": "EXAMPLE10",
      "store_template": "<store_template>",
      "is_test": true,
      "status": "<status>"
    }
  ]
}

White-glove: undo a committed import.

Same protections as the merchant undo (claimed members kept).

Request body

store_idstring · uuidrequired
job_idstring · uuidrequired

Response, 200

okbooleanrequired
deletednumberrequired
keptnumberrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/undo" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "job_id": "bb2be0dd-0000-4000-8000-d0c5000000bb"
  }'
Response, 200
{
  "ok": true,
  "deleted": 1,
  "kept": 1
}

White-glove: upload one export CSV for a store.

Same staging pipeline as the merchant wizard; nothing written live.

Request body

store_idstring · uuidrequired
job_idstring · uuidoptional
kindenumoptional
clientsautopayspassesvisits
file_namestringrequired
contentstringrequired

Response, 200

job_idstringrequired
kindenumrequired
clientsautopayspassesvisits
summaryobjectrequired
6 child fields
kindenumrequired
clientsautopayspassesvisits
totalnumberrequired
validnumberrequired
warningsnumberrequired
errorsnumberrequired
issue_countsobjectrequired
curl -X POST "https://www.membber.com/api/v1/admin-import/upload" \
  -H "Authorization: Bearer $MEMBBER_TOKEN" \
  -H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
  -H "Content-Type: application/json" \
  -d '{
    "store_id": "6659c139-0000-4000-8000-d0c500000066",
    "file_name": "<file_name>",
    "content": "<content>"
  }'
Response, 200
{
  "job_id": "bb2be0dd-0000-4000-8000-d0c5000000bb",
  "kind": "clients",
  "summary": {
    "kind": "clients",
    "total": 1,
    "valid": 1,
    "warnings": 1,
    "errors": 1,
    "issue_counts": {}
  }
}
WhatsApp
Book a Call
Start Free