Docs
Dashboard
On this page

    Customers

    12 endpoints. Each needs an API key or OAuth token with the scope shown; the key already names its store, so paths start at /v1/store. Generated from the live contract; also in openapi.json.

    Customers with spend, segments and tab counts

    GET/v1/store/customers

    Or name the store: GET /v1/stores/{storeId}/customers

    customers:readlistCustomers

    Parameters

    • tab"all" | "new" | "returning" | "high_value" | "at_risk" | "blocked"query
    • qstring | nullquery
    • countrystring | nullquery
    • sort"recent" | "spent" | "orders" | "name" | "first" | "country"query
    • dir"asc" | "desc" | nullquery
    • cursorstring | nullquery
    • limitinteger | stringquery

    Response ListCustomersResponse

    • itemsCustomerRow[]required
    • nextCursorCursor | nullrequired
    • countsCustomerCountsrequired
    • countriesstring[]required

    Example

    curl "https://api.shopfa.st/v1/store/customers" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Every customer matching the filters, as CSV

    GET/v1/store/customers/export

    Or name the store: GET /v1/stores/{storeId}/customers/export

    customers:readexportCustomers

    Parameters

    • tab"all" | "new" | "returning" | "high_value" | "at_risk" | "blocked"query
    • qstring | nullquery
    • countrystring | nullquery

    Response GrowthCsv

    • filenamestringrequired
    • csvstringrequired
    • rowsintegerrequired

    Example

    curl "https://api.shopfa.st/v1/store/customers/export" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/export', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers/export",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers/export", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Pairs of customers that look like the same person

    GET/v1/store/customers/duplicates

    Or name the store: GET /v1/stores/{storeId}/customers/duplicates

    customers:readlistCustomerDuplicates

    Response ListCustomerDuplicatesResponse

    • candidatesDuplicateCandidate[]required

    Example

    curl "https://api.shopfa.st/v1/store/customers/duplicates" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/duplicates', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers/duplicates",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers/duplicates", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    A customer with orders, products, licenses, notes and emails

    GET/v1/store/customers/{customerId}

    Or name the store: GET /v1/stores/{storeId}/customers/{customerId}

    customers:readgetCustomer

    Parameters

    • customerIdcus_…pathrequired

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Set a customer's tags

    PATCH/v1/store/customers/{customerId}

    Or name the store: PATCH /v1/stores/{storeId}/customers/{customerId}

    customers:writeupdateCustomer

    Parameters

    • customerIdcus_…pathrequired

    Body

    • tagsstring[]required

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl -X PATCH "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "tags": [
        "string"
      ]
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk', {
      method: 'PATCH',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "tags": [
          "string"
        ]
      }),
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "PATCH",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "tags": [
            "string"
          ]
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("PATCH", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk", strings.NewReader(`{
      "tags": [
        "string"
      ]
    }`))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Block or unblock a customer from checking out

    PUT/v1/store/customers/{customerId}/block

    Or name the store: PUT /v1/stores/{storeId}/customers/{customerId}/block

    customers:writesetCustomerBlocked

    Parameters

    • customerIdcus_…pathrequired

    Body

    • blockedbooleanrequired
    • reasonstring

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl -X PUT "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/block" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "blocked": false,
      "reason": ""
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/block', {
      method: 'PUT',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "blocked": false,
        "reason": ""
      }),
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "PUT",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/block",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "blocked": False,
          "reason": ""
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/block", strings.NewReader(`{
      "blocked": false,
      "reason": ""
    }`))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Add a private note

    POST/v1/store/customers/{customerId}/notes

    Or name the store: POST /v1/stores/{storeId}/customers/{customerId}/notes

    customers:writeaddCustomerNote

    Parameters

    • customerIdcus_…pathrequired

    Body

    • bodystringrequired

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl -X POST "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "body": "string"
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "body": "string"
      }),
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "POST",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "body": "string"
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes", strings.NewReader(`{
      "body": "string"
    }`))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Delete a note

    DELETE/v1/store/customers/{customerId}/notes/{noteId}

    Or name the store: DELETE /v1/stores/{storeId}/customers/{customerId}/notes/{noteId}

    customers:writedeleteCustomerNote

    Parameters

    • customerIdcus_…pathrequired
    • noteIdcnote_…pathrequired

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl -X DELETE "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes/cnote_0123456789abcdefghjk" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes/cnote_0123456789abcdefghjk', {
      method: 'DELETE',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "DELETE",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes/cnote_0123456789abcdefghjk",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("DELETE", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/notes/cnote_0123456789abcdefghjk", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Merge another customer into this one: orders, reviews, notes, tags and emails move over

    POST/v1/store/customers/{customerId}/merge

    Or name the store: POST /v1/stores/{storeId}/customers/{customerId}/merge

    customers:writemergeCustomers

    Parameters

    • customerIdcus_…pathrequired

    Body

    • sourceIdcus_…required

    Response CustomerDetail

    • idCustomerIdrequired
    • emailEmailrequired
    • namestringrequired
    • countryCountryCoderequired
    • ordersintegerrequired
    • spentMinorMinorUnitsrequired
    • currencyCurrencyCoderequired
    • firstOrderAtTimestamp | nullrequired
    • lastOrderAtTimestamp | nullrequired
    • tagsstring[]required
    21 more fields
    • segmentsCustomerSegment[]required
    • blockedbooleanrequired
    • createdAtTimestamprequired
    • averageOrderMinorMinorUnitsrequired
    • refundedMinorMinorUnitsrequired
    • refundsintegerrequired
    • disputesintegerrequired
    • blockedReasonstringrequired
    • blockedAtTimestamp | nullrequired
    • notesCustomerNote[]required
    • orderListCustomerOrder[]required
    • productsOwnedOwnedProduct[]required
    • licensesOwnedLicense[]required
    • emailsEmailLogEntry[]required
    • reviewsintegerrequired
    • mergedFromobject[]required
      • idCustomerIdrequired
      • emailEmailrequired
    • affiliateCodestringrequired
    • discordCustomerDiscordrequired
    • sessionsCustomerSession[]required
    • timelineCustomerTimelineEntry[]required
    • storeCreditMinorMinorUnits | nullrequired

    Example

    curl -X POST "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/merge" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "sourceId": "cus_0123456789abcdefghjk"
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/merge', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "sourceId": "cus_0123456789abcdefghjk"
      }),
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "POST",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/merge",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "sourceId": "cus_0123456789abcdefghjk"
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/merge", strings.NewReader(`{
      "sourceId": "cus_0123456789abcdefghjk"
    }`))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    A customer's store credit balance and history

    GET/v1/store/customers/{customerId}/credit

    Or name the store: GET /v1/stores/{storeId}/customers/{customerId}/credit

    customers:readrole: customers:readgetCustomerCredit

    Parameters

    • customerIdcus_…pathrequired

    Response CustomerCredit

    • customerIdCustomerIdrequired
    • currencyCurrencyCoderequired
    • balanceMinorMinorUnitsrequired
    • entriesStoreCreditEntry[]required

    Example

    curl "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Add or take off store credit

    POST/v1/store/customers/{customerId}/credit

    Or name the store: POST /v1/stores/{storeId}/customers/{customerId}/credit

    customers:writerole: customers:writeadjustCustomerCredit

    Parameters

    • customerIdcus_…pathrequired

    Body

    • amountMinorintegerrequired
    • notestring

    Response CustomerCredit

    • customerIdCustomerIdrequired
    • currencyCurrencyCoderequired
    • balanceMinorMinorUnitsrequired
    • entriesStoreCreditEntry[]required

    Example

    curl -X POST "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "amountMinor": 0,
      "note": ""
    }'
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        "amountMinor": 0,
        "note": ""
      }),
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "POST",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
        json={
          "amountMinor": 0,
          "note": ""
        },
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/credit", strings.NewReader(`{
      "amountMinor": 0,
      "note": ""
    }`))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    req.Header.Set("Content-Type", "application/json")
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    A customer's subscriptions with auto-renew state

    GET/v1/store/customers/{customerId}/auto-renew

    Or name the store: GET /v1/stores/{storeId}/customers/{customerId}/auto-renew

    customers:readrole: customers:readlistCustomerAutoRenew

    Parameters

    • customerIdcus_…pathrequired

    Response SellerAutoRenewList

    • subscriptionsSellerAutoRenewSubscription[]required

    Example

    curl "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/auto-renew" \
      -H "Authorization: Bearer $SHOPFAST_API_KEY"
    const res = await fetch('https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/auto-renew', {
      method: 'GET',
      headers: {
        Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
      },
    });
    if (!res.ok) throw new Error((await res.json()).detail);
    const data = await res.json();
    import os, requests
    
    res = requests.request(
        "GET",
        "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/auto-renew",
        headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
    )
    res.raise_for_status()
    data = res.json()
    req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/customers/cus_0123456789abcdefghjk/auto-renew", nil)
    req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
    res, err := http.DefaultClient.Do(req)
    Try it with your key

    Use a test key on a development store. The key stays in this tab (sessionStorage) and is sent only to the base URL above.

    Was this page helpful?