Skip to content

InfoController

InfoController exposes tracking-status polling for previously tracked requests and six stateless PDF inspection/validation operations that perform no persistence. None of its seven actions carry a try/catch; validation failures escape to the framework.

Field Value
Controller InfoController
Base System.Web.Http.ApiController
Route prefix [RoutePrefix("v1/info")]
Source PdfAPI\Controllers\v1\InfoController.cs
Controller-level authorization None in code
Error handling No try/catch — exceptions escape to the framework (IncludeErrorDetailPolicy.Always produces exception detail); response then passes through ApiResponseHandler, whose final outer envelope is unknown** (details)
Endpoints 7

GET v1/info/track/{trackingId}

Polls a tracking record's status, optionally sleeping and re-reading while the status is Scheduled or Processing, up to a caller-specified retry count.

Field Value
HTTP verb GET
Resolved route v1/info/track/{trackingId}
Route composition [RoutePrefix("v1/info")] + [Route("track/{trackingId}")]
Action CheckPdfTrackingStatus(long trackingId, int retryIntervalMilliseconds, int retryCount)
Return type PdfAPI.Core.PdfTrackingInfo (returned bare, not wrapped in IHttpActionResult)
Authorization None in code
Idempotent Yes — reads the tracking record without mutating it*
Operation OP-CHECK-TRACKING-STATUS

Track status parameters

Name In Type Required Default Binding Purpose
trackingId Route long Yes — Route segment Identifies the tracking record
retryIntervalMilliseconds Query int No 1000 [FromUri]* Sleep interval between polling reads
retryCount Query int No 0 [FromUri]* Number of additional reads while the status is Scheduled/Processing (BR-PDFAPI-014)

Track status response

Field Value
DTO PdfAPI.Core.PdfTrackingInfo
Media type application/json
Property Type Nullable Purpose
Status PdfStatus No Current tracked status
FileId string Yes Correlation id for the tracked document
FilePath string Yes Output file path, when set
TrackingId value type No Echoes the requested tracking id

Track status codes

Status Condition Body
200 OK Read succeeds PdfTrackingInfo

Track status errors

Error status Trigger Produced by Body
500 Internal Server Error Any repository/database exception escapes to the framework — no try/catch on this action* Framework (uncaught exception, IncludeErrorDetailPolicy.Always) Exception detail

The Body column above describes only the pre-envelope detail produced by the framework. Every response also passes through the globally registered ApiResponseHandler message handler (SAIF.Web.API package), which wraps or post-processes the HTTP response for the whole service. That handler's exact outer envelope shape is implemented inside the package and is not visible in this repository — see Endpoints: Error response shape.

Track status business rules

  • BR-PDFAPI-014 — the status check polls while the status is Scheduled or Processing, sleeping retryIntervalMilliseconds between reads, up to retryCount attempts.

Authorization (GET v1/info/track/{trackingId})

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (GET v1/info/track/{trackingId})

Aspect Finding
Records written None — read-only
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (GET v1/info/track/{trackingId})

GET v1/info/track/12345?retryCount=3&retryIntervalMilliseconds=500 HTTP/1.1
Host: <host>
HTTP/1.1 200 OK
Content-Type: application/json

{
  "Status": "Succeeded",
  "TrackingId": 12345
}

POST v1/info/pages/count

Returns the page count of a submitted PDF, validating that the payload is a real PDF first.

Field Value
HTTP verb POST
Resolved route v1/info/pages/count
Route composition [RoutePrefix("v1/info")] + [Route("pages/count")]
Action GetPageCount(byte[] pdf)
Return type int (returned bare)
Authorization None in code
Idempotent Yes — read-only inspection
Operation OP-GET-PAGE-COUNT

Page count parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The PDF bytes to inspect

Page count response

Field Value
DTO — (int)
Media type application/json

Page count status codes

Status Condition Body
200 OK Payload is a valid PDF Page count as a JSON number

Page count errors

Error status Trigger Produced by Body
500 Internal Server Error PdfException thrown by PdfClientService.ValidatePdf when the payload is not a PDF (BR-PDFAPI-005) Framework (uncaught exception) Exception detail

