Concord Signature API
Signature configuration related endpoints like auto-request and signature slots configuration. You can, for instance, add/remove slots, update their assignation, change orders.
Signature configuration related endpoints like auto-request and signature slots configuration. You can, for instance, add/remove slots, update their assignation, change orders.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/concord-com:concord-com-signature-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
x-logo:
url: https://www.concord.app/wp-content/uploads/2025/01/Logo-full-color-16px-padding.svg
title: Concord Signature API
description: '## Overview
### Basics
Concord, https://www.concord.app/, is a cloud-based contract lifecycle management platform built for all types of businesses.
It provides unlimited e-signatures and unlimited contract storage for any number of users.
Concord saves time, money, and trees. It’s a smart way to get everyone to agree.
This Concord API gives you access to features you see in Concord and lets you extend them for use in your own application.
It strives to be RESTful and is organized around the main resources you’re familiar with from the Concord interface.
Before you do anything, you should get a Concord account on our sandbox environment that you can test the API against
and create an API Key so that you can make API calls.
### Format
Both request body data and response data are formatted as JSON.
### Upcoming changes
We are always maintaining, fixing, and enhancing our API. As such, you should expect new endpoints to show up, new fields to be added to responses and new error codes to appear.
We recommend that you build your code to gracefully ignore things that you aren’t expecting, and to handle errors in standard HTTP-centric ways.
### Getting help
To get in touch with our API experts directly, please send a message to support@concord.app.
## Environments
The API is accessible from:
+ https://uat.concordnow.com/api/rest/1/ - sandbox
+ https://api.concordnow.com/api/rest/1/ - production
## Authentication
To use this API, you need to be authenticated.
### With an API key
Users authenticate themselves through the HTTP Header **X-API-KEY**.
You can generate as many API Keys as needed from your Concord account.
If the HTTP Header is missing or if the API Key is invalid,
the HTTP Response will be 401 Unauthorized.
## Errors
The API communicates errors through standard HTTP status codes paired with error objects. Generally, the following pattern will apply:
+ 2xx - The request was successfully received, understood, and accepted.
+ 4xx - An error in the request. Usually a bad parameter.
+ 5xx - The request is fine, but something is wrong on Concord''s end.
### 4xx errors definition
The errors referenced here are valid for most (or even all) of our endpoints.
They are standard error messages for things like "Not authenticated, but you should" or "You can''t access this".
Depending on what you''re trying to access, you might get a bit more information in the response.
+ Response 400 (application/json)
{
"statusCode": 400,
"restCode": "badRequest"
}
+ Response 401 (application/json)
{
"statusCode": 401,
"restCode": "authFailed"
}
+ Response 403 (application/json)
{
"statusCode": 403,
"restCode": "accessDenied"
}
+ Response 404 (application/json)
{
"statusCode": 404,
"restCode": "notFound"
}
+ Response 409 (application/json)
{
"statusCode": 409,
"restCode": "conflict"
}
### HTTP status code
+ 200 success
+ 201 created
+ 202 accepted
+ 204 no_content
+ 400 bad_request
+ 401 unauthorized
+ 403 forbidden
+ 404 not_found
+ 405 method_not_allowed
+ 409 conflict
+ 415 unsupported_media_type
+ 500 internal_server_error
+ 502 bad_gateway
+ 503 unavailable
+ 504 gateway_timeout'
contact:
email: support@concord.app
name: Support Concord
url: https://help.concord.app/
license:
name: Terms of service
url: https://www.concord.app/terms-of-service
version: Concord API v1.0
servers:
- url: https://uat.concordnow.com/api/rest/1
variables: {}
security:
- ApiKeyAuthentication: []
tags:
- name: Signature
description: Signature configuration related endpoints like auto-request and signature slots configuration. You can, for instance, add/remove slots, update their assignation, change orders.
paths:
/organizations/{organizationId}/agreements/{agreementUid}/signature:
parameters:
- name: organizationId
in: path
description: Organization ID.
required: true
schema:
type: integer
format: int64
- name: agreementUid
in: path
description: Agreement UID.
required: true
schema:
$ref: '#/components/schemas/AgreementUid'
get:
tags:
- Signature
summary: Get agreement signature metadata
description: Get agreement signature metadata with slots information.
operationId: SignatureGet
responses:
'200':
description: Agreement signature metadata
content:
application/json:
schema:
$ref: '#/components/schemas/SignatureMetadataGet'
patch:
tags:
- Signature
summary: Modify agreement signature metadata
description: Modify agreement signature metadata.
operationId: SignatureUpdate
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SignatureMetadataPatch'
responses:
'204':
description: Signature metadata updated.
delete:
tags:
- Signature
summary: Revoke all signatures on an agreement
description: Revokes all signatures on the agreement and moves it back to the review.
operationId: SignatureRevoke
responses:
'204':
description: Signatures revoked successfully.
put:
tags:
- Signature
summary: Finish signing
description: Finish signing and move the agreement to the next status.
operationId: FinishSigning
responses:
'200':
description: Agreement successfully finished signing
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Agreement ID
uid:
$ref: '#/components/schemas/AgreementUid'
status:
type: string
description: Agreement status
/organizations/{organizationId}/agreements/{agreementUid}/signature/slots:
parameters:
- name: organizationId
in: path
description: Organization ID.
required: true
schema:
type: integer
format: int64
- name: agreementUid
in: path
description: Agreement UID.
required: true
schema:
$ref: '#/components/schemas/AgreementUid'
put:
tags:
- Signature
summary: Replace signature slots configuration
operationId: SignatureSlotsUpdate
requestBody:
description: Agreement signature metadata
content:
application/json:
schema:
description: Signature slots details.
type: array
items:
$ref: '#/components/schemas/SignatureInfoSlotPatch'
responses:
'204':
description: Signature slots updated.
/organizations/{organizationId}/agreements/{agreementUid}/signature/request:
post:
tags:
- Signature
summary: Request signature
description: 'Requests signers to sign.
If the signer is not yet a member of the agreement, it will either:
- add the signer to the agreement and request the signature (if the signer is a colleague in the organization that created the agreement)
- send an email invitation to the signer (if the signer is external to the creator''s organization)
If signing order is enabled, the request will be sent to the next signer in the signing order.'
operationId: RequestSignature
parameters:
- in: path
name: organizationId
description: Organization ID
required: true
schema:
type: integer
format: int64
example: 1
- in: path
name: agreementUid
description: Agreement UID
required: true
schema:
$ref: '#/components/schemas/AgreementUid'
responses:
'200':
description: Successfully requested signatures.
content:
application/json:
schema:
$ref: '#/components/schemas/RequestSignaturesResponse'
components:
schemas:
UserPicturesDto:
title: UserPicturesDto
required:
- small
- normal
type: object
properties:
small:
type: string
example: /static/img/users/b0c8b9d2-2944-49d3-af3a-c216ddf089ca/small.jpg
normal:
type: string
example: /static/img/users/b0c8b9d2-2944-49d3-af3a-c216ddf089ca/normal.jpg
special:
type: string
example: /static/img/users/b0c8b9d2-2944-49d3-af3a-c216ddf089ca/special.jpg
SignatureMetadataPatch:
description: Agreement signature metadata
type: object
properties:
enforceOrder:
type: boolean
description: If true, will force signers to respect the signing order.
autoRequest:
type: boolean
description: If true, will automatically send a request signature to all members able to sign when somebody signs.
slots:
type: array
items:
$ref: '#/components/schemas/SignatureInfoSlotPatch'
description: Signature slots details.
signatureBlockEnabled:
type: boolean
description: If true, will enable pre-set signature blocks.
signatureProvider:
$ref: '#/components/schemas/SignatureProvider'
description: Provider used for signature processing.
AgreementUid:
oneOf:
- type: string
minLength: 22
maxLength: 22
description: Concord agreement unique identifier. (new format)
- type: string
minLength: 6
maxLength: 6
description: Concord agreement unique identifier. (old format)
examples:
- 01sp9L4YEZNcLHaSV8447N
- G4VIX7
SignatureInfoSlotGet:
title: SignatureInfoSlot
description: Details of a signature slot.
type: object
properties:
id:
type: integer
format: int64
description: slot id
example: 33
reservation:
$ref: '#/components/schemas/SlotReservationGet'
signature:
type: object
properties:
date:
type: string
format: date-time
type:
description: Type of signature
type: string
enum:
- TEXT
- DRAWN_IMAGE
info:
description: Details on signatory.
type: object
properties:
name:
description: Signatory name.
type: string
example: John Smith
organization:
description: Signatory organization name.
type: string
example: Acme Corp
job:
description: Signatory job.
type: string
example: Lawyer
email:
description: Signatory user email.
type: string
format: email
image:
description: Signature image when directly drawing signature.
type: string
example: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkwAAABMCAYAAACf...
font:
description: Signature font.
type: string
example: daniel
signature:
description: Signature text.
type: string
example: John Smith
timezone:
description: Timezone used at signature time (IANA identifier)
type: string
example: America/Chicago
RequestSignaturesResponse:
title: RequestSignaturesResponse
type: object
properties:
id:
type: string
minLength: 22
maxLength: 22
description: Concord agreement unique identifier.
example: 01sp9L4YEZNcLHaSV8447N
uid:
$ref: '#/components/schemas/AgreementUid'
SignatureProvider:
title: SignatureProvider
description: Provider used for signature processing
type: string
enum:
- CONCORD
- DOCUSIGN
example: CONCORD
SlotReservationPatch:
title: Reservation
description: Who can sign on a signature slot.
type: object
properties:
type:
$ref: '#/components/schemas/SlotReservationType'
user:
type: object
properties:
id:
type: integer
format: int64
organization:
type: object
properties:
id:
type: integer
format: int64
email:
type: object
properties:
email:
type: string
format: email
group:
type: object
properties:
id:
type: integer
format: int64
SignatureMetadataGet:
description: Agreement signature metadata
type: object
properties:
enforceOrder:
type: boolean
description: If true, will force signers to respect the signing order.
autoRequest:
type: boolean
description: If true, will automatically send a request signature to all members able to sign when somebody signs.
signatureProvider:
$ref: '#/components/schemas/SignatureProvider'
description: Provider used for signature processing.
slots:
type: array
items:
$ref: '#/components/schemas/SignatureInfoSlotGet'
description: Signature slots details.
SignatureInfoSlotPatch:
title: SignatureInfoSlot
required:
- reservation
description: Details of a signature slot.
type: object
properties:
id:
type: integer
format: int64
reservation:
$ref: '#/components/schemas/SlotReservationPatch'
SlotReservationGet:
title: Reservation
description: Who can sign on a signature slot.
type: object
properties:
type:
$ref: '#/components/schemas/SlotReservationType'
user:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
example: John Smith
email:
type: string
format: email
hasPicture:
type: boolean
pictures:
$ref: '#/components/schemas/UserPicturesDto'
organization:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
example: Acme corp
email:
type: object
properties:
email:
type: string
format: email
group:
type: object
properties:
id:
type: integer
format: int64
deleted:
type: boolean
name:
type: string
example: Legal dept.
SlotReservationType:
description: Reservation type.
type: string
enum:
- NONE
- NOT_ORGANIZATION
- ORGANIZATION
- GROUP
- EMAIL
- USER
securitySchemes:
ApiKeyAuthentication:
type: apiKey
in: header
name: X-API-KEY
description: 'Users authenticate themselves through the HTTP Header X-API-KEY. You can generate as many API Keys as needed from your Concord account.
If the HTTP Header is missing or if the API Key is invalid, the HTTP Response will be 401 Unauthorized.'
x-provenance:
method: harvested
publisher: Concord
source: https://api.doc.concordnow.com/concord-openapi-bundled.yaml
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)