openapi: 3.0.3
info:
title: 'DoliPDF API Documentation'
description: ''
version: 1.0.0
servers:
-
url: 'https://pdf.cap-rel.fr'
tags:
-
name: Endpoints
description: ''
-
name: 'Login/Logout management'
description: "\nAPIs for managing auth process"
-
name: 'Ouverture de compte'
description: "\nOpen an account from a client module, without copying a key.\n\nThe module sends what it knows of the company and gets back the address of\nthe order page, already filled in, with a secret it keeps. The person\norders and pays on that page; meanwhile the module asks, with its secret,\nhow the order stands, and receives the API key the moment it is paid.\n\nNothing is written to the central billing instance here: a robot calling\nthis in a loop leaves local rows that expire, and the order itself is\nplaced by a person, on the page, behind the same guards as the web."
paths:
/api/v1/softwareInfos:
get:
summary: 'Display a listing of the resource.'
operationId: displayAListingOfTheResource
description: ''
parameters: []
responses:
503:
description: ''
content:
text/plain:
schema:
type: string
example: "\n\n
\n \n \n\n Service indisponible\n\n \n \n \n\n \n\n \n \n \n \n
\n
\n
\n 503
\n\n
\n Mise à jour en cours, merci de réessayer plus tard
\n
\n
\n
\n \n\n"
tags:
- Endpoints
security: []
post:
summary: 'Store a newly created resource in storage.'
operationId: storeANewlyCreatedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
'/api/v1/softwareInfos/{id}':
get:
summary: 'Display the specified resource.'
operationId: displayTheSpecifiedResource
description: ''
parameters: []
responses:
503:
description: ''
content:
text/plain:
schema:
type: string
example: "\n\n \n \n \n\n Service indisponible\n\n \n \n \n\n \n\n \n \n \n \n
\n
\n
\n 503
\n\n
\n Mise à jour en cours, merci de réessayer plus tard
\n
\n
\n
\n \n\n"
tags:
- Endpoints
security: []
put:
summary: 'Update the specified resource in storage.'
operationId: updateTheSpecifiedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
delete:
summary: 'Remove the specified resource from storage.'
operationId: removeTheSpecifiedResourceFromStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: id
description: 'The ID of the softwareInfo.'
example: consequatur
required: true
schema:
type: string
/api/v1/pdf:
post:
summary: 'Convert the uploaded ODT document and answer the PDF, base64 encoded.'
operationId: convertTheUploadedODTDocumentAndAnswerThePDFBase64Encoded
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
/api/softwareInfos:
get:
summary: 'Display a listing of the resource.'
operationId: displayAListingOfTheResource
description: ''
parameters: []
responses:
503:
description: ''
content:
text/plain:
schema:
type: string
example: "\n\n \n \n \n\n Service indisponible\n\n \n \n \n\n \n\n \n \n \n \n
\n
\n
\n 503
\n\n
\n Mise à jour en cours, merci de réessayer plus tard
\n
\n
\n
\n \n\n"
tags:
- Endpoints
security: []
post:
summary: 'Store a newly created resource in storage.'
operationId: storeANewlyCreatedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
'/api/softwareInfos/{id}':
get:
summary: 'Display the specified resource.'
operationId: displayTheSpecifiedResource
description: ''
parameters: []
responses:
503:
description: ''
content:
text/plain:
schema:
type: string
example: "\n\n \n \n \n\n Service indisponible\n\n \n \n \n\n \n\n \n \n \n \n
\n
\n
\n 503
\n\n
\n Mise à jour en cours, merci de réessayer plus tard
\n
\n
\n
\n \n\n"
tags:
- Endpoints
security: []
put:
summary: 'Update the specified resource in storage.'
operationId: updateTheSpecifiedResourceInStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
delete:
summary: 'Remove the specified resource from storage.'
operationId: removeTheSpecifiedResourceFromStorage
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: id
description: 'The ID of the softwareInfo.'
example: consequatur
required: true
schema:
type: string
/api/pdf:
post:
summary: 'Convert the uploaded ODT document and answer the PDF, base64 encoded.'
operationId: convertTheUploadedODTDocumentAndAnswerThePDFBase64Encoded
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
/api/v1/ping:
post:
summary: 'Check if the server is ready and my token is good'
operationId: checkIfTheServerIsReadyAndMyTokenIsGood
description: ''
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "scenario=\"Operation successful\n{\n \"profile\": {\n \"id\": 3,\n \"firstname\": \"john\",\n \"name\": \"doe\",\n \"email\": \"john.doe@utptosign.ext\",\n \"email_verified_at\": null,\n \"language_code_id\": null,\n \"mobile\": \"+33698744401\",\n \"created_at\": \"2022-06-15T05:47:36.000000Z\",\n \"updated_at\": \"2022-06-15T21:23:24.000000Z\",\n \"deleted_at\": null\n },\n \"message\": \"server is ready\",\n \"status\": 1,\n \"access\": {\n \"state\": \"active\",\n \"remaining\": 482,\n \"order_url\": null\n }\n}\n\nThe \"access\" block tells whether the next conversion would be served,\nwithout serving one: state is active, offered, no_subscription or\nquota_exceeded; remaining is null when the plan is not metered;\norder_url is set whenever ordering is the way out."
401:
description: 'Missing, unknown or malformed key'
content:
text/plain:
schema:
type: string
example: Unauthenticated
403:
description: 'Locked account'
content:
application/json:
schema:
type: object
example:
message: 'Account locked ! reason'
properties:
message:
type: string
example: 'Account locked ! reason'
tags:
- 'Login/Logout management'
security: []
/api/v1/profile:
post:
summary: 'Get user profile'
operationId: getUserProfile
description: ''
parameters: []
responses: { }
tags:
- 'Login/Logout management'
security: []
/api/ping:
post:
summary: 'Check if the server is ready and my token is good'
operationId: checkIfTheServerIsReadyAndMyTokenIsGood
description: ''
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "scenario=\"Operation successful\n{\n \"profile\": {\n \"id\": 3,\n \"firstname\": \"john\",\n \"name\": \"doe\",\n \"email\": \"john.doe@utptosign.ext\",\n \"email_verified_at\": null,\n \"language_code_id\": null,\n \"mobile\": \"+33698744401\",\n \"created_at\": \"2022-06-15T05:47:36.000000Z\",\n \"updated_at\": \"2022-06-15T21:23:24.000000Z\",\n \"deleted_at\": null\n },\n \"message\": \"server is ready\",\n \"status\": 1,\n \"access\": {\n \"state\": \"active\",\n \"remaining\": 482,\n \"order_url\": null\n }\n}\n\nThe \"access\" block tells whether the next conversion would be served,\nwithout serving one: state is active, offered, no_subscription or\nquota_exceeded; remaining is null when the plan is not metered;\norder_url is set whenever ordering is the way out."
401:
description: 'Missing, unknown or malformed key'
content:
text/plain:
schema:
type: string
example: Unauthenticated
403:
description: 'Locked account'
content:
application/json:
schema:
type: object
example:
message: 'Account locked ! reason'
properties:
message:
type: string
example: 'Account locked ! reason'
tags:
- 'Login/Logout management'
security: []
/api/profile:
post:
summary: 'Get user profile'
operationId: getUserProfile
description: ''
parameters: []
responses: { }
tags:
- 'Login/Logout management'
security: []
/api/v1/checkout:
post:
summary: 'Prepare an order.'
operationId: prepareAnOrder
description: "Every field is optional: they only fill in the order page, where the\nperson completes and corrects them. A value that does not fit its\nfield is left out rather than refused, so a Dolibarr with an\nincomplete company card still gets a link."
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
id: 9d3c...
order_url: 'https://service.example/commande/9d3c...?expires=...&signature=...'
claim_secret: s3cr3t...
expires_at: '2026-10-14T12:00:00+00:00'
properties:
id:
type: string
example: 9d3c...
order_url:
type: string
example: 'https://service.example/commande/9d3c...?expires=...&signature=...'
claim_secret:
type: string
example: s3cr3t...
expires_at:
type: string
example: '2026-10-14T12:00:00+00:00'
tags:
- 'Ouverture de compte'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
plan:
type: string
description: 'The plan code to preselect.'
example: '250'
email:
type: string
description: 'The email of the company.'
example: compta@example.com
name:
type: string
description: 'The company name.'
example: 'Example SARL'
country:
type: string
description: 'Two-letter ISO country code.'
example: FR
siren:
type: string
description: 'French SIREN, 9 digits.'
example: '732829320'
address:
type: string
description: 'Street address.'
example: '1 rue de la Paix'
zip:
type: string
description: 'Postal code.'
example: '75002'
town:
type: string
description: Town.
example: Paris
security: []
'/api/v1/checkout/{checkout}':
get:
summary: 'Where a prepared order stands.'
operationId: whereAPreparedOrderStands
description: "Send the secret received on creation in the X-Checkout-Secret header.\nThe API key is in the answer once, the first time the order is seen\npaid: store it then. An order placed for an address that already had\nan account carries no key, that account keeps its own.\n\nAdd verify=1 when the person says he has paid: the central billing\ninstance is then asked directly, at most every 30 seconds."
parameters:
-
in: query
name: verify
description: 'Ask the billing instance now.'
example: 1
required: false
schema:
type: integer
description: 'Ask the billing instance now.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: awaiting_order
order_url: 'https://service.example/commande/...'
properties:
status:
type: string
example: awaiting_order
order_url:
type: string
example: 'https://service.example/commande/...'
-
description: ''
type: object
example:
status: awaiting_payment
order_url: 'https://service.example/commande/...'
properties:
status:
type: string
example: awaiting_payment
order_url:
type: string
example: 'https://service.example/commande/...'
-
description: ''
type: object
example:
status: paid
api_key: 12|abcdef...
existing_account: false
properties:
status:
type: string
example: paid
api_key:
type: string
example: 12|abcdef...
existing_account:
type: boolean
example: false
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Unknown checkout.'
properties:
message:
type: string
example: 'Unknown checkout.'
410:
description: ''
content:
application/json:
schema:
type: object
example:
status: expired
properties:
status:
type: string
example: expired
tags:
- 'Ouverture de compte'
security: []
parameters:
-
in: path
name: checkout
description: 'The id received on creation.'
example: consequatur
required: true
schema:
type: string
/api/checkout:
post:
summary: 'Prepare an order.'
operationId: prepareAnOrder
description: "Every field is optional: they only fill in the order page, where the\nperson completes and corrects them. A value that does not fit its\nfield is left out rather than refused, so a Dolibarr with an\nincomplete company card still gets a link."
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
id: 9d3c...
order_url: 'https://service.example/commande/9d3c...?expires=...&signature=...'
claim_secret: s3cr3t...
expires_at: '2026-10-14T12:00:00+00:00'
properties:
id:
type: string
example: 9d3c...
order_url:
type: string
example: 'https://service.example/commande/9d3c...?expires=...&signature=...'
claim_secret:
type: string
example: s3cr3t...
expires_at:
type: string
example: '2026-10-14T12:00:00+00:00'
tags:
- 'Ouverture de compte'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
plan:
type: string
description: 'The plan code to preselect.'
example: '250'
email:
type: string
description: 'The email of the company.'
example: compta@example.com
name:
type: string
description: 'The company name.'
example: 'Example SARL'
country:
type: string
description: 'Two-letter ISO country code.'
example: FR
siren:
type: string
description: 'French SIREN, 9 digits.'
example: '732829320'
address:
type: string
description: 'Street address.'
example: '1 rue de la Paix'
zip:
type: string
description: 'Postal code.'
example: '75002'
town:
type: string
description: Town.
example: Paris
security: []
'/api/checkout/{checkout}':
get:
summary: 'Where a prepared order stands.'
operationId: whereAPreparedOrderStands
description: "Send the secret received on creation in the X-Checkout-Secret header.\nThe API key is in the answer once, the first time the order is seen\npaid: store it then. An order placed for an address that already had\nan account carries no key, that account keeps its own.\n\nAdd verify=1 when the person says he has paid: the central billing\ninstance is then asked directly, at most every 30 seconds."
parameters:
-
in: query
name: verify
description: 'Ask the billing instance now.'
example: 1
required: false
schema:
type: integer
description: 'Ask the billing instance now.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: awaiting_order
order_url: 'https://service.example/commande/...'
properties:
status:
type: string
example: awaiting_order
order_url:
type: string
example: 'https://service.example/commande/...'
-
description: ''
type: object
example:
status: awaiting_payment
order_url: 'https://service.example/commande/...'
properties:
status:
type: string
example: awaiting_payment
order_url:
type: string
example: 'https://service.example/commande/...'
-
description: ''
type: object
example:
status: paid
api_key: 12|abcdef...
existing_account: false
properties:
status:
type: string
example: paid
api_key:
type: string
example: 12|abcdef...
existing_account:
type: boolean
example: false
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Unknown checkout.'
properties:
message:
type: string
example: 'Unknown checkout.'
410:
description: ''
content:
application/json:
schema:
type: object
example:
status: expired
properties:
status:
type: string
example: expired
tags:
- 'Ouverture de compte'
security: []
parameters:
-
in: path
name: checkout
description: 'The id received on creation.'
example: consequatur
required: true
schema:
type: string