The Body column above describes only the pre-envelope detail produced by the framework. Every response also passes through the globally registered ApiResponseHandler message handler (SAIF.Web.API package), which wraps or post-processes the HTTP response for the whole service. That handler's exact outer envelope shape is implemented inside the package and is not visible in this repository — see Endpoints: Error response shape.

Page count business rules

  • BR-PDFAPI-005 — PDF validity is determined by the %PDF- file signature; failure raises PdfException.

Authorization (POST v1/info/pages/count)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/pages/count)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (POST v1/info/pages/count)

POST v1/info/pages/count HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 pdf bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

7

POST v1/info/fields/exist

Reports whether a submitted PDF contains form fields.

Field Value
HTTP verb POST
Resolved route v1/info/fields/exist
Route composition [RoutePrefix("v1/info")] + [Route("fields/exist")]
Action HasFormFields(byte[] pdf, bool useClient)
Return type bool (returned bare)
Authorization None in code
Idempotent Yes — read-only inspection
Operation OP-HAS-FORM-FIELDS

Form fields exist parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The PDF bytes to inspect
useClient Query bool No true [FromUri]* Selects the iTextSharp client path (true) or the Syncfusion helper path (false) (BR-PDFAPI-021)

Form fields exist response

Field Value
DTO — (bool)
Media type application/json

Form fields exist status codes

Status Condition Body
200 OK Payload is a valid PDF true/false

Form fields exist errors

Error status Trigger Produced by Body
500 Internal Server Error PdfException on a non-PDF payload* Framework (uncaught exception) Exception detail

The Body column above describes only the pre-envelope detail produced by the framework. Every response also passes through the globally registered ApiResponseHandler message handler (SAIF.Web.API package), which wraps or post-processes the HTTP response for the whole service. That handler's exact outer envelope shape is implemented inside the package and is not visible in this repository — see Endpoints: Error response shape.

Form fields exist business rules

  • BR-PDFAPI-021 — form-field inspection defaults to the iTextSharp client implementation and uses the Syncfusion helper only when the caller explicitly opts out.

Authorization (POST v1/info/fields/exist)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/fields/exist)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (POST v1/info/fields/exist)

POST v1/info/fields/exist?useClient=true HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 pdf bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

true

POST v1/info/fields/flatten

Flattens the form fields in a submitted PDF and returns the flattened document bytes.

Field Value
HTTP verb POST
Resolved route v1/info/fields/flatten
Route composition [RoutePrefix("v1/info")] + [Route("fields/flatten")]
Action FlattenFormFields(byte[] pdf, bool useClient)
Return type byte[] (returned bare; serialized as base64 by the JSON formatter*)
Authorization None in code
Idempotent Yes — produces the same flattened output for the same input*
Operation OP-FLATTEN-FORM-FIELDS

Flatten fields parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The PDF bytes to flatten
useClient Query bool No true [FromUri]* Selects the iTextSharp client path (true) or the Syncfusion helper path (false) (BR-PDFAPI-021)

Flatten fields response

Field Value
DTO — (byte[], flattened PDF bytes)
Media type application/json (base64-encoded string)*

Flatten fields status codes

Status Condition Body
200 OK Payload is a valid PDF Flattened PDF bytes (base64)

Flatten fields errors

Error status Trigger Produced by Body
500 Internal Server Error PdfException on a non-PDF payload* Framework (uncaught exception) Exception detail

The Body column above describes only the pre-envelope detail produced by the framework. Every response also passes through the globally registered ApiResponseHandler message handler (SAIF.Web.API package), which wraps or post-processes the HTTP response for the whole service. That handler's exact outer envelope shape is implemented inside the package and is not visible in this repository — see Endpoints: Error response shape.

Flatten fields business rules

  • BR-PDFAPI-021 — form-field flattening defaults to the iTextSharp client implementation and uses the Syncfusion helper only when the caller explicitly opts out.

Authorization (POST v1/info/fields/flatten)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/fields/flatten)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None persisted — flattened bytes are returned in the response
Repeat-call behavior Same output for the same input; safe to repeat*

Example (POST v1/info/fields/flatten)

POST v1/info/fields/flatten?useClient=true HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 pdf bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

"<base64 flattened pdf bytes>"

POST v1/info/validate

Reports whether the submitted bytes are a valid PDF, returning false rather than failing for a non-PDF payload.

