Salesforce Platform Architect Portfolio

Governance, Architecture, and Living Documentation

Salesforce System API (SAPI) v1.3.0

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

System API exposing core Salesforce objects for the Portfolio.

Authentication Layers

  1. System API Authentication: System-to-system authentication using explicit API Key headers (client_id, client_secret).
    • Enforcement: Enforced by MuleSoft API Manager policies or Salesforce Apex Custom Metadata validation logic.
    • Rationale: See ADR-017 (SAS.md). API Key enforcement was selected over OAuth2 for parity across implementation stacks and simplified zero-budget governance.
  2. Backend Integration: OAuth2 Client Credentials used for API-to-Salesforce connectivity.
    • Management: Managed internally within the runtime engine (MuleSoft/AWS Lambda); credentials are never exposed or stored client-side.

Architecture & Governance

  • Read-Only Design: This System API is strictly read-only (GET methods only) by design to minimize attack surface and enforce unidirectional data flow.
  • ID Strategy: All id fields utilize strictly 18-character Salesforce Case-Insensitive IDs.
  • Traceability: Each API resource maps 1:1 to a corresponding DataWeave Logic (DWL) file.

Non-Functional Requirements (NFRs)

  • Observability: X-Request-Id mandatory in Request/Response for distributed tracing.
  • Latency: Target < 500ms for internal processing.
  • Resilience: Rate Limits defined with 429 responses and Retry-After headers.
  • Caching Strategy:
    • Public Data (Skills, Projects, Junctions): Cache-Control: max-age=300, public.
    • Private Data (Contact, Config): Cache-Control: max-age=300, private or no-store.

Design Constraints & Trade-offs

  • Pagination: Offset-based pagination implemented for simplicity (<200 records).
    • Enterprise Note: For volumes >2,000, this would be refactored to Keyset/Cursor Pagination (WHERE Id > lastSeenId).
  • Versioning: Header version (X-API-Version) takes precedence over URL versioning.

Base URLs:

Email: Ryan Bumstead License: MIT

Authentication

  • API Key (ApiClientId)
    • Parameter Name: client_id, in: header. API Client Identifier. Not to be confused with OAuth2 Client ID. Enforced via API Manager policies or Salesforce Custom Metadata.
  • API Key (ApiClientSecret)
    • Parameter Name: client_secret, in: header. API Client Secret. Used in conjunction with client_id for system-to-system authentication.

Monitoring

Health checks and observability endpoints.

getHealth

Code samples


const headers = {
  'Accept':'application/json'
};

fetch('https://{domain}/services/apexrest/sapi/v1/health',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /health

Health Check

Current Implementation: Shallow connectivity check (Runtime availability). Future Roadmap: Deep dependency check (Salesforce Connectivity, Cache Availability).

Example responses

200 Response

{
  "status": "UP",
  "checkType": "SHALLOW",
  "timestamp": "2019-08-24T14:15:22Z",
  "dependencies": {
    "salesforce": "deferred"
  }
}

Responses

Status Meaning Description Schema
200 OK Service is UP. HealthStatus

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 Cache-Control string   No-cache for health checks.

Profile

Core candidate information (Contact, Experience, Education).

getContacts

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/contacts',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /contacts

Get Contact records

Retrieves the primary contact details for the portfolio owner.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
contactName query string false Filter by Contact Name.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "0035e00000B2O3DAAV",
    "name": "Ryan Bumstead",
    "email": "ryan@ryanbumstead.com",
    "phone": "+1 555-0199",
    "accountId": "0015e00000A1O3DAAV",
    "accountName": "Salesforce",
    "title": "Platform Architect",
    "trailhead": "https://trailblazer.me/id/rbumstead",
    "careerObjective": "Driving digital transformation...",
    "linkedIn": "https://linkedin.com/in/ryanbumstead",
    "portfolio": "https://ryanbumstead.com"
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Contact records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Contact] false none [Contact Information Schema.]
» id string false read-only Salesforce Record ID
» name string false none Full Name
» email string(email) false none Email Address
» phone string false none Phone Number
» accountId string false none Related Account ID
» accountName string false none Related Account Name
» title string false none Job Title
» trailhead string(uri)¦null false none Trailhead Profile URL
» careerObjective string¦null false none Short Professional Summary
» linkedIn string(uri)¦null false none LinkedIn Profile URL
» portfolio string(uri)¦null false none Portfolio Website URL

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directive to prevent caching of sensitive/dynamic data.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getExperience

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/experience',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /experience

