openapi: 3.1.0 info: title: CallRail v3 Accounts Calls API version: 3.0.0 description: 'REST/JSON API for CallRail, a call tracking and conversation intelligence platform. Exposes accounts, calls, and related summary/timeseries reporting. ' contact: name: CallRail API Support url: https://apidocs.callrail.com/ servers: - url: https://api.callrail.com/v3 description: Production security: - TokenAuth: [] tags: - name: Calls paths: /a/{account_id}/calls.json: get: tags: - Calls summary: List calls description: List calls for an account. Supports offset or relative pagination. operationId: listCalls parameters: - $ref: '#/components/parameters/AccountId' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/PerPage' - name: relative_pagination in: query schema: type: boolean - name: start_date in: query schema: type: string format: date - name: end_date in: query schema: type: string format: date - name: direction in: query schema: type: string enum: - inbound - outbound - name: answered in: query schema: type: boolean - name: company_id in: query schema: type: string - name: tracker_id in: query schema: type: string - name: tags in: query schema: type: string - name: fields in: query description: Comma-separated list of additional fields to include. schema: type: string - name: sorting in: query schema: type: string - name: order in: query schema: type: string enum: - asc - desc responses: '200': description: A paginated list of calls. content: application/json: schema: $ref: '#/components/schemas/CallList' '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/RateLimited' post: tags: - Calls summary: Create outbound call operationId: createCall parameters: - $ref: '#/components/parameters/AccountId' requestBody: required: true content: application/json: schema: type: object required: - caller_id - customer_phone_number - business_phone_number properties: caller_id: type: string customer_phone_number: type: string business_phone_number: type: string recording_enabled: type: boolean responses: '201': description: Call created. content: application/json: schema: $ref: '#/components/schemas/Call' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /a/{account_id}/calls/{call_id}.json: get: tags: - Calls summary: Retrieve call operationId: getCall parameters: - $ref: '#/components/parameters/AccountId' - $ref: '#/components/parameters/CallId' - name: fields in: query schema: type: string responses: '200': description: Call details. content: application/json: schema: $ref: '#/components/schemas/Call' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' put: tags: - Calls summary: Update call description: Update notes, tags, lead status, customer name, or spam flag. operationId: updateCall parameters: - $ref: '#/components/parameters/AccountId' - $ref: '#/components/parameters/CallId' requestBody: required: true content: application/json: schema: type: object properties: note: type: string tags: type: array items: type: string lead_status: type: string customer_name: type: string spam: type: boolean responses: '200': description: Call updated. content: application/json: schema: $ref: '#/components/schemas/Call' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /a/{account_id}/calls/summary.json: get: tags: - Calls summary: Call summary description: Summarized call data grouped by source, keyword, campaign, etc. operationId: getCallSummary parameters: - $ref: '#/components/parameters/AccountId' - name: group_by in: query schema: type: string enum: - source - keywords - campaign - medium - landing_page - referrer - name: start_date in: query schema: type: string format: date - name: end_date in: query schema: type: string format: date responses: '200': description: Summary results. content: application/json: schema: type: object properties: summary: type: array items: type: object additionalProperties: true /a/{account_id}/calls/timeseries.json: get: tags: - Calls summary: Call timeseries description: Call data grouped by time intervals. operationId: getCallTimeseries parameters: - $ref: '#/components/parameters/AccountId' - name: time_zone in: query schema: type: string - name: time_range in: query schema: type: string enum: - hour - day - week - month - year - name: start_date in: query schema: type: string format: date - name: end_date in: query schema: type: string format: date responses: '200': description: Timeseries results. content: application/json: schema: type: object properties: timeseries: type: array items: type: object additionalProperties: true components: schemas: Error: type: object properties: error: type: string CallList: allOf: - $ref: '#/components/schemas/Pagination' - type: object properties: calls: type: array items: $ref: '#/components/schemas/Call' Pagination: type: object properties: page: type: integer per_page: type: integer total_pages: type: integer total_records: type: integer Call: type: object properties: id: type: string answered: type: boolean business_phone_number: type: string customer_city: type: string customer_country: type: string customer_name: type: string customer_phone_number: type: string customer_state: type: string direction: type: string enum: - inbound - outbound duration: type: integer recording: type: string format: uri recording_duration: type: integer start_time: type: string format: date-time tracking_phone_number: type: string voicemail: type: boolean agent_email: type: string lead_status: type: string note: type: string tags: type: array items: type: string source: type: string campaign: type: string medium: type: string keywords: type: string landing_page_url: type: string referrer_domain: type: string company_id: type: string company_name: type: string tracker_id: type: string parameters: AccountId: name: account_id in: path required: true schema: type: string PerPage: name: per_page in: query schema: type: integer minimum: 1 maximum: 250 default: 100 Page: name: page in: query schema: type: integer minimum: 1 default: 1 CallId: name: call_id in: path required: true schema: type: string responses: Unauthorized: description: Missing or invalid credentials. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad request. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found. content: application/json: schema: $ref: '#/components/schemas/Error' RateLimited: description: Rate limit exceeded (1,000/hour or 10,000/day). content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: TokenAuth: type: apiKey in: header name: Authorization description: 'Send as `Authorization: Token token="YOUR_API_KEY"`. '