Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Concord Agreements API
description: 'The Concord REST API provides programmatic, read-oriented access to a Concord contract lifecycle management (CLM) account. It exposes the authenticated user, the organizations that user belongs to, the agreements (contracts) within an organization, an agreement''s attachments and members, and organization-level reports, groups, and tags. All requests are authenticated with an API key passed in the `X-API-KEY` header; API key generation is available on paid plans only.
Confirmed endpoints below were validated against the live production host (https://api.concordnow.com/api/rest/1), which returns HTTP 401 `{"statusCode":401,"restCode":"unauthorized"}` when called without a valid key. Concord''s public developer reference is a rendered documentation portal (https://api.doc.concordnow.com/) and does not expose a machine-readable OpenAPI file; response schemas here are modeled from documented behavior and connector mappings, not copied from an official spec. The template document-generation operation is documented to exist but its exact path and request body are not published, so it is included and explicitly flagged as modeled/unconfirmed.'
version: '1.0'
contact:
name: Concord
url: https://www.concord.app
servers:
- url: https://api.concordnow.com/api/rest/1
description: Production
- url: https://uat.concordnow.com/api/rest/1
description: UAT / Sandbox
security:
- apiKeyAuth: []
tags:
- name: Agreements
description: Agreements (contracts), their attachments, and members.
paths:
/user/me/organizations/{organizationId}/agreements:
parameters:
- $ref: '#/components/parameters/OrganizationId'
get:
operationId: listAgreements
tags:
- Agreements
summary: List agreements in an organization
description: Lists the agreements (contracts) in the given organization for the authenticated user. The response nests items under an `items` selector and is paginated.
parameters:
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/Offset'
responses:
'200':
description: A paginated list of agreements.
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/Agreement'
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/{organizationId}/agreements/{agreementUid}/attachments:
parameters:
- $ref: '#/components/parameters/OrganizationId'
- $ref: '#/components/parameters/AgreementUid'
get:
operationId: listAgreementAttachments
tags:
- Agreements
summary: List an agreement's attachments
description: Returns the files attached to an agreement. The response nests the list under an `attachments` selector.
responses:
'200':
description: A list of attachments.
content:
application/json:
schema:
type: object
properties:
attachments:
type: array
items:
$ref: '#/components/schemas/Attachment'
'401':
$ref: '#/components/responses/Unauthorized'
/organizations/{organizationId}/agreements/{agreementUid}/members:
parameters:
- $ref: '#/components/parameters/OrganizationId'
- $ref: '#/components/parameters/AgreementUid'
get:
operationId: listAgreementMembers
tags:
- Agreements
summary: List an agreement's members
description: Returns the members (people) associated with an agreement.
responses:
'200':
description: A list of agreement members.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Member'
'401':
$ref: '#/components/responses/Unauthorized'
components:
schemas:
Attachment:
type: object
description: Modeled representation of an agreement attachment (file).
properties:
id:
type: string
name:
type: string
contentType:
type: string
Error:
type: object
description: Modeled from the live 401 response body.
properties:
statusCode:
type: integer
restCode:
type: string
Agreement:
type: object
description: Modeled representation of an agreement (contract). Concord agreements carry a UID, title, lifecycle status, and timestamps; exact field names are not published and MUST be confirmed against the live account.
properties:
uid:
type: string
title:
type: string
status:
type: string
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
Member:
type: object
description: Modeled representation of an agreement member.
properties:
id:
type: string
email:
type: string
format: email
role:
type: string
parameters:
AgreementUid:
name: agreementUid
in: path
required: true
description: The UID of the agreement.
schema:
type: string
Offset:
name: offset
in: query
required: false
description: Number of items to skip (pagination).
schema:
type: integer
Limit:
name: limit
in: query
required: false
description: Maximum number of items to return (pagination).
schema:
type: integer
OrganizationId:
name: organizationId
in: path
required: true
description: The ID of the organization.
schema:
type: string
responses:
Unauthorized:
description: Missing or invalid API key. The live API returns `{"statusCode":401,"restCode":"unauthorized"}`.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: X-API-KEY
description: API key generated in the Concord account (paid plans only) and sent in the `X-API-KEY` request header. Confirmed against the live production host, which returns 401 unauthorized without a valid key.