NAV Navbar
  • Introduction
  • Authentication
  • Organizations
  • Leads
  • Learners
  • Errors
  • Introduction

    Penn Foster's (PF) integration APIs allow partners and clients to interact with our systems and services through a set of REST endpoints (resources) which provide services like learner enrollment, learner progression, and organization information.

    Documentation Version: 2.0.0 (Last updated on 11-09-2021)

    Version History

    Environments

    The APIs are hosted in 3 different environments as listed below:

    Each environment also provides a Swagger page by attaching swagger/ui/index to the URL.

    Email [email protected] to request a Developer Key.

    API Endpoints

    Authentication

    Example OAuth Request:

    POST https://environment-url/oauth/token
    
    // Request Headers
    Authorization: {auth_key}
    
    // Request Body
    grant_type=client_credentials&api_key={api_key}
    

    Response (JSON)

    
    {
      "access_token": "<access_token>",
      "token_type": "bearer",
      "expires_in": "<expiration_secs>"
    }
    

    Penn Foster uses the OAuth 2.0 authentication/authorization mechanism. Before making any requests, PF will provide you with the following parameters for each environment.

    Parameter Description Required
    grant_type client_credentials Yes
    client_id The client_id for your registered application and environment Yes
    client_secret The client_secret for your registered application and environment Yes
    api_key The api_key for your registered application and environment Yes
    auth_key For convenience the auth_key is a base64 encoded client_id:client_secret No

    Penn Foster expects for the API token to be included in all API requests to the server in a header that looks like the following:

    Authorization: Bearer secretToken

    Organizations

    Organizations are in a 3 tier hierarchy:

    1. Organization ID (also referred to as Parent ID)
    2. Location ID
    3. Client ID

    Each Organization ID can have 1 or many Location IDs. Each Location ID can have 1 or many Client IDs.

    Last updated on 11-09-2021

    Get All Organizations

    Example Get All Organizations Request:

    GET https://environment-url/api/v3/b2b/organizations/{organization_id}
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
    {
      "organization_id": 0,
      "type": "string",
      "name": "string",
      "status": "string",
      "address": {
        "address_1": "string",
        "address_2": "string",
        "address_3": "string",
        "address_4": "string",
        "city": "string",
        "state": "string",
        "postal_code": "string",
        "country": "string"
      },
      "locations": [
        {
          "organization_id": 0,
          "location_id": 0,
          "type": "string",
          "name": "string",
          "status": "string",
          "address": {
            "address_1": "string",
            "address_2": "string",
            "address_3": "string",
            "address_4": "string",
            "city": "string",
            "state": "string",
            "postal_code": "string",
            "country": "string"
          },
          "clients": [
            {
              "organization_id": 0,
              "location_id": 0,
              "client_id": 0,
              "type": "string",
              "name": "string",
              "status": "string",
              "address": {
                "address_1": "string",
                "address_2": "string",
                "address_3": "string",
                "address_4": "string",
                "city": "string",
                "state": "string",
                "postal_code": "string",
                "country": "string"
              }
            }
          ]
        }
      ],
      "errors": [
        {
          "error_code": "string",
          "message": "string"
        }
      ],
      "links": [
        {
          "href": "string",
          "rel": "string",
          "method": "string"
        }
      ]
    }
    

    Get All Organization Information.

    HTTP Request

    GET /organizations/{organization_id}

    Get Organizations by Location

    Example Get Organizations info by Location Request:

    GET https://environment-url/api/v3/b2b/organizations/{organization_id}/locations/{location_id}
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
    {
      "organization_id": 0,
      "type": "string",
      "name": "string",
      "status": "string",
      "address": {
        "address_1": "string",
        "address_2": "string",
        "address_3": "string",
        "address_4": "string",
        "city": "string",
        "state": "string",
        "postal_code": "string",
        "country": "string"
      },
      "locations": [
        {
          "organization_id": 0,
          "location_id": 0,
          "type": "string",
          "name": "string",
          "status": "string",
          "address": {
            "address_1": "string",
            "address_2": "string",
            "address_3": "string",
            "address_4": "string",
            "city": "string",
            "state": "string",
            "postal_code": "string",
            "country": "string"
          },
          "clients": [
            {
              "organization_id": 0,
              "location_id": 0,
              "client_id": 0,
              "type": "string",
              "name": "string",
              "status": "string",
              "address": {
                "address_1": "string",
                "address_2": "string",
                "address_3": "string",
                "address_4": "string",
                "city": "string",
                "state": "string",
                "postal_code": "string",
                "country": "string"
              }
            }
          ]
        }
      ],
      "errors": [
        {
          "error_code": "string",
          "message": "string"
        }
      ],
      "links": [
        {
          "href": "string",
          "rel": "string",
          "method": "string"
        }
      ]
    }
    

    Get Organizations information by a specific Location ID.

    HTTP Request

    GET /organizations/{organization_id}/location/{location_id}

    Get Organizations by Client

    Example Get Organizations info by Location and Client Request:

    GET https://environment-url/api/v3/b2b/organizations/{organization_id}/locations/{location_id}/clients/{client_id}
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
    {
      "organization_id": 0,
      "type": "string",
      "name": "string",
      "status": "string",
      "address": {
        "address_1": "string",
        "address_2": "string",
        "address_3": "string",
        "address_4": "string",
        "city": "string",
        "state": "string",
        "postal_code": "string",
        "country": "string"
      },
      "locations": [
        {
          "organization_id": 0,
          "location_id": 0,
          "type": "string",
          "name": "string",
          "status": "string",
          "address": {
            "address_1": "string",
            "address_2": "string",
            "address_3": "string",
            "address_4": "string",
            "city": "string",
            "state": "string",
            "postal_code": "string",
            "country": "string"
          },
          "clients": [
            {
              "organization_id": 0,
              "location_id": 0,
              "client_id": 0,
              "type": "string",
              "name": "string",
              "status": "string",
              "address": {
                "address_1": "string",
                "address_2": "string",
                "address_3": "string",
                "address_4": "string",
                "city": "string",
                "state": "string",
                "postal_code": "string",
                "country": "string"
              }
            }
          ]
        }
      ],
      "errors": [
        {
          "error_code": "string",
          "message": "string"
        }
      ],
      "links": [
        {
          "href": "string",
          "rel": "string",
          "method": "string"
        }
      ]
    }
    

    Get Organizations information by a specific Location and Client ID.

    HTTP Request

    GET /organizations/{organization_id}/location/{location_id}/client/{client_id}

    Leads

    Create a Lead

    POST https://environment-url/api/v3/b2b/leads
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    
    // Request Body
    [
      [
        {
          "required_info": {
            "organization_id": 143738,
            "location_id": 247319,
            "client_id": 333813,
            "program_id": "00787105",
            "first_name": "Herman",
            "last_name": "Munster",
            "date_of_birth": "01/01/1963",
            "phone_number": "5701234567",
            "email_address": "[email protected]",
            "contact_email_address": "[email protected]"
          },
          "optional_info": {
            "gender": "M",
            "alternate_id": "6a535c93-dd15-41d7-8c8d-a097a83857e9",
            "address": {
              "address_1": "1313 Mockingbird Lane",
              "address_2": "",
              "address_3": "",
              "address_4": "",
              "city": "Mockingbird Heights",
              "state": "CA",
              "postal_code": "90210",
              "country": "USA"
            }
          }
        }
      ]
    ]
    

    Response (JSON)

    [
        {
            "lead_id": "123456",
            "lead_status": "X",
            "errors": [],
            "links": []
        }
    ]
    

    Create a new Lead in the Penn Foster system. A lead is used when there is a workflow required before a person can be enrolled at Penn Foster.

    Last updated on 11-09-2021

    HTTP Request

    POST /leads

    This post expects an array of Lead Objects. The maximum length of the array is 20 per request.

    Lead Object Required Fields

    Parameter Size Description
    organization_id 6 Unique ID for an organization.
    location_id 6 Unique ID for location under an organization.
    client_id 6 Unique ID for client under an organization/location.
    program_id 15 Program to enroll person into. PF will provide this data.
    first_name 40 Learner first name. Will remove any non-alphabetic characters.
    last_name 40 Learner last name. Will remove any non-alphabetic characters.
    date_of_birth 8 Learner Date of birth. Format mmddyyyy, non-numeric values will be removed.
    phone_number 20 Learner phone number. Format 18001234567, non-numeric values will be removed.
    email_address 40 Learner email address. Must have an @ and a ..
    contact_email_address 40 Patrtner Admin email address. Must have an @ and a ..

    Lead Object Optional Fields

    Parameter Size Description
    gender 1 M = Male, F = Female, U = Unknown.
    alternate_id 75 Unique id for learner on 3rd party system.
    address_1 40 Street address line 1.
    address_2 40 Street address line 2.
    address_3 40 Street address line 3.
    address_4 40 Street address line 4.
    city 25 City.
    state 3 Expecting 2 character state.
    postal_code 12 Expecting a 5 digit code.
    country 3 Expecting a 3 digit country code.

    Response Object

    The response will be an object or an array of objects depending on the request.

    Name Description
    lead_id A system generated ID for lead.
    lead_status X = Success. E = Error.
    errors Error with particular Lead object. See Errors.
    links Not currently populated.

    Learners

    At Penn Foster a person participating in 1 or more courses is referred to as a Learner. Historically, we referred to Learners as Students, therefore, you will see a Learner is given a Student ID once enrolled at Penn Foster.

    Last updated on 11-09-2021

    Create a Learner

    Example Create a new Learner Request:

    POST https://environment-url/api/v4/b2b/learners
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    
    // Request Body
    [
       {
          "enrollment_type":"B2BENRICH",
          "transaction_guid":"13e1fee8-c3c3-40dd-bfa8-9e672d87658f",
          "sales_rep":"",
          "po_number":"PO_P0_LDUVTZGZMB",
          "order_number":"",
          "start_date":"2021-10-28T00:00:00",
          "expiration_date":"2021-10-28T00:00:00",
          "notes":"This note is limited to 74 characters.",     
          "hold_codes":"",    
          "user_info":{
             "user_name":"ZLPSBYDTUGXBNNVHUTIB",
             "phone_number":"",
             "email_address":"[email protected]",        
          },
          "organization_info":{
             "organization_id":141982,
             "location_id":244648,
             "client_id":329209,
             "contact_email_address":"[email protected]",
             "ship_to_location":false,
             "primary_contact_name":"Herman Munster",
             "primary_contact_email":"[email protected]",
             "completion_document_shipping_preference":"EML",
          },
          "addressbook_info":{
             "learner_id":0,        
          },
          "learner_info":{
             "first_name":"Joe",
             "last_name":"Smith",
             "gender": "M",
             "date_of_birth":"",     
             "email_address":"[email protected]",
             "phone_number":"123456789",     
             "phone_type":"H",
             "secondary_phone_number":"123456789",     
             "secondary_phone_type":"C",        
             "alternate_id":"83957d62-7436-4260-8f6b-783f64721fdb",
             "last_grade_completed":12,
             "address":{
                "address_1":"999 18th st",
                "address_2":"",
                "address_3":"",
                "address_4":"",
                "city":"Denver",
                "state":"CO",
                "postal_code":"80202",
                "country":"USA"
             }
          },
          "program_info":{
             "program_id":"999999999",
             "modules_all_open":false,
             "modules":[
                :{
                    "id":"IRCP1B",
                    "name":"",
                },
                {
                    "id":"IRCP1B",
                    "name":"",
                },
             ]
          },
          "payment_info":{
             "base_price":1000,
             "discount":0,
             "net_price": 1000,
             "organization_percent":100,     
             "organization_amount":0,     
             "location_percent":100,     
             "location_amount":0,
             "client_percent":100,     
             "client_amount":0,
             "learner_percent":100,     
             "learner_amount":0,
             "down_payment":100,     
             "monthly_payment":100,     
             "number_of_payments":8,
             "final_payment":100,     
             "auto_pay":true, 
             "company_down_payment_amount":100,
             "company_installment_amount":100,
             "company_number_of_installments":10,
             "company_last_payment_amount":0,
             "shipping_info":{
                "number_of_packages":"6",
                "instructions":"",
                "organization_shipping_charge_amount":2005910215,
                "student_shipping_charge_amount":300,
             },
             "account_info":{
                "payment_type":"6",
                "ach_type":"",
                "account_number":"30481639521990154293935910215",
                "routing_number":"",
                "cc_exp_month":"10",
                "cc_exp_year":"21",
                "cc_cvv":"1234",
                "first_name":"Lilian"
                "last_name":"Munster"
                "save_for_future_use":false,
                "billing_phone_number":""
                "billing_address":{
                   "address_1":"1313 Mockingbird Lane",
                   "address_2":"",
                   "city":"Mockingbird Heights",
                   "state_province":"CA",
                   "postal_code":"90210",
                   "country":"USA"
                 }
             }
          },
          "high_school_attestation_info":{                         
             "is_certified":true,     
             "high_school_type":"HS",
             "name_on_diploma":"Student Name"
             "graduation_date":"09/2021"
             "high_school_name":"Fake High School",          
             "address":{
                "address_1":"999 18th st",
                "address_2":"",
                "address_4":"",
                "city":"Denver",
                "state":"CO",
                "postal_code":"80202",
                "country":"USA"
             }
          }
       }
    ]
    

    Response (JSON)

    
        [
            {
                "enrollment_status": "X",
                "order_number": "51775",
                "learner_id": "56012279",
                "reference_id": "ABC0001",
                "errors": [],
                "links": []
            }
        ]
    

    Create a new Learner in the Penn Foster system. Typically referred to as an Enrollment.

    HTTP Request

    POST /learners

    This post expects an array of Learner objects. The maximum length of the array is 20 per request.

    Learner Object Required Fields

    Parameter Type Size Description Required
    enrollment_type String 8 User Id for the Enrollment Yes
    transaction_guid String 36 Transaction Id used for the Enrollment Optional
    sales_rep String 8 Sales representative id Optional
    po_number String 75 Purchase Order Optional
    order_number String 75 Order Number Optional
    start_date Date Program Start Date, Format is YYYYMMDD Optional
    expiration_date Date Course Expiration Date, Format is YYYYMMDD Optional
    notes String 74 Additional Notes Optional
    hold_codes String 10 Can send out five hold codes, each hold code 2 chars Optional
    user_info.username String 40 SalesForce Username Optional
    user_info.phone_number String 15 SalesForce User Phone Optional
    user_info.email_address String 8 SalesForce User Email Address Optional
    organization_info.organization_id String 8 Organization Number Required
    organization_info.location_id String 8 Location Number Required
    organization_info.client_id String 8 Client Number Required
    organization_info.contact_email_address String 60 Organization Email Address used for Enrollment Required
    organization_info.ship_to_location boolean If SHIPTOLOC is a "Y", then materials will be sent to the Location. Optional
    organization_info.primary_contact_name String 40 Address Book information, Contact Name Optional
    organization_info
    .completion_document_shipping_preference
    String 3 How Ship Completion Documents ? EML -- Email Completion Docs SML -- Print & Mail Completion Docs Required
    addressbook_info.learner_id int 8 Blank for new enrollments/Previous student id for re-enrollment. Required/Otional
    learner_info.first_name String 40 Learner's First Name Required
    learner_info.last_name String 40 Learner's Last Name Required
    learner_info.gender String 1 Must be "M", "F" or "U" Required
    learner_info.date_of_birth String 8 Learner's Date of Birth Optional
    learner_info.email_address String 60 Learner's Primary Email Address Required
    learner_info.phone_number String 60 Learner's Primary Contact Number Required
    learner_info.phone_type String 1 Alternate Phone Type, Must be "H", "C" or "W". "H" – Home, "C" – Cell, "W" – Work, No
    learner_info.secondary_phone_number String 20 Alternate Contact Number Optional
    learner_info.secondary_phone_type String 1 Alternate Phone Type, Must be "H", "C" or "W". "H" – Home, "C" – Cell, "W" – Work, Optional
    learner_info.address.address_1 String 60 Address Line 1 Required
    learner_info.address.address_2 String 60 Address Line 2 Optional
    learner_info.address.address_3 String 60 Address Line 3 Optional
    learner_info.address.address_4 String 60 Address Line 4 Optional
    learner_info.address.city String 25 City Required
    learner_info.address.state String 3 State Required
    learner_info.address.postal_code String 12 Postal Code Required
    learner_info.address.country String 3 Country Required
    program_info.program_id String 8 Program Id for the Enrollment Required
    program_info.modules Array of Modules Modules to be used with Program Optional
    payment_info Object Payment Information Optional
    high_school_attestation_info Object High School Attestation Information Optional

    Response Object

    The response will be an object or an array of objects depending on the request.

    Name Description
    enrollment_status X = Success. E = Error.
    order_number A system generated order number for this particular learner object.
    student_id Student ID (Learner ID) generated after successful enrollment.
    reference_id Reference ID generated after successful enrollment.
    errors Error with particular object. See Errors.
    links Not currently populated.

    Get Learners by Organization

    Example Get Learner Info Request:

    GET https://environment-url/api/v4/b2b/learners?organization_id=141982&rows_per_page=10&page_number=1
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
        
        {
        "page_number": 1,
        "page_count": 75,
        "record_count": 746,
        "results": 
            {
                "organization_id": 141982,
                "location_id": 244648,
                "client_id": 329209,
                "learner_id": "52975707",
                "cost_center": "2020",
                "branch_id": "12345",
                "alternate_id": "ThisCouldBeAnyTypeOfData",
                "alternate_location_id": "ABCDEFGHIJ-123456789",
                "alternate_client_id": "JIHGGFEDCBA-123456789",
                "first_name": "First",
                "last_name": "Last",
                "email_address": "[email protected]",
                "program_id": "TES01105",
                "program_name": "SOFT SKILLS",
                "active_status": "Active", //Active, Inactive, Graduated, Canceled
                "date_enrolled": "07/18/2018",
                "date_last_active": "07/18/2018",
                "date_completed": "07/18/2018",
                "expiration_date": "07/18/2019"
            }, 
            {
                "organization_id": 141982,
                "location_id": 244648,
                "client_id": 329209,
                "learner_id": "52975707",
                "cost_center": "2020",
                "branch_id": "12345",
                "alternate_id": "ThisCouldBeAnyTypeOfData",
                "alternate_location_id": "ABCDEFGHIJ-123456789",
                "alternate_client_id": "JIHGGFEDCBA-123456789",
                "first_name": "First",
                "last_name": "Last",
                "email_address": "[email protected]",
                "program_id": "TES01105",
                "program_name": "SOFT SKILLS",
                "active_status": "Active", //Active, Inactive, Graduated, Canceled
                "date_enrolled": "07/18/2018",
                "date_last_active": "07/18/2018",
                "date_completed": "07/18/2018",
                "expiration_date": "07/18/2019"
            }, 
            ...
            
        }
        
    

    Get all learners by Organization ID.

    Will return a dictionary of learner objects.

    HTTP Request

    GET /learners?organization_id={organization_id}

    URL Parameters

    Parameter Size Required Description
    organization_id 6 Yes Unique ID for an organization.
    location_id 6 No Unique ID for location under an organization.
    alternate_location_id 6 No 3rd party unique ID for location under an organization.
    client_id 6 No Unique ID for client under an organization/location.
    alternate_client_id 6 No 3rd party unique ID for client under an organization/location.
    page_number 5 No If using pagination specify the page number you want returned.
    rows_per_page 5 No If using pagination specify the number of records per page.

    Get Learners by Alternate ID

    Example Get Learner by Alternate ID Request:

    GET https://environment-url/api/v4/b2b/learners/6d5f84ed-2fad-4e09-b8bb-e50fac2d00f7
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
        
        {
        "page_number": 1,
        "page_count": 75,
        "record_count": 746,
        "results": 
            {
                "organization_id": 141982,
                "location_id": 244648,
                "client_id": 329209,
                "learner_id": "52975707",
                "cost_center": "2020",
                "branch_id": "12345",
                "alternate_id": "ThisCouldBeAnyTypeOfData",
                "alternate_location_id": "ABCDEFGHIJ-123456789",
                "alternate_client_id": "JIHGGFEDCBA-123456789",
                "first_name": "First",
                "last_name": "Last",
                "email_address": "[email protected]",
                "program_id": "TES01105",
                "program_name": "SOFT SKILLS",
                "active_status": "Active", //Active, Inactive, Graduated, Canceled
                "date_enrolled": "07/18/2018",
                "date_last_active": "07/18/2018",
                "date_completed": "07/18/2018",
                "expiration_date": "07/18/2019"
            }, 
            {
                "organization_id": 141982,
                "location_id": 244648,
                "client_id": 329209,
                "learner_id": "52975707",
                "cost_center": "2020",
                "branch_id": "12345",
                "alternate_id": "ThisCouldBeAnyTypeOfData",
                "alternate_location_id": "ABCDEFGHIJ-123456789",
                "alternate_client_id": "JIHGGFEDCBA-123456789",
                "first_name": "First",
                "last_name": "Last",
                "email_address": "[email protected]",
                "program_id": "TES01105",
                "program_name": "SOFT SKILLS",
                "active_status": "Active", //Active, Inactive, Graduated, Canceled
                "date_enrolled": "07/18/2018",
                "date_last_active": "07/18/2018",
                "date_completed": "07/18/2018",
                "expiration_date": "07/18/2019"
            }, 
            ...
            
        }
        
    

    Get learners by Alternate ID.

    Will return a dictionary of learner objects.

    HTTP Request

    GET /learners?alternate_id={alternate_id}

    URL Parameters

    Parameter Size Required Description
    alternate_id 75 Yes 3rd party unique ID for a learner.
    organization_id 6 No Unique ID for an organization.
    location_id 6 No Unique ID for location under an organization.
    alternate_location_id 6 No 3rd party unique ID for location under an organization.
    client_id 6 No Unique ID for client under an organization/location.
    alternate_client_id 6 No 3rd party unique ID for client under an organization/location.
    page_number 5 No If using pagination specify the page number you want returned.
    rows_per_page 5 No If using pagination specify the number of records per page.

    Get Learners by Student ID

    Example Get Learner by Student ID Request:

    GET https://environment-url/api/v4/b2b/learners/52975707
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    
    {
      "organization_id": 141982,
      "location_id": 244648,
      "client_id": 329209,
      "learner_id": "52975707",
      "cost_center": "2020",
      "branch_id": "12345",
      "alternate_id": "ThisCouldBeAnyTypeOfData",
      "alternate_location_id": "ABCDEFGHIJ-123456789",
      "alternate_client_id": "JIHGGFEDCBA-123456789",          
      "first_name": "First",
      "last_name": "Last",
      "email_address": "[email protected]",
      "program_id": "TES01105",
      "program_name": "SOFT SKILLS",
      "active_status": "Active", //Active, Inactive, Graduated, Canceled
      "date_enrolled": "07/18/2018",
      "date_last_active": "07/18/2018",
      "date_completed": "07/18/2018",
      "expiration_date": "07/18/2019"
    }
    

    Get learners by Student ID.

    Will return one learner object.

    HTTP Request

    GET /learners?student_id={student_id}

    Cancel Learners

    Example Cancel Learner Request:

    POST https://environment-url/api/v4/b2b/learners/cancel
    
    // Request Headers
    Authorization: Bearer <token>
    Content-type: application/json
    

    Response (JSON)

    {
      "resource_id": 100,
      "organization_id": 123456,
      "location_id": 247319,
      "client_id": 333813,
      "student_id": 5123456,
      "alternate_id": "[email protected]",
      "program_id": "00787105"
    }
    

    Create a request to cancel a learner. Please note this is only a request to cancel a learner. The Penn Foster team will need to execute the request in order for the learner to be officially cancelled in the system.

    A learner can be cancelled by Student ID or Alternate ID.

    HTTP Request

    POST /learners/{student_id}/cancel

    URL Parameters

    An Alternate ID or Student ID is required.

    If an Alternate ID is provided, then a Program ID is required.

    Parameter Size Description
    student_id 8 Unique ID for for Learner at Penn Foster.
    alternate_id 75 Unique ID for 3rd party.
    program_id 8 Specific Program ID to cancel for Learner/Alternate ID.

    Errors

    HTTP Errors

    All errors will send back an additional JSON message.

    Error Code Meaning
    400 Bad Request
    401 Unauthorized
    404 Not Found
    500 Internal Server Error
    503 Service Unavailable

    Penn Foster System Codes

    Error Code Meaning
    E601400001 Country is invalid
    E601400002 Country is required
    E602500001 Employee Id is required
    E602500002 Student already has an active enrollment
    E602600001 Invalid student email address.
    E604000001 Zip code must be entered
    E604100001 Email address must be entered
    E604100002 Invalid email address
    E604200001 Invalid phone type
    E604300001 Phone number must be entered when there is a phone type
    E607100001 Invalid parent id
    E607200001 Invalid location id
    E607300001 Invalid client id
    E607400001 Student name must be entered
    E607700001 Address line 1 must be entered
    E607700002 Action code is invalid
    E607800001 City must be entered
    E607900001 Invalid state code
    E608600001 Alternate id alrady exists
    E608600002 Alternate id is required
    E614400001 Invalid product code
    E614400002 Invalid module or lesson
    E614400003 Module or lesson is obsolete
    E614400005 Product code already exists for student
    E614400006 Product code is not active or current - field IMSRP3 on F4101LB
    E999999001 Order is currently being processed by: