sfgboxapi

<back to all web services

CreateSubscribeCustomer

Requires Authentication
The following routes are available for this service:
POST/create-customer
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


class StripeType(str, Enum):
    UNKNOWN = 'unknown'
    ACCOUNT = 'account'
    CARD = 'card'
    CHARGE = 'charge'
    COUPON = 'coupon'
    CUSTOMER = 'customer'
    DISCOUNT = 'discount'
    DISPUTE = 'dispute'
    EVENT = 'event'
    INVOICEITEM = 'invoiceitem'
    INVOICE = 'invoice'
    LINE_ITEM = 'line_item'
    PLAN = 'plan'
    SUBSCRIPTION = 'subscription'
    TOKEN = 'token'
    TRANSFER = 'transfer'
    LIST = 'list'
    PRODUCT = 'product'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeObject:
    object: Optional[StripeType] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeId(StripeObject):
    id: Optional[str] = None


class StripeCouponDuration(str, Enum):
    FOREVER = 'forever'
    ONCE = 'once'
    REPEATING = 'repeating'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCoupon(StripeId):
    amount_off: Optional[int] = None
    created: Optional[datetime.datetime] = None
    currency: Optional[str] = None
    duration: Optional[StripeCouponDuration] = None
    duration_in_months: Optional[int] = None
    livemode: bool = False
    max_redemptions: Optional[int] = None
    metadata: Optional[Dict[str, str]] = None
    percent_off: Optional[int] = None
    redeem_by: Optional[datetime.datetime] = None
    times_redeemed: int = 0
    valid: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeDiscount(StripeId):
    customer: Optional[str] = None
    coupon: Optional[StripeCoupon] = None
    start: Optional[datetime.datetime] = None
    end: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeAddress:
    city: Optional[str] = None
    country: Optional[str] = None
    line1: Optional[str] = None
    line2: Optional[str] = None
    postal_code: Optional[str] = None
    state: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeShipping:
    address: Optional[StripeAddress] = None
    name: Optional[str] = None
    phone: Optional[str] = None


class StripeCvcCheck(str, Enum):
    UNKNOWN = 'Unknown'
    PASS_ = 'Pass'
    FAIL = 'Fail'
    UNCHECKED = 'Unchecked'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCard(StripeId):
    brand: Optional[str] = None
    number: Optional[str] = None
    last4: Optional[str] = None
    dynamic_last4: Optional[str] = None
    exp_month: int = 0
    exp_year: int = 0
    cvc: Optional[str] = None
    name: Optional[str] = None
    address_city: Optional[str] = None
    address_country: Optional[str] = None
    address_line1: Optional[str] = None
    address_line2: Optional[str] = None
    address_state: Optional[str] = None
    address_zip: Optional[str] = None
    cvc_check: Optional[StripeCvcCheck] = None
    address_line1_check: Optional[str] = None
    address_zip_check: Optional[str] = None
    funding: Optional[str] = None
    fingerprint: Optional[str] = None
    customer: Optional[str] = None
    country: Optional[str] = None


class StripeSubscriptionStatus(str, Enum):
    UNKNOWN = 'Unknown'
    TRIALING = 'Trialing'
    ACTIVE = 'Active'
    PAST_DUE = 'PastDue'
    CANCELED = 'Canceled'
    UNPAID = 'Unpaid'


class StripePlanInterval(str, Enum):
    MONTH = 'month'
    YEAR = 'year'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripePlan(StripeId):
    amount: int = 0
    created: Optional[datetime.datetime] = None
    currency: Optional[str] = None
    interval: Optional[StripePlanInterval] = None
    interval_count: Optional[int] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    nickname: Optional[str] = None
    product: Optional[str] = None
    trial_period_days: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeSubscription(StripeId):
    current_period_end: Optional[datetime.datetime] = None
    status: Optional[StripeSubscriptionStatus] = None
    plan: Optional[StripePlan] = None
    current_period_start: Optional[datetime.datetime] = None
    start: Optional[datetime.datetime] = None
    trial_start: Optional[datetime.datetime] = None
    cancel_at_period_end: Optional[bool] = None
    trial_end: Optional[datetime.datetime] = None
    canceled_at: Optional[datetime.datetime] = None
    ended_at: Optional[datetime.datetime] = None
    customer: Optional[str] = None
    quantity: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCustomer(StripeId):
    account_balance: int = 0
    business_vat_id: Optional[str] = None
    created: Optional[datetime.datetime] = None
    default_source: Optional[str] = None
    delinquent: Optional[bool] = None
    description: Optional[str] = None
    discount: Optional[StripeDiscount] = None
    email: Optional[str] = None
    invoice_prefix: Optional[str] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    shipping: Optional[StripeShipping] = None
    sources: Optional[StripeCollection[StripeCard]] = None
    subscriptions: Optional[StripeCollection[StripeSubscription]] = None
    deleted: bool = False
    currency: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateSubscribeCustomer(IPost):
    email: Optional[str] = None


T = TypeVar('T')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCollection(Generic[T], StripeId):
    url: Optional[str] = None
    total_count: int = 0
    has_more: Optional[bool] = None
    data: Optional[List[T]] = None

Python CreateSubscribeCustomer DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /create-customer HTTP/1.1 
Host: api.sfgtec.com 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<CreateSubscribeCustomer xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/sfgboxapi.ServiceModel">
  <Email>String</Email>
