BEXO / Developers
BUILD WITH BEXO / API REFERENCE

Vendor API reference

Manage the authenticated owner’s business workspace. These operations use a member session associated with the vendor owner, not a terminal integration key.

Reference edition 2026-10-19 • Selected public contract
vendor APIplansKYBreportsterminals

From application to live operation

  1. Sign in through the supported BEXO vendor flow. Read /vendor/me to resolve the current workspace.
  2. Submit business details and complete the compliance workflow. Keep identity documents private.
  3. Create plans, review their amounts and durations, and wait for required approval before publishing.
  4. Create or retrieve a hosted checkout URL for an active plan.
  5. Register readers, review verification events and reconcile supported reports.

Approval states are distinct from test keys

StateMeaning for integrations
sandbox_onlyThe application has not completed production review. It does not mean a live integration credential exists.
entity_verified / control_verified / risk_reviewedIntermediate review states. Continue the workspace’s requested steps.
production_activeRequired by documented live publishing/checkout gates; other configuration can still be required.
suspendedOperations may be restricted. Do not bypass the state with cached results.

Updating important business identity details can trigger another review and make previously accepted details or links require attention. Use the workspace for business-profile changes; this reference does not provide a generic PATCH contract for every legal or bank field.

Plan and reporting conventions

Amounts ending in Paise are integer minor units: 150000 means INR 1,500. Use integer arithmetic and currency from the server. Plan creation supports one_time or monthly; actual recurring payment availability depends on the configured provider journey. A plan record alone does not prove a subscription mandate is active.

For checkout-compatible plans use a positive duration of 1–366 days. Pending purchases keep a price/name/duration snapshot; editing a current plan is not an instruction to rewrite an existing purchase. Report data is operational application data and should be reconciled with payment-provider and banking records.

Compliance upload workflow

Upload one PDF, PNG or JPEG using multipart field file, up to 8 MiB. Accepted path kinds are business_registration, tax_id, pan_card, gst_certificate and authorized_signatory. Then submit documents for review. Review status and missing-document feedback are authoritative; submission does not activate the vendor.

shell
curl --fail-with-body "$BEXO_API_BASE/vendor/documents/business_registration" \
  -H "Authorization: Bearer $BEXO_OWNER_SESSION" \
  -F "file=@/secure/path/business-registration.pdf"

Keep source files in a controlled location. Never send identity documents to a public asset bucket, documentation tool or analytics system.

Reports and exports

The recent-subscriptions and recent-verifications endpoints cap at 100 records and do not expose cursor pagination. Device API logs use page and limit. Reports support JSON or CSV; query support is listed for each endpoint. CSV exports can include personal/business data and require the same access controls as the workspace.

shell
curl --fail-with-body "$BEXO_API_BASE/vendor/reports/subscribers?range=last_30_days&format=csv" \
  -H "Authorization: Bearer $BEXO_OWNER_SESSION" \
  --output subscribers.csv

Confirm date boundaries with the workspace; reporting-day boundaries follow server-side interpretation. Do not assume these reports use UTC days.

REQUEST / RESPONSE

Endpoint reference

Paths below include the API prefix. The OpenAPI server URL already includes /api.

GET/api/vendor/me

Read your vendor workspace

Private account data. Keep it out of public pages, analytics events and application logs. Resolves the tenant associated with the authenticated owner. Returns 404 when no application is associated.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/me" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
tenantVendorSee the downloadable schema for nested fields.
storefrontUrlstring · nullablePublic storefront URL.
View full machine-readable contract ↗
POST/api/vendor/applications

Submit a business application

Creates or updates the authenticated owner’s application. PAN, GST declaration, support email and registered business details are validated. This is not live activation. Complete compliance steps in the vendor portal.

Member / owner sessionHTTP 201

Request template

Set the API base to include /api. Replace path placeholders and prepare request.json from the body fields below before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/vendor/applications" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -H "Content-Type: application/json" \
  --data @request.json

Request body

FieldTypeDetails
legalNameRequiredstringRegistered legal name.
displayNameRequiredstringCustomer-facing name.
contactEmailRequiredstringBusiness email.
supportEmailRequiredstringCustomer support email.
contactPhonestringBusiness phone; optional.
businessCategorystringBusiness category.
fitness · gym · coworking · education · retail · entertainment · healthcare · laundry · other
registeredAddressRequiredstringBusiness address.
authorizedRepresentativeRequiredstringAuthorized representative name.
serviceDescriptionstringDescription of the service.
panRequiredstringValid Indian PAN. Supply actual business details privately.
gstExemptbooleanWhether the business declares a GST exemption.
gstinstringRequired when gstExempt is false.
pincodestringSix-digit PIN code, when supplied.
citystringCity.
statestringState.
websiteUrlstringWebsite URL.
refundPolicyUrlstringPublic refund policy URL.
termsAcceptedbooleanAcceptance of the application terms.

