openapi: 3.0.3
info:
  title: Salesforce Platform REST API
  version: "62.0"
  x-slurry-persona: true
  description: >-
    Community simulation based on Salesforce's public API documentation. Not affiliated with or endorsed by Salesforce.
    Covers the REST API sObject resources (basic information, create, retrieve, update, delete) for the standard
    Account, Contact, Lead, Opportunity and Case objects, SOQL query, describe global and org limits, written from
    the public REST API Developer Guide. Record ids are 18-character case-insensitive ids whose first three
    characters are the object key prefix (001 Account, 003 Contact, 00Q Lead, 006 Opportunity, 500 Case).
    Errors are returned as an array of objects with message, errorCode and fields.
  license:
    name: CC-BY-4.0
    url: https://creativecommons.org/licenses/by/4.0/
  contact:
    name: Slurry
    url: https://slurry.io
externalDocs:
  description: Salesforce REST API Developer Guide (public)
  url: https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm
servers:
  - url: https://{myDomain}.my.salesforce.com
    variables:
      myDomain:
        default: acme
security:
  - bearerAuth: []
tags:
  - name: Query
  - name: Describe
  - name: Account
  - name: Contact
  - name: Lead
  - name: Opportunity
  - name: Case
paths:
  /services/data/v62.0/query:
    get:
      operationId: query
      tags: [Query]
      summary: Execute a SOQL query and return the matching records
      parameters:
        - name: q
          in: query
          required: true
          description: A SOQL query, URL encoded, for example SELECT Id, Name FROM Account WHERE Industry = 'Technology'
          schema: { type: string }
      responses:
        "200":
          description: Query result
          content:
            application/json:
              schema: { $ref: "#/components/schemas/AccountQueryResult" }
        "400":
          description: Malformed query
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects:
    get:
      operationId: describeGlobal
      tags: [Describe]
      summary: List the objects available in the org and their metadata
      responses:
        "200":
          description: Describe global result
          content:
            application/json:
              schema: { $ref: "#/components/schemas/DescribeGlobal" }
              example:
                encoding: UTF-8
                maxBatchSize: 200
                sobjects:
                  - { name: Account, label: Account, labelPlural: Accounts, keyPrefix: "001", custom: false, createable: true, queryable: true, updateable: true, deletable: true, urls: { sobject: /services/data/v62.0/sobjects/Account, describe: /services/data/v62.0/sobjects/Account/describe, rowTemplate: "/services/data/v62.0/sobjects/Account/{ID}" } }
                  - { name: Contact, label: Contact, labelPlural: Contacts, keyPrefix: "003", custom: false, createable: true, queryable: true, updateable: true, deletable: true, urls: { sobject: /services/data/v62.0/sobjects/Contact, describe: /services/data/v62.0/sobjects/Contact/describe, rowTemplate: "/services/data/v62.0/sobjects/Contact/{ID}" } }
                  - { name: Lead, label: Lead, labelPlural: Leads, keyPrefix: 00Q, custom: false, createable: true, queryable: true, updateable: true, deletable: true, urls: { sobject: /services/data/v62.0/sobjects/Lead, describe: /services/data/v62.0/sobjects/Lead/describe, rowTemplate: "/services/data/v62.0/sobjects/Lead/{ID}" } }
                  - { name: Opportunity, label: Opportunity, labelPlural: Opportunities, keyPrefix: "006", custom: false, createable: true, queryable: true, updateable: true, deletable: true, urls: { sobject: /services/data/v62.0/sobjects/Opportunity, describe: /services/data/v62.0/sobjects/Opportunity/describe, rowTemplate: "/services/data/v62.0/sobjects/Opportunity/{ID}" } }
                  - { name: Case, label: Case, labelPlural: Cases, keyPrefix: "500", custom: false, createable: true, queryable: true, updateable: true, deletable: true, urls: { sobject: /services/data/v62.0/sobjects/Case, describe: /services/data/v62.0/sobjects/Case/describe, rowTemplate: "/services/data/v62.0/sobjects/Case/{ID}" } }
  /services/data/v62.0/limits:
    get:
      operationId: getLimits
      tags: [Describe]
      summary: Show the org's API and storage limits and remaining allowances
      responses:
        "200":
          description: Org limits
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Limits" }
              example:
                DailyApiRequests: { Max: 100000, Remaining: 97342 }
                DailyBulkApiBatches: { Max: 15000, Remaining: 15000 }
                DataStorageMB: { Max: 10240, Remaining: 8812 }
                FileStorageMB: { Max: 51200, Remaining: 49876 }
                SingleEmail: { Max: 5000, Remaining: 4991 }
  /services/data/v62.0/sobjects/Account:
    get:
      operationId: getAccountBasicInfo
      tags: [Account]
      summary: Basic object information and recently viewed Accounts
      responses:
        "200":
          description: Object information
          content:
            application/json:
              schema: { $ref: "#/components/schemas/AccountBasicInfo" }
    post:
      operationId: createAccount
      tags: [Account]
      summary: Create an Account
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/AccountInput" }
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema: { $ref: "#/components/schemas/SaveResult" }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Account/{id}:
    parameters:
      - $ref: "#/components/parameters/RecordId"
    get:
      operationId: getAccount
      tags: [Account]
      summary: Retrieve an Account
      parameters:
        - $ref: "#/components/parameters/Fields"
      responses:
        "200":
          description: The record
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Account" }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    patch:
      operationId: updateAccount
      tags: [Account]
      summary: Update fields on an Account
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/AccountInput" }
      responses:
        "204": { description: Updated }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    delete:
      operationId: deleteAccount
      tags: [Account]
      summary: Delete an Account
      responses:
        "204": { description: Deleted }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Contact:
    get:
      operationId: getContactBasicInfo
      tags: [Contact]
      summary: Basic object information and recently viewed Contacts
      responses:
        "200":
          description: Object information
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ContactBasicInfo" }
    post:
      operationId: createContact
      tags: [Contact]
      summary: Create a Contact
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/ContactInput" }
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema: { $ref: "#/components/schemas/SaveResult" }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Contact/{id}:
    parameters:
      - $ref: "#/components/parameters/RecordId"
    get:
      operationId: getContact
      tags: [Contact]
      summary: Retrieve a Contact
      parameters:
        - $ref: "#/components/parameters/Fields"
      responses:
        "200":
          description: The record
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Contact" }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    patch:
      operationId: updateContact
      tags: [Contact]
      summary: Update fields on a Contact
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/ContactInput" }
      responses:
        "204": { description: Updated }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    delete:
      operationId: deleteContact
      tags: [Contact]
      summary: Delete a Contact
      responses:
        "204": { description: Deleted }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Lead:
    get:
      operationId: getLeadBasicInfo
      tags: [Lead]
      summary: Basic object information and recently viewed Leads
      responses:
        "200":
          description: Object information
          content:
            application/json:
              schema: { $ref: "#/components/schemas/LeadBasicInfo" }
    post:
      operationId: createLead
      tags: [Lead]
      summary: Create a Lead
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/LeadInput" }
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema: { $ref: "#/components/schemas/SaveResult" }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Lead/{id}:
    parameters:
      - $ref: "#/components/parameters/RecordId"
    get:
      operationId: getLead
      tags: [Lead]
      summary: Retrieve a Lead
      parameters:
        - $ref: "#/components/parameters/Fields"
      responses:
        "200":
          description: The record
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Lead" }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    patch:
      operationId: updateLead
      tags: [Lead]
      summary: Update fields on a Lead
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/LeadInput" }
      responses:
        "204": { description: Updated }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    delete:
      operationId: deleteLead
      tags: [Lead]
      summary: Delete a Lead
      responses:
        "204": { description: Deleted }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Opportunity:
    get:
      operationId: getOpportunityBasicInfo
      tags: [Opportunity]
      summary: Basic object information and recently viewed Opportunities
      responses:
        "200":
          description: Object information
          content:
            application/json:
              schema: { $ref: "#/components/schemas/OpportunityBasicInfo" }
    post:
      operationId: createOpportunity
      tags: [Opportunity]
      summary: Create an Opportunity
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/OpportunityInput" }
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema: { $ref: "#/components/schemas/SaveResult" }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Opportunity/{id}:
    parameters:
      - $ref: "#/components/parameters/RecordId"
    get:
      operationId: getOpportunity
      tags: [Opportunity]
      summary: Retrieve an Opportunity
      parameters:
        - $ref: "#/components/parameters/Fields"
      responses:
        "200":
          description: The record
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Opportunity" }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    patch:
      operationId: updateOpportunity
      tags: [Opportunity]
      summary: Update fields on an Opportunity
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/OpportunityInput" }
      responses:
        "204": { description: Updated }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    delete:
      operationId: deleteOpportunity
      tags: [Opportunity]
      summary: Delete an Opportunity
      responses:
        "204": { description: Deleted }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Case:
    get:
      operationId: getCaseBasicInfo
      tags: [Case]
      summary: Basic object information and recently viewed Cases
      responses:
        "200":
          description: Object information
          content:
            application/json:
              schema: { $ref: "#/components/schemas/CaseBasicInfo" }
    post:
      operationId: createCase
      tags: [Case]
      summary: Create a Case
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/CaseInput" }
      responses:
        "201":
          description: Created
          content:
            application/json:
              schema: { $ref: "#/components/schemas/SaveResult" }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
  /services/data/v62.0/sobjects/Case/{id}:
    parameters:
      - $ref: "#/components/parameters/RecordId"
    get:
      operationId: getCase
      tags: [Case]
      summary: Retrieve a Case
      parameters:
        - $ref: "#/components/parameters/Fields"
      responses:
        "200":
          description: The record
          content:
            application/json:
              schema: { $ref: "#/components/schemas/Case" }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    patch:
      operationId: updateCase
      tags: [Case]
      summary: Update fields on a Case
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: "#/components/schemas/CaseInput" }
      responses:
        "204": { description: Updated }
        "400":
          description: Validation failed
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
    delete:
      operationId: deleteCase
      tags: [Case]
      summary: Delete a Case
      responses:
        "204": { description: Deleted }
        "404":
          description: Not found
          content:
            application/json:
              schema: { $ref: "#/components/schemas/ErrorList" }
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 access token (session id) sent as a Bearer token.
  parameters:
    RecordId:
      name: id
      in: path
      required: true
      description: 18-character (or 15-character) record id
      schema: { type: string, minLength: 15, maxLength: 18 }
    Fields:
      name: fields
      in: query
      required: false
      description: Comma-separated list of fields to return
      schema: { type: string }
  schemas:
    Attributes:
      type: object
      properties:
        type: { type: string, example: Account }
        url: { type: string, example: /services/data/v62.0/sobjects/Account/001Dn00000Kx7sQIAR }
    SaveResult:
      type: object
      required: [id, success, errors]
      properties:
        id: { type: string, example: 001Dn00000Kx7sQIAR }
        success: { type: boolean, example: true }
        errors: { type: array, items: { type: object } }
    Error:
      type: object
      properties:
        message: { type: string, example: "Required fields are missing: [LastName]" }
        errorCode:
          type: string
          enum: [NOT_FOUND, REQUIRED_FIELD_MISSING, INVALID_FIELD, MALFORMED_ID, MALFORMED_QUERY, INVALID_TYPE, INVALID_SESSION_ID, FIELD_CUSTOM_VALIDATION_EXCEPTION, DUPLICATES_DETECTED, ENTITY_IS_DELETED, INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, STRING_TOO_LONG, REQUEST_LIMIT_EXCEEDED]
        fields: { type: array, items: { type: string } }
    ErrorList:
      type: array
      items: { $ref: "#/components/schemas/Error" }
    ObjectDescribe:
      type: object
      properties:
        name: { type: string }
        label: { type: string }
        labelPlural: { type: string }
        keyPrefix: { type: string }
        custom: { type: boolean }
        createable: { type: boolean }
        queryable: { type: boolean }
        updateable: { type: boolean }
        deletable: { type: boolean }
        urls: { type: object, additionalProperties: { type: string } }
    DescribeGlobal:
      type: object
      properties:
        encoding: { type: string }
        maxBatchSize: { type: integer }
        sobjects: { type: array, items: { $ref: "#/components/schemas/ObjectDescribe" } }
    LimitValue:
      type: object
      properties:
        Max: { type: integer }
        Remaining: { type: integer }
    Limits:
      type: object
      properties:
        DailyApiRequests: { $ref: "#/components/schemas/LimitValue" }
        DailyBulkApiBatches: { $ref: "#/components/schemas/LimitValue" }
        DataStorageMB: { $ref: "#/components/schemas/LimitValue" }
        FileStorageMB: { $ref: "#/components/schemas/LimitValue" }
        SingleEmail: { $ref: "#/components/schemas/LimitValue" }
    AccountQueryResult:
      type: object
      properties:
        totalSize: { type: integer }
        done: { type: boolean }
        nextRecordsUrl: { type: string, description: Present when done is false, e.g. /services/data/v62.0/query/01gD0000002HU6KIAW-2000 }
        records: { type: array, items: { $ref: "#/components/schemas/Account" } }
    Account:
      type: object
      properties:
        attributes: { $ref: "#/components/schemas/Attributes" }
        Id: { type: string, example: 001Dn00000Kx7sQIAR, readOnly: true }
        Name: { type: string, example: Northwind Logistics Ltd }
        Type: { type: string, enum: [Prospect, Customer - Direct, Customer - Channel, Channel Partner / Reseller, Installation Partner, Technology Partner, Other] }
        Industry: { type: string, enum: [Agriculture, Apparel, Banking, Biotechnology, Chemicals, Communications, Construction, Consulting, Education, Electronics, Energy, Engineering, Entertainment, Environmental, Finance, Food & Beverage, Government, Healthcare, Hospitality, Insurance, Machinery, Manufacturing, Media, Not For Profit, Recreation, Retail, Shipping, Technology, Telecommunications, Transportation, Utilities, Other] }
        Rating: { type: string, enum: [Hot, Warm, Cold] }
        AccountSource: { type: string, enum: [Advertisement, Employee Referral, External Referral, Partner, Public Relations, Seminar - Internal, Seminar - Partner, Trade Show, Web, Word of mouth, Other] }
        AnnualRevenue: { type: number, format: double }
        NumberOfEmployees: { type: integer }
        Phone: { type: string }
        Website: { type: string, format: uri }
        BillingStreet: { type: string }
        BillingCity: { type: string }
        BillingState: { type: string }
        BillingPostalCode: { type: string }
        BillingCountry: { type: string }
        Description: { type: string }
        OwnerId: { type: string, example: 005Dn000003Qf2aIAC }
        ParentId: { type: string, nullable: true }
        IsDeleted: { type: boolean }
        CreatedDate: { type: string, format: date-time, readOnly: true }
        LastModifiedDate: { type: string, format: date-time, readOnly: true }
    AccountInput:
      type: object
      required: [Name]
      properties:
        Name: { type: string }
        Type: { type: string }
        Industry: { type: string }
        Rating: { type: string }
        AnnualRevenue: { type: number }
        NumberOfEmployees: { type: integer }
        Phone: { type: string }
        Website: { type: string }
        BillingCity: { type: string }
        BillingCountry: { type: string }
        OwnerId: { type: string }
    Contact:
      type: object
      properties:
        attributes: { $ref: "#/components/schemas/Attributes" }
        Id: { type: string, example: 003Dn00000Qm2lVIAR, readOnly: true }
        AccountId: { type: string, example: 001Dn00000Kx7sQIAR }
        Salutation: { type: string, enum: [Mr., Ms., Mrs., Dr., Prof., Mx.] }
        FirstName: { type: string }
        LastName: { type: string }
        Name: { type: string, readOnly: true }
        Title: { type: string }
        Department: { type: string }
        Email: { type: string, format: email }
        Phone: { type: string }
        MobilePhone: { type: string }
        MailingCity: { type: string }
        MailingCountry: { type: string }
        LeadSource: { type: string, enum: [Web, Phone Inquiry, Partner Referral, Purchased List, Other] }
        HasOptedOutOfEmail: { type: boolean }
        OwnerId: { type: string }
        CreatedDate: { type: string, format: date-time, readOnly: true }
        LastModifiedDate: { type: string, format: date-time, readOnly: true }
    ContactInput:
      type: object
      required: [LastName]
      properties:
        AccountId: { type: string }
        FirstName: { type: string }
        LastName: { type: string }
        Title: { type: string }
        Email: { type: string }
        Phone: { type: string }
        LeadSource: { type: string }
    Lead:
      type: object
      properties:
        attributes: { $ref: "#/components/schemas/Attributes" }
        Id: { type: string, example: 00QDn00000Ab3cDMAR, readOnly: true }
        FirstName: { type: string }
        LastName: { type: string }
        Name: { type: string, readOnly: true }
        Company: { type: string }
        Title: { type: string }
        Email: { type: string, format: email }
        Phone: { type: string }
        Status: { type: string, enum: [Open - Not Contacted, Working - Contacted, Closed - Converted, Closed - Not Converted] }
        LeadSource: { type: string, enum: [Web, Phone Inquiry, Partner Referral, Purchased List, Other] }
        Industry: { type: string, enum: [Agriculture, Apparel, Banking, Biotechnology, Chemicals, Communications, Construction, Consulting, Education, Electronics, Energy, Engineering, Entertainment, Environmental, Finance, Food & Beverage, Government, Healthcare, Hospitality, Insurance, Machinery, Manufacturing, Media, Not For Profit, Recreation, Retail, Shipping, Technology, Telecommunications, Transportation, Utilities, Other] }
        Rating: { type: string, enum: [Hot, Warm, Cold] }
        AnnualRevenue: { type: number }
        NumberOfEmployees: { type: integer }
        City: { type: string }
        Country: { type: string }
        IsConverted: { type: boolean }
        ConvertedAccountId: { type: string, nullable: true }
        ConvertedContactId: { type: string, nullable: true }
        ConvertedOpportunityId: { type: string, nullable: true }
        OwnerId: { type: string }
        CreatedDate: { type: string, format: date-time, readOnly: true }
        LastModifiedDate: { type: string, format: date-time, readOnly: true }
    LeadInput:
      type: object
      required: [LastName, Company]
      properties:
        FirstName: { type: string }
        LastName: { type: string }
        Company: { type: string }
        Title: { type: string }
        Email: { type: string }
        Phone: { type: string }
        Status: { type: string }
        LeadSource: { type: string }
    Opportunity:
      type: object
      properties:
        attributes: { $ref: "#/components/schemas/Attributes" }
        Id: { type: string, example: 006Dn00000Hq9vTIAR, readOnly: true }
        AccountId: { type: string }
        Name: { type: string }
        StageName: { type: string, enum: [Prospecting, Qualification, Needs Analysis, Value Proposition, Id. Decision Makers, Perception Analysis, Proposal/Price Quote, Negotiation/Review, Closed Won, Closed Lost] }
        Amount: { type: number, format: double }
        Probability: { type: number, minimum: 0, maximum: 100 }
        CloseDate: { type: string, format: date }
        Type: { type: string, enum: [New Customer, Existing Customer - Upgrade, Existing Customer - Replacement, Existing Customer - Downgrade] }
        LeadSource: { type: string, enum: [Web, Phone Inquiry, Partner Referral, Purchased List, Other] }
        ForecastCategoryName: { type: string, enum: [Pipeline, Best Case, Commit, Omitted, Closed] }
        NextStep: { type: string }
        IsClosed: { type: boolean, readOnly: true }
        IsWon: { type: boolean, readOnly: true }
        CurrencyIsoCode: { type: string, enum: [GBP, USD, EUR] }
        OwnerId: { type: string }
        CreatedDate: { type: string, format: date-time, readOnly: true }
        LastModifiedDate: { type: string, format: date-time, readOnly: true }
    OpportunityInput:
      type: object
      required: [Name, StageName, CloseDate]
      properties:
        AccountId: { type: string }
        Name: { type: string }
        StageName: { type: string }
        Amount: { type: number }
        CloseDate: { type: string, format: date }
        Type: { type: string }
        NextStep: { type: string }
    Case:
      type: object
      properties:
        attributes: { $ref: "#/components/schemas/Attributes" }
        Id: { type: string, example: 500Dn00000Tz4kLIAR, readOnly: true }
        CaseNumber: { type: string, example: "00001026", readOnly: true }
        AccountId: { type: string }
        ContactId: { type: string }
        Subject: { type: string }
        Description: { type: string }
        Status: { type: string, enum: [New, Working, Escalated, Closed] }
        Priority: { type: string, enum: [High, Medium, Low] }
        Origin: { type: string, enum: [Phone, Email, Web] }
        Type: { type: string, enum: [Mechanical, Electrical, Electronic, Structural, Other] }
        Reason: { type: string, enum: [Installation, Equipment Complexity, Performance, Breakdown, Equipment Design, Feedback, Other] }
        IsClosed: { type: boolean, readOnly: true }
        IsEscalated: { type: boolean }
        ClosedDate: { type: string, format: date-time, nullable: true }
        OwnerId: { type: string }
        CreatedDate: { type: string, format: date-time, readOnly: true }
        LastModifiedDate: { type: string, format: date-time, readOnly: true }
    CaseInput:
      type: object
      required: [Subject]
      properties:
        AccountId: { type: string }
        ContactId: { type: string }
        Subject: { type: string }
        Description: { type: string }
        Status: { type: string }
        Priority: { type: string }
        Origin: { type: string }
    AccountBasicInfo:
      type: object
      properties:
        objectDescribe: { $ref: "#/components/schemas/ObjectDescribe" }
        recentItems: { type: array, items: { $ref: "#/components/schemas/Account" } }
    ContactBasicInfo:
      type: object
      properties:
        objectDescribe: { $ref: "#/components/schemas/ObjectDescribe" }
        recentItems: { type: array, items: { $ref: "#/components/schemas/Contact" } }
    LeadBasicInfo:
      type: object
      properties:
        objectDescribe: { $ref: "#/components/schemas/ObjectDescribe" }
        recentItems: { type: array, items: { $ref: "#/components/schemas/Lead" } }
    OpportunityBasicInfo:
      type: object
      properties:
        objectDescribe: { $ref: "#/components/schemas/ObjectDescribe" }
        recentItems: { type: array, items: { $ref: "#/components/schemas/Opportunity" } }
    CaseBasicInfo:
      type: object
      properties:
        objectDescribe: { $ref: "#/components/schemas/ObjectDescribe" }
        recentItems: { type: array, items: { $ref: "#/components/schemas/Case" } }