</CreateSubscribeCustomer>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<StripeCustomer xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ServiceStack.Stripe.Types">
  <Object>unknown</Object>
  <Id>String</Id>
  <AccountBalance>0</AccountBalance>
  <BusinessVatId>String</BusinessVatId>
  <Created>0001-01-01T00:00:00</Created>
  <Currency>String</Currency>
  <DefaultSource>String</DefaultSource>
  <Deleted>false</Deleted>
  <Delinquent>false</Delinquent>
  <Description>String</Description>
  <Discount>
    <Object>unknown</Object>
    <Id>String</Id>
    <Coupon>
      <Object>unknown</Object>
      <Id>String</Id>
      <AmountOff>0</AmountOff>
      <Created>0001-01-01T00:00:00</Created>
      <Currency>String</Currency>
      <Duration>forever</Duration>
      <DurationInMonths>0</DurationInMonths>
      <Livemode>false</Livemode>
      <MaxRedemptions>0</MaxRedemptions>
      <Metadata xmlns:d4p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <d4p1:KeyValueOfstringstring>
          <d4p1:Key>String</d4p1:Key>
          <d4p1:Value>String</d4p1:Value>
        </d4p1:KeyValueOfstringstring>
      </Metadata>
      <PercentOff>0</PercentOff>
      <RedeemBy>0001-01-01T00:00:00</RedeemBy>
      <TimesRedeemed>0</TimesRedeemed>
      <Valid>false</Valid>
    </Coupon>
    <Customer>String</Customer>
    <End>0001-01-01T00:00:00</End>
    <Start>0001-01-01T00:00:00</Start>
  </Discount>
  <Email>String</Email>
  <InvoicePrefix>String</InvoicePrefix>
  <Livemode>false</Livemode>
  <Metadata xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringstring>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value>String</d2p1:Value>
    </d2p1:KeyValueOfstringstring>
  </Metadata>
  <Shipping>
    <Address xmlns:d3p1="http://schemas.datacontract.org/2004/07/ServiceStack.Stripe">
      <d3p1:City>String</d3p1:City>
      <d3p1:Country>String</d3p1:Country>
      <d3p1:Line1>String</d3p1:Line1>
      <d3p1:Line2>String</d3p1:Line2>
      <d3p1:PostalCode>String</d3p1:PostalCode>
      <d3p1:State>String</d3p1:State>
    </Address>
    <Name>String</Name>
    <Phone>String</Phone>
  </Shipping>
  <Sources>
    <Object>unknown</Object>
    <Id>String</Id>
    <Data>
      <StripeCard>
        <Object>unknown</Object>
        <Id>String</Id>
        <AddressCity>String</AddressCity>
        <AddressCountry>String</AddressCountry>
        <AddressLine1>String</AddressLine1>
        <AddressLine1Check>String</AddressLine1Check>
        <AddressLine2>String</AddressLine2>
        <AddressState>String</AddressState>
        <AddressZip>String</AddressZip>
        <AddressZipCheck>String</AddressZipCheck>
        <Brand>String</Brand>
        <Country>String</Country>
        <Customer>String</Customer>
        <Cvc>String</Cvc>
        <CvcCheck>Unknown</CvcCheck>
        <DynamicLast4>String</DynamicLast4>
        <ExpMonth>0</ExpMonth>
        <ExpYear>0</ExpYear>
        <Fingerprint>String</Fingerprint>
        <Funding>String</Funding>
        <Last4>String</Last4>
        <Name>String</Name>
        <Number>String</Number>
      </StripeCard>
    </Data>
    <HasMore>false</HasMore>
    <TotalCount>0</TotalCount>
    <Url>String</Url>
  </Sources>
  <Subscriptions>
    <Object>unknown</Object>
    <Id>String</Id>
    <Data>
      <StripeSubscription>
        <Object>unknown</Object>
        <Id>String</Id>
        <CancelAtPeriodEnd>false</CancelAtPeriodEnd>
        <CanceledAt>0001-01-01T00:00:00</CanceledAt>
        <CurrentPeriodEnd>0001-01-01T00:00:00</CurrentPeriodEnd>
        <CurrentPeriodStart>0001-01-01T00:00:00</CurrentPeriodStart>
        <Customer>String</Customer>
        <EndedAt>0001-01-01T00:00:00</EndedAt>
        <Plan>
          <Object>unknown</Object>
          <Id>String</Id>
          <Amount>0</Amount>
          <Created>0001-01-01T00:00:00</Created>
          <Currency>String</Currency>
          <Interval>month</Interval>
          <IntervalCount>0</IntervalCount>
          <Livemode>false</Livemode>
          <Metadata xmlns:d6p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <d6p1:KeyValueOfstringstring>
              <d6p1:Key>String</d6p1:Key>
              <d6p1:Value>String</d6p1:Value>
            </d6p1:KeyValueOfstringstring>
          </Metadata>
          <Nickname>String</Nickname>
          <Product>String</Product>
          <TrialPeriodDays>0</TrialPeriodDays>
        </Plan>
        <Quantity>0</Quantity>
        <Start>0001-01-01T00:00:00</Start>
        <Status>Unknown</Status>
        <TrialEnd>0001-01-01T00:00:00</TrialEnd>
        <TrialStart>0001-01-01T00:00:00</TrialStart>
      </StripeSubscription>
    </Data>
    <HasMore>false</HasMore>
    <TotalCount>0</TotalCount>
    <Url>String</Url>
  </Subscriptions>
</StripeCustomer>