Field Value
HTTP verb POST
Resolved route v1/info/validate
Route composition [RoutePrefix("v1/info")] + [Route("validate")]
Action IsPdf(byte[] pdf)
Return type bool (returned bare)
Authorization None in code
Idempotent Yes — read-only inspection
Operation OP-IS-PDF

Validate PDF parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The bytes to validate

Validate PDF response

Field Value
DTO — (bool)
Media type application/json

Validate PDF status codes

Status Condition Body
200 OK Always — returns false for a non-PDF payload rather than failing (BR-PDFAPI-005) true/false

Validate PDF errors

No error status codes are identified for this endpoint.

Validate PDF business rules

  • BR-PDFAPI-005 — PDF validity is determined by the %PDF- file signature.

Authorization (POST v1/info/validate)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/validate)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (POST v1/info/validate)

POST v1/info/validate HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

true

POST v1/info/validate/pdfa

Reports whether the submitted PDF conforms to PDF/A, inspecting XMP metadata for a pdfaid:conformance value of A or B.

Field Value
HTTP verb POST
Resolved route v1/info/validate/pdfa
Route composition [RoutePrefix("v1/info")] + [Route("validate/pdfa")]
Action IsPdfa(byte[] pdf)
Return type bool (returned bare)
Authorization None in code
Idempotent Yes — read-only inspection
Operation OP-VALIDATE-PDFA

Validate PDF/A parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The PDF bytes to inspect

Validate PDF/A response

Field Value
DTO — (bool)
Media type application/json

Validate PDF/A status codes

Status Condition Body
200 OK Always — the Syncfusion implementation catches its own exceptions and returns false true/false

Validate PDF/A errors

No error status codes are identified on this path.

Validate PDF/A business rules

No business rule beyond the general PDF/A conformance inspection is identified for this endpoint.

Authorization (POST v1/info/validate/pdfa)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/validate/pdfa)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (POST v1/info/validate/pdfa)

POST v1/info/validate/pdfa HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 pdf bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

false

POST v1/info/version

Returns the PDF version header found in the submitted document.

Field Value
HTTP verb POST
Resolved route v1/info/version
Route composition [RoutePrefix("v1/info")] + [Route("version")]
Action Version(byte[] pdf)
Return type string (returned bare)
Authorization None in code
Idempotent Yes — read-only inspection
Operation OP-GET-PDF-VERSION

PDF version parameters

Name In Type Required Default Binding Purpose
pdf Body byte[] Yes — [FromBody]* The PDF bytes to inspect

PDF version response

Field Value
DTO — (string, e.g. "1.7", or "" when no header match)
Media type application/json

PDF version status codes

Status Condition Body
200 OK Payload is a valid PDF Version string, or empty string when no header match

PDF version errors

Error status Trigger Produced by Body
500 Internal Server Error PdfException on a non-PDF payload (BR-PDFAPI-005) Framework (uncaught exception) Exception detail

The Body column above describes only the pre-envelope detail produced by the framework. Every response also passes through the globally registered ApiResponseHandler message handler (SAIF.Web.API package), which wraps or post-processes the HTTP response for the whole service. That handler's exact outer envelope shape is implemented inside the package and is not visible in this repository — see Endpoints: Error response shape.

PDF version business rules

  • BR-PDFAPI-005 — PDF validity is determined by the %PDF- file signature; failure raises PdfException.

Authorization (POST v1/info/version)

No authorization attribute or programmatic check is present. See Authentication and authorization.

Side effects and idempotency (POST v1/info/version)

Aspect Finding
Records written None
Downstream calls None identified
Files or messages produced None
Repeat-call behavior Read-only; safe to repeat

Example (POST v1/info/version)

POST v1/info/version HTTP/1.1
Host: <host>
Content-Type: application/json

"<base64 pdf bytes>"
HTTP/1.1 200 OK
Content-Type: application/json

"1.7"

Note: Statements marked with * were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with ** could not be confirmed; treat as unknown until verified.

Sources

  • PdfAPI\Controllers\v1\InfoController.cs
  • PdfAPI\Services\PdfTrackingService.cs
  • PdfAPI\Services\PdfService.cs
  • PdfAPI.Core\Services\PdfClientService.cs