Get Experience records

Retrieves professional experience history.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
contactName query string false Filter by Contact Name.
employerName query string false Filter by Employer Name.
currentlyEmployed query boolean false Filter by active employment status.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a025e00000B2O3DAAV",
    "employerName": "Salesforce",
    "employerId": "0015e00000A1O3DAAV",
    "name": "Technical Architect",
    "startDate": "2023-01-01",
    "endDate": "2025-01-01",
    "isCurrentRole": true,
    "isRemote": true,
    "accomplishments": "<ul><li>Led 5 successful deployments</li></ul>",
    "contactId": "0035e00000B2O3DAAV",
    "contactName": "Ryan Bumstead",
    "sortOrder": 10
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Experience records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Experience] false none [Professional Experience Schema.]
» id string false read-only Salesforce Record ID
» employerName string false none Employer Name
» employerId string false none Employer Account ID
» name string false none Role Title
» startDate string(date) false none Start Date
» endDate string(date)¦null false none End Date (null if current)
» isCurrentRole boolean false read-only Is Current Role Flag
» isRemote boolean false none Remote Work Flag
» accomplishments string¦null false none DEPRECATED: Use /experience-highlights endpoint instead. This field will be removed in SAPI v2.0.0.
» contactId string false none Contact ID
» contactName string false none Contact Name
» sortOrder number¦null false none Sort Order

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directive to prevent caching of sensitive/dynamic data.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getExperienceHighlights

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/experience-highlights',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /experience-highlights

Get Experience Highlights

Fetches resume bullets. Supports Persona filtering for PAPI optimization.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
experienceId query string false Filter by Experience Salesforce ID.
persona query any false Filters records where the target field (Multi-Select Picklist) includes the specified persona(s).
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Detailed descriptions

persona: Filters records where the target field (Multi-Select Picklist) includes the specified persona(s). Can be a single value or multiple values (comma-separated or repeated parameters).

Examples:

  • Single: ?persona=Admin
  • Multiple (comma): ?persona=Admin,Developer
  • Multiple (repeated): ?persona=Admin&persona=Developer

Example responses

200 Response

[
  {
    "id": "a035e00000B2O3DAAV",
    "experienceId": "a025e00000B2O3DAAV",
    "experienceName": "Technical Architect",
    "name": "DevOps Transformation",
    "description": "Implemented CI/CD pipelines reducing deployment time by 80%.",
    "sortOrder": 1,
    "personaTag": "Architect"
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Experience Highlights. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [ExperienceHighlight] false none [Experience Bullet Point Schema.]
» id string false read-only Salesforce Record ID
» experienceId string false none Parent Experience ID
» experienceName string false none Parent Experience Name
» name string false none Highlight Title
» description string false none Detailed Description
» sortOrder number false none Sort Order
» personaTag Persona false none Target audience for content filtering.

Enumerated Values

Property Value
personaTag Admin
personaTag Developer
personaTag Architect

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directive to prevent caching of sensitive/dynamic data.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

Objects

Portfolio entities (Projects, Skills, Certifications).

getProjects

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/projects',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /projects

Get Project records

Retrieves portfolio projects. Example Usage: /projects?isFeatured=true

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
status query ProjectStatus false Filter by Project Status.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.
contactName query string false Filter by Contact Name.
projectName query string false Filter by Project Name.
isFeatured query boolean false Filter only featured projects.

Enumerated Values

Parameter Value
status Live – In Production
status Live – Demo / Reference
status Active Development
status On Hold
status Archived

Example responses

200 Response

[
  {
    "id": "a015e00000B2O3DAAV",
    "name": "Global CRM Migration",
    "challenge": "Legacy system had 5M duplicate records.",
    "solution": "Implemented MDM strategy using Data Cloud.",
    "businessValue": "Reduced data storage costs by 40%.",
    "status": "Active Development",
    "dateCompleted": "2025-12-01",
    "heroImageUrl": "https://assets.ryanbumstead.com/hero.jpg",
    "liveUrl": "https://project-demo.com",
    "repositoryUrl": "https://github.com/rdbumstead/project",
    "pillar": "A",
    "pillarLabel": "Pillar A: Business Architecture",
    "isFeatured": true,
    "contactName": "Ryan Bumstead",
    "contactId": "0035e00000B2O3DAAV",
    "sortOrder": 10
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Project records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Project] false none [Portfolio Project Schema.]
» id string false read-only Salesforce Record ID
» name string false none Project Name
» challenge string¦null false none STAR Method: Situation/Task
» solution string¦null false none STAR Method: Action
» businessValue string¦null false none STAR Method: Result
» status ProjectStatus false none Project Lifecycle Status
» dateCompleted string(date)¦null false none Completion Date
» heroImageUrl string(uri)¦null false none Banner Image URL
» liveUrl string(uri)¦null false none Live Demo URL
» repositoryUrl string(uri)¦null false none Code Repository URL
» pillar string¦null false none Architectural Pillar
» pillarLabel string¦null false none Architectural Pillar Label
» isFeatured boolean false none Featured Flag for Home Page
» contactName string false none Owner Name
» contactId string false none Owner ID
» sortOrder number¦null false none Display Sort Order

Enumerated Values

Property Value
status Live – In Production
status Live – Demo / Reference
status Active Development
status On Hold
status Archived

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getProjectAssets

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/project-assets',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /project-assets

Get Project Assets

Retrieves assets (images, links) associated with a project.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
projectId query string false Filter by Project Salesforce ID.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a045e00000B2O3DAAV",
    "name": "Architecture Diagram",
    "projectId": "a015e00000B2O3DAAV",
    "projectName": "Global CRM Migration",
    "type": "Image",
    "externalUrl": "https://assets.ryanbumstead.com/arch.png",
    "altText": "C4 Model System Context Diagram",
    "sortOrder": 1
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Project Assets. Returns empty array if none found. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [ProjectAsset] false none [Project Asset (Image/Video) Schema.]
» id string false read-only Salesforce Record ID
» name string false none Asset Name
» projectId string false none Parent Project ID
» projectName string false none Parent Project Name
» type AssetType false none Asset Type
» externalUrl string(uri) false none Asset URL
» altText string¦null false none Accessibility Alt Text
» sortOrder number false none Sort Order

Enumerated Values

Property Value
type Image
type Video
type Document
type Link

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getTestimonials

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/testimonials',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /testimonials

Get Testimonials

Retrieves received testimonials. Returns only records where Approved__c = true.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a055e00000B2O3DAAV",
    "name": "Testimonial from Jane Doe",
    "authorName": "Jane Doe",
    "authorTitle": "CTO, Tech Corp",
    "avatarUrl": "https://linkedin.com/image/jane.jpg",
    "relationshipType": "Manager",
    "vibeMode": "Professional",
    "context": "Worked together on the Q1 digital transformation."
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Testimonials. Returns empty array if none found. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Testimonial] false none [Social Proof Schema.]
» id string false read-only Salesforce Record ID
» name string false none Testimonial Name
» authorName string false none Author Name
» authorTitle string¦null false none Author Title
» avatarUrl string(uri)¦null false none Author Avatar URL
» relationshipType RelationshipType false none Professional Relationship
» vibeMode VibeMode false none Tone/Style Category
» context string¦null false none Context of Work

Enumerated Values

Property Value
relationshipType Manager
relationshipType Peer
relationshipType Client
relationshipType Recruiter
relationshipType Fan
vibeMode Professional
vibeMode Casual

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directive to prevent caching of sensitive/dynamic data.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getAccounts

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/accounts',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /accounts

Get Account records

Retrieves related account/employer records.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
accountName query string false Filter by Account Name.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "0015e00000A1O3DAAV",
    "name": "Salesforce",
    "industry": "Technology",
    "abbreviation": "SFDC"
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Account records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Account] false none [Account/Employer Schema.]
» id string false read-only Salesforce Record ID
» name string false none Account Name
» industry string¦null false none Industry
» abbreviation string¦null false none Abbreviation

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getSkills

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/skills',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /skills

Get Skill records

Retrieves technical skills and proficiency scores.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
category query string false Filter skills by Category (e.g., ‘Development’, ‘Architecture’)
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a075e00000B2O3DAAV",
    "name": "Apex",
    "displayName": "Salesforce Apex",
    "category": "Development",
    "proficiencyScore": 5,
    "iconName": "utility:code",
    "svgPathData": "M10...",
    "colorHex": "#0070d2",
    "categoryOrder": 10
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Skill records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Skill] false none [Skill Schema.]
» id string false read-only Salesforce Record ID
» name string false none Skill Name
» displayName string¦null false none Display Name
» category string false none Skill Category
» proficiencyScore number false none Self-Reported Proficiency
» iconName string¦null false none Icon Name
» svgPathData string¦null false none SVG Path Data
» colorHex string¦null false none Category Color Hex
» categoryOrder number false none Category Order

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getCertifications

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/certifications',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /certifications

