API Reference Support

Arbolus API

Access transcripts, customer insights, and company intelligence through a simple REST API.

v1 · Stable

Overview

The Arbolus API enables seamless integration with Arbolus's expert network platform. Through this API, partners can programmatically access:

FeatureDescription
TranscriptsRetrieve expert call transcripts and canopy surveys with metadata and expert details
Customer LibraryAccess company data, customer insights, NPS scores, and reviews
Health MonitoringVerify API availability and service status

The API follows RESTful conventions, returns JSON responses, and uses API key authentication.

Getting Started

Obtain Your API Key

Contact [email protected] to request an API key. Each key is scoped to specific features:

ScopeAccess
TranscriptsAll transcript-related endpoints
CustomerLibraryAll customer library endpoints

Make Your First Request

curl -X GET "https://api.arbolus.com/v1/health" \
  -H "Accept: application/json"

Authenticate & Fetch Data

curl -X GET "https://api.arbolus.com/v1/transcripts" \
  -H "x-api-key: your_api_key_here" \
  -H "Accept: application/json"

Authentication

All endpoints (except /v1/health) require an API key passed via the x-api-key HTTP header.

Request Header

x-api-key: your_api_key_here

How It Works

  1. Include the x-api-key header in every request
  2. The API validates your key and checks its assigned scope
  3. If the key is valid and has the required scope, the request proceeds
  4. If the key is missing, invalid, or lacks the required scope, an error is returned

Scopes

