Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Node API Client for Anvil

NotificationsYou must be signed in to change notification settings

anvilco/node-anvil

Repository files navigation

Horizontal LockupblackHorizontal Lockup copywhite

Anvil API Client for Node

This library will allow you to interact with theAnvil API in JavaScript / NodeJS.

Anvil provides easy APIs for all things paperwork.

  1. PDF filling API - fill out a PDF template with a web request and structured JSON data.
  2. PDF generation API - send markdown or HTML and Anvil will render it to a PDF.
  3. Etch e-sign with API - customizable, embeddable, e-signature platform with an API to control the signing process end-to-end.
  4. Anvil Workflows (w/ API) - Webforms + PDF + e-sign with a powerful no-code builder. Easily collect structured data, generate PDFs, and request signatures.

Learn more on ourAnvil developer page. See theAPI guide and theGraphQL reference for full documentation.

Usage

This library and the Anvil APIs are intended to be used on a server or server-like environment. It will fail in a browser environment.

yarn add @anvilco/anvil
npm install @anvilco/anvil

A basic example converting your JSON to a filled PDF, then saving the PDF to a file:

importfsfrom'fs'importAnvilfrom'@anvilco/anvil'// The ID of the PDF template to fillconstpdfTemplateID='kA6Da9CuGqUtc6QiBDRR'// Your API key from your Anvil organization settingsconstapiKey='7j2JuUWmN4fGjBxsCltWaybHOEy3UEtt'// JSON data to fill the PDFconstexampleData={"title":"My PDF Title","fontSize":10,"textColor":"#CC0000","data":{"someFieldId":"Hello World!"}}constanvilClient=newAnvil({ apiKey})const{ statusCode, data}=awaitanvilClient.fillPDF(pdfTemplateID,exampleData)// By default, if the PDF has been published then the published version is what will// be filled. If the PDF has not been published, then the most recent version will// be filled.//// However, a version number can also be passed in that will be used retrieve and// fill a specific version of the PDF.// You can also use the constant `Anvil.VERSION_LATEST` (or `-1`) to fill the most// recent version of your PDF, whether that version has been published or not.// Use this if you'd like to fill out a draft version of your template/PDF.constoptions={versionNumber:Anvil.VERSION_LATEST}const{ statusCode, data}=awaitanvilClient.fillPDF(pdfTemplateID,exampleData,options)console.log(statusCode)// => 200// Data will be the filled PDF raw bytesfs.writeFileSync('output.pdf',data,{encoding:null})

API

Instance Methods

new Anvil(options)

Creates an Anvil client instance.

  • options (Object) -Options for the Anvil Client instance.
constanvilClient=newAnvil({apiKey:'abc123'})

fillPDF(pdfTemplateID, payload[, options])

Fills a PDF template with your JSON data.

First, you will need to haveuploaded a PDF to Anvil. You can find the PDF template's ID on PDF template's page:

PDF Template ID

If you already have the URL to the page in Anvil, the ID is there as well:https://app.useanvil.com/org/<your-org-slug>/pdf/<pdf-template-id>

An example:

constfs=require('fs')// PDF template you uploaded to AnvilconstpdfTemplateID='kA6Da9CuGqUtc6QiBDRR'// Your API key from your Anvil organization settingsconstapiKey='7j2JuUWmN4fGjBxsCltWaybHOEy3UEtt'// JSON data to fill the PDFconstpayload={"title":"My PDF Title","fontSize":10,"textColor":"#CC0000","data":{"someFieldId":"Hello World!"}}// The 'options' parameter is optionalconstoptions={"dataType":"buffer"}constanvilClient=newAnvil({ apiKey})const{ statusCode, data}=awaitanvilClient.fillPDF(pdfTemplateID,payload,options)// Be sure to write the file as raw bytesfs.writeFileSync('filled.pdf',data,{encoding:null})
  • pdfTemplateID (String) - The id of your PDF template from the Anvil UI
  • payload (Object) - The JSON data that will fill the PDF template
    • title (String) -optional Set the title encoded into the PDF document
    • fontSize (Number) -optional Set the fontSize of all filled text. Default is 10.
    • color (String) -optional Set the text color of all filled text. Default is dark blue.
    • data (Object) - The data to fill the PDF. The keys in this object will correspond to a field's ID in the PDF. These field IDs and their types are available on the PDF template's page in the Anvil dashboard.
      • For example{ "someFieldId": "Hello World!" }
  • options (Object) -optional Any additional options for the request
    • dataType (Enum[String]) -optional Set the type of thedata value that is returned in the resolvedPromise. Defaults to'buffer', but'arrayBuffer' and'stream' are also supported.
  • Returns aPromise that resolves to anObject
    • statusCode (Number) - the HTTP status code;200 is success
    • data (Buffer | ArrayBuffer | Stream) - The raw binary data of the filled PDF if success. Will be either a Buffer, ArrayBuffer, or a Stream, depending ondataType option supplied to the request.
    • errors (Array of Objects) - Will be present if status >= 400. See Errors
      • message (String)
generatePDF(payload[, options])

Dynamically generate a new PDF from your HTML and CSS or markdown.

Useful for agreements, invoices, disclosures, or any other text-heavy documents. This does not require you do anything in the Anvil UI other than setup your API key, just send it data, get a PDF. Seethe generate PDF docs for full details.

Check out ourHTML invoice template for a complete HTML to PDF example.

An example:

constfs=require('fs')// Your API key from your Anvil organization settingsconstapiKey='7j2JuUWmN4fGjBxsCltWaybHOEy3UEtt'// An example using an HTML to PDF payloadconstpayload={title:'Example',type:'html',data:{html:`      <h1 class='header-one'>What is Lorem Ipsum?</h1>      <p>        Lorem Ipsum is simply dummy text...      </p>      <h3 class='header-two'>Where does it come from?</h3>      <p>        Contrary to popular belief, Lorem Ipsum is not simply <i>random text</i>      </p>    `,css:`      body { font-size: 14px; color: #171717; }      .header-one { text-decoration: underline; }      .header-two { font-style: underline; }    `,},}// An example using a Markdown payloadconstpayload={title:'Example Invoice',data:[{label:'Name',content:'Sally Jones',},{content:'Lorem **ipsum** dolor sit _amet_',},{table:{firstRowHeaders:true,rows:[['Description','Quantity','Price'],['4x Large Widgets','4','$40.00'],['10x Medium Sized Widgets in dark blue','10','$100.00'],['10x Small Widgets in white','6','$60.00'],],},}],}// The 'options' parameter is optionalconstoptions={"dataType":"buffer"}constanvilClient=newAnvil({ apiKey})const{ statusCode, data}=awaitanvilClient.generatePDF(payload,options)// Be sure to write the file as raw bytesfs.writeFileSync('generated.pdf',data,{encoding:null})
  • payload (Object) - The JSON data that will fill the PDF template
    • title (String) -optional Set the title encoded into the PDF document
    • data (Array of Objects) - The data that generates the PDF. Seethe docs for all supported objects
      • For example[{ "label": "Hello World!", "content": "Test" }]
  • options (Object) -optional Any additional options for the request
    • dataType (Enum[String]) -optional Set the type of thedata value that is returned in the resolvedPromise. Defaults to'buffer', but'arrayBuffer' and'stream' are also supported.
  • Returns aPromise that resolves to anObject
    • statusCode (Number) - the HTTP status code;200 is success
    • data (Buffer | ArrayBuffer | Stream) - The raw binary data of the filled PDF if success. Will be either a Buffer, ArrayBuffer, or a Stream, depending ondataType option supplied to the request.
    • errors (Array of Objects) - Will be present if status >= 400. See Errors
      • message (String)
createEtchPacket(options)

Creates an Etch Packet and optionally sends it to the first signer.

  • options (Object) - An object with the following structure:
    • variables (Object) - See theAPI Documentation area for details. SeeExamples area for examples.
    • responseQuery (String) -optional A GraphQL Query compliant query to use for the data desired in the mutation response. Can be left out to use default.
    • mutation (String) -optional If you'd like complete control of the GraphQL mutation, you can pass in a GraphQL Mutation compliant string that will be used in the mutation call. This string should also include your response query, as theresponseQuery param is ignored ifmutation is passed. Example:
      mutationCreateEtchPacket ($name:String,    ...  ) {createEtchPacket (name:$name,      ...    ) {ideid...    }  }
getEtchPacket(options)

Gets the details of an Etch Packet.

  • options (Object) - An object with the following structure:
    • variables (Object) - Requireseid
      • eid (String) - your Etch Packet eid
    • responseQuery (String) -optional A GraphQL Query compliant query to use for the data desired in the query response. Can be left out to use default.
generateEtchSignUrl(options)

Generates an Etch sign URL for an Etch Packet signer. The Etch Packet and its signers must have already been created.

  • options (Object) - An object with the following structure:
    • variables (Object) - RequiresclientUserId andsignerEid
      • clientUserId (String) - your user eid
      • signerEid (String) - the eid of the Etch Packet signer, found in the response of thecreateEtchPacket instance method
downloadDocuments(documentGroupEid[, options])

Returns a Buffer, ArrayBuffer, or Stream of the document group specified by the documentGroupEid in Zip file format.

  • documentGroupEid (string) - the eid of the document group to download
  • options (Object) -optional Any additional options for the request
    • dataType (Enum[String]) -optional Set the type of thedata value that is returned in the resolvedPromise. Defaults to'buffer', but'arrayBuffer' and'stream' are also supported.
  • Returns aPromise that resolves to anObject
    • statusCode (Number) - the HTTP status code,200 is success
    • response (Object) - the Response object resulting from the client's request to the Anvil app
    • data (Buffer | ArrayBuffer | Stream) - The raw binary data of the downloaded documents if success. Will be in the format of either a Buffer, ArrayBuffer, or a Stream, depending ondataType option supplied to the request.
    • errors (Array of Objects) - Will be present if status >= 400. See Errors
      • message (String)
requestGraphQL(queryInfo[, options])

A fallback function for queries and mutations without a specialized function in this client.

See theGraphQL reference for a listing on all possible queries

constresult=awaitclient.requestGraphQL({query:`    query WeldDataQuery ($eid: String!) {      weldData (eid: $eid) {        eid        isComplete        isTest      }    }  `,variables:{eid:'nxflNZqxDUbltLUbYWK'},})conststatusCode=result.statusCodeconsthttpErrors=result.errors// These will only be available if the statusCode === 200constgraphqlErrors=result.data.errorsconstresultObject=result.data.data.weldData
  • queryInfo (Object) - The JSON data that will fill the PDF template
    • query (String) - GraphQL query or mutation to run. See theGraphQL reference for a listing on all possible queries
    • variables (Object) - GraphQL variables for the query
  • Returns aPromise that resolves to anObject
    • statusCode (Number) - 200 when successful or when there is a GraphQL error. You will only see > 200 if your query is not found or malformed
    • errors (String) - HTTP errors when status code > 200
    • data (Object) - Contains query result and any GraphQL errors
      • errors (Array of Objects) - If there are validation errors or errors running the query, they will show here
      • data (Object) - Contains the actual result of the query
        • [queryName] (Object) - Use the query or mutation name to reference the data that you requested!
requestREST(url, fetchOptions[, clientOptions])

A fallback function for REST endpoints without a specialized function in this client.

See theGraphQL reference for a listing on all possible queries

constresult=awaitthis.requestREST(`/api/v1/fill/${pdfTemplateID}.pdf`,{method:'POST',body:JSON.stringify(payload),headers:{'Content-Type':'application/json',},},{dataType:'stream',},)
  • url (String) - URL from the baseURL. e.g./api/v1/fill
  • fetchOptions (Object) - Options passed tonode-fetch
  • clientOptions (Object) -optional Any additional options for the request
    • dataType (Enum[String]) -optional Set the type of thedata value that is returned in the resolvedPromise. Defaults to'buffer','arrayBuffer','stream', and'json' are also supported.
  • Returns aPromise that resolves to anObject
    • statusCode (Number) - the HTTP status code;200 is success
    • data (Buffer | ArrayBuffer | Stream) - The raw binary data of the filled PDF if success. Will be either a Buffer, ArrayBuffer, or a Stream, depending ondataType option supplied to the request.
    • errors (Array of Objects) - Will be present if status >= 400. See Errors
      • message (String)

Class Methods

prepareGraphQLFile(pathOrStreamLikeThing[, options])

A nice helper to prepare aFile upload for use with our GraphQL API. By default, this will upload your files as multipart uploads over thejaydenseric / GraphQL multipart request spec. We usenode-fetch under the hood, and you can seethis example to get a bit of an understanding of what's happening behind the scenes. NOTE: Please see below about certain scenarios where you may need to manually provide afilename.

  • pathOrSupportedInstance (String | File | Blob | Stream | Buffer) - Can be one of several things. Here's a list of what's supported, in order of preference:
    1. AFile instance.
    2. ABlob instance.
    3. Astring that is a path to a file to be used.
    4. AReadStream instance that must either have either:
      1. Apath property (this will usually be present when the stream was loaded from the local file system)
      2. Afilename provided in theoptions parameter.
    5. ABuffer instance with afilename provided in theoptions parameter.
  • options (Object) - Options that may be required when providing certain types of values as the first parameter. For example,Blobs,Buffers and certain kinds ofReadStreams will not have any notion of what the name of the file is or should be when uploaded.
    • filename (String) - Override the filename of the uploaded file here. If providing a generic ReadStream or Buffer, you will be required to provide a filename here
    • mimetype (String) - Optional mimetype to specify with the resulting file that can be used when astring path,Buffer orReadStream are provided as the first parameter.
  • Returns anObject that is properly formatted to be coerced by the client for use against our GraphQL API wherever anUpload type is required.

Types

Options

Options for the Anvil Client. Defaults are shown after each option key.

{apiKey:<your_api_key>, // Required. Your API key from your Anvil  organization settings}

Rate Limits

Our API has request rate limits in place. The initial request made by this client will parse the limits for your account from the response headers, and then handle the throttling of subsequent requests for you automatically. In the event that this client still receives a429 Too Many Requests error response, it will wait the specified duration then retry the request. The client attempts to avoid429 errors by throttling requests after the number of requests within the specified time period has been reached.

See theAnvil API docs for more information on the specifics of the rate limits.

API Documentation

Our general API Documentation can be foundhere. It's the best resource for up-to-date information about our API and its capabilities.

See thePDF filling API docs for more information about thefillPDF method.

Examples

Check out theexample folder for running usage examples!

Development

First install the dependencies

yarn install

Running tests

yarntestyarn test:watch

Building with babel will output in the/lib directory.

yarntest# Watches the `src` and `test` directoriesyarn test:watch

Packages

No packages published

Contributors9


[8]ページ先頭

©2009-2025 Movatter.jp