Get Certification records

Retrieves professional certifications.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
contactName query string false Filter by Contact Name.
issuerName query string false Filter by Issuer Name.
certificationName query string false Filter by Certification Name.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a105e00000B2O3DAAV",
    "name": "Application Architect",
    "contactId": "0035e00000B2O3DAAV",
    "contactName": "Ryan Bumstead",
    "issuerId": "0015e00000A1O3DAAV",
    "issuerName": "Salesforce",
    "earnedDate": "2024-05-15"
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Certification records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Certification] false none [Certification Schema.]
» id string false read-only Salesforce Record ID
» name string false none Certification Name
» contactId string false none Contact ID
» contactName string false none Contact Name
» issuerId string false none Issuer Account ID
» issuerName string false none Issuer Name
» earnedDate string(date) false none Date Earned

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getEducation

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/education',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /education

Get Education records

Retrieves educational background.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
contactName query string false Filter by Contact Name.
issuerName query string false Filter by Issuer Name.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a115e00000B2O3DAAV",
    "name": "Bachelor of Science",
    "contactId": "0035e00000B2O3DAAV",
    "contactName": "Ryan Bumstead",
    "issuerId": "0015e00000A1O3DAAV",
    "issuerName": "University of Technology",
    "fieldOfStudy": "Computer Science",
    "graduationDate": "2018-05-01",
    "gpa": 3.8
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Education records. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Education] false none [Education Schema.]
» id string false read-only Salesforce Record ID
» name string false none Degree Name
» contactId string false none Contact ID
» contactName string false none Contact Name
» issuerId string false none University Account ID
» issuerName string false none University Name
» fieldOfStudy string false none Field of Study
» graduationDate string(date) false none Graduation Date
» gpa number¦null false none GPA

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

Junctions

Many-to-many relationships (Project-Skills, Experience-Skills).

getProjectSkills

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/project-skills',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /project-skills

Get Project-Skill Links

Retrieves junction records linking Projects to Skills.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
projectId query string false Filter by Project Salesforce ID.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a065e00000B2O3DAAV",
    "projectId": "a015e00000B2O3DAAV",
    "projectName": "Global CRM Migration",
    "skillId": "a075e00000B2O3DAAV",
    "skillName": "Apex",
    "skillCategory": "Backend Development",
    "skillProficiencyScore": 5
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Project-Skill junctions. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [ProjectSkill] false none [Junction Object: Project <-> Skill.]
» id string false read-only Salesforce Record ID
» projectId string false none Project ID
» projectName string false none Project Name
» skillId string false none Skill ID
» skillName string false none Skill Name
» skillCategory string false none Skill Category
» skillProficiencyScore number false none Proficiency Score

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getExperienceSkills

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/experience-skills',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /experience-skills

Get Experience-Skill Links

Retrieves junction records linking Experiences to Skills.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
experienceId query string false Filter by Experience Salesforce ID.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a085e00000B2O3DAAV",
    "experienceId": "a025e00000B2O3DAAV",
    "experienceName": "Technical Architect",
    "skillId": "a075e00000B2O3DAAV",
    "skillName": "LWC",
    "skillCategory": "Frontend Development",
    "skillProficiencyScore": 4
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Experience-Skill junctions. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [ExperienceSkill] false none [Junction Object: Experience <-> Skill.]
» id string false read-only Salesforce Record ID
» experienceId string false none Experience ID
» experienceName string false none Experience Name
» skillId string false none Skill ID
» skillName string false none Skill Name
» skillCategory string false none Skill Category
» skillProficiencyScore number false none Proficiency Score

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

getCertificationSkills

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/certification-skills',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /certification-skills

Get Certification-Skill Links

Retrieves junction records linking Certifications to Skills.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.
certificationId query string false Filter by Certification Salesforce ID.
limit query integer false Maximum number of records to return.
offset query integer false Pagination offset.