ScopeEndpoints
TranscriptsGET /v1/transcripts/*
CustomerLibraryGET /v1/customer-library/*
Attempting to access an endpoint outside your key's scope will return a 403 Forbidden response.

Example — Authenticated Request

curl -X GET "https://api.arbolus.com/v1/transcripts" \
  -H "x-api-key: pk_live_abc123def456" \
  -H "Accept: application/json"

Example — Error Responses

// 401 Unauthorized — missing or invalid API key
{
  "statusCode": 401,
  "message": "Unauthorized"
}
// 403 Forbidden — valid key but insufficient scope
{
  "statusCode": 403,
  "message": "Forbidden"
}

Base URL

All API requests are made to:

https://api.arbolus.com

All endpoints are prefixed with the API version (/v1).

Versioning

The API uses URL path versioning. The current version is v1.

https://api.arbolus.com/v1/{endpoint}

When a new version is released, existing endpoints will continue to function under their original version prefix.

Credits & Rate Limiting

Each API key has a configurable credit limit that resets on a recurring billing cycle. Endpoints that return paid data consume credits on each successful (2xx) response; non-2xx responses are refunded automatically.

Error Handling

The API uses standard HTTP status codes and returns consistent error responses.

Error Response Format

{
  "statusCode": 400,
  "message": "One or more validation errors occurred.",
  "errors": {
    "website": ["Website is required."]
  }
}

Common Error Scenarios

ScenarioStatusDescription
Missing API key401No x-api-key header provided
Invalid API key401The provided key does not exist or is deactivated
Insufficient scope403Your key does not have access to this endpoint
Resource not found404The requested transcript or company does not exist
Invalid parameters400Request parameters failed validation
Credit limit exceeded429Your API key has exhausted its credit allowance
Server error500An unexpected error occurred on the server

API Reference

Health Check

Check service availability. This endpoint does not require authentication.

GET /v1/health

Returns the current health status of the API.

No Auth Required

Response

{
  "status": "Healthy",
  "timestamp": "2026-04-24T12:00:00Z"
}
FieldTypeDescription
statusstringService health status (Healthy)
timestampstring (ISO 8601)Current server time in UTC

Transcripts

Access expert consultation transcripts with full metadata and expert details.

Authentication required — All transcript endpoints require an API key with the Transcripts scope.
GET /v1/transcripts

Retrieve a list of all transcripts available to your account.

🔒 Transcripts

Query Parameters

ParameterTypeRequiredDefaultDescription
fromDatestring (ISO 8601)YesStart date filter for call date (inclusive)
tillDatestring (ISO 8601)NoEnd date filter for call date (inclusive)
pageintegerNo1Page number (must be ≥ 1)
pageSizeintegerNo20Results per page (1–100)

Response

{
  "transcripts": [
    {
      "expertNetwork": "Arbolus",
      "transcriptId": "550e8400-e29b-41d4-a716-446655440000",
      "caseCode": "CASE-2024-001",
      "callDate": "2026-04-20T14:30:00Z",
      "callDuration": 3600,
      "consultationTitle": "Market Analysis Discussion"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "totalCount": 157,
    "totalPages": 8
  }
}

Response Fields — Transcript

FieldTypeDescription
expertNetworkstringName of the expert network
transcriptIdstring (UUID)Unique identifier for the transcript
caseCodestring | nullCase or project code
callDatestring (ISO 8601)Date and time of the call (UTC)
callDurationintegerDuration of the call in seconds
consultationTitlestring | nullTitle of the consultation

Response Fields — Pagination

FieldTypeDescription
pageintegerCurrent page number
pageSizeintegerNumber of results per page
totalCountintegerTotal number of matching transcripts
totalPagesintegerTotal number of pages

Example

curl -X GET "https://api.arbolus.com/v1/transcripts?fromDate=2026-01-01&page=1&pageSize=20" \
  -H "x-api-key: your_api_key_here"
GET /v1/transcripts/{id}

Retrieve the full transcript for a specific interaction, including metadata, expert profile, and speaker-level dialogue.

🔒 Transcripts

Path Parameters

ParameterTypeRequiredDescription
idUUIDYesThe transcript identifier

Response

{
  "expertNetwork": "Arbolus",
  "transcriptId": "550e8400-e29b-41d4-a716-446655440000",
  "caseCode": "CASE-2024-001",
  "projectName": "SaaS Market Research",
  "callDate": "2026-04-20T14:30:00Z",
  "callDuration": 3600,
  "consultationTitle": "Market Analysis Discussion",
  "callSummary": "Discussed market trends and growth opportunities.",
  "invitees": ["[email protected]"],
  "office": "New York",
  "expert": {
    "expertId": "660e8400-e29b-41d4-a716-446655440111",
    "firstName": "Michael",
    "lastName": "Johnson",
    "country": "United States",
    "profileSummary": "Seasoned operations executive with 15+ years in SaaS.",
    "relevantExperience": {
      "title": "VP Operations",
      "employer": "TechCorp Inc",
      "startDate": "2020-01-15",
      "endDate": null
    },
    "otherExperiences": [
      {
        "title": "Operations Manager",
        "employer": "DataSoft Ltd",
        "startDate": "2018-06-01",
        "endDate": "2020-01-14"
      }
    ]
  },
  "transcript": [
    {
      "speaker": "Expert",
      "text": "Let's start with the market overview.",
      "timeStamp": "00:00:15"
    },
    {
      "speaker": "Client",
      "text": "The market has grown 20% year-over-year.",
      "timeStamp": "00:00:45"
    }
  ],
  "questionAnswers": [
    {
      "question": "What were the key themes discussed?",
      "sortOrder": 1,
      "answer": "Market consolidation, pricing pressure, and enterprise adoption trends."
    }
  ]
}

Response Fields

FieldTypeDescription
expertNetworkstringName of the expert network
transcriptIdstring (UUID)Unique transcript identifier
caseCodestring | nullCase or project code
projectNamestring | nullName of the associated project
callDatestring (ISO 8601)Call date and time (UTC)
callDurationintegerCall duration in seconds
consultationTitlestring | nullTitle of the consultation
callSummarystring | nullAI-generated summary of the call
inviteesarray of stringsEmail addresses of invitees
officestring | nullOffice location associated with the call
expertobject | nullExpert profile (see below)
transcriptarrayOrdered list of transcript segments
transcript[].speakerstring | nullSpeaker role (Expert, Client, or Others)
transcript[].textstring | nullSpoken text content
transcript[].timeStampstring | nullTimestamp in HH:MM:SS format
questionAnswersarrayPre-call screening questions and expert answers
questionAnswers[].questionstring | nullThe question text
questionAnswers[].sortOrderintegerDisplay order of the question
questionAnswers[].answerstring | nullThe expert's answer

Expert Object

FieldTypeDescription
expertIdstring (UUID) | nullExpert's unique identifier
firstNamestring | nullExpert's first name
lastNamestring | nullExpert's last name
countrystring | nullExpert's country
profileSummarystring | nullBrief summary of the expert's professional background
relevantExperienceobject | nullMost relevant work experience
otherExperiencesarrayAdditional work history entries

Experience Object

FieldTypeDescription
titlestring | nullJob title
employerstring | nullCompany name
startDatestring | nullStart date (ISO format)
endDatestring | nullEnd date (null if current position)

Example

curl -X GET "https://api.arbolus.com/v1/transcripts/550e8400-e29b-41d4-a716-446655440000" \
  -H "x-api-key: your_api_key_here"
GET /v1/transcripts/canopies

List active or paused canopies created within a date range.

🔒 Transcripts

Query Parameters

ParameterTypeRequiredDefaultDescription
fromDatestring (ISO 8601)YesStart date filter for canopy creation date (inclusive)
tillDatestring (ISO 8601)NoEnd date filter for canopy creation date (inclusive)
pageintegerNo1Page number (must be ≥ 1)
pageSizeintegerNo20Results per page (1–100)

Response

{
  "canopies": [
    {
      "canopyId": "bb0e8400-e29b-41d4-a716-446655440666",
      "canopyName": "Q2 SaaS Buyer Sentiment",
      "projectName": "SaaS Market Research",
      "created": "2026-03-12T09:15:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "pageSize": 20,
    "totalCount": 42,
    "totalPages": 3
  }
}

Response Fields — Canopy

FieldTypeDescription
canopyIdstring (UUID)Unique canopy identifier
canopyNamestring | nullCanopy display name
projectNamestring | nullAssociated project name
createdstring (ISO 8601)Canopy creation date (UTC)

Pagination fields match those returned by GET /v1/transcripts.

Example

curl -X GET "https://api.arbolus.com/v1/transcripts/canopies?fromDate=2026-01-01&page=1&pageSize=20" \
  -H "x-api-key: your_api_key_here"
GET /v1/transcripts/canopies/{id}

Retrieve the full set of canopy questions, each with all expert answers.

🔒 Transcripts

Path Parameters

ParameterTypeRequiredDescription
idUUIDYesCanopy identifier

Response

{
  "canopyId": "bb0e8400-e29b-41d4-a716-446655440666",
  "canopyTitle": "Q2 SaaS Buyer Sentiment",
  "projectName": "SaaS Market Research",
  "questions": [
    {
      "question": "Which vendors did you evaluate?",
      "sortOrder": 1,
      "answers": [
        {
          "expertId": "660e8400-e29b-41d4-a716-446655440111",
          "expertName": "Michael Johnson",
          "answer": "We evaluated VendorA, VendorB, and VendorC."
        },
        {
          "expertId": "cc0e8400-e29b-41d4-a716-446655440777",
          "expertName": "Sarah Lee",
          "answer": "Primarily VendorA and VendorB."
        }
      ]
    }
  ]
}

Response Fields

FieldTypeDescription
canopyIdstring (UUID)Canopy identifier
canopyTitlestring | nullCanopy display name
projectNamestring | nullAssociated project name
questionsarrayOrdered list of canopy questions
questions[].questionstring | nullQuestion text
questions[].sortOrderintegerDisplay order of the question
questions[].answersarrayExpert answers to this question
questions[].answers[].expertIdstring (UUID)Expert identifier
questions[].answers[].expertNamestring | nullExpert full name
questions[].answers[].answerstring | nullExpert's answer text

Example

curl -X GET "https://api.arbolus.com/v1/transcripts/canopies/bb0e8400-e29b-41d4-a716-446655440666" \
  -H "x-api-key: your_api_key_here"

Customer Library

Access company intelligence, customer insights, NPS data, and reviews.

Authentication required — All customer library endpoints require an API key with the CustomerLibrary scope.
GET /v1/customer-library/companies

Retrieve a list of companies filtered by website, with optional name filtering.

🔒 CustomerLibrary

Query Parameters

ParameterTypeRequiredDefaultDescription
websitestringYesFilter companies by website domain
companyNamestringNoFilter companies by name prefix

Response

[
  {
    "id": "770e8400-e29b-41d4-a716-446655440222",
    "name": "TechCorp Inc",
    "website": "https://techcorp.com",
    "logoUrl": "https://logos.arbolus.com/techcorp.png",
    "nps": 72,
    "numberOfCustomers": 150,
    "description": "Cloud platform for enterprise data workflows.",
    "revenue": 125000000,
    "totalEmployees": 850,
    "foundationYear": 2008,
    "ownershipType": "Private",
    "exchangeTicker": null,
    "specialities": ["Cloud", "Data Analytics", "SaaS"],
    "competitors": ["DataSoft Solutions", "InsightWorks"],
    "headquarterAddress": {
      "address": "500 Market St, Suite 200",
      "state": "CA",
      "zipCode": "94105",
      "city": "San Francisco",
      "country": "United States"
    }
  }
]

Response Fields — Company

FieldTypeDescription
idstring (UUID)Company's unique identifier
namestring | nullCompany name
websitestring | nullCompany website URL
logoUrlstring | nullURL to company logo image
npsinteger | nullNet Promoter Score
numberOfCustomersinteger | nullTotal number of customers
descriptionstring | nullCompany description
revenueinteger | nullAnnual revenue (raw value)
totalEmployeesinteger | nullTotal employee headcount
foundationYearinteger | nullYear company was founded
ownershipTypestring | nullOwnership type (e.g. Private, Public)
exchangeTickerstring | nullStock exchange ticker symbol
specialitiesstring[] | nullCompany specialities / focus areas
competitorsstring[] | nullCompetitor company names (from CompetitorEvaluated where VendorCompanyId = company.id and CustomerId IS NULL)
headquarterAddressobject | nullHeadquarter address — see below; omitted when all address fields are null

Response Fields — HeadquarterAddress

FieldTypeDescription
addressstring | nullStreet address
statestring | nullState / province
zipCodestring | nullPostal / ZIP code
citystring | nullCity name
countrystring | nullCountry name (resolved from CompanyDetails.CountryId)

Example

curl -X GET "https://api.arbolus.com/v1/customer-library/companies?website=techcorp.com&companyName=Tech" \
  -H "x-api-key: your_api_key_here"
GET /v1/customer-library/companies/{companyId}/insights

Retrieve customer insights for a specific company, including spend, NPS, renewal intent, and competitive data. The response includes the current insights (status InReview or Approved) plus any historical Outdated rows for the same customers, so callers can see how a customer's responses have changed over time. Use modifiedDate to distinguish current from outdated entries; outdated rows do not carry competitorsNames.

🔒 CustomerLibrary

Path Parameters

ParameterTypeRequiredDescription
companyIdUUIDYesThe target company's identifier

Response

[
  {
    "customerId": "990e8400-e29b-41d4-a716-446655440444",
    "customerName": "GlobalBank Ltd",
    "customerLogoUrl": "https://logos.arbolus.com/globalbank.png",
    "persona": "VP of Operations",
    "spend": 250000,
    "nps": 8,
    "renewalIntent": "Yes",
    "implementationStage": "User",
    "competitorsNames": ["Competitor A", "Competitor B"],
    "modifiedDate": "2026-04-18T10:22:00Z"
  },
  {
    "customerId": "990e8400-e29b-41d4-a716-446655440444",
    "customerName": "GlobalBank Ltd",
    "customerLogoUrl": "https://logos.arbolus.com/globalbank.png",
    "persona": "VP of Operations",
    "spend": 180000,
    "nps": 7,
    "renewalIntent": "NotSure",
    "implementationStage": "Pilot",
    "competitorsNames": null,
    "modifiedDate": "2025-09-02T08:10:00Z"
  }
]

Response Fields

FieldTypeDescription
customerIdstring (UUID)Identifier of the customer the expert represents
customerNamestring | nullCustomer company name
customerLogoUrlstring | nullLogo URL of customer company
personastring | nullExpert's job role/title
spendinteger | nullAnnual spend amount
npsinteger | nullNet Promoter Score (0–10)
renewalIntentstring | nullYes, No, or NotSure
implementationStagestring | nullPilot, User, or OffBoarding
competitorsNamesarray of strings | nullNames of competing vendors (current insights only; null on outdated rows)
modifiedDatestring (ISO 8601)Last modification timestamp — use to order current vs. outdated insights

Example

curl -X GET "https://api.arbolus.com/v1/customer-library/companies/770e8400-e29b-41d4-a716-446655440222/insights" \
  -H "x-api-key: your_api_key_here"
GET /v1/customer-library/companies/{companyId}/reviews

Retrieve customer reviews for a specific company. Returns a list of customers with their identifying information and individual question-answer reviews.

🔒 CustomerLibrary

Path Parameters

ParameterTypeRequiredDescription
companyIdUUIDYesThe target company's identifier

Response

[
  {
    "customerId": "990e8400-e29b-41d4-a716-446655440444",
    "customerName": "Acme Corporation",
    "nps": 8,
    "reviews": [
      {
        "questionText": "What are the main strengths of this product?",
        "sortOrder": 1,
        "answerText": "Excellent customer support, intuitive UI, and seamless onboarding process."
      },
      {
        "questionText": "What areas need improvement?",
        "sortOrder": 2,
        "answerText": "Reporting dashboards could be more customizable."
      }
    ]
  },
  {
    "customerId": "aa0e8400-e29b-41d4-a716-446655440555",
    "customerName": "GlobalTech Inc.",
    "nps": 9,
    "reviews": [
      {
        "questionText": "What are the main strengths of this product?",
        "sortOrder": 1,
        "answerText": "The integration capabilities and API documentation are outstanding."
      },
      {
        "questionText": "What areas need improvement?",
        "sortOrder": 2,
        "answerText": "Mobile app experience could be improved."
      }
    ]
  }
]

Response Fields — Customer Review

FieldTypeDescription
customerIdstring (UUID) | nullCustomer identifier
customerNamestring | nullCustomer company name
npsinteger | nullNet Promoter Score (0–10)
reviewsarrayList of question-answer reviews for this customer

Response Fields — Review Answer

FieldTypeDescription
questionTextstring | nullThe survey question text
sortOrderinteger | nullDisplay order of the question
answerTextstring | nullThe review/answer content

Example

curl -X GET "https://api.arbolus.com/v1/customer-library/companies/770e8400-e29b-41d4-a716-446655440222/reviews" \
  -H "x-api-key: your_api_key_here"

Data Models

Enumerations

Renewal Intent

ValueDescription
YesCustomer intends to renew
NoCustomer does not intend to renew
NotSureCustomer is undecided about renewal

Implementation Stage

ValueDescription
PilotProduct is in pilot/trial phase
UserProduct is in active use
OffBoardingCustomer is in the process of leaving

UUID Format

All identifiers use UUID v4 format:

550e8400-e29b-41d4-a716-446655440000

Date & Time Format

All timestamps follow ISO 8601 in UTC:

2026-04-24T14:30:00Z

Status Codes

CodeMeaningWhen It Occurs
200 OKRequest succeededData returned successfully
400 Bad RequestInvalid inputValidation errors in query parameters
401 UnauthorizedAuthentication failedMissing or invalid API key
403 ForbiddenInsufficient permissionsAPI key lacks the required scope
404 Not FoundResource not foundTranscript or company does not exist
429 Too Many RequestsCredit limit exceededAPI key has no remaining credits
500 Internal Server ErrorServer errorUnexpected error — contact support

Quick Reference

GET /v1/health Health check No Auth GET /v1/transcripts List all transcripts Transcripts GET /v1/transcripts/{id} Get full transcript Transcripts GET /v1/transcripts/canopies List canopies Transcripts GET /v1/transcripts/canopies/{id} Get canopy questions & answers Transcripts GET /v1/customer-library/companies List companies CustomerLibrary GET /v1/.../companies/{id}/insights Get customer insights CustomerLibrary GET /v1/.../companies/{id}/reviews Get customer reviews CustomerLibrary

Support

For questions, issues, or to request an API key: