JuriSign Sign Requests API

Create, send, and track signature requests

Operations 7

GET /sign-requests List Sign Requests #
POST /sign-requests Create Sign Request #
GET /sign-requests/{id} Get Sign Request #
POST /sign-requests/{id}/send Send Sign Request #
POST /sign-requests/{id}/cancel Cancel Sign Request #
GET /sign-requests/{id}/download Download Signed PDF #
GET /sign-requests/{id}/proof Download Audit Proof #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/jurisign-sign-requests-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

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.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

jurisign-sign-requests-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: JuriSign Sign Requests API
  description: Electronic signature API (eIDAS SES level) with OTP verification (email or SMS).
  version: 3.24.1
  contact:
    name: JuriSign Support
    email: support@jurisign.fr
    url: https://jurisign.fr
  license:
    name: Proprietary
servers:
- url: https://jurisign.fr/api/v1
  description: Production (also serves sandbox requests — see POST /auth/sandbox-token)
security:
- bearerAuth: []
tags:
- name: Sign Requests
  description: Create, send, and track signature requests
paths:
  /sign-requests:
    get:
      summary: List Sign Requests
      description: Retrieve a paginated list of signature requests.
      operationId: listSignRequests
      tags:
      - Sign Requests
      parameters:
      - name: status
        in: query
        description: Filter by status
        schema:
          type: string
          enum:
          - draft
          - pending
          - completed
          - cancelled
          - expired
      - name: per_page
        in: query
        schema:
          type: integer
          default: 20
      - name: page
        in: query
        schema:
          type: integer
          default: 1
      responses:
        '200':
          description: Sign requests list
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/SignRequest'
                  meta:
                    $ref: '#/components/schemas/Pagination'
        '401':
          $ref: '#/components/responses/Unauthenticated'
    post:
      summary: Create Sign Request
      description: Create a new signature request with one or more signers. The request is created in `draft` status and must be sent explicitly via the send endpoint.
      operationId: createSignRequest
      tags:
      - Sign Requests
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSignRequestInput'
      responses:
        '201':
          description: Sign request created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/SignRequest'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '422':
          $ref: '#/components/responses/ValidationError'
        '409':
          description: The Idempotency-Key was already used with a different request body. Use a new key, or replay the original body unchanged.
      parameters:
      - name: Idempotency-Key
        in: header
        required: false
        description: 'Optional. Send a unique key (for example your own order reference) to make this call safely repeatable. If the network drops after your request reaches us but before you get the response, replay the exact same call with the same key: you receive the original response — same body, same status, with an `Idempotent-Replayed: true` header — and no second signature request is created, so no second SMS is billed. Reusing a key with a DIFFERENT body returns 409: that is an integration bug, not a retry. Keys are scoped to your organization and honoured for 24 hours. Failed responses never consume a key.'
        schema:
          type: string
          maxLength: 255
        example: order-4821
  /sign-requests/{id}:
    get:
      summary: Get Sign Request
      description: Retrieve full details of a signature request, including signers, signature zones, and download links.
      operationId: getSignRequest
      tags:
      - Sign Requests
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Sign request details
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/SignRequestDetailed'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
  /sign-requests/{id}/send:
    post:
      summary: Send Sign Request
      description: Send the signature request to all signers. This changes the status from `draft` to `pending` and sends invitation emails.
      operationId: sendSignRequest
      tags:
      - Sign Requests
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Request sent to signers
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/SignRequest'
                  message:
                    type: string
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Error'
  /sign-requests/{id}/cancel:
    post:
      summary: Cancel Sign Request
      description: Cancel a pending signature request. Only requests in `pending` status can be cancelled.
      operationId: cancelSignRequest
      tags:
      - Sign Requests
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Request cancelled
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/SignRequest'
                  message:
                    type: string
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Error'
  /sign-requests/{id}/download:
    get:
      summary: Download Signed PDF
      description: Download the signed PDF document. Only available after all signers have completed signing.
      operationId: downloadSignedPdf
      tags:
      - Sign Requests
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Signed PDF file
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
  /sign-requests/{id}/proof:
    get:
      summary: Download Audit Proof
      description: Download the audit proof PDF, containing a detailed log of all signing actions with timestamps and IP addresses.
      operationId: downloadProof
      tags:
      - Sign Requests
      parameters:
      - $ref: '#/components/parameters/ResourceId'
      responses:
        '200':
          description: Audit proof PDF
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Pagination:
      type: object
      properties:
        current_page:
          type: integer
        last_page:
          type: integer
        per_page:
          type: integer
        total:
          type: integer
    CreateSignRequestInput:
      type: object
      required:
      - document_id
      - subject
      - signing_order_type
      - expiry_hours
      - signers
      properties:
        document_id:
          type: string
          format: uuid
          description: UUID of a previously uploaded document
        subject:
          type: string
          maxLength: 255
          example: Please sign the NDA
          description: Email subject line for signers
        message:
          type:
          - string
          - 'null'
          maxLength: 2000
          description: Optional message included in the invitation email
        metadata:
          type:
          - object
          - 'null'
          description: Arbitrary key-value metadata for your records
        redirect_url:
          type:
          - string
          - 'null'
          format: uri
          maxLength: 2048
          example: https://app.your-company.com/signed
          description: Must use https and match the domain declared for your organization, or the request is rejected with a 422. Contact support to register your domain.
        payment:
          type:
          - object
          - 'null'
          description: 'Request a payment from the signer once they''ve signed ("sign then pay" — the signature is never blocked by payment). Requires an active Stripe Connect account for your organization (see Settings > Paiement à la signature), or the request is rejected with a 422. JuriSign never holds the funds: they go directly to your own Stripe account, minus a fixed 0.90€ platform fee.'
          required:
          - amount_cents
          properties:
            amount_cents:
              type: integer
              minimum: 50
              example: 5000
              description: Amount to collect from the signer, in cents.
            currency:
              type: string
              default: eur
              example: eur
            description:
              type:
              - string
              - 'null'
              maxLength: 255
              example: Acompte devis n°2026-042
        signing_order_type:
          type: integer
          enum:
          - 0
          - 1
          description: 0 = parallel (all signers at once), 1 = sequential (one after another)
        expiry_hours:
          type: integer
          minimum: 1
          maximum: 720
          example: 72
          description: Hours until the request expires (max 30 days)
        signers:
          type: array
          minItems: 1
          maxItems: 10
          items:
            type: object
            required:
            - prenom
            - nom
            - email
            - otp_channel
            properties:
              prenom:
                type: string
                maxLength: 255
                description: First name
              nom:
                type: string
                maxLength: 255
                description: Last name
              email:
                type: string
                format: email
                description: Email address
              otp_channel:
                type: string
                enum:
                - sms
                - email
                description: OTP verification channel
              telephone:
                type: string
                maxLength: 20
                description: Required when otp_channel is 'sms'
        zones:
          type:
          - array
          - 'null'
          description: Signature zone positions. Auto-generated at bottom of last page if omitted.
          items:
            type: object
            required:
            - signer_index
            - page
            - x
            - y
            - width
            - height
            properties:
              signer_index:
                type: integer
                minimum: 0
                description: Index in the signers array (0-based)
              page:
                type: integer
                minimum: 1
                description: Page number
              x:
                type: number
                minimum: 0
                maximum: 100
                description: X position (% from left)
              y:
                type: number
                minimum: 0
                maximum: 100
                description: Y position (% from top)
              width:
                type: number
                minimum: 1
                maximum: 100
                description: Width (% of page)
              height:
                type: number
                minimum: 1
                maximum: 100
                description: Height (% of page)
              type:
                type: string
                enum:
                - signature
                - text
                - date
                - checkbox
                default: signature
                description: Field type. 'date' is always auto-filled at signing time, never editable by the signer.
              label:
                type: string
                maxLength: 255
                description: Instruction shown to the signer. Required when type is 'text' or 'checkbox'.
              required:
                type: boolean
                default: true
                description: 'For ''text''/''checkbox'' zones only: blocks signing until filled. Ignored for ''signature''/''date''.'
        require_selfie:
          type: boolean
          default: false
          description: Require signers to take a selfie for identity verification
    SignRequest:
      type: object
      properties:
        id:
          type: string
          format: uuid
        subject:
          type: string
          example: Please sign the NDA
        message:
          type:
          - string
          - 'null'
        status:
          type: string
          enum:
          - draft
          - pending
          - completed
          - cancelled
          - expired
        signing_order_type:
          type: string
          enum:
          - parallel
          - sequential
        extended_retention:
          type: boolean
          description: True if your organization's commercial contract includes the extended archiving option (10 years). Informational only — reflects the billed option, not a distinct technical purge policy.
        progress:
          type: object
          properties:
            signed:
              type: integer
            total:
              type: integer
        redirect_url:
          type:
          - string
          - 'null'
          format: uri
          example: https://app.your-company.com/signed
          description: URL shown to the signer as an explicit "return to <domain>" button on the success page. Must use https and match the domain declared for your organization (contact support to register it).
        payment:
          type:
          - object
          - 'null'
          description: Present only when a payment was requested on this sign request (see the `payment` field on creation). The signer is invited to pay only after signing ("sign then pay") — `checkout_url` is null until the sign request is fully signed.
          properties:
            status:
              type: string
              enum:
              - pending
              - processing
              - paid
              - failed
              - canceled
              - expired
            amount_cents:
              type: integer
              example: 5000
            currency:
              type: string
              example: eur
            description:
              type:
              - string
              - 'null'
            checkout_url:
              type:
              - string
              - 'null'
              format: uri
              description: Stripe Checkout link, only present while status is processing (i.e. the sign request has been fully signed and the signer has not yet paid).
            paid_at:
              type:
              - string
              - 'null'
              format: date-time
        expires_at:
          type: string
          format: date-time
        sent_at:
          type:
          - string
          - 'null'
          format: date-time
        completed_at:
          type:
          - string
          - 'null'
          format: date-time
        created_at:
          type: string
          format: date-time
        document:
          type: object
          properties:
            id:
              type: string
              format: uuid
            title:
              type: string
            page_count:
              type: integer
        created_by:
          type: object
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        signers:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              email:
                type: string
                format: email
              status:
                type: string
                enum:
                - pending
                - notified
                - signed
                - declined
    SignatureZone:
      type: object
      properties:
        page:
          type: integer
        x:
          type: number
        y:
          type: number
        width:
          type: number
        height:
          type: number
        type:
          type: string
          enum:
          - signature
          - text
          - date
          - checkbox
          default: signature
        label:
          type:
          - string
          - 'null'
          description: Instruction shown to the signer for text/checkbox fields
        required:
          type: boolean
          default: true
          description: Whether a text/checkbox field must be filled before the signer can sign
        value:
          type:
          - string
          - 'null'
          description: Value entered by the signer (text/checkbox) or auto-filled date. Populated only once the sign request is signed.
    SignRequestDetailed:
      allOf:
      - $ref: '#/components/schemas/SignRequest'
      - type: object
        properties:
          signers:
            type: array
            items:
              type: object
              properties:
                id:
                  type: string
                  format: uuid
                name:
                  type: string
                email:
                  type: string
                  format: email
                otp_channel:
                  type: string
                  enum:
                  - sms
                  - email
                status:
                  type: string
                signing_order:
                  type: integer
                signing_link:
                  type: string
                  format: uri
                notified_at:
                  type:
                  - string
                  - 'null'
                  format: date-time
                viewed_at:
                  type:
                  - string
                  - 'null'
                  format: date-time
                signed_at:
                  type:
                  - string
                  - 'null'
                  format: date-time
                declined_at:
                  type:
                  - string
                  - 'null'
                  format: date-time
                decline_reason:
                  type:
                  - string
                  - 'null'
                zones:
                  type: array
                  items:
                    $ref: '#/components/schemas/SignatureZone'
          downloads:
            type: object
            properties:
              signed_pdf:
                type:
                - string
                - 'null'
                format: uri
              proof:
                type:
                - string
                - 'null'
                format: uri
  parameters:
    ResourceId:
      name: id
      in: path
      required: true
      description: Resource UUID
      schema:
        type: string
        format: uuid
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Not found.
    Error:
      description: Error response
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
    Unauthenticated:
      description: Missing or invalid Bearer token
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthenticated.
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: The given data was invalid.
              errors:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Obtain a token via POST /auth/token, then pass it as: Authorization: Bearer {token}'