Example responses

200 Response

[
  {
    "id": "a095e00000B2O3DAAV",
    "certificationId": "a105e00000B2O3DAAV",
    "certificationName": "Salesforce Certified Application Architect",
    "skillId": "a075e00000B2O3DAAV",
    "skillName": "Security",
    "skillCategory": "Architecture",
    "skillProficiencyScore": 5
  }
]

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Certification-Skill junctions. Inline
400 Bad Request Invalid request parameters or schema validation failure. Error
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [CertificationSkill] false none [Junction Object: Certification <-> Skill.]
» id string false read-only Salesforce Record ID
» certificationId string false none Certification ID
» certificationName string false none Certification Name
» skillId string false none Skill ID
» skillName string false none Skill Name
» skillCategory string false none Skill Category
» skillProficiencyScore number false none Proficiency Score

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 X-Total-Count integer   Total number of records available for this resource (Estimation).
200 X-Has-More boolean   Boolean indicator if more records exist beyond the current offset.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
400 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

Configuration

Global portfolio settings.

getPortfolioConfig

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Version':'v1',
  'X-Request-Id':'497f6eca-6276-4993-bfeb-53cbbbba6f08',
  'client_id':'API_KEY',
  'client_secret':'API_KEY'
};

fetch('https://{domain}/services/apexrest/sapi/v1/portfolio-config',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

GET /portfolio-config

Get Portfolio Configuration

Returns the singleton Global Configuration object (Metadata-driven). Not pageable.

Parameters

Name In Type Required Description
X-API-Version header string true API Contract Version (e.g., v1).
X-Request-Id header string(uuid) true Correlation ID for distributed tracing (Logs/Splunk). Must be UUID.

Example responses

200 Response

{
  "ownerEmail": "ryan@ryanbumstead.com",
  "ownerPhone": "+1 555-0199",
  "linkedInUrl": "https://linkedin.com/in/ryanbumstead",
  "gitHubProfileUrl": "https://github.com/ryanbumstead",
  "calendlyUrl": "https://calendly.com/ryanbumstead",
  "trailblazerProfileUrl": "https://trailblazer.me/id/rbumstead",
  "personalWebsiteUrl": "https://ryanbumstead.com",
  "careerObjective": "Looking for Principal Architect roles.",
  "jiraProjectKey": "SPAP",
  "gitHubRepoPath": "rdbumstead/salesforce-portfolio"
}

500 Response

{
  "httpStatus": 500,
  "errorCode": "INTERNAL_SERVER_ERROR",
  "message": "Upstream Salesforce processing failed.",
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "retryable": true
}

Responses

Status Meaning Description Schema
200 OK Successful retrieval of Global Configuration. PortfolioConfig
401 Unauthorized Invalid or missing API Client Credentials. Error
403 Forbidden Insufficient permissions. Error
404 Not Found The requested resource ID was not found. Error
429 Too Many Requests API rate limit exceeded. Error
500 Internal Server Error Internal platform error (Apex/MuleSoft Fault). Error

Response Headers

Status Header Type Format Description
200 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
200 Cache-Control string   Directives for caching mechanisms in both requests and responses.
401 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
403 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
404 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.
429 Retry-After integer   Seconds until the rate limit resets.
500 X-Request-Id string uuid Echoed correlation ID for distributed tracing and observability.

Schemas

Error

{
  "httpStatus": 400,
  "errorCode": "BAD_REQUEST",
  "message": "Offset cannot be negative.",
  "retryable": false,
  "correlationId": "123e4567-e89b-12d3-a456-426614174000"
}

Standard Error Response Schema.

Properties

Name Type Required Restrictions Description
httpStatus integer true read-only Standard HTTP Status Code.
errorCode string true none Machine-readable error code constant.
message string true none Human-readable error message.
retryable boolean false none Indicates if the client should retry the request.
correlationId string(uuid) true none Unique ID tracking the request. Matches X-Request-Id.

Enumerated Values

Property Value
errorCode BAD_REQUEST
errorCode UNAUTHORIZED
errorCode FORBIDDEN
errorCode NOT_FOUND
errorCode RATE_LIMIT_EXCEEDED
errorCode INTERNAL_SERVER_ERROR
errorCode SALESFORCE_UNAVAILABLE
errorCode GATEWAY_TIMEOUT

Persona

"Architect"

Target audience for content filtering.

Properties

Name Type Required Restrictions Description
anonymous string false none Target audience for content filtering.

Enumerated Values

Property Value
anonymous Admin
anonymous Developer
anonymous Architect

ProjectStatus

"Active Development"

Project Lifecycle Status

Properties

Name Type Required Restrictions Description
anonymous string false none Project Lifecycle Status

Enumerated Values

Property Value
anonymous Live – In Production
anonymous Live – Demo / Reference
anonymous Active Development
anonymous On Hold
anonymous Archived

AssetType

"Image"

Asset Type

Properties

Name Type Required Restrictions Description
anonymous string false none Asset Type

Enumerated Values

Property Value
anonymous Image
anonymous Video
anonymous Document
anonymous Link

RelationshipType

"Manager"

Professional Relationship

Properties

Name Type Required Restrictions Description
anonymous string false none Professional Relationship

Enumerated Values

Property Value
anonymous Manager
anonymous Peer
anonymous Client
anonymous Recruiter
anonymous Fan

VibeMode

"Professional"

Tone/Style Category

Properties

Name Type Required Restrictions Description
anonymous string false none Tone/Style Category

Enumerated Values

Property Value
anonymous Professional
anonymous Casual

HealthStatus

{
  "status": "UP",
  "checkType": "SHALLOW",
  "timestamp": "2019-08-24T14:15:22Z",
  "dependencies": {
    "salesforce": "deferred"
  }
}

API Health Status Schema.

Properties

Name Type Required Restrictions Description
status string false none Overall API Availability.
checkType string false none SHALLOW = Runtime only. DEEP = Includes downstream dependencies.
timestamp string(date-time) false none ISO 8601 Timestamp of the health check.
dependencies object false none Status of downstream systems.
» salesforce string false none Status of Salesforce Core.

Enumerated Values

Property Value
status UP
status DOWN
status DEGRADED
checkType SHALLOW
checkType DEEP

Contact

{
  "id": "0035e00000B2O3DAAV",
  "name": "Ryan Bumstead",
  "email": "ryan@ryanbumstead.com",
  "phone": "+1 555-0199",
  "accountId": "0015e00000A1O3DAAV",
  "accountName": "Salesforce",
  "title": "Platform Architect",
  "trailhead": "https://trailblazer.me/id/rbumstead",
  "careerObjective": "Driving digital transformation...",
  "linkedIn": "https://linkedin.com/in/ryanbumstead",
  "portfolio": "https://ryanbumstead.com"
}

Contact Information Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Full Name
email string(email) false none Email Address
phone string false none Phone Number
accountId string false none Related Account ID
accountName string false none Related Account Name
title string false none Job Title
trailhead string(uri)¦null false none Trailhead Profile URL
careerObjective string¦null false none Short Professional Summary
linkedIn string(uri)¦null false none LinkedIn Profile URL
portfolio string(uri)¦null false none Portfolio Website URL

Project

{
  "id": "a015e00000B2O3DAAV",
  "name": "Global CRM Migration",
  "challenge": "Legacy system had 5M duplicate records.",
  "solution": "Implemented MDM strategy using Data Cloud.",
  "businessValue": "Reduced data storage costs by 40%.",
  "status": "Active Development",
  "dateCompleted": "2025-12-01",
  "heroImageUrl": "https://assets.ryanbumstead.com/hero.jpg",
  "liveUrl": "https://project-demo.com",
  "repositoryUrl": "https://github.com/rdbumstead/project",
  "pillar": "A",
  "pillarLabel": "Pillar A: Business Architecture",
  "isFeatured": true,
  "contactName": "Ryan Bumstead",
  "contactId": "0035e00000B2O3DAAV",
  "sortOrder": 10
}

Portfolio Project Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Project Name
challenge string¦null false none STAR Method: Situation/Task
solution string¦null false none STAR Method: Action
businessValue string¦null false none STAR Method: Result
status ProjectStatus false none Project Lifecycle Status
dateCompleted string(date)¦null false none Completion Date
heroImageUrl string(uri)¦null false none Banner Image URL
liveUrl string(uri)¦null false none Live Demo URL
repositoryUrl string(uri)¦null false none Code Repository URL
pillar string¦null false none Architectural Pillar
pillarLabel string¦null false none Architectural Pillar Label
isFeatured boolean false none Featured Flag for Home Page
contactName string false none Owner Name
contactId string false none Owner ID
sortOrder number¦null false none Display Sort Order

Experience

{
  "id": "a025e00000B2O3DAAV",
  "employerName": "Salesforce",
  "employerId": "0015e00000A1O3DAAV",
  "name": "Technical Architect",
  "startDate": "2023-01-01",
  "endDate": "2025-01-01",
  "isCurrentRole": true,
  "isRemote": true,
  "accomplishments": "<ul><li>Led 5 successful deployments</li></ul>",
  "contactId": "0035e00000B2O3DAAV",
  "contactName": "Ryan Bumstead",
  "sortOrder": 10
}

Professional Experience Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
employerName string false none Employer Name
employerId string false none Employer Account ID
name string false none Role Title
startDate string(date) false none Start Date
endDate string(date)¦null false none End Date (null if current)
isCurrentRole boolean false read-only Is Current Role Flag
isRemote boolean false none Remote Work Flag
accomplishments string¦null false none DEPRECATED: Use /experience-highlights endpoint instead. This field will be removed in SAPI v2.0.0.
contactId string false none Contact ID
contactName string false none Contact Name
sortOrder number¦null false none Sort Order

ExperienceHighlight

{
  "id": "a035e00000B2O3DAAV",
  "experienceId": "a025e00000B2O3DAAV",
  "experienceName": "Technical Architect",
  "name": "DevOps Transformation",
  "description": "Implemented CI/CD pipelines reducing deployment time by 80%.",
  "sortOrder": 1,
  "personaTag": "Architect"
}

Experience Bullet Point Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
experienceId string false none Parent Experience ID
experienceName string false none Parent Experience Name
name string false none Highlight Title
description string false none Detailed Description
sortOrder number false none Sort Order
personaTag Persona false none Target audience for content filtering.

ProjectAsset

{
  "id": "a045e00000B2O3DAAV",
  "name": "Architecture Diagram",
  "projectId": "a015e00000B2O3DAAV",
  "projectName": "Global CRM Migration",
  "type": "Image",
  "externalUrl": "https://assets.ryanbumstead.com/arch.png",
  "altText": "C4 Model System Context Diagram",
  "sortOrder": 1
}

Project Asset (Image/Video) Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Asset Name
projectId string false none Parent Project ID
projectName string false none Parent Project Name
type AssetType false none Asset Type
externalUrl string(uri) false none Asset URL
altText string¦null false none Accessibility Alt Text
sortOrder number false none Sort Order

Testimonial

{
  "id": "a055e00000B2O3DAAV",
  "name": "Testimonial from Jane Doe",
  "authorName": "Jane Doe",
  "authorTitle": "CTO, Tech Corp",
  "avatarUrl": "https://linkedin.com/image/jane.jpg",
  "relationshipType": "Manager",
  "vibeMode": "Professional",
  "context": "Worked together on the Q1 digital transformation."
}

Social Proof Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Testimonial Name
authorName string false none Author Name
authorTitle string¦null false none Author Title
avatarUrl string(uri)¦null false none Author Avatar URL
relationshipType RelationshipType false none Professional Relationship
vibeMode VibeMode false none Tone/Style Category
context string¦null false none Context of Work

ProjectSkill

{
  "id": "a065e00000B2O3DAAV",
  "projectId": "a015e00000B2O3DAAV",
  "projectName": "Global CRM Migration",
  "skillId": "a075e00000B2O3DAAV",
  "skillName": "Apex",
  "skillCategory": "Backend Development",
  "skillProficiencyScore": 5
}

Junction Object: Project <-> Skill.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
projectId string false none Project ID
projectName string false none Project Name
skillId string false none Skill ID
skillName string false none Skill Name
skillCategory string false none Skill Category
skillProficiencyScore number false none Proficiency Score

ExperienceSkill

{
  "id": "a085e00000B2O3DAAV",
  "experienceId": "a025e00000B2O3DAAV",
  "experienceName": "Technical Architect",
  "skillId": "a075e00000B2O3DAAV",
  "skillName": "LWC",
  "skillCategory": "Frontend Development",
  "skillProficiencyScore": 4
}

Junction Object: Experience <-> Skill.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
experienceId string false none Experience ID
experienceName string false none Experience Name
skillId string false none Skill ID
skillName string false none Skill Name
skillCategory string false none Skill Category
skillProficiencyScore number false none Proficiency Score

CertificationSkill

{
  "id": "a095e00000B2O3DAAV",
  "certificationId": "a105e00000B2O3DAAV",
  "certificationName": "Salesforce Certified Application Architect",
  "skillId": "a075e00000B2O3DAAV",
  "skillName": "Security",
  "skillCategory": "Architecture",
  "skillProficiencyScore": 5
}

Junction Object: Certification <-> Skill.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
certificationId string false none Certification ID
certificationName string false none Certification Name
skillId string false none Skill ID
skillName string false none Skill Name
skillCategory string false none Skill Category
skillProficiencyScore number false none Proficiency Score

PortfolioConfig

{
  "ownerEmail": "ryan@ryanbumstead.com",
  "ownerPhone": "+1 555-0199",
  "linkedInUrl": "https://linkedin.com/in/ryanbumstead",
  "gitHubProfileUrl": "https://github.com/ryanbumstead",
  "calendlyUrl": "https://calendly.com/ryanbumstead",
  "trailblazerProfileUrl": "https://trailblazer.me/id/rbumstead",
  "personalWebsiteUrl": "https://ryanbumstead.com",
  "careerObjective": "Looking for Principal Architect roles.",
  "jiraProjectKey": "SPAP",
  "gitHubRepoPath": "rdbumstead/salesforce-portfolio"
}

Global Config Schema (Custom Metadata).

Properties

Name Type Required Restrictions Description
ownerEmail string(email) false none Owner Email
ownerPhone string¦null false none Owner Phone
linkedInUrl string(uri)¦null false none LinkedIn URL
gitHubProfileUrl string(uri)¦null false none GitHub URL
calendlyUrl string(uri)¦null false none Calendly URL
trailblazerProfileUrl string(uri)¦null false none Trailhead URL
personalWebsiteUrl string(uri)¦null false none Personal Website URL
careerObjective string¦null false none Career Objective Text
jiraProjectKey string false none Jira Key for integration
gitHubRepoPath string false none GitHub Owner/Repo path for API calls

Account

{
  "id": "0015e00000A1O3DAAV",
  "name": "Salesforce",
  "industry": "Technology",
  "abbreviation": "SFDC"
}

Account/Employer Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Account Name
industry string¦null false none Industry
abbreviation string¦null false none Abbreviation

Skill

{
  "id": "a075e00000B2O3DAAV",
  "name": "Apex",
  "displayName": "Salesforce Apex",
  "category": "Development",
  "proficiencyScore": 5,
  "iconName": "utility:code",
  "svgPathData": "M10...",
  "colorHex": "#0070d2",
  "categoryOrder": 10
}

Skill Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Skill Name
displayName string¦null false none Display Name
category string false none Skill Category
proficiencyScore number false none Self-Reported Proficiency
iconName string¦null false none Icon Name
svgPathData string¦null false none SVG Path Data
colorHex string¦null false none Category Color Hex
categoryOrder number false none Category Order

Certification

{
  "id": "a105e00000B2O3DAAV",
  "name": "Application Architect",
  "contactId": "0035e00000B2O3DAAV",
  "contactName": "Ryan Bumstead",
  "issuerId": "0015e00000A1O3DAAV",
  "issuerName": "Salesforce",
  "earnedDate": "2024-05-15"
}

Certification Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Certification Name
contactId string false none Contact ID
contactName string false none Contact Name
issuerId string false none Issuer Account ID
issuerName string false none Issuer Name
earnedDate string(date) false none Date Earned

Education

{
  "id": "a115e00000B2O3DAAV",
  "name": "Bachelor of Science",
  "contactId": "0035e00000B2O3DAAV",
  "contactName": "Ryan Bumstead",
  "issuerId": "0015e00000A1O3DAAV",
  "issuerName": "University of Technology",
  "fieldOfStudy": "Computer Science",
  "graduationDate": "2018-05-01",
  "gpa": 3.8
}

Education Schema.

Properties

Name Type Required Restrictions Description
id string false read-only Salesforce Record ID
name string false none Degree Name
contactId string false none Contact ID
contactName string false none Contact Name
issuerId string false none University Account ID
issuerName string false none University Name
fieldOfStudy string false none Field of Study
graduationDate string(date) false none Graduation Date
gpa number¦null false none GPA