Response fields

FieldTypeDetails
tenantVendorSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/documents

List compliance documents

Lists document metadata for the current owner. Treat filenames and metadata as confidential. This reference does not expose reviewer download or biometric session APIs.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/documents" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
documentsarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/vendor/documents/{kind}

Upload a compliance document

Send multipart/form-data with one file field. Maximum 8 MiB; PDF, PNG or JPEG. Allowed kinds: business_registration, tax_id, pan_card, gst_certificate, authorized_signatory. Uploads are accepted only while the application is in a reviewable state.

Member / owner sessionHTTP 201

Parameters

NameLocationRequirement
kindpathRequired. Resource identifier.

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/vendor/documents/{kind}" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -F "file=@/path/to/business-document.pdf"

Request body

FieldTypeDetails
fileRequiredstringOne PDF, PNG or JPEG up to 8 MiB.

Response fields

FieldTypeDetails
documentobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/vendor/documents/submit

Submit documents for review

Checks required business registration, signatory, PAN/tax and GST documentation. GST evidence depends on the exemption declaration. DOCUMENTS_REQUIRED identifies an incomplete submission. Uploading does not approve the vendor.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/vendor/documents/submit" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
successbooleanSubmission accepted.
messagestringAcknowledgment.
View full machine-readable contract ↗
GET/api/vendor/plans

List plans and checkout URLs

Lists plans for the authenticated vendor, including unpublished plans. A checkout URL in the response does not bypass vendor approval or the active-plan check.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/plans" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
plansarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/vendor/plans

Create a vendor plan

Creates a plan. one_time requires durationDays; monthly defaults to 30 if omitted. Use durations of 1–366 for checkout compatibility. The plan is active only for a production_active vendor. Provider provisioning is configuration-dependent.

Member / owner sessionHTTP 201

Request template

Set the API base to include /api. Replace path placeholders and prepare request.json from the body fields below before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/vendor/plans" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -H "Content-Type: application/json" \
  --data @request.json

Request body

FieldTypeDetails
nameRequiredstringPlan name.
durationDaysintegerPositive duration. Checkout snapshots support 1–366 days.
pricePaiseRequiredintegerAmount in integer INR paise; 100 paise equals INR 1.
billingPeriodstringPlan billing mode. A monthly value does not by itself prove recurring payments are enabled.
one_time · monthly
gstPercentnumberTax percentage recorded for the plan; default in this reference is 18.
taxInclusivebooleanWhether the stated amount includes tax; defaults true.
externalRefstringOptional reference in your ERP.

Example request body

json
{
  "name": "Monthly access",
  "durationDays": 30,
  "pricePaise": 150000,
  "billingPeriod": "one_time",
  "taxInclusive": true
}

Response fields

FieldTypeDetails
planPlanSee the downloadable schema for nested fields.
View full machine-readable contract ↗
PATCH/api/vendor/plans/{planId}

Update or pause a plan

Updates a plan belonging to the owner. Set isActive=false to pause new sales. Publishing again requires approval. Existing purchase snapshots are separate from changes to the current plan.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
planIdpathRequired. Resource identifier.

Request template

Set the API base to include /api. Replace path placeholders and prepare request.json from the body fields below before running.

shell
curl --fail-with-body -X PATCH "$BEXO_API_BASE/vendor/plans/{planId}" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -H "Content-Type: application/json" \
  --data @request.json

Request body

FieldTypeDetails
namestringReplacement name.
durationDaysintegerPositive duration.
pricePaiseintegerAmount in integer INR paise; 100 paise equals INR 1.
gstPercentnumberSee the downloadable schema for nested fields.
taxInclusivebooleanWhether tax is included.
isActivebooleanPublishing requires production_active vendor approval.

Example request body

json
{
  "isActive": false
}

Response fields

FieldTypeDetails
planPlanSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/owner/subscriptions

List recent memberships

Returns up to 100 recent memberships for the vendor, newest first. No pagination is documented for this endpoint. Use reporting endpoints for supported exports.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/owner/subscriptions" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
subscriptionsarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/owner/verifications

List recent verification events

Returns up to 100 recent tenant-scoped events. Each event includes id, membershipId, decision, reason and createdAt.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/owner/verifications" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
eventsarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/terminals

List registered readers

Returns readers for the owner’s tenant. A reader serial identifies the device; it cannot authenticate a request alone.

Member / owner sessionHTTP 200

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/terminals" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
terminalsarraySee the downloadable schema for nested fields.
View full machine-readable contract ↗
POST/api/vendor/terminals

