openapi: 3.0.3 info: title: 'CRM API Documentation' description: '' version: 1.0.0 servers: - url: 'https://api.reallysimplesystems.com' tags: - name: 'Records Management' description: '' - name: 'Insights Management' description: '' - name: 'Digital Activities Management' description: '' - name: 'Document Management' description: '' - name: 'Field Management' description: 'Please note: the /api/datadictionary route is for legacy purposes, and the /api/fields route should be used going forwards.' - name: Lookups description: 'Endpoints related to lookups' - name: 'User Info' description: '' components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: [] paths: '/api/{objectNames}': get: summary: 'Fetch a paginated list of records' operationId: fetchAPaginatedListOfRecords description: 'Retrieves a paginated list of records for the specified object type. Supports filtering parameters.' parameters: - in: query name: limit description: 'The number of records per page. Defaults to 20.' example: 20 required: false schema: type: integer description: 'The number of records per page. Defaults to 20.' example: 20 - in: query name: page description: 'The page number to retrieve. Defaults to the first page.' example: 1 required: false schema: type: integer description: 'The page number to retrieve. Defaults to the first page.' example: 1 - in: query name: order description: 'A JSON object specifying the fields to order by and their direction (`asc` or `desc`). Each key is a field name, and the value is the sort direction. Example: `{"name": "asc", "created_at": "desc"}`. Field names are case-insensitive.' example: null required: false schema: type: object description: 'A JSON object specifying the fields to order by and their direction (`asc` or `desc`). Each key is a field name, and the value is the sort direction. Example: `{"name": "asc", "created_at": "desc"}`. Field names are case-insensitive.' example: null properties: {} - in: query name: q description: "A JSON object specifying filters for the records. Example: `?q={“name”: “Test”}` or `?q={“name”: “Test”, “sector”: “Design”}`. The query allows using fields and operators for complex queries. Below are the supported operators and their usage:\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
OperatorDescriptionExample
$notNegation logical operator{\"field\": {\"$not\": val}}
$inMatch any value in array{\"field\": {\"$in\": [value1, value2, ...]}}
$ninNot match any value in array{\"field\": {\"$nin\": [value1, value2, ...]}}
$orLogic operator{\"$or\": [{\"field\": value}, {\"field\": value}]}
$gtGreater than{\"field\": {\"$gt\": 1000}}
$gteGreater than or equal{\"field\": {\"$gte\": 1000}}
$ltLess than{\"field\": {\"$lt\": 1000}}
$lteLess than or equal{\"field\": {\"$lte\": 1000}}
$btBetween value1 and value2 inclusive{\"field\": {\"$bt\": [1000, 2000]}}
$swStarts with{\"field\": {\"$sw\": \"tes\"}}
$ewEnds with{\"field\": {\"$ew\": \"tes\"}}
$conContains{\"field\": {\"$con\": \"tes\"}}
" example: null required: false schema: type: object description: "A JSON object specifying filters for the records. Example: `?q={“name”: “Test”}` or `?q={“name”: “Test”, “sector”: “Design”}`. The query allows using fields and operators for complex queries. Below are the supported operators and their usage:\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
OperatorDescriptionExample
$notNegation logical operator{\"field\": {\"$not\": val}}
$inMatch any value in array{\"field\": {\"$in\": [value1, value2, ...]}}
$ninNot match any value in array{\"field\": {\"$nin\": [value1, value2, ...]}}
$orLogic operator{\"$or\": [{\"field\": value}, {\"field\": value}]}
$gtGreater than{\"field\": {\"$gt\": 1000}}
$gteGreater than or equal{\"field\": {\"$gte\": 1000}}
$ltLess than{\"field\": {\"$lt\": 1000}}
$lteLess than or equal{\"field\": {\"$lte\": 1000}}
$btBetween value1 and value2 inclusive{\"field\": {\"$bt\": [1000, 2000]}}
$swStarts with{\"field\": {\"$sw\": \"tes\"}}
$ewEnds with{\"field\": {\"$ew\": \"tes\"}}
$conContains{\"field\": {\"$con\": \"tes\"}}
" example: null properties: {} - in: query name: include description: 'The name of child objects to include with the record data. This allows you to get child record data with the parent, instead of making a separate request to the child route' example: contacts required: false schema: type: string description: 'The name of child objects to include with the record data. This allows you to get child record data with the parent, instead of making a separate request to the child route' example: contacts responses: 200: description: 'Successful response containing the list of records.' content: application/json: schema: type: object example: data: metadata: url: 'http://api.example.com/api/accounts' object_type: list total_count: 100 has_more: true list: - metadata: url: 'http://api.example.com/api/account/1' list_url: 'http://api.example.com/api/accounts' parent: null object_type: record record_type: account record: id: 1 name: 'Example Account' created_at: '2024-11-08T00:00:00.000000Z' updated_at: '2024-11-08T00:00:00.000000Z' links: first: 'http://api.example.com/api/accounts?page=1' last: 'http://api.example.com/api/accounts?page=5' prev: null next: 'http://api.example.com/api/accounts?page=2' meta: current_page: 1 from: 1 last_page: 5 path: 'http://api.example.com/api/accounts' per_page: 20 to: 20 total: 100 properties: data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/accounts' object_type: type: string example: list total_count: type: integer example: 100 has_more: type: boolean example: true list: type: array example: - metadata: url: 'http://api.example.com/api/account/1' list_url: 'http://api.example.com/api/accounts' parent: null object_type: record record_type: account record: id: 1 name: 'Example Account' created_at: '2024-11-08T00:00:00.000000Z' updated_at: '2024-11-08T00:00:00.000000Z' items: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/account/1' list_url: type: string example: 'http://api.example.com/api/accounts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: account record: type: object properties: id: type: integer example: 1 name: type: string example: 'Example Account' created_at: type: string example: '2024-11-08T00:00:00.000000Z' updated_at: type: string example: '2024-11-08T00:00:00.000000Z' links: type: object properties: first: type: string example: 'http://api.example.com/api/accounts?page=1' last: type: string example: 'http://api.example.com/api/accounts?page=5' prev: type: string example: null nullable: true next: type: string example: 'http://api.example.com/api/accounts?page=2' meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 5 path: type: string example: 'http://api.example.com/api/accounts' per_page: type: integer example: 20 to: type: integer example: 20 total: type: integer example: 100 400: description: '' content: application/json: schema: oneOf: - description: 'An incorrect order direction is submitted' type: object example: code: 400 message: 'Order direction must be "asc" or "desc"' properties: code: type: integer example: 400 message: type: string example: 'Order direction must be "asc" or "desc"' - description: 'Invalid operator or filter format.' type: object example: code: 400 message: 'Invalid operator ($invalid).' properties: code: type: integer example: 400 message: type: string example: 'Invalid operator ($invalid).' 404: description: '' content: application/json: schema: oneOf: - description: 'An invalid order field is submitted or Field not found' type: object example: code: 404 message: 'Field not found (invalid-field)' properties: code: type: integer example: 404 message: type: string example: 'Field not found (invalid-field)' - description: 'The specified object type could not be found or is invalid.' type: object example: status: error message: 'Object not found' properties: status: type: string example: error message: type: string example: 'Object not found' 500: description: 'An unexpected error has occurred' content: application/json: schema: type: object example: code: 500 message: 'There was an unexpected error with the API, please try again or contact support.' properties: code: type: integer example: 500 message: type: string example: 'There was an unexpected error with the API, please try again or contact support.' tags: - 'Records Management' parameters: - in: path name: objectNames description: 'The plural name of the object to fetch records for (e.g., accounts, contacts).' example: accounts required: true schema: type: string '/api/{objectName}/{recordId}/{childObjectName}': get: summary: 'Fetch a single record with optional child records' operationId: fetchASingleRecordWithOptionalChildRecords description: 'Retrieves a specific record by its ID. Optionally, fetches related child records for the specified parent record.' parameters: - in: query name: limit description: 'The number of child records per page. Defaults to 20.' example: 20 required: false schema: type: integer description: 'The number of child records per page. Defaults to 20.' example: 20 - in: query name: page description: 'The page number to retrieve child records. Defaults to the first page.' example: 1 required: false schema: type: integer description: 'The page number to retrieve child records. Defaults to the first page.' example: 1 - in: query name: order description: 'A JSON object specifying the fields to order child records by and their direction (`asc` or `desc`). Each key is a field name, and the value is the sort direction. Example: `{"name": "asc", "created_at": "desc"}`. Field names are case-insensitive.' example: null required: false schema: type: object description: 'A JSON object specifying the fields to order child records by and their direction (`asc` or `desc`). Each key is a field name, and the value is the sort direction. Example: `{"name": "asc", "created_at": "desc"}`. Field names are case-insensitive.' example: null properties: {} - in: query name: q description: 'A JSON object specifying filters for child records. Example: `?q={“name”: “Test”}` or `?q={“name”: “Test”, “sector”: “Design”}`.' example: null required: false schema: type: object description: 'A JSON object specifying filters for child records. Example: `?q={“name”: “Test”}` or `?q={“name”: “Test”, “sector”: “Design”}`.' example: null properties: {} responses: 200: description: 'Successful response containing the parent record or a paginated list of child records.' content: application/json: schema: type: object example: data: metadata: url: 'http://api.example.com/api/account/1' list_url: 'http://api.example.com/api/accounts' parent: null object_type: record record_type: account record: id: 1 name: 'Example Account' created_at: '2024-11-08T00:00:00.000000Z' updated_at: '2024-11-08T00:00:00.000000Z' children: contacts: object_type: list record_type: contact url: /accounts/1/contacts total_count: 5 activities: object_type: list record_type: activity url: /accounts/1/activities total_count: 3 properties: data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/account/1' list_url: type: string example: 'http://api.example.com/api/accounts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: account record: type: object properties: id: type: integer example: 1 name: type: string example: 'Example Account' created_at: type: string example: '2024-11-08T00:00:00.000000Z' updated_at: type: string example: '2024-11-08T00:00:00.000000Z' children: type: object properties: contacts: type: object properties: object_type: type: string example: list record_type: type: string example: contact url: type: string example: /accounts/1/contacts total_count: type: integer example: 5 activities: type: object properties: object_type: type: string example: list record_type: type: string example: activity url: type: string example: /accounts/1/activities total_count: type: integer example: 3 400: description: 'An invalid query parameter or filter format is submitted.' content: application/json: schema: type: object example: code: 400 message: 'Invalid operator ($invalid).' properties: code: type: integer example: 400 message: type: string example: 'Invalid operator ($invalid).' 404: description: 'The specified parent or child object could not be found.' content: application/json: schema: type: object example: status: error message: 'Record not found' properties: status: type: string example: error message: type: string example: 'Record not found' 500: description: 'An unexpected error occurred.' content: application/json: schema: type: object example: code: 500 message: 'There was an unexpected error with the API. Please try again or contact support.' properties: code: type: integer example: 500 message: type: string example: 'There was an unexpected error with the API. Please try again or contact support.' tags: - 'Records Management' parameters: - in: path name: objectName description: 'The singular name of the parent object to fetch the record for (e.g., account).' example: account required: true schema: type: string - in: path name: recordId description: 'The ID of the record to fetch.' example: 1 required: true schema: type: string - in: path name: childObjectName description: 'Optional parameter. The plural name of the child object to fetch records for (e.g., contacts). If provided, fetches all child records for the parent record.' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: contacts '/api/{objectNames}/{recordId}/{childObjectName}': post: summary: 'Create a new record' operationId: createANewRecord description: "Creates a new record for the specified object type.\n\nYou can also create one or more child records in the same request, in either of two ways:\n\n1. **Nest the child in the request body** — alongside the parent's fields, include a key named after the child object (its singular name, e.g. `contact`) whose value is an object of that child's fields. The parent link field is populated automatically, and each nested child is validated alongside the parent. For example, a `POST /api/accounts` body of `{\"Name\": \"Acme\", \"contact\": {\"First\": \"Jane\", \"Last\": \"Doe\", \"email\": \"jane@acme.com\"}}` creates the account and its contact in a single request. Several different child objects may be nested at once.\n\n2. **Address the parent in the URL** — `POST /api/{objectNames}/{recordId}/{childObjectName}` (e.g. `/api/accounts/95/contacts`) creates a child record under an existing parent record.\n\nWhen nested children are supplied, any child validation failure returns a `422` with the errors keyed by the child object name, and no records are persisted." parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: status: success message: 'Contact created successfully.' data: metadata: url: 'https://local.reallysimplesystems.com/api/contact/1' list_url: 'https://local.reallysimplesystems.com/api/contacts' parent: null object_type: record record_type: contact record: salutation: Mr accountid: '95' first: 'Test Contact API' last: Test email: test@test.com properties: status: type: string example: success message: type: string example: 'Contact created successfully.' data: type: object properties: metadata: type: object properties: url: type: string example: 'https://local.reallysimplesystems.com/api/contact/1' list_url: type: string example: 'https://local.reallysimplesystems.com/api/contacts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: contact record: type: object properties: salutation: type: string example: Mr accountid: type: string example: '95' first: type: string example: 'Test Contact API' last: type: string example: Test email: type: string example: test@test.com 404: description: '' content: application/json: schema: type: object example: status: error message: 'Failed to create record' properties: status: type: string example: error message: type: string example: 'Failed to create record' 422: description: '' content: application/json: schema: type: object example: status: error message: 'Duplicate records found.' duplicates: - id: 136 displayName: 'Test Contact API' properties: status: type: string example: error message: type: string example: 'Duplicate records found.' duplicates: type: array example: - id: 136 displayName: 'Test Contact API' items: type: object properties: id: type: integer example: 136 displayName: type: string example: 'Test Contact API' tags: - 'Records Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: string description: 'The record data to be created, as a flat object of field names and values.' example: '{"salutation": "Mr", "first": "Test Contact API", "last": "Test", "email": "test@example.com", "accountid": 95}' '{childObject}': type: object description: "Optional. To create a child record together with the parent, include a key named after the child object (its singular name — for example, replace `{childObject}` with `contact`) whose value is an object of that child's fields. The parent link is set for you. Multiple different child objects may be nested in the same request." example: First: Jane Last: Doe email: jane@acme.com properties: {} required: - data parameters: - in: path name: objectNames description: 'The name of the object for which to create the record. If no parent is provided, this is the target object name (e.g., "contacts"). If parent parameters (recordId and childObjectName) are provided, this should represent the parent object name (e.g., "accounts").' example: contacts required: true schema: type: string - in: path name: recordId description: 'Optional parameter. The ID of the parent record if this record belongs to a parent object.' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: 95 - in: path name: childObjectName description: 'Optional parameter. The name of the child object if this record belongs to a parent record. For example, "contacts" under "accounts".' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: contact '/api/{objectNames}/{recordId}': patch: summary: 'Update a specific record' operationId: updateASpecificRecord description: 'Updates an existing record for the specified object type.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: status: success message: 'Account updated successfully.' data: metadata: url: 'http://api.example.com/api/account/94' list_url: 'http://api.example.com/api/accounts' parent: null object_type: record record_type: account record: id: 94 name: 'Updated Account Name' ownerid: 1 updated_at: '2024-11-08T00:00:00.000000Z' properties: status: type: string example: success message: type: string example: 'Account updated successfully.' data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/account/94' list_url: type: string example: 'http://api.example.com/api/accounts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: account record: type: object properties: id: type: integer example: 94 name: type: string example: 'Updated Account Name' ownerid: type: integer example: 1 updated_at: type: string example: '2024-11-08T00:00:00.000000Z' 403: description: '' content: application/json: schema: type: object example: status: error message: 'Unauthorized to update this record.' properties: status: type: string example: error message: type: string example: 'Unauthorized to update this record.' 404: description: '' content: application/json: schema: type: object example: status: error message: 'Record not found.' properties: status: type: string example: error message: type: string example: 'Record not found.' tags: - 'Records Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: string description: 'The fields to update for the record. The fields should match the validation rules of the specified object.' example: '{"name": "Updated Account Name", "ownerid": "1"}' required: - data delete: summary: 'Delete a specific record' operationId: deleteASpecificRecord description: 'Deletes a specific record by its ID.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: message: 'Record deleted successfully.' properties: message: type: string example: 'Record deleted successfully.' 403: description: '' content: application/json: schema: type: object example: code: 403 message: 'Unauthorized to delete this record.' properties: code: type: integer example: 403 message: type: string example: 'Unauthorized to delete this record.' 404: description: '' content: application/json: schema: type: object example: code: 404 message: 'Record not found.' properties: code: type: integer example: 404 message: type: string example: 'Record not found.' tags: - 'Records Management' parameters: - in: path name: objectNames description: 'The name of the object to update.' example: accounts required: true schema: type: string - in: path name: recordId description: 'The ID of the record to update.' example: 94 required: true schema: type: string '/api/bulk-create/{objectNames}/{recordId}/{childObjectName}': post: summary: 'Create Bulk Records' operationId: createBulkRecords description: "Create multiple records for an object. This endpoint allows you to create multiple records at once, which can be useful for importing data or creating multiple entries quickly.\n\nEach record in the array may also create a child record in the same request by including a key named after the child object (its singular name, e.g. `contact`) whose value is an object of that child's fields. The child is linked to its parent automatically and validated alongside it; a child validation failure returns a `422` with the errors keyed by the child object name." parameters: [] responses: 201: description: '' content: application/json: schema: type: object example: status: success message: 'Records created successfully' data: - metadata: url: 'https://local.reallysimplesystems.com/api/contact/1' list_url: 'https://local.reallysimplesystems.com/api/contacts' parent: null object_type: record record_type: contact record: id: 1 salutation: Mr accountid: '95' first: 'Test Contact API' last: Test email: test1@test.com - metadata: url: 'https://local.reallysimplesystems.com/api/contact/2' list_url: 'https://local.reallysimplesystems.com/api/contacts' parent: null object_type: record record_type: contact record: id: 2 salutation: Mr accountid: '95' first: 'Test Contact API' last: Test email: test2@test.com properties: status: type: string example: success message: type: string example: 'Records created successfully' data: type: array example: - metadata: url: 'https://local.reallysimplesystems.com/api/contact/1' list_url: 'https://local.reallysimplesystems.com/api/contacts' parent: null object_type: record record_type: contact record: id: 1 salutation: Mr accountid: '95' first: 'Test Contact API' last: Test email: test1@test.com - metadata: url: 'https://local.reallysimplesystems.com/api/contact/2' list_url: 'https://local.reallysimplesystems.com/api/contacts' parent: null object_type: record record_type: contact record: id: 2 salutation: Mr accountid: '95' first: 'Test Contact API' last: Test email: test2@test.com items: type: object properties: metadata: type: object properties: url: type: string example: 'https://local.reallysimplesystems.com/api/contact/1' list_url: type: string example: 'https://local.reallysimplesystems.com/api/contacts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: contact record: type: object properties: id: type: integer example: 1 salutation: type: string example: Mr accountid: type: string example: '95' first: type: string example: 'Test Contact API' last: type: string example: Test email: type: string example: test1@test.com 404: description: '' content: application/json: schema: type: object nullable: true 422: description: '' content: application/json: schema: type: object nullable: true tags: - 'Records Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: array description: "An array of records to create. Each record may optionally include a key named after a child object (e.g. `contact`) whose value is an object of that child's fields, to create the child alongside its parent." example: - Name: 'Test Account API 1' OwnerId: 1 contact: First: Jane Last: Doe email: jane.doe@example.com - Name: 'Test Account API 2' OwnerId: 1 items: type: string required: - data parameters: - in: path name: objectNames description: 'The name of the object for which to create the record. If no parent is provided, this is the target object name (e.g., "contacts"). If parent parameters (recordId and childObjectName) are provided, this should represent the parent object name (e.g., "accounts").' example: accounts required: true schema: type: string - in: path name: recordId description: 'Optional parameter. The ID of the parent record if this record belongs to a parent object.' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: 95 - in: path name: childObjectName description: 'Optional parameter. The name of the child object if this record belongs to a parent record. For example, "contacts" under "accounts".' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: contacts '/api/bulk-upsert/{objectNames}/{recordId}/{childObjectName}': patch: summary: 'Upsert Bulk Records' operationId: upsertBulkRecords description: 'Upsert multiple records for an object. This endpoint allows you to update existing records or create new ones if they do not exist, based on the id field in the payload, which is useful for synchronizing data or bulk updating records.' parameters: [] responses: 201: description: 'Records created and/or updated successfully.' content: application/json: schema: type: object example: status: success message: 'Records upserted successfully.' data: - metadata: url: 'https://local.reallysimplesystems.com/api/account/1' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 1 name: 'Test Account API 1' ownerid: 1 - metadata: url: 'https://local.reallysimplesystems.com/api/account/95' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 95 name: 'Existing Account Updated' properties: status: type: string example: success message: type: string example: 'Records upserted successfully.' data: type: array example: - metadata: url: 'https://local.reallysimplesystems.com/api/account/1' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 1 name: 'Test Account API 1' ownerid: 1 - metadata: url: 'https://local.reallysimplesystems.com/api/account/95' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 95 name: 'Existing Account Updated' items: type: object properties: metadata: type: object properties: url: type: string example: 'https://local.reallysimplesystems.com/api/account/1' list_url: type: string example: 'https://local.reallysimplesystems.com/api/accounts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: account record: type: object properties: id: type: integer example: 1 name: type: string example: 'Test Account API 1' ownerid: type: integer example: 1 422: description: '' content: application/json: schema: oneOf: - description: 'A record is missing the required `id` property.' type: object example: status: error message: 'Record at index 0 is missing the id property. This MUST be null for new records.' properties: status: type: string example: error message: type: string example: 'Record at index 0 is missing the id property. This MUST be null for new records.' - description: 'The payload contained no valid records.' type: object example: status: error message: 'No valid records provided for upsert.' properties: status: type: string example: error message: type: string example: 'No valid records provided for upsert.' 500: description: 'An unexpected error occurred while upserting the records.' content: application/json: schema: type: object example: status: error message: 'Failed to bulk upsert records, please check the data and try again. Error: {hash}' properties: status: type: string example: error message: type: string example: 'Failed to bulk upsert records, please check the data and try again. Error: {hash}' tags: - 'Records Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: array description: 'An array of records to upsert. Every record MUST include an `id` field: use `null` to create a new record, or the id of an existing record to update it. Any record missing the `id` field fails the whole batch.' example: - id: null Name: 'Test Account API 1' OwnerId: 1 - id: 95 Name: 'Existing Account Updated' items: type: string required: - data parameters: - in: path name: objectNames description: 'The name of the object for which to create the record. If no parent is provided, this is the target object name (e.g., "contacts"). If parent parameters (recordId and childObjectName) are provided, this should represent the parent object name (e.g., "accounts").' example: accounts required: true schema: type: string - in: path name: recordId description: 'Optional parameter. The ID of the parent record if this record belongs to a parent object.' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: 95 - in: path name: childObjectName description: 'Optional parameter. The name of the child object if this record belongs to a parent record. For example, "contacts" under "accounts".' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: contacts '/api/bulk-update/{objectNames}/{recordId}/{childObjectName}': patch: summary: 'Update Bulk Records' operationId: updateBulkRecords description: 'Update multiple existing records for an object. Every record must supply a non-null id. If any record is missing an id, or the record does not exist, the entire batch fails.' parameters: [] responses: 200: description: 'Records updated successfully.' content: application/json: schema: type: object example: status: success message: 'Records updated successfully.' data: - metadata: url: 'https://local.reallysimplesystems.com/api/account/95' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 95 name: 'Updated Account Name' - metadata: url: 'https://local.reallysimplesystems.com/api/account/96' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 96 ownerid: 2 properties: status: type: string example: success message: type: string example: 'Records updated successfully.' data: type: array example: - metadata: url: 'https://local.reallysimplesystems.com/api/account/95' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 95 name: 'Updated Account Name' - metadata: url: 'https://local.reallysimplesystems.com/api/account/96' list_url: 'https://local.reallysimplesystems.com/api/accounts' parent: null object_type: record record_type: account record: id: 96 ownerid: 2 items: type: object properties: metadata: type: object properties: url: type: string example: 'https://local.reallysimplesystems.com/api/account/95' list_url: type: string example: 'https://local.reallysimplesystems.com/api/accounts' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: account record: type: object properties: id: type: integer example: 95 name: type: string example: 'Updated Account Name' 422: description: '' content: application/json: schema: oneOf: - description: 'A record is missing a non-null `id`, or the referenced record does not exist.' type: object example: status: error message: 'Record at index 0 is missing a non-null id. All records must have an id for bulk update.' properties: status: type: string example: error message: type: string example: 'Record at index 0 is missing a non-null id. All records must have an id for bulk update.' - description: 'The payload contained no valid records.' type: object example: status: error message: 'No valid records provided for update.' properties: status: type: string example: error message: type: string example: 'No valid records provided for update.' 500: description: 'An unexpected error occurred while updating the records.' content: application/json: schema: type: object example: status: error message: 'Failed to bulk update records, please check the data and try again. Error: {hash}' properties: status: type: string example: error message: type: string example: 'Failed to bulk update records, please check the data and try again. Error: {hash}' tags: - 'Records Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: array description: 'An array of records to update. Every record MUST include a non-null `id` for an existing record. If any record is missing an `id`, or references a record that does not exist, the entire batch fails and nothing is updated.' example: - id: 95 Name: 'Updated Account Name' - id: 96 OwnerId: 2 items: type: string required: - data parameters: - in: path name: objectNames description: 'The name of the object for which to update records. If no parent is provided, this is the target object name (e.g., "contacts"). If parent parameters (recordId and childObjectName) are provided, this should represent the parent object name (e.g., "accounts").' example: accounts required: true schema: type: string - in: path name: recordId description: 'Optional parameter. The ID of the parent record if this record belongs to a parent object.' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: 95 - in: path name: childObjectName description: 'Optional parameter. The name of the child object if this record belongs to a parent record. For example, "contacts" under "accounts".' required: true schema: type: string examples: omitted: summary: 'When the value is omitted' value: '' present: summary: 'When the value is present' value: contacts '/api/list/{listId}/contacts': get: summary: 'Fetch a paginated list of contacts for a marketing list' operationId: fetchAPaginatedListOfContactsForAMarketingList description: 'Retrieves a paginated list of records for the specified object type. Supports filtering parameters.' parameters: [] responses: 200: description: 'Successful response containing the paginated list of contacts' content: application/json: schema: type: object example: data: metadata: url: 'http://api.example.com/list/{listId}/contacts' object_type: list total_count: 100 has_more: true list: - metadata: url: 'http://api.example.com/api/contact/1' list_url: 'http://api.example.com/api/contacts' parent: 'http://api.example.com/api/account/1' object_type: record record_type: contact record: id: 1 first: 'First Name' last: 'Last Name' email: example@api.com links: first: 'http://api.example.com/api/list/1/contacts?page=1' last: 'http://api.example.com/api/list/1/contacts?page=5' prev: null next: 'http://api.example.com/api/list/1/contacts?page=2' meta: current_page: 1 from: 1 last_page: 5 path: 'http://api.example.com/api/list/1/contacts' per_page: 20 to: 20 total: 100 properties: data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/list/{listId}/contacts' object_type: type: string example: list total_count: type: integer example: 100 has_more: type: boolean example: true list: type: array example: - metadata: url: 'http://api.example.com/api/contact/1' list_url: 'http://api.example.com/api/contacts' parent: 'http://api.example.com/api/account/1' object_type: record record_type: contact record: id: 1 first: 'First Name' last: 'Last Name' email: example@api.com items: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/contact/1' list_url: type: string example: 'http://api.example.com/api/contacts' parent: type: string example: 'http://api.example.com/api/account/1' object_type: type: string example: record record_type: type: string example: contact record: type: object properties: id: type: integer example: 1 first: type: string example: 'First Name' last: type: string example: 'Last Name' email: type: string example: example@api.com links: type: object properties: first: type: string example: 'http://api.example.com/api/list/1/contacts?page=1' last: type: string example: 'http://api.example.com/api/list/1/contacts?page=5' prev: type: string example: null nullable: true next: type: string example: 'http://api.example.com/api/list/1/contacts?page=2' meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 5 path: type: string example: 'http://api.example.com/api/list/1/contacts' per_page: type: integer example: 20 to: type: integer example: 20 total: type: integer example: 100 404: description: 'The marketing list could not be found' content: application/json: schema: type: object example: code: 404 message: 'List not found' properties: code: type: integer example: 404 message: type: string example: 'List not found' tags: - 'Records Management' parameters: - in: path name: listId description: 'The list id to fetch contacts for' example: 1 required: true schema: type: string '/api/{objectName}/{recordId}/tags': get: summary: 'Fetch the tags for a record' operationId: fetchTheTagsForARecord description: 'Retrieves a paginated list of tags currently assigned to the specified record.' parameters: - in: query name: limit description: 'The number of tags per page. Defaults to 20.' example: 20 required: false schema: type: integer description: 'The number of tags per page. Defaults to 20.' example: 20 - in: query name: page description: 'The page number to retrieve. Defaults to the first page.' example: 1 required: false schema: type: integer description: 'The page number to retrieve. Defaults to the first page.' example: 1 - in: query name: order description: 'A JSON object specifying the fields to order tags by and their direction (`asc` or `desc`). Example: `{"name": "asc"}`.' example: null required: false schema: type: object description: 'A JSON object specifying the fields to order tags by and their direction (`asc` or `desc`). Example: `{"name": "asc"}`.' example: null properties: {} - in: query name: q description: 'A JSON object specifying filters for the tags. Example: `?q={“name”: “VIP”}`.' example: null required: false schema: type: object description: 'A JSON object specifying filters for the tags. Example: `?q={“name”: “VIP”}`.' example: null properties: {} responses: 200: description: 'Successful response containing the paginated list of tags for the record.' content: application/json: schema: type: object example: data: metadata: url: 'http://api.example.com/api/account/1/tags' object_type: list total_count: 2 has_more: false list: - metadata: url: 'http://api.example.com/api/tag/12' list_url: 'http://api.example.com/api/tags' parent: null object_type: record record_type: tag record: id: 12 name: Alpha - metadata: url: 'http://api.example.com/api/tag/18' list_url: 'http://api.example.com/api/tags' parent: null object_type: record record_type: tag record: id: 18 name: Bravo links: first: 'http://api.example.com/api/account/1/tags?page=1' last: 'http://api.example.com/api/account/1/tags?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 path: 'http://api.example.com/api/account/1/tags' per_page: 20 to: 2 total: 2 properties: data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/account/1/tags' object_type: type: string example: list total_count: type: integer example: 2 has_more: type: boolean example: false list: type: array example: - metadata: url: 'http://api.example.com/api/tag/12' list_url: 'http://api.example.com/api/tags' parent: null object_type: record record_type: tag record: id: 12 name: Alpha - metadata: url: 'http://api.example.com/api/tag/18' list_url: 'http://api.example.com/api/tags' parent: null object_type: record record_type: tag record: id: 18 name: Bravo items: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/tag/12' list_url: type: string example: 'http://api.example.com/api/tags' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: tag record: type: object properties: id: type: integer example: 12 name: type: string example: Alpha links: type: object properties: first: type: string example: 'http://api.example.com/api/account/1/tags?page=1' last: type: string example: 'http://api.example.com/api/account/1/tags?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 path: type: string example: 'http://api.example.com/api/account/1/tags' per_page: type: integer example: 20 to: type: integer example: 2 total: type: integer example: 2 400: description: 'An invalid query parameter or filter format is submitted.' content: application/json: schema: type: object example: code: 400 message: 'Invalid operator ($invalid).' properties: code: type: integer example: 400 message: type: string example: 'Invalid operator ($invalid).' 404: description: 'The specified object or record could not be found.' content: application/json: schema: type: object example: status: error message: 'Record not found' properties: status: type: string example: error message: type: string example: 'Record not found' 500: description: 'An unexpected error occurred.' content: application/json: schema: type: object example: code: 500 message: 'There was an unexpected error with the API. Please try again or contact support.' properties: code: type: integer example: 500 message: type: string example: 'There was an unexpected error with the API. Please try again or contact support.' tags: - 'Records Management' parameters: - in: path name: objectName description: 'The singular name of the record type to fetch tags for (e.g., "account").' example: account required: true schema: type: string - in: path name: recordId description: 'The ID of the record whose tags should be returned.' example: 1 required: true schema: type: string '/api/{objectName}/{recordId}/insights': post: summary: 'Store or update an insight record' operationId: storeOrUpdateAnInsightRecord description: 'This endpoint stores or updates an insight record for a specified object type. If duplicate records are found, the operation is rejected with an appropriate error message.' parameters: [] responses: 200: description: 'Insight saved or updated successfully.' content: application/json: schema: type: object example: status: success message: 'Insight saved successfully.' data: metadata: url: 'http://api.example.com/api/account/42/insights' list_url: 'http://api.example.com/api/insights' parent: 'http://api.example.com/api/account/42' object_type: record record_type: insight record: field1: value1 field2: value2 properties: status: type: string example: success message: type: string example: 'Insight saved successfully.' data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/account/42/insights' list_url: type: string example: 'http://api.example.com/api/insights' parent: type: string example: 'http://api.example.com/api/account/42' object_type: type: string example: record record_type: type: string example: insight record: type: object properties: field1: type: string example: value1 field2: type: string example: value2 400: description: 'Invalid record type provided in the request.' content: application/json: schema: type: object example: code: 400 message: 'Invalid record type (task).' properties: code: type: integer example: 400 message: type: string example: 'Invalid record type (task).' 404: description: '' content: application/json: schema: oneOf: - description: 'Object not found.' type: object example: code: 404 message: 'Object not found.' properties: code: type: integer example: 404 message: type: string example: 'Object not found.' - description: 'Parent object not found.' type: object example: code: 404 message: 'Parent object not found.' properties: code: type: integer example: 404 message: type: string example: 'Parent object not found.' - description: 'Parent record not found.' type: object example: code: 404 message: 'Parent record not found.' properties: code: type: integer example: 404 message: type: string example: 'Parent record not found.' tags: - 'Insights Management' requestBody: required: true content: application/json: schema: type: object properties: data: type: string description: 'The request payload containing the fields to be saved or updated for the insight.' example: '{"field1": "value1", "field2": "value2"}' required: - data parameters: - in: path name: objectName description: 'The singular name of the parent object (e.g., "account" or "contact").' example: account required: true schema: type: string - in: path name: recordId description: 'The ID of the parent record associated with this insight. This is used to find the parent object.' example: 42 required: true schema: type: string /api/digital-activities: post: summary: 'Create a Digital Activity by email' operationId: createADigitalActivityByEmail description: 'Creates a Digital Activity record by identifying the Contact (and therefore Account) using an email address. The endpoint accepts all standard Digital Activity fields plus an email field to automatically determine contact_id and account_id.' parameters: [] responses: 201: description: 'Digital Activity created successfully.' content: application/json: schema: type: object example: status: success message: 'Digital Activity created successfully.' data: metadata: url: 'http://api.example.com/api/digitalactivities/123' list_url: 'http://api.example.com/api/digitalactivities' parent: null object_type: record record_type: digitalactivity record: id: 123 type: FormWasSubmitted score: 10 contact_id: 45 account_id: 12 properties: status: type: string example: success message: type: string example: 'Digital Activity created successfully.' data: type: object properties: metadata: type: object properties: url: type: string example: 'http://api.example.com/api/digitalactivities/123' list_url: type: string example: 'http://api.example.com/api/digitalactivities' parent: type: string example: null nullable: true object_type: type: string example: record record_type: type: string example: digitalactivity record: type: object properties: id: type: integer example: 123 type: type: string example: FormWasSubmitted score: type: integer example: 10 contact_id: type: integer example: 45 account_id: type: integer example: 12 404: description: 'Contact with the provided email address not found.' content: application/json: schema: type: object example: code: 404 message: "Contact with email 'john.doe@example.com' not found." properties: code: type: integer example: 404 message: type: string example: "Contact with email 'john.doe@example.com' not found." 422: description: 'Validation errors occurred.' content: application/json: schema: type: object example: code: 422 message: 'Validation errors.' errors: email: - 'The email field is required.' properties: code: type: integer example: 422 message: type: string example: 'Validation errors.' errors: type: object properties: email: type: array example: - 'The email field is required.' items: type: string tags: - 'Digital Activities Management' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: 'The email address of the contact. Used to identify both the Contact and Account for the Digital Activity.' example: john.doe@example.com type: type: string description: 'The type of Digital Activity (e.g., "FormWasSubmitted", "WebsiteHit", "EmailLinkWasClicked").' example: FormWasSubmitted score: type: number description: 'The score value for this activity.' example: 10 occurred_at: type: string description: 'The date and time when the activity occurred (format: Y-m-d H:i:s).' example: '2025-01-20 14:30:00' furtherInfo: type: string description: 'JSON string containing additional information about the activity (e.g., form fields, UTM parameters).' example: '{"FormId":123,"FormName":"Contact Form","FormFields":[{"Label":"Name","Value":"John"}]}' required: - email - type '/api/{objectName}/{recordId}/documents/download': get: summary: 'Download documents associated with a record' operationId: downloadDocumentsAssociatedWithARecord description: 'Downloads one or more documents related to a specific record. If only one document is associated with the record, it will be downloaded directly. If multiple documents are associated, they will be compressed into a zip file and then downloaded.' parameters: [] responses: 200: description: '' content: text/plain: schema: oneOf: - description: 'Single document successfully downloaded.' type: string example: 'Binary file content representing the document.' - description: 'Multiple documents compressed into a zip file and downloaded successfully.' type: string example: 'Binary file content representing the zip file.' 403: description: 'The user is not authorized to access documents for this record.' content: application/json: schema: type: object example: code: 403 message: 'Unauthorized to download documents for this record.' properties: code: type: integer example: 403 message: type: string example: 'Unauthorized to download documents for this record.' 404: description: '' content: application/json: schema: oneOf: - description: 'The specified object does not exist.' type: object example: code: 404 message: 'Object not found.' properties: code: type: integer example: 404 message: type: string example: 'Object not found.' - description: 'Record not found.' type: object example: code: 404 message: 'Record not found.' properties: code: type: integer example: 404 message: type: string example: 'Record not found.' - description: 'No documents found for the specified record.' type: object example: code: 404 message: 'Document not found for record ID 1.' properties: code: type: integer example: 404 message: type: string example: 'Document not found for record ID 1.' - description: 'There was a problem downloading the file.' type: object example: code: 404 message: 'There was a problem downloading the file.' properties: code: type: integer example: 404 message: type: string example: 'There was a problem downloading the file.' 500: description: 'An unexpected error occurred while processing the request.' content: application/json: schema: type: object example: status: error message: 'An internal server error occurred.' properties: status: type: string example: error message: type: string example: 'An internal server error occurred.' tags: - 'Document Management' parameters: - in: path name: objectName description: 'The name of the object associated with the record. This must match a valid object configuration.' example: account required: true schema: type: string - in: path name: recordId description: 'The ID of the record for which documents should be downloaded.' example: 1 required: true schema: type: string '/api/datadictionary/{objectName}': get: summary: 'Retrieve Datadictionary fields for an object' operationId: retrieveDatadictionaryFieldsForAnObject description: 'Get all the fields for a record type using its object name' parameters: [] responses: 200: description: 'The list of fields for the object' content: application/json: schema: type: object example: data: metadata: url: /datadictionary/accounts parent: null object_type: list record_type: account list: id: type: number required: false label: 'Account Id' default: false lookup: false lookup_type: null link_field: false properties: data: type: object properties: metadata: type: object properties: url: type: string example: /datadictionary/accounts parent: type: string example: null nullable: true object_type: type: string example: list record_type: type: string example: account list: type: object properties: id: type: object properties: type: type: string example: number required: type: boolean example: false label: type: string example: 'Account Id' default: type: boolean example: false lookup: type: boolean example: false lookup_type: type: string example: null nullable: true link_field: type: boolean example: false 404: description: 'The requested object could not be found' content: application/json: schema: type: object example: code: 404 message: 'Object could not be found' properties: code: type: integer example: 404 message: type: string example: 'Object could not be found' tags: - 'Field Management' parameters: - in: path name: objectName description: 'The type of record' example: accounts required: true schema: type: string '/api/fields/{objectName}': get: summary: 'Retrieve Datadictionary fields for an object' operationId: retrieveDatadictionaryFieldsForAnObject description: 'Get all the fields for a record type using its object name' parameters: [] responses: 200: description: 'The list of fields for the object' content: application/json: schema: type: object example: data: metadata: url: /datadictionary/accounts parent: null object_type: list record_type: account list: id: type: number required: false label: 'Account Id' default: false lookup: false lookup_type: null link_field: false properties: data: type: object properties: metadata: type: object properties: url: type: string example: /datadictionary/accounts parent: type: string example: null nullable: true object_type: type: string example: list record_type: type: string example: account list: type: object properties: id: type: object properties: type: type: string example: number required: type: boolean example: false label: type: string example: 'Account Id' default: type: boolean example: false lookup: type: boolean example: false lookup_type: type: string example: null nullable: true link_field: type: boolean example: false 404: description: 'The requested object could not be found' content: application/json: schema: type: object example: code: 404 message: 'Object could not be found' properties: code: type: integer example: 404 message: type: string example: 'Object could not be found' tags: - 'Field Management' parameters: - in: path name: objectName description: 'The type of record' example: accounts required: true schema: type: string /api/lookup: get: summary: 'Retrieve a list of all the lookups' operationId: retrieveAListOfAllTheLookups description: 'Get a list of the available dropdowns' parameters: [] responses: 200: description: 'The list of lookups' content: application/json: schema: type: object example: metadata: url: /lookups object_type: list record_type: lookup list: - AccountType - ActivityStatus - ActivityType properties: metadata: type: object properties: url: type: string example: /lookups object_type: type: string example: list record_type: type: string example: lookup list: type: array example: - AccountType - ActivityStatus - ActivityType items: type: string tags: - Lookups '/api/lookup/{objectName}/{fieldName}': get: summary: 'Retrieve lookup options for a field' operationId: retrieveLookupOptionsForAField description: 'Get the values for a form field dropdown, using the object name and field name' parameters: [] responses: 200: description: 'The lookup options for a field' content: application/json: schema: type: object example: data: metadata: url: /lookup/activities/type object_type: list record_type: lookup list: - text: Alpha value: alpha - text: Bravo value: bravo - text: Charlie value: charlie properties: data: type: object properties: metadata: type: object properties: url: type: string example: /lookup/activities/type object_type: type: string example: list record_type: type: string example: lookup list: type: array example: - text: Alpha value: alpha - text: Bravo value: bravo - text: Charlie value: charlie items: type: object properties: text: type: string example: Alpha value: type: string example: alpha 400: description: 'The requested field is not a valid lookup field' content: application/json: schema: type: object example: code: 400 message: 'Field is not a valid lookup field' properties: code: type: integer example: 400 message: type: string example: 'Field is not a valid lookup field' 404: description: '' content: application/json: schema: oneOf: - description: 'The requested object could not be found' type: object example: code: 404 message: 'Object could not be found' properties: code: type: integer example: 404 message: type: string example: 'Object could not be found' - description: 'The requested field could not be found' type: object example: code: 404 message: 'Field could not be found' properties: code: type: integer example: 404 message: type: string example: 'Field could not be found' tags: - Lookups parameters: - in: path name: objectName description: 'The type of record' example: activities required: true schema: type: string - in: path name: fieldName description: 'The name of the field' example: type required: true schema: type: string '/api/lookup/{lookupName}': patch: summary: 'Add lookup options' operationId: addLookupOptions description: 'Add values to a lookup using the lookup name' parameters: [] responses: 200: description: 'The added lookup values' content: application/json: schema: type: object example: message: 'Lookup values added' items: - text: 'Value 1' value: 'Value 1' - text: 'Value 2' value: 'Value 2' properties: message: type: string example: 'Lookup values added' items: type: array example: - text: 'Value 1' value: 'Value 1' - text: 'Value 2' value: 'Value 2' items: type: object properties: text: type: string example: 'Value 1' value: type: string example: 'Value 1' required: - text - value 404: description: 'The lookup could not be found' content: application/json: schema: type: object example: message: 'Unable to find lookup ({lookupName})' code: 404 properties: message: type: string example: 'Unable to find lookup ({lookupName})' code: type: integer example: 404 422: description: 'A validation error occurred with the request' content: application/json: schema: type: object example: message: 'The lookup value must be a string' errors: items.0: - 'The lookup value must be a string' properties: message: type: string example: 'The lookup value must be a string' errors: type: object properties: items.0: type: array example: - 'The lookup value must be a string' items: type: string tags: - Lookups requestBody: required: true content: application/json: schema: type: object properties: items: type: array description: 'The dropdown value' example: '{"Value": "1", "Value": "2"}' items: type: string required: - items parameters: - in: path name: lookupName description: 'The name of the lookup' example: activitytype required: true schema: type: string /api/me: get: summary: 'Get User Details' operationId: getUserDetails description: 'Get information for the currently authenticated user.' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: code: 401 message: 'Invalid token provided.' properties: code: type: integer example: 401 message: type: string example: 'Invalid token provided.' tags: - 'User Info'