Add shapes and text to a slide

This guide explains how to use the Google Slides API to add shapes to slidesand insert text into shapes.

Each slide in a presentation can contain a number ofpage elements, each ofwhich is one of the following elements:

Shapes

AShape is apage element such as a rectangle, arc, arrow, text box, or other defined type ofshape. When you create a shape, you specify:

Thetransform page property defines how the shape is rendered on the page,including its location and scaling. For more information about transforms, seeSize and position page elements.

Text and shapes

Text can appear on a slide in one of two ways:

  • Within a shape
  • Within a cell in a table

You insert text into a shape or table cell using anInsertTextRequest.

Any textAutofitsettings on the shape are automatically deactivated by requests that can impacthow text fits in the shape.

Example

The following example adds a square text box to an existing slide and insertssome text into it:

Apps Script

slides/api/Snippets.gs
/** * Create a new square textbox, using the supplied element ID. * @param {string} presentationId * @param {string} pageId * @returns {*} */functioncreateTextboxWithText(presentationId,pageId){constelementId="MyTextBox_01";constpt350={magnitude:350,unit:"PT",};constrequests=[{createShape:{objectId:elementId,shapeType:"TEXT_BOX",elementProperties:{pageObjectId:pageId,size:{height:pt350,width:pt350,},transform:{scaleX:1,scaleY:1,translateX:350,translateY:100,unit:"PT",},},},},// Insert text into the box, using the supplied element ID.{insertText:{objectId:elementId,insertionIndex:0,text:"New Box Text Inserted!",},},];// Execute the request.try{constcreateTextboxWithTextResponse=Slides.Presentations.batchUpdate({requests:requests,},presentationId,);constcreateShapeResponse=createTextboxWithTextResponse.replies[0].createShape;console.log("Created textbox with ID: %s",createShapeResponse.objectId);returncreateTextboxWithTextResponse;}catch(err){// TODO (Developer) - Handle exceptionconsole.log("Failed with error: %s",err.error);}}

Go

slides/snippets/presentations.go
// Create a new square text box, using a supplied object ID.textBoxId:="MyTextBox_01"pt350:=slides.Dimension{Magnitude:350,Unit:"PT",}requests:=[]*slides.Request{{// Create a new square text box, using a supplied object ID.CreateShape: &slides.CreateShapeRequest{ObjectId:  textBoxId,ShapeType: "TEXT_BOX",ElementProperties: &slides.PageElementProperties{PageObjectId: slideId,Size: &slides.Size{Height: &pt350,Width:  &pt350,},Transform: &slides.AffineTransform{ScaleX:     1.0,ScaleY:     1.0,TranslateX: 350.0,TranslateY: 100.0,Unit:       "PT",},},},}, {// Insert text into the box, using the object ID given to it.InsertText: &slides.InsertTextRequest{ObjectId:       textBoxId,InsertionIndex: 0,Text:           "New Box Text Inserted",},}}// Execute the requests.body:=&slides.BatchUpdatePresentationRequest{Requests:requests,}response,err:=slidesService.Presentations.BatchUpdate(presentationId,body).Do()iferr!=nil{log.Printf("Unable to create text box. %v",err)}fmt.Printf("Created text box with ID: %s",response.Replies[0].CreateShape.ObjectId)

Java

slides/snippets/src/main/java/CreateTextboxWithText.java
importcom.google.api.client.googleapis.json.GoogleJsonError;importcom.google.api.client.googleapis.json.GoogleJsonResponseException;importcom.google.api.client.http.HttpRequestInitializer;importcom.google.api.client.http.javanet.NetHttpTransport;importcom.google.api.client.json.gson.GsonFactory;importcom.google.api.services.slides.v1.Slides;importcom.google.api.services.slides.v1.SlidesScopes;importcom.google.api.services.slides.v1.model.AffineTransform;importcom.google.api.services.slides.v1.model.BatchUpdatePresentationRequest;importcom.google.api.services.slides.v1.model.BatchUpdatePresentationResponse;importcom.google.api.services.slides.v1.model.CreateShapeRequest;importcom.google.api.services.slides.v1.model.CreateShapeResponse;importcom.google.api.services.slides.v1.model.Dimension;importcom.google.api.services.slides.v1.model.InsertTextRequest;importcom.google.api.services.slides.v1.model.PageElementProperties;importcom.google.api.services.slides.v1.model.Request;importcom.google.api.services.slides.v1.model.Size;importcom.google.auth.http.HttpCredentialsAdapter;importcom.google.auth.oauth2.GoogleCredentials;importjava.io.IOException;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;/* Class to demonstrate the use of Slides Create Textbox API */publicclassCreateTextboxWithText{/**   * Create a new square textbox, using the specified id.   *   * @param presentationId - id of the presentation.   * @param slideId        - id of the slide.   * @param textBoxId      - id for the textbox.   * @return textbox id   * @throws IOException - if credentials file not found.   */publicstaticBatchUpdatePresentationResponsecreateTextBoxWithText(StringpresentationId,StringslideId,StringtextBoxId)throwsIOException{/* Load pre-authorized user credentials from the environment.           TODO(developer) - See https://developers.google.com/identity for            guides on implementing OAuth2 for your application. */GoogleCredentialscredentials=GoogleCredentials.getApplicationDefault().createScoped(Collections.singleton(SlidesScopes.PRESENTATIONS));HttpRequestInitializerrequestInitializer=newHttpCredentialsAdapter(credentials);// Create the slides API clientSlidesservice=newSlides.Builder(newNetHttpTransport(),GsonFactory.getDefaultInstance(),requestInitializer).setApplicationName("Slides samples").build();// Create a new square text box, using a supplied object ID.List<Request>requests=newArrayList<>();Dimensionpt350=newDimension().setMagnitude(350.0).setUnit("PT");requests.add(newRequest().setCreateShape(newCreateShapeRequest().setObjectId(textBoxId).setShapeType("TEXT_BOX").setElementProperties(newPageElementProperties().setPageObjectId(slideId).setSize(newSize().setHeight(pt350).setWidth(pt350)).setTransform(newAffineTransform().setScaleX(1.0).setScaleY(1.0).setTranslateX(350.0).setTranslateY(100.0).setUnit("PT")))));// Insert text into the box, using the object ID given to it.requests.add(newRequest().setInsertText(newInsertTextRequest().setObjectId(textBoxId).setInsertionIndex(0).setText("New Box Text Inserted")));BatchUpdatePresentationResponseresponse=null;try{// Execute the requests.BatchUpdatePresentationRequestbody=newBatchUpdatePresentationRequest().setRequests(requests);response=service.presentations().batchUpdate(presentationId,body).execute();CreateShapeResponsecreateShapeResponse=response.getReplies().get(0).getCreateShape();System.out.println("Created textbox with ID: "+createShapeResponse.getObjectId());}catch(GoogleJsonResponseExceptione){// TODO(developer) - handle error appropriatelyGoogleJsonErrorerror=e.getDetails();if(error.getCode()==404){System.out.printf("Presentation not found with id '%s'.\n",presentationId);}else{throwe;}}returnresponse;}}

JavaScript

slides/snippets/slides_create_textbox_with_text.js
functioncreateTextboxWithText(presentationId,pageId,callback){// Create a new square textbox, using the supplied element ID.constelementId='MyTextBox_01';constpt350={magnitude:350,unit:'PT',};constrequests=[{createShape:{objectId:elementId,shapeType:'TEXT_BOX',elementProperties:{pageObjectId:pageId,size:{height:pt350,width:pt350,},transform:{scaleX:1,scaleY:1,translateX:350,translateY:100,unit:'PT',},},},},// Insert text into the box, using the supplied element ID.{insertText:{objectId:elementId,insertionIndex:0,text:'New Box Text Inserted!',},}];// Execute the request.try{gapi.client.slides.presentations.batchUpdate({presentationId:presentationId,requests:requests,}).then((createTextboxWithTextResponse)=>{constcreateShapeResponse=createTextboxWithTextResponse.result.replies[0].createShape;console.log(`Created textbox with ID:${createShapeResponse.objectId}`);if(callback)callback(createTextboxWithTextResponse.result);});}catch(err){document.getElementById('content').innerText=err.message;return;}}

Node.js

slides/snippets/slides_create_textbox_with_text.js
import{GoogleAuth}from'google-auth-library';import{google}from'googleapis';/** * Creates a textbox with text on a slide. * @param {string} presentationId The ID of the presentation. * @param {string} pageId The ID of the page to add the textbox to. * @return {Promise<object>} The response from the batch update. */asyncfunctioncreateTextboxWithText(presentationId,pageId){// Authenticate with Google and get an authorized client.constauth=newGoogleAuth({scopes:'https://www.googleapis.com/auth/presentations',});// Create a new Slides API client.constservice=google.slides({version:'v1',auth});// The ID to use for the new textbox.constelementId='MyTextBox_01';// The size of the new textbox, in points.constpt350={magnitude:350,unit:'PT',};// The requests to create a textbox and add text to it.constrequests=[{createShape:{objectId:elementId,shapeType:'TEXT_BOX',elementProperties:{pageObjectId:pageId,size:{height:pt350,width:pt350,},transform:{scaleX:1,scaleY:1,translateX:350,translateY:100,unit:'PT',},},},},// Insert text into the new textbox.{insertText:{objectId:elementId,insertionIndex:0,text:'New Box Text Inserted!',},},];// Execute the batch update request.constcreateTextboxWithTextResponse=awaitservice.presentations.batchUpdate({presentationId,requestBody:{requests},},);constcreateShapeResponse=createTextboxWithTextResponse.data.replies[0].createShape;console.log(`Created textbox with ID:${createShapeResponse.objectId}`);returncreateTextboxWithTextResponse.data;}

PHP

slides/snippets/src/SlidesCreateTextboxWithText.php
<?phpuse Google\Client;use Google\Service\Slides\BatchUpdatePresentationRequest;use Google\Service\Slides;use Google\Service\DriveFile;use Google\Service\Slides\Request;function createTextboxWithText($presentationId, $pageId){    /* Load pre-authorized user credentials from the environment.       TODO(developer) - See https://developers.google.com/identity for        guides on implementing OAuth2 for your application. */    $client = new Google\Client();    $client->useApplicationDefaultCredentials();    $client->addScope(Google\Service\Drive::DRIVE);    $slidesService = new Google_Service_Slides($client);    try {        // Create a new square textbox, using the supplied element ID.        $elementId = "MyTextBoxxxx_01";        $pt350 = array('magnitude' => 350, 'unit' => 'PT');        $requests = array();        $requests[] = new Google_Service_Slides_Request(array(            'createShape' => array(                'objectId' => $elementId,                'shapeType' => 'TEXT_BOX',                'elementProperties' => array(                    'pageObjectId' => $pageId,                    'size' => array(                        'height' => $pt350,                        'width' => $pt350                    ),                    'transform' => array(                        'scaleX' => 1,                        'scaleY' => 1,                        'translateX' => 350,                        'translateY' => 100,                        'unit' => 'PT'                    )                )            )        ));        // Insert text into the box, using the supplied element ID.        $requests[] = new Google_Service_Slides_Request(array(            'insertText' => array(                'objectId' => $elementId,                'insertionIndex' => 0,                'text' => 'New Box Text Inserted!'            )        ));        // Execute the requests.        $batchUpdateRequest = new Google_Service_Slides_BatchUpdatePresentationRequest(array(            'requests' => $requests        ));        $response = $slidesService->presentations->batchUpdate($presentationId, $batchUpdateRequest);        $createShapeResponse = $response->getReplies()[0]->getCreateShape();        printf("Created textbox with ID: %s\n", $createShapeResponse->getObjectId());        return $response;    } catch (Exception $e) {        echo 'Message: ' . $e->getMessage();    }}

Python

slides/snippets/slides_create_textbox_with_text.py
importgoogle.authfromgoogleapiclient.discoveryimportbuildfromgoogleapiclient.errorsimportHttpErrordefcreate_textbox_with_text(presentation_id,page_id):"""  Creates the textbox with text, the user has access to.  Load pre-authorized user credentials from the environment.  TODO(developer) - See https://developers.google.com/identity  for guides on implementing OAuth2 for the application.  """creds,_=google.auth.default()# pylint: disable=maybe-no-membertry:service=build("slides","v1",credentials=creds)# Create a new square textbox, using the supplied element ID.element_id="MyTextBox_10"pt350={"magnitude":350,"unit":"PT"}requests=[{"createShape":{"objectId":element_id,"shapeType":"TEXT_BOX","elementProperties":{"pageObjectId":page_id,"size":{"height":pt350,"width":pt350},"transform":{"scaleX":1,"scaleY":1,"translateX":350,"translateY":100,"unit":"PT",},},}},# Insert text into the box, using the supplied element ID.{"insertText":{"objectId":element_id,"insertionIndex":0,"text":"New Box Text Inserted!",}},]# Execute the request.body={"requests":requests}response=(service.presentations().batchUpdate(presentationId=presentation_id,body=body).execute())create_shape_response=response.get("replies")[0].get("createShape")print(f"Created textbox with ID:{(create_shape_response.get('objectId'))}")exceptHttpErroraserror:print(f"An error occurred:{error}")returnerrorreturnresponseif__name__=="__main__":# Put the presentation_id, Page_id of slides whose list needs# to be submitted.create_textbox_with_text("12SQU9Ik-ShXecJoMtT-LlNwEPiFR7AadnxV2KiBXCnE","Myfirstpage")

Ruby

slides/snippets/lib/file_snippets.rb
# Create a new square textbox, using the supplied element ID.element_id='MyTextBox_01'pt350={magnitude:'350',unit:'PT'}requests=[{create_shape:{object_id_prop:element_id,shape_type:'TEXT_BOX',element_properties:{page_object_id:page_id,size:{height:pt350,width:pt350},transform:{scale_x:'1',scale_y:'1',translate_x:'350',translate_y:'100',unit:'PT'}}}},# Insert text into the box, using the supplied element ID.{insert_text:{object_id_prop:element_id,insertion_index:0,text:'New Box Text Inserted!'}}]# Execute the request.req=Google::Apis::SlidesV1::BatchUpdatePresentationRequest.new(requests:requests)response=slides_service.batch_update_presentation(presentation_id,req)create_shape_response=response.replies[0].create_shapeputs"Created textbox with ID:#{create_shape_response.object_id}"

For more information about controlling the size and position of shapes, seeSize and position page elements.

Except as otherwise noted, the content of this page is licensed under theCreative Commons Attribution 4.0 License, and code samples are licensed under theApache 2.0 License. For details, see theGoogle Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-12-11 UTC.