openapi: 3.2.0
info:
title: Transaction Transaction API API
description: The <b>Transaction APIs</b> enable external enterprise customers to <b>ingest and retrieve transaction ledger records</b> within the <b>73 Strings platform</b>.<br><br>These APIs are intended for <b>client-side engineering teams</b> that manage their own data pipelines and require a <b>controlled, structured interface</b> to push transaction data into the platform or retrieve processed transaction information for downstream workflows.<br><br><b>Key capabilities</b><ul><li>Bulk creation and update of transaction ledger records</li><li>Platform-generated <b>Display IDs</b> for stable referencing across workflows</li><li>Retrieval of processed transaction data</li><li>Reference APIs for <b>transaction types</b> and <b>transaction versions</b> to ensure payload correctness</li><li>Partial success handling for bulk ingestion</li></ul><b>Authentication & data scoping</b><ul><li>All APIs are authenticated using a <b>subscription key</b> associated with a <b>User ID</b></li><li><b>Organization ID</b> and <b>User ID</b> are mandatory in request payloads and determine data access</li><li>APIs are multi-tenant by design and return data scoped to the provided organization</li></ul><b>Processing model</b><ul><li>Transactions are pushed via external pipelines (real-time or batch)</li><li>The platform persists and processes the data as per supported transaction structures</li><li>The APIs do not orchestrate synchronization or enforce real-time guarantees</li></ul>
contact:
name: ''
email: support@73strings.com
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
version: '1.0'
servers:
- url: https://api-accord-eut-73strings.azure-api.net/transactions
security:
- {}
- apiKeyHeader: []
- apiKeyQuery: []
tags:
- name: Transaction API
description: The <b>Transaction APIs</b> enable external enterprise customers to <b>ingest and retrieve transaction ledger records</b> within the <b>73 Strings platform</b>.<br><br>These APIs are intended for <b>client-side engineering teams</b> that manage their own data pipelines and require a <b>controlled, structured interface</b> to push transaction data into the platform or retrieve processed transaction information for downstream workflows.<br><br><b>Key capabilities</b><ul><li>Bulk creation and update of transaction ledger records</li><li>Platform-generated <b>Display IDs</b> for stable referencing across workflows</li><li>Retrieval of processed transaction data</li><li>Reference APIs for <b>transaction types</b> and <b>transaction versions</b> to ensure payload correctness</li><li>Partial success handling for bulk ingestion</li></ul><b>Authentication & data scoping</b><ul><li>All APIs are authenticated using a <b>subscription key</b> associated with a <b>User ID</b></li><li><b>Organization ID</b> and <b>User ID</b> are mandatory in request payloads and determine data access</li><li>APIs are multi-tenant by design and return data scoped to the provided organization</li></ul><b>Processing model</b><ul><li>Transactions are pushed via external pipelines (real-time or batch)</li><li>The platform persists and processes the data as per supported transaction structures</li><li>The APIs do not orchestrate synchronization or enforce real-time guarantees</li></ul>
paths:
/api/v2/unifiedTransaction:
post:
operationId: unifiedTransaction-v2
summary: Create or update transactions in bulk (V2)
tags:
- Transaction API
description: Use this endpoint to submit one or more transaction records to the 73 Strings platform in a single JSON request. Each object in <b>TransactionData</b> is validated and processed independently, so a failure for one object does not automatically prevent other valid objects in the same request from being saved.<br><br><b>How create and update are resolved</b><ul><li>The platform uses <b>multilayeredTransactionMetadata.externalTransactionSourceReferenceId</b> together with the transaction-level <b>asOfDate</b> to decide how each object is processed.</li><li>If <b>externalTransactionSourceReferenceId</b> is new or not provided, the platform creates a new transaction and generates an internal <b>displayId</b>.</li><li>If the same <b>externalTransactionSourceReferenceId</b> and the same <b>asOfDate</b> already exist, the existing as-of-date record is fully replaced by the submitted object. This is a full overwrite, not a merge or patch.</li><li>If the same <b>externalTransactionSourceReferenceId</b> exists with a different <b>asOfDate</b>, the platform creates a new time-series instance under the same logical transaction.</li><li>Do not send <b>displayId</b> in the request. It is generated and managed by the platform. Use a stable <b>externalTransactionSourceReferenceId</b> for transactions that may need to be updated later.</li></ul><b>Request limits and validation</b><ul><li>A request can include up to <b>2,000</b> transaction objects and must not exceed <b>5 MB</b>.</li><li><b>orgId</b> and <b>userId</b> must be authorized for the supplied subscription key.</li><li><b>TransactionData</b> is required and must contain at least one object.</li><li>Dates must use <b>YYYY-MM-DD</b> format. Currency codes must use ISO 4217 three-letter codes, and currency-unit values are case-sensitive.</li><li>Conditional field groups must be sent completely or omitted completely. For example, local amount fields, reporting amount fields, post-money valuation fields, and security fields should not be partially populated.</li><li>The same <b>externalTransactionSourceReferenceId</b> plus the same <b>asOfDate</b> must not appear more than once in a single request because the platform cannot determine which object should take precedence.</li></ul><b>Response behavior</b><ul><li><b>200 OK</b> means all submitted transaction objects were processed successfully.</li><li><b>207 Multi-Status</b> means at least one object succeeded and at least one object failed validation. Successfully processed objects are saved and are not rolled back; correct and resubmit only the failed objects.</li><li>If every submitted object fails validation, the response indicates validation failure and no object from that request is saved.</li><li>If a timeout response is received, verify transaction state before retrying. The server may have processed some or all records before the timeout was returned.</li></ul>
parameters:
- name: subscription-key
in: header
required: true
description: Subscription key used to authenticate the request. The key must be valid for the orgId and userId supplied in the request body.
schema:
type: string
- name: Content-Type
in: header
required: true
description: Required request content type. Send <b>application/json</b>.
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UnifiedTransactionV2ReqDTO'
examples:
default:
value:
userId: xxxxe74-bbd3-4fd4-9e2a-0a73173xxxx
orgId: xxxxxbd1-22d2-4e70-9e66-64215axxxxx
TransactionData:
- transactionTypeId: xxxxxxx-3856-4f85-b7f0-0dccfxxxxxxx
transactionDate: '2025-11-22'
versionId: xxxxxxx49-8caf-4394-b39c-a3671fxxxxxx
baseCurrency: INR
baseCurrencyUnit: Lakhs
amount: 1001
asOfDate: '2025-12-31'
localCurrency: USD
localCurrencyUnit: Actual
localAmount: 3000
multilayeredTransactionMetadata:
remarks: API pushed transaction
securityType: CREDIT
securityId: xxxxxx48-452c-4767-97e2-1bf7c16xxxx
externalTransactionSourceReferenceId: ref_2
pps: 10.04
postMoneyValuation: '29404.429'
postMoneyValuationCurrency: USD
postMoneyValuationCurrencyUnit: Millions
ownershipPercentage: 90.2242
externalInvestmentEntityId: CEN02570
externalSecurityId: CEN003100
shareCount: 10
vehicleName: SPV-1
externalOwnerEntityId: samplePS
ownerEntityMappings:
- ownerEntityId: xxxxxb8b-7907-42c5-b95d-8fb728axxxxx
investmentEntityId: xxxxx7ed-8015-4837-8f55-d96d82xxxxx
reportingAmount: 2500
reportingCurrency: USD
reportingCurrencyUnit: Actual
description: JSON payload containing the organization, user, and transaction objects to create or update. <b>orgId</b> and <b>userId</b> are validated against the subscription key. <b>TransactionData</b> must contain 1 to 2,000 objects, and the total request payload must not exceed 5 MB.
responses:
'200':
description: All submitted transaction objects were validated and processed successfully. The response includes the total number of submitted objects, the number of invalid objects, and a validity flag.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionProcessResponse'
examples:
Success Example:
description: Success Example
value:
response:
totalRecordsCount: 2
invalidEntriesCount: 0
valid: true
success: true
message: All transactions processed successfully.
'207':
description: Partial success. At least one transaction object was processed successfully and at least one object failed validation. Successful objects are persisted; inspect failedTransactions, correct those objects, and resubmit only the failed records.
content:
application/json:
examples:
Partial Success Example:
description: Example showing some transactions failed while others succeeded
value:
response:
failedTransactions:
- transactionDate: '2025-11-21'
transactionTypeId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
versionId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
baseCurrency: USD
amount: 500
investmentEntityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
asOfDate: '2025-11-13'
multilayeredTransactionMetadata:
externalTransactionSourceReferenceId: XX - transactions 1
securityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
errors:
- field: BaseCurrencyUnit
error: Please add a valid base currency unit
ownerEntityCount: 3
ownerEntityPathwayRepresentation: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ownerEntityNamePathwayRepresentation: null / null / null
totalRecordsCount: 2
invalidEntriesCount: 1
valid: false
success: true
'400':
description: Bad request. The request body is malformed, required top-level fields are missing, TransactionData is empty, or the payload does not conform to the expected JSON structure. No transaction objects are processed for malformed request-level failures.
content:
application/json:
examples:
Bad Request Example:
description: Bad Request Example
value:
response: []
success: false
message: Invalid request parameters.
errorCode: EXCE00028
Required Fields Can't Be Null Or Empty Example:
description: Required Fields Can't Be Null Or Empty Example
value:
response: []
success: false
message: Fields cannot be null or empty..
errorCode: EXCE00020
'401':
description: Unauthorized request. The subscription key is missing, invalid, expired, or not authorized for the orgId and userId supplied in the request body.
content:
application/json:
examples:
Invalid Subscription key Example:
description: Invalid Subscription key Example
value:
statusCode: 401
message: Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription.
'404':
description: Not found. The endpoint path is incorrect, the API version is unavailable, or a referenced resource cannot be found.
content:
application/json:
examples:
Resource Not Found Example:
description: Example when a requested resource does not exist
value:
statusCode: 404
message: Resource not found
'422':
description: Validation failure for the submitted transaction objects. The response identifies the failed objects and field-level errors. Correct the reported issues before resubmitting.
content:
application/json:
examples:
Validation Error Example:
description: Example when all submitted transaction objects fail validation
value:
response:
failedTransactions:
- transactionDate: '2025-11-16'
transactionTypeId: c0292085-1818-460f-94d3-f92079326358
versionId: 9c78a3b4-0f37-4de0-a289-d52bc04f3615
baseCurrencyUnit: Lakhs
amount: 50
investmentEntityId: 64f1db13-91cc-46be-85f1-a963cec04899
asOfDate: '2025-11-10'
multilayeredTransactionMetadata:
externalTransactionSourceReferenceId: EY - transactions 1
securityId: 2601e54d-b5ea-4178-9b19-3b5551f1de7e
securityType: CREDIT
errors:
- field: BaseCurrency
error: Please select a valid base currency
totalRecordsCount: 1
invalidEntriesCount: 1
valid: false
success: false
errorCode: VALIDATION_ERROR
'429':
description: Too many requests. The organization has exceeded the allowed request concurrency or rate limit. Retry after the indicated interval, if provided.
content:
application/json:
examples:
Too Many Requests Example:
description: Example when request concurrency limit is exceeded
value:
statusCode: 429
message: Too many requests. Please retry after the indicated interval.
'500':
description: Internal server error. The request could not be completed because of an unexpected server-side failure. Retry later or contact support if the issue persists.
content:
application/json:
examples:
Internal Server Error Example:
description: Internal Server Error Example
value:
statusCode: 500
message: Internal server error. Please try again later or contact support.
'504':
description: Gateway timeout. Processing state is indeterminate; some, all, or none of the submitted objects may have been processed. Verify transaction state before resubmitting to avoid duplicates.
content:
application/json:
examples:
Gateway Timeout Example:
description: Example when processing exceeds the gateway timeout
value:
statusCode: 504
message: Gateway timeout. Verify processing state before retrying.
/api/v1/unifiedTransaction:
post:
operationId: unifiedTransaction
summary: Create/Update Transaction
tags:
- Transaction API
description: The <b>Create Multiple Transactions API</b> allows users to upload multiple transaction records within the <b>73Strings Transaction Product</b> in a single request.<br><br>It supports bulk creation of financial transaction entries such as <b>Investments</b>, <b>Realizations</b>, <b>Valuations</b>, and <b>Fees</b>, with each record tied to an entity, version, and transaction type.<br><br><b>Key capabilities</b><ul><li>Supports bulk creation of multiple financial transactions in a single API call</li><li>Validates transaction data at an individual record level</li><li>Ensures consistency in financial reporting and cross-system integrations</li></ul><b>Partial success handling</b><ul><li>Returns a <b>207 Multi-Status</b> response when some records are successfully processed</li><li>Provides detailed validation errors for records that fail processing</li></ul
parameters:
- name: subscription-key
in: header
required: true
description: A unique key that allows you to access and use an API
schema:
type: string
- name: Content-Type
in: header
required: true
description: <b>Content-Type</b> is a required request header.<br><br><ul><li>Defines the data format being sent</li><li>The value must be <b>application/json</b></li></ul>
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UnifiedTransactionReqDTO'
examples:
default:
value:
userId: 04156bbe-90c8-4bd2-9c6a-e783a70eda14
orgId: 7c72ed3a-c264-4f61-adee-c1bd4856a5cc
TransactionData:
- transactionTypeId: 402079b7-93cf-435d-9080-151c4594920d
transactionDate: '2022-09-30'
versionId: d3d605b2-2705-469c-89c0-1930497ec856
baseCurrency: GBP
baseCurrencyUnit: Actual
amount: 888.41
asOfDate: '2022-09-30'
localCurrency: USD
localCurrencyUnit: Millions
localAmount: 234.24
reportingAmount: 93.234
reportingCurrency: USD
reportingCurrencyUnit: Millions
ownerEntityMappings:
- ownerEntityId: da17e9ae-a0f8-47e0-a30e-8b8b67c2ca2f
investmentEntityId: b8a58ce2-50d3-4e01-9b4e-125c98068279
multilayeredTransactionMetadata:
remarks: API pushed transaction
securityType: EQUITY
securityId: c5aa7714-9383-4f9f-86bd-a671d6ec69ca
externalTransactionSourceReferenceId: External Fund A Transaction CEN0004
externalInvestmentEntityId: Company 1 Ltd
vehicleName: Vehicle 1
postMoneyValuation: 234.24
postMoneyValuationCurrency: USD
postMoneyValuationCurrencyUnit: Millions
externalSecurityId: CEN089238
externalOwnerEntityId: CEN0280
pps: 24.24
shareCount: 145
ownershipPercentage: 234.24
description: Request Parameters Table.
responses:
'200':
description: Successful creation or update of transaction.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionProcessResponse'
examples:
Success Example:
description: Success Example
value:
response:
totalRecordsCount: 2
invalidEntriesCount: 0
valid: true
success: true
message: All transactions processed successfully.
'202':
description: Request accepted for processing, but not yet completed.
content:
application/json:
examples:
Accepted Example:
description: Accepted Example
value:
response: []
success: true
message: Request accepted and is being processed.
errorCode: null
'207':
description: Multi-Status - Partial success with some failed transactions
content:
application/json:
examples:
Partial Success Example:
description: Example showing some transactions failed while others succeeded
value:
response:
failedTransactions:
- transactionDate: '2025-11-21'
transactionTypeId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
versionId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
baseCurrency: USD
amount: 500
investmentEntityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
asOfDate: '2025-11-13'
multilayeredTransactionMetadata:
externalTransactionSourceReferenceId: XX - transactions 1
securityId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
errors:
- field: BaseCurrencyUnit
error: Please add a valid base currency unit
ownerEntityCount: 3
ownerEntityPathwayRepresentation: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ownerEntityNamePathwayRepresentation: null / null / null
totalRecordsCount: 2
invalidEntriesCount: 1
valid: false
success: true
'400':
description: Invalid input, missing parameters.
content:
application/json:
examples:
Bad Request Example:
description: Bad Request Example
value:
response: []
success: false
message: Invalid request parameters.
errorCode: EXCE00028
Required Fields Can't Be Null Or Empty Example:
description: Required Fields Can't Be Null Or Empty Example
value:
response: []
success: false
message: Fields cannot be null or empty..
errorCode: EXCE00020
'401':
description: Invalid or missing Subscription key.
content:
application/json:
examples:
Invalid Subscription key Example:
description: Invalid Subscription key Example
value:
statusCode: 401
message: Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription.
'404':
description: Resource not found
content:
application/json:
examples:
Resource Not Found Example:
description: Example when a requested resource does not exist
value:
statusCode: 404
message: Resource not found
'500':
description: Internal server error.
content:
application/json:
examples:
Internal Server Error Example:
description: Internal Server Error Example
value:
statusCode: 500
message: Internal server error. Please try again later or contact support.
/api/v1/transactionData:
post:
operationId: getTransactionData
summary: Get Transaction Data
tags:
- Transaction API
description: Retrieves transaction data with pagination support. Supports filtering, sorting, and as-of-date settings for comprehensive transaction data retrieval.
parameters:
- name: pageNo
in: query
required: false
description: Page number for pagination (zero-based)
schema:
type: integer
- name: pageSize
in: query
required: false
description: Number of records per page
schema:
type: integer
- name: subscription-key
in: header
required: true
description: A unique key that allows you to access and use an API
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionDataReqDTO'
examples:
default:
value:
userId: 0ea63bb5-47c6-4590-9fc2-52fc180d6e8f
orgId: 214fa428-0f39-4c06-9343-d0c51c9b4e34
filters: []
sortList:
- field: lastModifiedDate
direction: desc
asOfDateSettings: LATEST
description: Request payload containing userId, orgId, filters, sort criteria, and as-of-date settings for retrieving transaction data.
responses:
'200':
description: Successful retrieval of transaction data.
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionDataResDTO'
examples:
Success Example:
description: Success Example
value:
response:
content:
- id: 0ed17793-17d6-4867-af3c-ebca183cb22d
displayId: 7789999
transactionDate: '2025-09-08'
transactionTypeId: 389c4d13-d974-4764-89cb-6bd8013303d3
versionId: 0454b6bb-ea69-4dc0-9c45-a4e34849e71d
baseCurrency: GBP
baseCurrencyUnit: Millions
amount: 25
amountTotal: 25000000
ownerEntityMappings:
- ownerEntityId: 987dd768-8b80-4d5b-b9a8-af6eb3321102
ownerEntityName: ADCF 123
investmentEntityId: ae43ae8f-5fa8-46fa-b8b1-7482e45ff1d7
asOfDate: '2025-09-08'
localAmount: 0
localAmountTotal: 0
localCurrency: SAR
localCurrencyUnit: Actual
multilayeredTransactionMetadata:
externalTransactionSourceReferenceId: qwerty1234567
securityId: null
securityType: null
externalSecurityId: null
externalInvestmentEntityId: null
ownershipPercentage: null
shareCount: null
pps: null
postMoneyValuation: null
postMoneyValuationCurrency: null
postMoneyValuationCurrencyUnit: null
remarks: null
source: null
vehicleName: null
externalOwnerEntityId: null
securityName: null
createdBy: Dev API Integration
createdDate: '2025-09-09T04:59:07Z'
lastModifiedBy: Dev API Integration
lastModifiedDate: '2025-09-09T05:00:07Z'
transactionTypeName: Additional Investment
versionName: Actuals
investmentEntityName: ADCF_Rollover_Testing
valueCarryover: null
orgId: null
ownerEntityPath: null
reportingCurrency: null
reportingCurrencyUnit: Actual
reportingAmount: null
preferredCurrency: BASE
fxRateDate: null
errors: []
ownerEntityPathwayRepresentation: 987dd768-8b80-4d5b-b9a8-af6eb3321102
ownerEntityCount: 1
ownerEntityNamePathwayRepresentation: ADCF 123
pageNo: 0
pageSize: 21
totalElements: 13
totalPages: 0
success: true
message: Success
errorCode: null
'404':
description: Resource not found
content:
application/json:
examples:
Resource Not Found Example:
description: Example when a requested resource does not exist
value:
statusCode: 404
message: Resource not found
/api/v1/transactionType:
post:
operationId: getTransactionTypes
summary: Get Transaction Types
tags:
- Transaction API
description: This API retrieves a list of transaction types configured in the Transaction Product of the 73Strings platform.<br><br>It allows clients to fetch transaction type metadata such as ID, name, category, description, and configuration details.<br><br><b>Key details</b><ul><li>The response supports filtering, sorting, and pagination to optimize data retrieval for different organizational setups.</li><li>This API is primarily used when clients need to populate dropdowns, map transaction categories, or validate transaction type references before creating transaction data.</li></ul>
parameters:
- name: pageNo
in: query
required: false
description: Page number to retrieve (0-indexed). Controls which batch of results is fetched.
schema:
type: integer
- name: pageSize
in: query
required: false
description: Number of records to return per page. Optimizes data retrieval for large lists.
schema:
type: integer
- name: subscription-key
in: header
required: true
description: A unique key that allows you to access and use an API
schema:
type: string
- name: Content-Type
in: header
required: true
description: <b>Content-Type</b> is a required request header.<br><br><ul><li>Defines the data format being sent</li><li>The value must be <b>application/json</b></li></ul>
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionTypeReqDTO'
examples:
default:
value:
userId: 0ea63bb5-47c6-4590-9fc2-52fc180d6e8f
orgId: 214fa428-0f39-4c06-9343-d0c51c9b4
# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/73-strings/refs/heads/main/openapi/73-strings-transaction-api-api-openapi.yml