Register a reader

Registers an owner-scoped terminal. Suspended vendors cannot register devices. Serial numbers must be unique; omit serialNumber to receive a generated identifier.

Member / owner sessionHTTP 201

Request template

Set the API base to include /api. Replace path placeholders and prepare request.json from the body fields below before running.

shell
curl --fail-with-body -X POST "$BEXO_API_BASE/vendor/terminals" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -H "Content-Type: application/json" \
  --data @request.json

Request body

FieldTypeDetails
labelstringDevice label, e.g. Reception.
serialNumberstringOptional custom serial. If omitted, the service generates one.
hardwareModelstringHardware model.
firmwareVersionstringFirmware version.

Example request body

json
{
  "label": "Reception"
}

Response fields

FieldTypeDetails
successbooleanCreated.
terminalTerminalSee the downloadable schema for nested fields.
View full machine-readable contract ↗
PATCH/api/vendor/terminals/{terminalId}

Update a reader

Updates a terminal owned by the authenticated vendor. Returned status and revocation state should be reviewed before using a reader.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
terminalIdpathRequired. Resource identifier.

Request template

Set the API base to include /api. Replace path placeholders and prepare request.json from the body fields below before running.

shell
curl --fail-with-body -X PATCH "$BEXO_API_BASE/vendor/terminals/{terminalId}" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN" \
  -H "Content-Type: application/json" \
  --data @request.json

Request body

FieldTypeDetails
labelstringDevice label.
statusstringRequested state.
active · offline · suspended · revoked
hardwareModelstringDevice model.

Response fields

FieldTypeDetails
successbooleanUpdated.
terminalTerminalSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/api-logs

Read paginated device logs

Returns masked card identifiers, operational decisions, timing and usage fields. Do not treat masked identifiers as credentials or access proof.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
pagequeryinteger
limitqueryinteger
terminalIdquerystring
decisionquerystring · allow, deny, error

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/api-logs" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
logsarraySee the downloadable schema for nested fields.
paginationobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/reports/subscribers

Export subscribers

Membership records and total/active/grace/expired counts. Supports search and status filters. JSON is default; format=csv exports the report. Private account data. Keep it out of public pages, analytics events and application logs.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
rangequeryPreset reporting period. Presets take precedence over custom dates. · today, last_7_days, last_30_days, this_month
startDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
endDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
formatquerycsv returns text/csv; otherwise JSON. · json, csv

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/reports/subscribers" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
subscribersarraySee the downloadable schema for nested fields.
summaryobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/reports/financial-revenue

Export financial revenue

Transaction and gross/commission/net summary fields. These are application reports, not proof of provider settlement or bank reconciliation. JSON is default; format=csv exports the report. Private account data. Keep it out of public pages, analytics events and application logs.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
rangequeryPreset reporting period. Presets take precedence over custom dates. · today, last_7_days, last_30_days, this_month
startDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
endDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
formatquerycsv returns text/csv; otherwise JSON. · json, csv

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/reports/financial-revenue" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
transactionsarraySee the downloadable schema for nested fields.
summaryobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/reports/terminal-verifications

Export terminal verifications

Recorded verification events and operational usage summaries. JSON is default; format=csv exports the report. Private account data. Keep it out of public pages, analytics events and application logs.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
rangequeryPreset reporting period. Presets take precedence over custom dates. · today, last_7_days, last_30_days, this_month
startDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
endDatequeryCustom date boundary when a preset is not used. Confirm timezone assumptions for reconciliation.
formatquerycsv returns text/csv; otherwise JSON. · json, csv

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/reports/terminal-verifications" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
logsarraySee the downloadable schema for nested fields.
summaryobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
GET/api/vendor/reports/metered-billing

Export metered billing

Recorded usage statements plus tenantDetails, platformDetails and summary. Confirm your contractual billing terms independently of display defaults. JSON is default; format=csv exports the report. Private account data. Keep it out of public pages, analytics events and application logs.

Member / owner sessionHTTP 200

Parameters

NameLocationRequirement
formatquerycsv returns text/csv; otherwise JSON. · json, csv

Request template

Set the API base to include /api. Replace path placeholders before running.

shell
curl --fail-with-body -X GET "$BEXO_API_BASE/vendor/reports/metered-billing" \
  -H "Authorization: Bearer $BEXO_MEMBER_TOKEN"

Response fields

FieldTypeDetails
statementsarraySee the downloadable schema for nested fields.
summaryobjectSee the downloadable schema for nested fields.
View full machine-readable contract ↗
Build with a clear contract.

Configuration, approval and deployed behavior determine availability. Validate your own integration before release.

Review the launch checklist ↗

Reference source: b93a4d3 · Examples use synthetic data.